OSSP CVS Repository

ossp - Difference in ossp-pkg/petidomo/subscribe.c versions 1.6 and 1.7
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [History

ossp-pkg/petidomo/subscribe.c 1.6 -> 1.7

--- subscribe.c  2001/01/08 20:36:19     1.6
+++ subscribe.c  2001/01/10 17:08:22     1.7
@@ -1,6 +1,6 @@
 /*
    $Source: /v/ossp/cvs/ossp-pkg/petidomo/subscribe.c,v $
-   $Revision: 1.6 $
+   $Revision: 1.7 $
 
    Copyright (C) 2000 by CyberSolutions GmbH, Germany.
 
@@ -26,9 +26,9 @@
                 const char * param1,
                 const char * param2,
                 const char * defaultlist)
-{
-    const struct List_Config * ListConfig;
+    {
     const struct PD_Config   * MasterConfig;
+    const struct List_Config * ListConfig;
     FILE *         fh;
     const char *   address = NULL;
     const char *   listname = NULL;
@@ -38,81 +38,118 @@
     char *         originator;
     char *         p;
 
+    /* Initialize internal stuff from master config file. */
+
+    MasterConfig = getMasterConfig();
+    sprintf(envelope, "petidomo-manager@%s", MasterConfig->fqdn);
+    originator = (MailStruct->Reply_To) ? MailStruct->Reply_To : MailStruct->From;
+
     /* Try to find out, which parameter is what. */
 
-    if (param1 != NULL) {
+    if (param1 != NULL)
+        {
         if (isValidListName(param1) == TRUE)
-          listname = param1;
+            listname = param1;
         else if (isRFC822Address(param1) == TRUE)
-          address = param1;
+            address = param1;
 
-        if (param2 != NULL) {
-            if (isValidListName(param2) == TRUE)
-              listname = param2;
-            else if (isRFC822Address(param2) == TRUE)
-              address = param2;
+        if (param2 != NULL)
+            {
+            if (listname == NULL && isValidListName(param2) == TRUE)
+                listname = param2;
+            else if (address == NULL && isRFC822Address(param2) == TRUE)
+                address = param2;
+            }
         }
-    }
 
     if (address == NULL)
-      address = (MailStruct->Reply_To) ? MailStruct->Reply_To : MailStruct->From;
-    if (listname == NULL && defaultlist != NULL)
-      listname = defaultlist;
-
-    if (address == NULL || listname == NULL) {
-        syslog(LOG_NOTICE, "%s: subscribe-command invalid: No list specified.",
-            MailStruct->From);
-        return 0;
-    }
+        address = (MailStruct->Reply_To) ? MailStruct->Reply_To : MailStruct->From;
+    assert(address != NULL);
+
+    if (listname == NULL)
+        {
+        if (defaultlist != NULL)
+            listname = defaultlist;
+        else
+            {
+            syslog(LOG_NOTICE, "%s: subscribe-command invalid: No list specified.", MailStruct->From);
+            fh = vOpenMailer(envelope, originator, NULL);
+            if (fh != NULL)
+                {
+                fprintf(fh, "From: petidomo@%s (Petidomo Mailing List Server)\n", MasterConfig->fqdn);
+                fprintf(fh, "To: %s\n", originator);
+                fprintf(fh, "Subject: Petidomo: Your request \"subscribe %s\"\n", address);
+                if (MailStruct->Message_Id != NULL)
+                    fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
+                fprintf(fh, "Precedence: junk\n");
+                fprintf(fh, "Sender: %s\n", envelope);
+                fprintf(fh, "\n");
+                buffer = text_easy_sprintf("You tried to subscribe the address \"%s\" to a mailing list. "   \
+                                           "Unfortunately, your request could not be processed, because "    \
+                                           "you didn't specify a valid mailing list name to which the "      \
+                                           "address should be subscribed to. You may use the command INDEX " \
+                                           "to receive an overview over the available mailing lists. Also, " \
+                                           "use the command HELP to verify that you got the command syntax " \
+                                           "right.", address);
+                text_wordwrap(buffer, 75);
+                fprintf(fh, "%s\n", buffer);
+                CloseMailer(fh);
+                }
+            else
+                syslog(LOG_ERR, "Failed to send email to \"%s\" concerning his request.", originator);
+            return 0;
+            }
+        }
+
+    /* Initialize internal stuff again from list config. */
 
-    /* Initialize internal stuff. */
-    MasterConfig = getMasterConfig();
     ListConfig = getListConfig(listname);
     sprintf(owner, "%s-owner@%s", listname, ListConfig->fqdn);
     sprintf(envelope, "%s-owner@%s", listname, ListConfig->fqdn);
-    originator = (MailStruct->Reply_To) ? MailStruct->Reply_To : MailStruct->From;
 
     /* Check whether the request is authorized at all. */
 
-    if (isValidAdminPassword(getPassword(), listname) == FALSE) {
-
+    if (isValidAdminPassword(getPassword(), listname) == FALSE)
+        {
         /* No valid password, check further. */
 
-        if (ListConfig->allowpubsub == FALSE) {
-
+        if (ListConfig->allowpubsub == FALSE)
+            {
             /* Access was unauthorized, notify the originator. */
 
             syslog(LOG_INFO, "\"%s\" tried to subscribe \"%s\" to list \"%s\", but couldn't " \
-                "provide the correct password.", originator, address, listname);
+                   "provide the correct password.", originator, address, listname);
 
             fh = vOpenMailer(envelope, originator, NULL);
-            if (fh != NULL) {
+            if (fh != NULL)
+                {
                 fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
                         listname, ListConfig->fqdn);
                 fprintf(fh, "To: %s\n", originator);
                 fprintf(fh, "Subject: Petidomo: Your request \"subscribe %s %s\"\n", address, listname);
                 if (MailStruct->Message_Id != NULL)
-                  fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
+                    fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
                 fprintf(fh, "Precedence: junk\n");
                 fprintf(fh, "Sender: %s\n", envelope);
                 fprintf(fh, "\n");
                 buffer = text_easy_sprintf(
-"The mailing list \"%s\" is a closed forum and only the maintainer may " \
-"subscribe addresses. Your request has been forwarded to the " \
-"appropriate person, so please don't send any further mail. You will " \
-"be notified as soon as possible.", listname);
+                                           "The mailing list \"%s\" is a closed forum and only the maintainer may " \
+                                           "subscribe addresses. Your request has been forwarded to the " \
+                                           "appropriate person, so please don't send any further mail. You will " \
+                                           "be notified as soon as possible.", listname);
                 text_wordwrap(buffer, 75);
                 fprintf(fh, "%s\n", buffer);
                 CloseMailer(fh);
-            }
+                }
             else
-              syslog(LOG_ERR, "Failed to send email to \"%s\" concerning his request.",
-                  originator);
+                syslog(LOG_ERR, "Failed to send email to \"%s\" concerning his request.",
+                       originator);
 
             /* Notify the owner. */
 
             fh = vOpenMailer(envelope, owner, NULL);
-            if (fh != NULL) {
+            if (fh != NULL)
+                {
                 fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
                         listname, ListConfig->fqdn);
                 fprintf(fh, "To: %s\n", owner);
@@ -121,59 +158,62 @@
                 fprintf(fh, "Sender: %s\n", envelope);
                 fprintf(fh, "\n");
                 buffer = text_easy_sprintf(
-"\"%s\" tried to subscribe the address \"%s\" to the \"%s\" mailing list, " \
-"but couldn't provide the correct password. To subscribe him, send the " \
-"following commands to the server:", originator, address, listname);
+                                           "\"%s\" tried to subscribe the address \"%s\" to the \"%s\" mailing list, " \
+                                           "but couldn't provide the correct password. To subscribe him, send the " \
+                                           "following commands to the server:", originator, address, listname);
                 text_wordwrap(buffer, 75);
                 fprintf(fh, "%s\n\n", buffer);
                 fprintf(fh, "password <AdminPassword>\n");
                 fprintf(fh, "subscribe %s %s\n", address, listname);
                 CloseMailer(fh);
-            }
-            else {
+                }
+            else
+                {
                 syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner);
                 return -1;
-            }
+                }
             return 0;
-        }
+            }
 
         if (ListConfig->allowaliensub == FALSE &&
             (MailStruct->From == NULL || !strcasecmp(address, MailStruct->From) == FALSE) &&
-            (MailStruct->Reply_To == NULL || !strcasecmp(address, MailStruct->Reply_To) == FALSE)) {
-
+            (MailStruct->Reply_To == NULL || !strcasecmp(address, MailStruct->Reply_To) == FALSE))
+            {
             /* Trying to subscribe something different than himself. */
 
             syslog(LOG_INFO, "\"%s\" tried to subscribe \"%s\" to list \"%s\", but the list " \
-                "type doesn't allow this.", originator, address, listname);
+                   "type doesn't allow this.", originator, address, listname);
 
             fh = vOpenMailer(envelope, originator, NULL);
-            if (fh != NULL) {
+            if (fh != NULL)
+                {
                 fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
                         listname, ListConfig->fqdn);
                 fprintf(fh, "To: %s\n", originator);
                 fprintf(fh, "Subject: Petidomo: Your request \"subscribe %s %s\"\n", address, listname);
                 if (MailStruct->Message_Id != NULL)
-                  fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
+                    fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
                 fprintf(fh, "Precedence: junk\n");
                 fprintf(fh, "Sender: %s\n", envelope);
                 fprintf(fh, "\n");
                 buffer = text_easy_sprintf(
-"The mailing list \"%s\" does not allow to automatically subscribe or unsubscribe an " \
-"address not equal to the one, you are mailing from. Your request has been forwarded " \
-"to the list administrator, so please don't send any futher mail. You will be notified " \
-"as soon as possible.", listname);
+                                           "The mailing list \"%s\" does not allow to automatically subscribe or unsubscribe an " \
+                                           "address not equal to the one, you are mailing from. Your request has been forwarded " \
+                                           "to the list administrator, so please don't send any futher mail. You will be notified " \
+                                           "as soon as possible.", listname);
                 text_wordwrap(buffer, 75);
                 fprintf(fh, "%s\n", buffer);
                 CloseMailer(fh);
-            }
+                }
             else
-              syslog(LOG_ERR, "Failed to send email to \"%s\" concerning his request.",
-                  originator);
+                syslog(LOG_ERR, "Failed to send email to \"%s\" concerning his request.",
+                       originator);
 
             /* Notify the owner. */
 
             fh = vOpenMailer(envelope, owner, NULL);
-            if (fh != NULL) {
+            if (fh != NULL)
+                {
                 fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
                         listname, ListConfig->fqdn);
                 fprintf(fh, "To: %s\n", owner);
@@ -182,60 +222,64 @@
                 fprintf(fh, "Sender: %s\n", envelope);
                 fprintf(fh, "\n");
                 buffer = text_easy_sprintf(
-"\"%s\" tried to subscribe the address \"%s\" to the \"%s\" mailing list. " \
-"The list type does not allow subscribing addresses not equal to the From: " \
-"address, though, so the request has been denied. To subscribe this person " \
-"manually, send the following commands to the server:", originator, address, listname);
+                                           "\"%s\" tried to subscribe the address \"%s\" to the \"%s\" mailing list. " \
+                                           "The list type does not allow subscribing addresses not equal to the From: " \
+                                           "address, though, so the request has been denied. To subscribe this person " \
+                                           "manually, send the following commands to the server:", originator, address, listname);
                 text_wordwrap(buffer, 75);
                 fprintf(fh, "%s\n\n", buffer);
                 fprintf(fh, "password <AdminPassword>\n");
                 fprintf(fh, "subscribe %s %s\n", address, listname);
                 CloseMailer(fh);
-            }
-            else {
+                }
+            else
+                {
                 syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner);
                 return -1;
-            }
+                }
             return 0;
+            }
         }
-    }
 
     /* Check whether the address is subscribed already. */
 
-    if (isSubscribed(listname, address, NULL, NULL, FALSE) == TRUE) {
-
+    if (isSubscribed(listname, address, NULL, NULL, FALSE) == TRUE)
+        {
         /* Notify the originator, that the address is already a
            member. */
 
         fh = vOpenMailer(envelope, originator, NULL);
-        if (fh != NULL) {
+        if (fh != NULL)
+            {
             fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
                     listname, ListConfig->fqdn);
             fprintf(fh, "To: %s\n", originator);
             fprintf(fh, "Subject: Petidomo: Your request \"subscribe %s %s\"\n",
                     address, listname);
             if (MailStruct->Message_Id != NULL)
-              fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
+                fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
             fprintf(fh, "Precedence: junk\n");
             fprintf(fh, "Sender: %s\n", envelope);
             fprintf(fh, "\n");
             fprintf(fh, "The address is subscribed to this list already.\n");
             CloseMailer(fh);
-        }
-        else {
+            }
+        else
+            {
             syslog(LOG_ERR, "Failed to send email to \"%s\" concerning his request.", originator);
             return -1;
-        }
+            }
         return 0;
-    }
+        }
 
     /* Okay, add the address to the list. */
 
     fh = fopen(ListConfig->address_file, "a");
-    if (fh == NULL) {
+    if (fh == NULL)
+        {
         syslog(LOG_ERR, "Failed to open file \"%s\" for writing: %m", ListConfig->address_file);
         return -1;
-    }
+        }
     fprintf(fh, "%s\n", address);
     fclose(fh);
 
@@ -243,73 +287,80 @@
        subscriber, and the owner. */
 
     if (!strcasecmp(address, originator) == TRUE)
-      fh = vOpenMailer(envelope, address, owner, NULL);
+        fh = vOpenMailer(envelope, address, owner, NULL);
     else
-      fh = vOpenMailer(envelope, address, originator, owner, NULL);
-    if (fh != NULL) {
+        fh = vOpenMailer(envelope, address, originator, owner, NULL);
+    if (fh != NULL)
+        {
         fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
                 listname, ListConfig->fqdn);
         fprintf(fh, "To: %s\n", address);
         if (!strcasecmp(address, originator) == TRUE)
-          fprintf(fh, "Cc: %s\n", owner);
+            fprintf(fh, "Cc: %s\n", owner);
         else
-          fprintf(fh, "Cc: %s, %s\n", originator, owner);
+            fprintf(fh, "Cc: %s, %s\n", originator, owner);
         fprintf(fh, "Subject: Petidomo: Request \"subscribe %s %s\"\n", address, listname);
         if (MailStruct->Message_Id != NULL)
-          fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
+            fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
         fprintf(fh, "Precedence: junk\n");
         fprintf(fh, "Sender: %s\n", envelope);
         fprintf(fh, "\n");
-        if (!strcasecmp(address, originator) == TRUE) {
+        if (!strcasecmp(address, originator) == TRUE)
+            {
             buffer = text_easy_sprintf(
-"Per your request, the address \"%s\" has been subscribed to the " \
-"\"%s\" mailing list. If you want to unsubscribe later, you can " \
-"do so by sending the following command to \"%s-request@%s\":",
-                     address, listname, listname, ListConfig->fqdn);
-        }
-        else {
+                                       "Per your request, the address \"%s\" has been subscribed to the " \
+                                       "\"%s\" mailing list. If you want to unsubscribe later, you can " \
+                                       "do so by sending the following command to \"%s-request@%s\":",
+                                       address, listname, listname, ListConfig->fqdn);
+            }
+        else
+            {
             buffer = text_easy_sprintf(
-"Per request from \"%s\", the address \"%s\" has been subscribed to the " \
-"\"%s\" mailing list. If you want to unsubscribe later, you can " \
-"do so by sending the following command to \"%s-request@%s\":",
-                     originator, address, listname, listname, ListConfig->fqdn);
-        }
+                                       "Per request from \"%s\", the address \"%s\" has been subscribed to the " \
+                                       "\"%s\" mailing list. If you want to unsubscribe later, you can " \
+                                       "do so by sending the following command to \"%s-request@%s\":",
+                                       originator, address, listname, listname, ListConfig->fqdn);
+            }
         text_wordwrap(buffer, 75);
         fprintf(fh, "%s\n\n", buffer);
         fprintf(fh, "unsubscribe %s\n\n", address);
         fprintf(fh, "Please save a copy of this mail, to make sure you remember how " \
                 "to\nunsubscribe!\n");
         CloseMailer(fh);
-    }
-    else {
+        }
+    else
+        {
         syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner);
         return -1;
-    }
+        }
 
     /* Send introduction text to the new member. */
 
     p = loadfile(ListConfig->intro_file);
-    if (p != NULL) {
+    if (p != NULL)
+        {
         fh = vOpenMailer(envelope, address, NULL);
-        if (fh != NULL) {
+        if (fh != NULL)
+            {
             fprintf(fh, "From: %s-request@%s (Petidomo Mailing List Server)\n",
                     listname, ListConfig->fqdn);
             fprintf(fh, "To: %s\n", address);
             fprintf(fh, "Subject: Petidomo: Welcome to the \"%s\" mailing list!\n", listname);
             if (MailStruct->Message_Id != NULL)
-              fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
+                fprintf(fh, "In-Reply-To: %s\n", MailStruct->Message_Id);
             fprintf(fh, "Precedence: junk\n");
             fprintf(fh, "Sender: %s\n", envelope);
             fprintf(fh, "\n");
             fprintf(fh, "%s\n", p);
             CloseMailer(fh);
             free(p);
-        }
-        else {
+            }
+        else
+            {
             free(p);
             syslog(LOG_ERR, "Failed to send introduction mail to \"%s\"!", address);
             return -1;
+            }
         }
-    }
     return 0;
-}
+    }

CVSTrac 2.0.1