X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Finc.c;h=7c91c2597218bcf7b98e7b86d5f03bcc8f585893;hb=ecc90fb56b43863f4c33ed62da4abe898b17d7fb;hp=38ab687394ebe08cdefc6e3133288f456b3af22f;hpb=c05210483d82bf5f3786725ff80e12444088a701;p=mmh diff --git a/uip/inc.c b/uip/inc.c index 38ab687..7c91c25 100644 --- a/uip/inc.c +++ b/uip/inc.c @@ -30,11 +30,6 @@ #include #include -#ifdef POP -# include -# include -#endif - #include #include #include @@ -43,18 +38,6 @@ #include #include -#ifndef POP -# define POPminc(a) (a) -#else -# define POPminc(a) 0 -#endif - -#ifndef CYRUS_SASL -# define SASLminc(a) (a) -#else -# define SASLminc(a) 0 -#endif - static struct swit switches[] = { #define AUDSW 0 { "audit audit-file", 0 }, @@ -70,70 +53,26 @@ static struct swit switches[] = { { "form formatfile", 0 }, #define FMTSW 6 { "format string", 5 }, -#define HOSTSW 7 - { "host hostname", POPminc (-4) }, -#define USERSW 8 - { "user username", POPminc (-4) }, -#define PACKSW 9 - { "pack file", POPminc (-4) }, -#define NPACKSW 10 - { "nopack", POPminc (-6) }, -#define PORTSW 13 - { "port name/number", POPminc (-4) }, -#define SILSW 15 +#define SILSW 12 { "silent", 0 }, -#define NSILSW 16 +#define NSILSW 13 { "nosilent", 0 }, -#define TRNCSW 17 +#define TRNCSW 14 { "truncate", 0 }, -#define NTRNCSW 18 +#define NTRNCSW 15 { "notruncate", 0 }, -#define WIDTHSW 19 +#define WIDTHSW 16 { "width columns", 0 }, -#define VERSIONSW 20 +#define VERSIONSW 17 { "version", 0 }, -#define HELPSW 21 +#define HELPSW 18 { "help", 0 }, -#define SNOOPSW 22 - { "snoop", -5 }, -#define SASLSW 24 - { "sasl", SASLminc(-4) }, -#define SASLMECHSW 25 - { "saslmech", SASLminc(-8) }, -#define PROXYSW 26 - { "proxy command", POPminc(-5) }, - { NULL, 0 } }; -/* - * flags for the mail source - */ -#define INC_FILE 0 -#define INC_POP 1 - -static int inc_type; -static int snoop = 0; - -#ifdef POP -extern char response[]; - -static char *packfile = NULL; -static int size; -static long pos; -static long start; -static long stop; - -static int mbx_style = MMDF_FORMAT; -static int pd = NOTOK; -static FILE *pf = NULL; -#endif /* POP */ - /* This is an attempt to simplify things by putting all the * privilege ops into macros. * *GROUPPRIVS() is related to handling the setgid MAIL property, * and only applies if MAILGROUP is defined. - * *USERPRIVS() is related to handling the setuid root property, - * and only applies if POP is defined [why does POP => setuid root?] * Basically, SAVEGROUPPRIVS() is called right at the top of main() * to initialise things, and then DROPGROUPPRIVS() and GETGROUPPRIVS() * do the obvious thing. TRYDROPGROUPPRIVS() has to be safe to call @@ -155,15 +94,10 @@ static FILE *pf = NULL; */ #ifdef MAILGROUP static int return_gid; -#ifndef POP /* easy case; we're not setuid root, so can drop group privs * immediately. */ #define TRYDROPGROUPPRIVS() DROPGROUPPRIVS() -#else /* POP ie we are setuid root */ -#define TRYDROPGROUPPRIVS() \ -if (geteuid() != 0) DROPGROUPPRIVS() -#endif #define DROPGROUPPRIVS() setgid(getgid()) #define GETGROUPPRIVS() setgid(return_gid) #define SAVEGROUPPRIVS() return_gid = getegid() @@ -186,11 +120,6 @@ static FILE *in; char *map_name(char *); static void inc_done(int) NORETURN; -#ifdef POP -static int pop_action(char *); -static int pop_pack(char *); -static int map_count(void); -#endif int @@ -198,12 +127,11 @@ main (int argc, char **argv) { int chgflag = 1, trnflag = 1; int noisy = 1, width = 0; - int i, hghnum = 0, msgnum = 0; - int sasl = 0; + int hghnum = 0, msgnum = 0; + int incerr = 0; /* <0 if inc hits an error which means it should not truncate mailspool */ char *cp, *maildir = NULL, *folder = NULL; char *format = NULL, *form = NULL; - char *host = NULL, *port = NULL, *user = NULL, *proxy = NULL; - char *audfile = NULL, *from = NULL, *saslmech = NULL; + char *audfile = NULL, *from = NULL; char buf[BUFSIZ], **argp, *nfs, **arguments; struct msgs *mp = NULL; struct stat st, s1; @@ -211,12 +139,6 @@ main (int argc, char **argv) char b[MAXPATHLEN + 1]; char *maildir_copy = NULL; /* copy of mail directory because the static gets overwritten */ -#ifdef POP - int nmsgs, nbytes, p = 0; - char *pass = NULL; - char *MAILHOST_env_variable; -#endif - #ifdef MHE FILE *mhe = NULL; #endif @@ -241,27 +163,6 @@ main (int argc, char **argv) arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; -#ifdef POP - /* - * Scheme is: - * use MAILHOST environment variable if present, - * else try Hesiod. - * If that fails, use the default (if any) - * provided by mts.conf in mts_init() - */ - if ((MAILHOST_env_variable = getenv("MAILHOST")) != NULL) - pophost = MAILHOST_env_variable; - /* - * If there is a valid "pophost" entry in mts.conf, - * then use it as the default host. - */ - if (pophost && *pophost) - host = pophost; - - if ((cp = getenv ("MHPOPDEBUG")) && *cp) - snoop++; -#endif /* POP */ - while ((cp = *argp++)) { if (*cp == '-') { switch (smatch (++cp, switches)) { @@ -345,53 +246,6 @@ main (int argc, char **argv) adios (NULL, "missing argument to %s", argp[-2]); width = atoi (cp); continue; - - case HOSTSW: - if (!(host = *argp++) || *host == '-') - adios (NULL, "missing argument to %s", argp[-2]); - continue; - - case PORTSW: - if (!(host = *argp++) || *port == '-') - adios (NULL, "missing argument to %s", argp[-2]); - continue; - - case USERSW: - if (!(user = *argp++) || *user == '-') - adios (NULL, "missing argument to %s", argp[-2]); - continue; - - case PACKSW: -#ifndef POP - if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); -#else /* POP */ - if (!(packfile = *argp++) || *packfile == '-') - adios (NULL, "missing argument to %s", argp[-2]); -#endif /* POP */ - continue; - case NPACKSW: -#ifdef POP - packfile = NULL; -#endif /* POP */ - continue; - - case SNOOPSW: - snoop++; - continue; - - case SASLSW: - sasl++; - continue; - - case SASLMECHSW: - if (!(saslmech = *argp++) || *saslmech == '-') - adios (NULL, "missing argument to %s", argp[-2]); - continue; - case PROXYSW: - if (!(proxy = *argp++) || *proxy == '-') - adios (NULL, "missing argument to %s", argp[-2]); - continue; } } if (*cp == '+' || *cp == '@') { @@ -407,86 +261,29 @@ main (int argc, char **argv) /* NOTE: above this point you should use TRYDROPGROUPPRIVS(), * not DROPGROUPPRIVS(). */ -#ifdef POP - if (host && !*host) - host = NULL; -#endif /* POP */ - /* guarantee dropping group priveleges; we might not have done so earlier */ DROPGROUPPRIVS(); /* - * Where are we getting the new mail? - */ - if (from) - inc_type = INC_FILE; -#ifdef POP - else if (host) - inc_type = INC_POP; -#endif - else - inc_type = INC_FILE; - -#ifdef POP - /* - * Are we getting the mail from - * a POP server? - */ - if (inc_type == INC_POP) { - if (user == NULL) - user = getusername (); - if (sasl) - pass = getusername (); - else - ruserpass (host, &user, &pass); - - /* - * initialize POP connection - */ - if (pop_init (host, port, user, pass, proxy, snoop, sasl, - saslmech) == NOTOK) - adios (NULL, "%s", response); - - /* Check if there are any messages */ - if (pop_stat (&nmsgs, &nbytes) == NOTOK) - adios (NULL, "%s", response); - - if (nmsgs == 0) { - pop_quit(); - adios (NULL, "no mail to incorporate"); - } - } -#endif /* POP */ - - /* * We will get the mail from a file * (typically the standard maildrop) */ - - if (inc_type == INC_FILE) { - if (from) - newmail = from; - else if ((newmail = getenv ("MAILDROP")) && *newmail) - newmail = m_mailpath (newmail); - else if ((newmail = context_find ("maildrop")) && *newmail) - newmail = m_mailpath (newmail); - else { - newmail = concat (MAILDIR, "/", MAILFIL, NULL); - } - if (stat (newmail, &s1) == NOTOK || s1.st_size == 0) - adios (NULL, "no mail to incorporate"); - - if ((cp = strdup(newmail)) == (char *)0) - adios (NULL, "error allocating memory to copy newmail"); - - newmail = cp; + if (from) + newmail = from; + else if ((newmail = getenv ("MAILDROP")) && *newmail) + newmail = m_mailpath (newmail); + else if ((newmail = context_find ("maildrop")) && *newmail) + newmail = m_mailpath (newmail); + else { + newmail = concat (MAILDIR, "/", MAILFIL, NULL); } + if (stat (newmail, &s1) == NOTOK || s1.st_size == 0) + adios (NULL, "no mail to incorporate"); + + if ((cp = strdup(newmail)) == (char *)0) + adios (NULL, "error allocating memory to copy newmail"); -#ifdef POP - /* skip the folder setup */ - if ((inc_type == INC_POP) && packfile) - goto go_to_it; -#endif /* POP */ + newmail = cp; if (!context_find ("path")) free (path ("./", TFOLDER)); @@ -514,37 +311,32 @@ main (int argc, char **argv) if (!(mp = folder_read (folder))) adios (NULL, "unable to read folder %s", folder); -#ifdef POP -go_to_it: -#endif /* POP */ - - if (inc_type == INC_FILE) { - if (access (newmail, W_OK) != NOTOK) { - locked++; - if (trnflag) { - SIGNAL (SIGHUP, SIG_IGN); - SIGNAL (SIGINT, SIG_IGN); - SIGNAL (SIGQUIT, SIG_IGN); - SIGNAL (SIGTERM, SIG_IGN); - } + if (access (newmail, W_OK) != NOTOK) { + locked++; + if (trnflag) { + SIGNAL (SIGHUP, SIG_IGN); + SIGNAL (SIGINT, SIG_IGN); + SIGNAL (SIGQUIT, SIG_IGN); + SIGNAL (SIGTERM, SIG_IGN); + } - GETGROUPPRIVS(); /* Reset gid to lock mail file */ - in = lkfopen (newmail, "r"); - DROPGROUPPRIVS(); - if (in == NULL) - adios (NULL, "unable to lock and fopen %s", newmail); - fstat (fileno(in), &s1); - } else { - trnflag = 0; - if ((in = fopen (newmail, "r")) == NULL) - adios (newmail, "unable to read"); - } + GETGROUPPRIVS(); /* Reset gid to lock mail file */ + in = lkfopen (newmail, "r"); + DROPGROUPPRIVS(); + if (in == NULL) + adios (NULL, "unable to lock and fopen %s", newmail); + fstat (fileno(in), &s1); + } else { + trnflag = 0; + if ((in = fopen (newmail, "r")) == NULL) + adios (newmail, "unable to read"); } /* This shouldn't be necessary but it can't hurt. */ DROPGROUPPRIVS(); if (audfile) { + int i; if ((i = stat (audfile, &st)) == NOTOK) advise (NULL, "Creating Receive-Audit: %s", audfile); if ((aud = fopen (audfile, "a")) == NULL) @@ -552,19 +344,13 @@ go_to_it: else if (i == NOTOK) chmod (audfile, m_gmprot ()); -#ifdef POP - fprintf (aud, from ? "<> %s -ms %s\n" - : host ? "<> %s -host %s -user %s\n" - : "<> %s\n", - dtimenow (0), from ? from : host, user); -#else /* POP */ fprintf (aud, from ? "<> %s -ms %s\n" : "<> %s\n", dtimenow (0), from); -#endif /* POP */ } #ifdef MHE if (context_find ("mhe")) { + int i; cp = concat (maildir, "/++", NULL); i = stat (cp, &st); if ((mhe = fopen (cp, "a")) == NULL) @@ -584,230 +370,79 @@ go_to_it: fflush (stdout); } -#ifdef POP - /* - * Get the mail from a POP server - */ - if (inc_type == INC_POP) { - if (packfile) { - packfile = path (packfile, TFILE); - if (stat (packfile, &st) == NOTOK) { - if (errno != ENOENT) - adios (packfile, "error on file"); - cp = concat ("Create file \"", packfile, "\"? ", NULL); - if (noisy && !getanswer (cp)) - done (1); - free (cp); - } - msgnum = map_count (); - if ((pd = mbx_open (packfile, mbx_style, getuid(), getgid(), m_gmprot())) - == NOTOK) - adios (packfile, "unable to open"); - if ((pf = fdopen (pd, "w+")) == NULL) - adios (NULL, "unable to fdopen %s", packfile); - } else { - hghnum = msgnum = mp->hghmsg; - /* - * Check if we have enough message space for all the new - * messages. If not, then realloc the folder and add enough - * space for all new messages plus 10 additional slots. - */ - if (mp->hghmsg + nmsgs >= mp->hghoff - && !(mp = folder_realloc (mp, mp->lowoff, mp->hghmsg + nmsgs + 10))) - adios (NULL, "unable to allocate folder storage"); - } - - for (i = 1; i <= nmsgs; i++) { - msgnum++; - if (packfile) { - fseek (pf, 0L, SEEK_CUR); - pos = ftell (pf); - size = 0; - fwrite (mmdlm1, 1, strlen (mmdlm1), pf); - start = ftell (pf); - - if (pop_retr (i, pop_pack) == NOTOK) - adios (NULL, "%s", response); - - fseek (pf, 0L, SEEK_CUR); - stop = ftell (pf); - if (fflush (pf)) - adios (packfile, "write error on"); - fseek (pf, start, SEEK_SET); - } else { - cp = getcpy (m_name (msgnum)); - if ((pf = fopen (cp, "w+")) == NULL) - adios (cp, "unable to write"); - chmod (cp, m_gmprot ()); - start = stop = 0L; - - if (pop_retr (i, pop_action) == NOTOK) - adios (NULL, "%s", response); - - if (fflush (pf)) - adios (cp, "write error on"); - fseek (pf, 0L, SEEK_SET); - } - switch (p = scan (pf, msgnum, 0, nfs, width, - packfile ? 0 : msgnum == mp->hghmsg + 1 && chgflag, - 1, NULL, stop - start, noisy)) { - case SCNEOF: - printf ("%*d empty\n", DMAXFOLDER, msgnum); - break; - - case SCNFAT: - trnflag = 0; - noisy++; - /* advise (cp, "unable to read"); already advised */ - /* fall thru */ - - case SCNERR: - case SCNNUM: - break; - - case SCNMSG: - case SCNENC: - default: - if (aud) - fputs (scanl, aud); -# ifdef MHE - if (mhe) - fputs (scanl, mhe); -# endif /* MHE */ - if (noisy) - fflush (stdout); - if (!packfile) { - clear_msg_flags (mp, msgnum); - set_exists (mp, msgnum); - set_unseen (mp, msgnum); - mp->msgflags |= SEQMOD; - } - break; - } - if (packfile) { - fseek (pf, stop, SEEK_SET); - fwrite (mmdlm2, 1, strlen (mmdlm2), pf); - if (fflush (pf) || ferror (pf)) { - int e = errno; - pop_quit (); - errno = e; - adios (packfile, "write error on"); - } - map_write (packfile, pd, 0, 0L, start, stop, pos, size, noisy); - } else { - if (ferror(pf) || fclose (pf)) { - int e = errno; - unlink (cp); - pop_quit (); - errno = e; - adios (cp, "write error on"); - } - free (cp); - } - - if (trnflag && pop_dele (i) == NOTOK) - adios (NULL, "%s", response); - } - - if (pop_quit () == NOTOK) - adios (NULL, "%s", response); - if (packfile) { - mbx_close (packfile, pd); - pd = NOTOK; - } - } -#endif /* POP */ - /* * Get the mail from file (usually mail spool) */ - if (inc_type == INC_FILE) { - m_unknown (in); /* the MAGIC invocation... */ - hghnum = msgnum = mp->hghmsg; - for (i = 0;;) { - /* - * Check if we need to allocate more space for message status. - * If so, then add space for an additional 100 messages. - */ - if (msgnum >= mp->hghoff - && !(mp = folder_realloc (mp, mp->lowoff, mp->hghoff + 100))) { - advise (NULL, "unable to allocate folder storage"); - i = NOTOK; - break; - } - -#if 0 - /* copy file from spool to tmp file */ - tmpfilenam = m_scratch ("", invo_name); - if ((fd = creat (tmpfilenam, m_gmprot ())) == NOTOK) - adios (tmpfilenam, "unable to create"); - chmod (tmpfilenam, m_gmprot ()); - if (!(in2 = fdopen (fd, "r+"))) - adios (tmpfilenam, "unable to access"); - cpymsg (in, in2); - - /* link message into folder */ - newmsg = folder_addmsg(mp, tmpfilenam); -#endif - /* create scanline for new message */ - switch (i = scan (in, msgnum + 1, msgnum + 1, nfs, width, - msgnum == hghnum && chgflag, 1, NULL, 0L, noisy)) { - case SCNFAT: - case SCNEOF: - break; - - case SCNERR: - if (aud) - fputs ("inc aborted!\n", aud); - advise (NULL, "aborted!"); /* doesn't clean up locks! */ - break; - - case SCNNUM: - advise (NULL, "BUG in %s, number out of range", invo_name); - break; - - default: - advise (NULL, "BUG in %s, scan() botch (%d)", invo_name, i); - break; - - case SCNMSG: - case SCNENC: - /* - * Run the external program hook on the message. - */ - - (void)snprintf(b, sizeof (b), "%s/%d", maildir_copy, msgnum + 1); - (void)ext_hook("add-hook", b, (char *)0); - - if (aud) - fputs (scanl, aud); + m_unknown (in); /* the MAGIC invocation... */ + hghnum = msgnum = mp->hghmsg; + for (;;) { + /* + * Check if we need to allocate more space for message status. + * If so, then add space for an additional 100 messages. + */ + if (msgnum >= mp->hghoff + && !(mp = folder_realloc (mp, mp->lowoff, mp->hghoff + 100))) { + advise (NULL, "unable to allocate folder storage"); + incerr = NOTOK; + break; + } + + /* create scanline for new message */ + switch (incerr = scan (in, msgnum + 1, msgnum + 1, nfs, width, + msgnum == hghnum && chgflag, 1, NULL, 0L, noisy)) { + case SCNFAT: + case SCNEOF: + break; + + case SCNERR: + if (aud) + fputs ("inc aborted!\n", aud); + advise (NULL, "aborted!"); /* doesn't clean up locks! */ + break; + + case SCNNUM: + advise (NULL, "BUG in %s, number out of range", invo_name); + break; + + default: + advise (NULL, "BUG in %s, scan() botch (%d)", invo_name, incerr); + break; + + case SCNMSG: + case SCNENC: + /* + * Run the external program hook on the message. + */ + + (void)snprintf(b, sizeof (b), "%s/%d", maildir_copy, msgnum + 1); + (void)ext_hook("add-hook", b, (char *)0); + + if (aud) + fputs (scanl, aud); #ifdef MHE - if (mhe) - fputs (scanl, mhe); + if (mhe) + fputs (scanl, mhe); #endif /* MHE */ - if (noisy) - fflush (stdout); - - msgnum++; - mp->hghmsg++; - mp->nummsg++; - if (mp->lowmsg == 0) mp->lowmsg = 1; - - clear_msg_flags (mp, msgnum); - set_exists (mp, msgnum); - set_unseen (mp, msgnum); - mp->msgflags |= SEQMOD; - continue; - } - break; - } + if (noisy) + fflush (stdout); + msgnum++; + mp->hghmsg++; + mp->nummsg++; + if (mp->lowmsg == 0) + mp->lowmsg = 1; + clear_msg_flags (mp, msgnum); + set_exists (mp, msgnum); + set_unseen (mp, msgnum); + mp->msgflags |= SEQMOD; + continue; + } + /* If we get here there was some sort of error from scan(), + * so stop processing anything more from the spool. + */ + break; } -#ifdef POP - if (p < 0) { /* error */ -#else - if (i < 0) { /* error */ -#endif + if (incerr < 0) { /* error */ if (locked) { GETGROUPPRIVS(); /* Be sure we can unlock mail file */ (void) lkfclose (in, newmail); in = NULL; @@ -829,29 +464,23 @@ go_to_it: if (noisy) fflush (stdout); -#ifdef POP - if ((inc_type == INC_POP) && packfile) - done (0); -#endif /* POP */ - /* * truncate file we are incorporating from */ - if (inc_type == INC_FILE) { - if (trnflag) { - if (stat (newmail, &st) != NOTOK && s1.st_mtime != st.st_mtime) - advise (NULL, "new messages have arrived!\007"); - else { - if ((i = creat (newmail, 0600)) != NOTOK) - close (i); - else - admonish (newmail, "error zero'ing"); - unlink(map_name(newmail)); - } - } else { - if (noisy) - printf ("%s not zero'd\n", newmail); - } + if (trnflag) { + if (stat (newmail, &st) != NOTOK && s1.st_mtime != st.st_mtime) + advise (NULL, "new messages have arrived!\007"); + else { + int newfd; + if ((newfd = creat (newmail, 0600)) != NOTOK) + close (newfd); + else + admonish (newmail, "error zero'ing"); + unlink(map_name(newmail)); + } + } else { + if (noisy) + printf ("%s not zero'd\n", newmail); } if (msgnum == hghnum) { @@ -870,14 +499,12 @@ go_to_it: /* * unlock the mail spool */ - if (inc_type == INC_FILE) { - if (locked) { - GETGROUPPRIVS(); /* Be sure we can unlock mail file */ - (void) lkfclose (in, newmail); in = NULL; - DROPGROUPPRIVS(); /* And then return us to normal privileges */ - } else { - fclose (in); in = NULL; - } + if (locked) { + GETGROUPPRIVS(); /* Be sure we can unlock mail file */ + (void) lkfclose (in, newmail); in = NULL; + DROPGROUPPRIVS(); /* And then return us to normal privileges */ + } else { + fclose (in); in = NULL; } seq_setunseen (mp, 0); /* set the Unseen-Sequence */ @@ -887,47 +514,9 @@ go_to_it: return 1; } - -#if 0 - -/* - * Copy message message from spool into - * temporary file. Massage the "From " line - * while copying. - */ - -cpymsg (FILE *in, FILE *out) -{ - int state; - char *tmpbuf, name[NAMESZ]; - - for (;;) { - state = m_getfld (state, name, tmpbuf, rlwidth, in); - switch (state) { - case FLD: - case FLDPLUS: - break; - case BODY: - break; - case LENERR: - case FMTERR: - break; - case FILEEOF: - break; - default: - } - } -} -#endif /* if 0 */ - - static void inc_done (int status) { -#ifdef POP - if (packfile && pd != NOTOK) - mbx_close (packfile, pd); -#endif /* POP */ if (locked) { GETGROUPPRIVS(); @@ -936,49 +525,3 @@ inc_done (int status) } exit (status); } - -#ifdef POP -static int -pop_action (char *s) -{ - fprintf (pf, "%s\n", s); - stop += strlen (s) + 1; - return 0; /* Is return value used? This was missing before 1999-07-15. */ -} - -static int -pop_pack (char *s) -{ - int j; - char buffer[BUFSIZ]; - - snprintf (buffer, sizeof(buffer), "%s\n", s); - for (j = 0; (j = stringdex (mmdlm1, buffer)) >= 0; buffer[j]++) - continue; - for (j = 0; (j = stringdex (mmdlm2, buffer)) >= 0; buffer[j]++) - continue; - fputs (buffer, pf); - size += strlen (buffer) + 1; - return 0; /* Is return value used? This was missing before 1999-07-15. */ -} - -static int -map_count (void) -{ - int md; - char *cp; - struct drop d; - struct stat st; - - if (stat (packfile, &st) == NOTOK) - return 0; - if ((md = open (cp = map_name (packfile), O_RDONLY)) == NOTOK - || map_chk (cp, md, &d, (long) st.st_size, 1)) { - if (md != NOTOK) - close (md); - return 0; - } - close (md); - return (d.d_id); -} -#endif /* POP */