OSSP CVS Repository

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

ossp-pkg/petidomo/unsubscribe.c 1.7 -> 1.8

--- unsubscribe.c        2001/01/10 17:12:40     1.7
+++ unsubscribe.c        2001/01/11 14:10:57     1.8
@@ -1,6 +1,6 @@
 /*
    $Source: /v/ossp/cvs/ossp-pkg/petidomo/unsubscribe.c,v $
-   $Revision: 1.7 $
+   $Revision: 1.8 $
 
    Copyright (C) 2000 by CyberSolutions GmbH, Germany.
 
@@ -26,7 +26,8 @@
               const char * param1,
               const char * param2,
               const char * defaultlist)
-{
+    {
+    const struct PD_Config   * MasterConfig;
     const struct List_Config * ListConfig;
     FILE *         fh;
     const char *   address = NULL;
@@ -38,82 +39,119 @@
     char *         p;
     char *         list;
 
+    /* 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: unsubscribe-command invalid: No list specified.",
-            MailStruct->From);
-        return 0;
-    }
+        address = (MailStruct->Reply_To) ? MailStruct->Reply_To : MailStruct->From;
+    assert(address != NULL);
 
-    /* Initialize internal stuff. */
+    if (listname == NULL)
+        {
+        if (defaultlist != NULL)
+            listname = defaultlist;
+        else
+            {
+            syslog(LOG_NOTICE, "%s: unsubscribe-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 \"unsubscribe %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 unsubscribe the address \"%s\" from a mailing list. "   \
+                                           "Unfortunately, your request could not be processed, because "    \
+                                           "you didn't specify a valid mailing list name from which the "      \
+                                           "address should be unsubscribed. 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, 70);
+                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. */
 
     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 unsubscribe \"%s\" from list \"%s\", but " \
-                "couldn't provide the correct password.", originator, address, listname);
+                   "couldn't 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 \"unsubscribe %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 " \
-"unsubscribe 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 " \
+                                           "unsubscribe 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, 70);
                 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);
@@ -122,59 +160,63 @@
                 fprintf(fh, "Sender: %s\n", envelope);
                 fprintf(fh, "\n");
                 buffer = text_easy_sprintf(
-"\"%s\" tried to unsubscribe the address \"%s\" from the \"%s\" mailing list, " \
-"but couldn't provide the correct password. To unsubscribe him, send the " \
-"following commands to the server:", originator, address, listname);
+                                           "\"%s\" tried to unsubscribe the address \"%s\" from the \"%s\" mailing list, " \
+                                           "but couldn't provide the correct password. To unsubscribe him, send the " \
+                                           "following commands to the server:", originator, address, listname);
                 text_wordwrap(buffer, 70);
                 fprintf(fh, "%s\n\n", buffer);
                 fprintf(fh, "password <AdminPassword>\n");
                 fprintf(fh, "unsubscribe %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 unsubscribe something different than himself. */
 
             syslog(LOG_INFO, "\"%s\" tried to unsubscribe \"%s\" from list \"%s\", but the " \
-                "list type doesn't allow this.", originator, address, listname);
+                   "list 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 \"unsubscribe %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, 70);
                 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);
@@ -183,58 +225,63 @@
                 fprintf(fh, "Sender: %s\n", envelope);
                 fprintf(fh, "\n");
                 buffer = text_easy_sprintf(
-"\"%s\" tried to unsubscribe the address \"%s\" from the \"%s\" mailing list. " \
-"The list type does not allow unsubscribing addresses not equal to the From: " \
-"address, though, so the request has been denied. To unsubscribe this person " \
-"manually, send the following commands to the server:", originator, address, listname);
+                                           "\"%s\" tried to unsubscribe the address \"%s\" from the \"%s\" mailing list. " \
+                                           "The list type does not allow unsubscribing addresses not equal to the From: " \
+                                           "address, though, so the request has been denied. To unsubscribe this person " \
+                                           "manually, send the following commands to the server:", originator, address, listname);
                 text_wordwrap(buffer, 70);
                 fprintf(fh, "%s\n\n", buffer);
                 fprintf(fh, "password <AdminPassword>\n");
                 fprintf(fh, "unsubscribe %s %s\n", address, listname);
                 CloseMailer(fh);
-            }
-            else {
+                }
+            else
+                {
                 syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner);
                 return -1;
-            }
+                }
             return 0;
+            }
         }
-    }
 
     /* Okay, remove the address from the list. */
 
-    if (isSubscribed(listname, address, &list, &p, FALSE) == FALSE) {
-
+    if (isSubscribed(listname, address, &list, &p, FALSE) == FALSE)
+        {
         /* Notify the originator, that the address is not subscribed at
            all. */
 
         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 \"unsubscribe %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 not subscribed to this list.\n");
             CloseMailer(fh);
-        }
-        else {
+            }
+        else
+            {
             syslog(LOG_ERR, "Failed to send email to \"%s\" concerning his request.",
-                originator);
+                   originator);
             return -1;
             }
-    }
-    else {
+        }
+    else
+        {
         fh = fopen(ListConfig->address_file, "w");
-        if (fh == NULL) {
+        if (fh == NULL)
+            {
             syslog(LOG_ERR, "Failed to open file \"%s\" for writing: %m", ListConfig->address_file);
             return -1;
-        }
+            }
         *p++ = '\0';
         fprintf(fh, "%s", list);
         p = text_find_next_line(p); /* skip address in question */
@@ -245,42 +292,46 @@
            unsubscribed address. */
 
         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);
+                    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 \"unsubscribe %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 unsubscribed from the " \
-"\"%s\" mailing list.\n\n", address, listname);
-            }
-            else {
+                                           "Per your request, the address \"%s\" has been unsubscribed from the " \
+                                           "\"%s\" mailing list.\n\n", address, listname);
+                }
+            else
+                {
                 buffer = text_easy_sprintf(
-"Per request from \"%s\", the address \"%s\" has been unsubscribed from the " \
-"\"%s\" mailing list.\n\n", originator, address, listname);
-            }
+                                           "Per request from \"%s\", the address \"%s\" has been unsubscribed from the " \
+                                           "\"%s\" mailing list.\n\n", originator, address, listname);
+                }
             text_wordwrap(buffer, 70);
             fprintf(fh, "%s", buffer);
             CloseMailer(fh);
-        }
-        else {
+            }
+        else
+            {
             syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner);
             return -1;
+            }
         }
-    }
     free(list);
     return 0;
-}
+    }

CVSTrac 2.0.1