From mboxrd@z Thu Jan 1 00:00:00 1970
From: Marc MAURICE
Date: Thu, 01 Mar 2012 13:08:30 +0000
Subject: Re: [mlmmj] Subscribers management in php-admin
Message-Id: <4F4F74CE.1090609@pub.positon.org>
MIME-Version: 1
Content-Type: multipart/mixed; boundary="------------030700060900020804030506"
List-Id:
References: <4F4BFAA7.4060702@pub.positon.org>
In-Reply-To: <4F4BFAA7.4060702@pub.positon.org>
To: mlmmj@mlmmj.org
This is a multi-part message in MIME format.
--------------030700060900020804030506
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable
Hello,
A new patch using
filter_var($email, FILTER_VALIDATE_EMAIL)
and escapeshellarg().
Marc
Le 29/02/2012 04:57, Ben Schmidt a =E9crit :
>> As for the save.php, I also found some very silly piece of code like
>> this one:
>> // Perl's encode_entities (to be able to use tunables.pl)
>> function encode_entities($str) { return htmlentities($str); }
>>
>> I'd like someone to explain to me why htmlentities() has to be wrapped
>> like this... :)
>
> For exactly the reason in the code comment: it's so that tunables.pl ca=
n
> be used. The PHP file evaluates the tunables.pl (Perl) file as if it
> were a PHP file. The tunables.pl file uses the Perl function
> encode_entities(), so to make it work, a function of that name is
> defined in PHP that just calls the equivalent PHP function. The benefit
> is that only one tunables.pl file needs to be maintained, not a
> tunables.pl and a tunables.php.
>
>> Then, there's things like this which worries me:
>> fwrite($fp, $HTTP_POST_VARS[$name]);
>>
>> Not only the variable should be checked, but also, if I'm not mistakin=
g,
>> $HTTP_POST_VARS is deprecated, and maybe even *removed* (I didn't chec=
k)
>> from php 5.4, which is going to reach Debian SID in a mater of weeks n=
ow
>> (we should be using $_POST instead).
>
> This was at least partly fixed ages ago in version control, so you
> evidently didn't check the current state of Mlmmj either. :-)
>
>> Functions like mlmmj_boolean() has parameters that it isn't using, so
>> it's weird.
>>
>> So yes, all this needs a code review... :)
>
> Never hurts.
>
> Ben.
>
>
>
>
>
--------------030700060900020804030506
Content-Type: text/plain;
name="patches2.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="patches2.txt"
diff -r 3168aed4b01a contrib/web/php-admin/README
--- a/contrib/web/php-admin/README Wed Feb 22 00:11:07 2012 +1100
+++ b/contrib/web/php-admin/README Thu Mar 01 14:03:42 2012 +0100
@@ -22,8 +22,19 @@
you need to create a group (eg. mlmmj) and add both users to it. The
subscribers.d directory then needs to be writable by that group:
+ # addgroup mlmmj
+ # adduser wwwrun mlmmj
+ # adduser mailuser mlmmj
# chgrp -R mlmmj /var/spool/mlmmj/mlmmj-test/subscribers.d/
# chmod -R g+w /var/spool/mlmmj/mlmmj-test/subscribers.d/
+ # chmod g+s /var/spool/mlmmj/mlmmj-test/subscribers.d/
+
+ setgid flag is needed when the webserver calls mlmmj-sub and creates a file
+ under subscribers.d, to keep the mlmmj group.
+
+ If using the Exim mailserver, you should add initgroups = true in your
+ mlmmj_transport, otherwise it won't be able to write files having write
+ permission to mlmmj group.
5) To enable access control on Apache you have to rename dot.htaccess to
.htaccess and edit the path inside the file to point to a htpasswd file
diff -r 3168aed4b01a contrib/web/php-admin/htdocs/index.php
--- a/contrib/web/php-admin/htdocs/index.php Wed Feb 22 00:11:07 2012 +1100
+++ b/contrib/web/php-admin/htdocs/index.php Thu Mar 01 14:03:42 2012 +0100
@@ -35,15 +35,16 @@
$lists = "";
-$dir = opendir($topdir);
-while ($file = readdir($dir)) {
+# use scandir to have alphabetical order
+foreach (scandir($topdir) as $file) {
if (!ereg("^\.",$file))
{
- $lists .= "".
- htmlentities($file)."
\n";
+ $lists .= "".htmlentities($file)."
+Config - Subscribers
+
+";
}
}
-closedir($dir);
$tpl->assign(array("LISTS" => $lists));
diff -r 3168aed4b01a contrib/web/php-admin/htdocs/subscribers.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/web/php-admin/htdocs/subscribers.php Thu Mar 01 14:03:42 2012 +0100
@@ -0,0 +1,92 @@
+&1";
+ exec($cmd, $out, $ret);
+ if ($ret !== 0) {
+ $message.= "Subscribe error for $email
";
+ }
+ } else {
+ $message.= "Email address not valid: $email
";
+ }
+ }
+
+ }
+
+# delete some people if delete is set
+} else if (isset($_POST["delete"])) {
+
+ $email = $_POST["email"];
+ if (! filter_var($email, FILTER_VALIDATE_EMAIL)) die("Email address not valid");
+
+ $cmd = "/usr/bin/mlmmj-unsub -L '/var/spool/mlmmj/".escapeshellarg($list)."' -a '".escapeshellarg($email)."' 2>&1";
+ exec($cmd, $out, $ret);
+ if ($ret !== 0) {
+ $message = "Unsubscribe error. cmd=$cmd out=".implode($out)." ret=$ret";
+ }
+}
+
+$subscribers="";
+
+# get subscribers from mlmmj
+$cmd = "/usr/bin/mlmmj-list -L '/var/spool/mlmmj/".escapeshellarg($list)."' 2>&1";
+exec($cmd, $out, $ret);
+if ($ret !== 0) {
+ $message.= "Error: Could not get subscribers list.";
+}
+
+foreach ($out as $email) {
+ $email = trim($email);
+
+ $form = "";
+
+ $subscribers.= "| ".htmlspecialchars($email)." | $form |
\n";
+}
+
+if ($subscribers === "") {
+ $subscribers = "| This list is empty. |
\n";
+}
+
+# set template vars
+$tpl->define(array("main" => "subscribers.html"));
+
+$tpl->assign(array("LIST" => $list));
+$tpl->assign(array("MESSAGE" => "
$message"));
+$tpl->assign(array("SUBS" => $subscribers));
+
+$tpl->parse("MAIN","main");
+$tpl->FastPrint("MAIN");
+
+?>
diff -r 3168aed4b01a contrib/web/php-admin/templates/subscribers.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/web/php-admin/templates/subscribers.html Thu Mar 01 14:03:42 2012 +0100
@@ -0,0 +1,38 @@
+
+
+mlmmj - {LIST} subscribers
+
+
+
+{LIST} subscribers
+
+{MESSAGE}
+
+
+
+
+
+
+Index
+
+
+
diff -r 3168aed4b01a src/subscriberfuncs.c
--- a/src/subscriberfuncs.c Wed Feb 22 00:11:07 2012 +1100
+++ b/src/subscriberfuncs.c Thu Mar 01 14:03:42 2012 +0100
@@ -132,6 +132,7 @@
subreadname = concatstr(2, subddirname, dp->d_name);
subread = open(subreadname, O_RDONLY);
if(subread < 0) {
+ log_error(LOG_ARGS, "Could not open %s", subreadname);
myfree(subreadname);
continue;
}
--------------030700060900020804030506--