[cyrus-imapd-2_2 CVS] Missing calls to prot_free ?

Christian Schulte cs at schulte.it
Wed Mar 5 09:37:00 EST 2003


 From imap/global.c:

550  /*
551   * Return contents of the shutdown file.  NULL = no file.
552   */
553  char *shutdown_file(void)
554  {
555      int fd;
556      struct protstream *shutdown_in;
557      static char shutdownfilename[1024] = "";
558      static char buf[1024];
559      char *p;
560
561      if (!shutdownfilename[0])
562          snprintf(shutdownfilename, sizeof(shutdownfilename),
563                   "%s/msg/shutdown", config_dir);
564      if ((fd = open(shutdownfilename, O_RDONLY, 0)) == -1) return NULL;
565
566      shutdown_in = prot_new(fd, 0, "SHUTDOWN");
567      prot_fgets(buf, sizeof(buf), shutdown_in);
568      if ((p = strchr(buf, '\r')) != NULL) *p = 0;
569      if ((p = strchr(buf, '\n')) != NULL) *p = 0;
570
571      syslog(LOG_WARNING, "%s, closing connection", buf);
572      prot_free(shutdown_in);
573      return buf;
574  }


I added line 572 because I think prot_free should be called somewhere 
after the prot_new call if the structure is not used furthermore. Is 
that right ?

The same in imap/lmtpengine.c:

991        /* Only allow LHLO/NOOP/QUIT when there is a shutdown file */
992        if (!strchr("LlNnQq", buf[0]) &&
993            (shutdown_fd = open(shutdownfilename, O_RDONLY, 0)) != -1) {
994            struct protstream *shutdown_in = prot_new(shutdown_fd, 0, 
"LMTP_SHUTDOWNFILE");
995
996            prot_fgets(buf, sizeof(buf), shutdown_in);
997            if ((p = strchr(buf, '\r'))!=NULL) *p = 0;
998            if ((p = strchr(buf, '\n'))!=NULL) *p = 0;
999
1000            prot_printf(pout, "421 4.3.2 %s\r\n", buf);
1001            prot_flush(pout);
1002            prot_free(shutdown_in);
1003            func->shutdown(0);
1004        }

Here I added line 1002 but here I also do not know if this is correct! 
By the way: Shouldn't that call also the shutdownfile-function from 
global.c now ?

Then again in imap/lmtpengine.c:

1377                rset:
1378                  if(msg->data) prot_free(msg->data);
1379                  if (msg) msg_free(msg);
1380                  msg_new(&msg);
1381
1382                  continue;
1383              }
1384              goto syntaxerr;


I added line 1378 and again I do not know if it was correct.

Finally: Did I totally misunderstand the sources or are these missing 
calls to prot_free nonrelevant ? Would be great if someone could comment 
on this!


--Christian--





More information about the Info-cyrus mailing list