summaryrefslogtreecommitdiffstats
path: root/contrib/sendmail/makemap/makemap.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sendmail/makemap/makemap.c')
-rw-r--r--contrib/sendmail/makemap/makemap.c274
1 files changed, 114 insertions, 160 deletions
diff --git a/contrib/sendmail/makemap/makemap.c b/contrib/sendmail/makemap/makemap.c
index cabb18a..59c28f6 100644
--- a/contrib/sendmail/makemap/makemap.c
+++ b/contrib/sendmail/makemap/makemap.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.
+ * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers.
* All rights reserved.
* Copyright (c) 1992 Eric P. Allman. All rights reserved.
* Copyright (c) 1992, 1993
@@ -11,18 +11,16 @@
*
*/
-#ifndef lint
-static char copyright[] =
-"@(#) Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.\n\
+#include <sm/gen.h>
+
+SM_IDSTR(copyright,
+"@(#) Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers.\n\
All rights reserved.\n\
Copyright (c) 1992 Eric P. Allman. All rights reserved.\n\
Copyright (c) 1992, 1993\n\
- The Regents of the University of California. All rights reserved.\n";
-#endif /* ! lint */
+ The Regents of the University of California. All rights reserved.\n")
-#ifndef lint
-static char id[] = "@(#)$Id: makemap.c,v 8.135.4.13 2000/10/05 23:00:50 gshapiro Exp $";
-#endif /* ! lint */
+SM_IDSTR(id, "@(#)$Id: makemap.c,v 8.175 2001/12/28 22:44:01 ca Exp $")
#include <sys/types.h>
@@ -47,31 +45,24 @@ uid_t RunAsUid;
uid_t RunAsGid;
char *RunAsUserName;
int Verbose = 2;
-bool DontInitGroups = FALSE;
+bool DontInitGroups = false;
uid_t TrustedUid = 0;
BITMAP256 DontBlameSendmail;
#define BUFSIZE 1024
-#if _FFR_DELIM
-# define ISSEP(c) ((sep == '\0' && isascii(c) && isspace(c)) || (c) == sep)
-#else /* _FFR_DELIM */
-# define ISSEP(c) (isascii(c) && isspace(c))
-#endif /* _FFR_DELIM */
-
+#define ISSEP(c) (sep == '\0' ? isascii(c) && isspace(c) : (c) == sep)
static void
usage(progname)
char *progname;
{
- fprintf(stderr,
- "Usage: %s [-C cffile] [-N] [-c cachesize] [-d] [-e] [-f] [-l] [-o] [-r] [-s] %s[-u] [-v] type mapname\n",
- progname,
-#if _FFR_DELIM
- "[-t delimiter] "
-#else /* _FFR_DELIM */
- ""
-#endif /* _FFR_DELIM */
- );
+ /* XXX break the usage output into multiple lines? it's too long */
+ sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "Usage: %s [-C cffile] [-N] [-c cachesize] [-d] [-e] [-f] [-l] [-o] [-r] [-s] [-t delimiter] [-u] [-v] type mapname\n",
+ progname);
+#if _FFR_COMMENT_CHAR
+ /* add -D comment-char */
+#endif /* _FFR_COMMENT_CHAR */
exit(EX_USAGE);
}
@@ -82,21 +73,20 @@ main(argc, argv)
{
char *progname;
char *cfile;
- bool inclnull = FALSE;
- bool notrunc = FALSE;
- bool allowreplace = FALSE;
- bool allowempty = FALSE;
- bool verbose = FALSE;
- bool foldcase = TRUE;
- bool unmake = FALSE;
-#if _FFR_DELIM
+ bool inclnull = false;
+ bool notrunc = false;
+ bool allowreplace = false;
+ bool allowempty = false;
+ bool verbose = false;
+ bool foldcase = true;
+ bool unmake = false;
char sep = '\0';
-#endif /* _FFR_DELIM */
+ char comment = '#';
int exitstat;
int opt;
char *typename = NULL;
char *mapname = NULL;
- int lineno;
+ unsigned int lineno;
int st;
int mode;
int smode;
@@ -110,7 +100,7 @@ main(argc, argv)
SMDB_USER_INFO user_info;
char ibuf[BUFSIZE];
#if HASFCHOWN
- FILE *cfp;
+ SM_FILE_T *cfp;
char buf[MAXLINE];
#endif /* HASFCHOWN */
static char rnamebuf[MAXNAME]; /* holds RealUserName */
@@ -125,25 +115,24 @@ main(argc, argv)
progname++;
else
progname = argv[0];
- cfile = _PATH_SENDMAILCF;
+ cfile = getcfname(0, 0, SM_GET_SENDMAIL_CF, NULL);
clrbitmap(DontBlameSendmail);
RunAsUid = RealUid = getuid();
RunAsGid = RealGid = getgid();
pw = getpwuid(RealUid);
if (pw != NULL)
- (void) strlcpy(rnamebuf, pw->pw_name, sizeof rnamebuf);
+ (void) sm_strlcpy(rnamebuf, pw->pw_name, sizeof rnamebuf);
else
- (void) snprintf(rnamebuf, sizeof rnamebuf, "Unknown UID %d",
- (int) RealUid);
+ (void) sm_snprintf(rnamebuf, sizeof rnamebuf,
+ "Unknown UID %d", (int) RealUid);
RunAsUserName = RealUserName = rnamebuf;
user_info.smdbu_id = RunAsUid;
user_info.smdbu_group_id = RunAsGid;
- (void) strlcpy(user_info.smdbu_name, RunAsUserName,
+ (void) sm_strlcpy(user_info.smdbu_name, RunAsUserName,
SMDB_MAX_USER_NAME_LEN);
-
-#define OPTIONS "C:Nc:t:deflorsuv"
+#define OPTIONS "C:D:Nc:deflorst:uv"
while ((opt = getopt(argc, argv, OPTIONS)) != -1)
{
switch (opt)
@@ -153,7 +142,7 @@ main(argc, argv)
break;
case 'N':
- inclnull = TRUE;
+ inclnull = true;
break;
case 'c':
@@ -161,28 +150,34 @@ main(argc, argv)
break;
case 'd':
- params.smdbp_allow_dup = TRUE;
+ params.smdbp_allow_dup = true;
break;
case 'e':
- allowempty = TRUE;
+ allowempty = true;
break;
case 'f':
- foldcase = FALSE;
+ foldcase = false;
break;
+#if _FFR_COMMENT_CHAR
+ case 'D':
+ comment = *optarg;
+ break;
+#endif /* _FFR_COMMENT_CHAR */
+
case 'l':
smdb_print_available_types();
exit(EX_OK);
break;
case 'o':
- notrunc = TRUE;
+ notrunc = true;
break;
case 'r':
- allowreplace = TRUE;
+ allowreplace = true;
break;
case 's':
@@ -192,23 +187,22 @@ main(argc, argv)
setbitn(DBS_LINKEDMAPINWRITABLEDIR, DontBlameSendmail);
break;
-#if _FFR_DELIM
case 't':
if (optarg == NULL || *optarg == '\0')
{
- fprintf(stderr, "Invalid separator\n");
+ sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "Invalid separator\n");
break;
}
sep = *optarg;
break;
-#endif /* _FFR_DELIM */
case 'u':
- unmake = TRUE;
+ unmake = true;
break;
case 'v':
- verbose = TRUE;
+ verbose = true;
break;
default:
@@ -239,12 +233,14 @@ main(argc, argv)
#if HASFCHOWN
/* Find TrustedUser value in sendmail.cf */
- if ((cfp = fopen(cfile, "r")) == NULL)
+ if ((cfp = sm_io_open(SmFtStdio, SM_TIME_DEFAULT, cfile, SM_IO_RDONLY,
+ NULL)) == NULL)
{
- fprintf(stderr, "makemap: %s: %s", cfile, errstring(errno));
+ sm_io_fprintf(smioerr, SM_TIME_DEFAULT, "makemap: %s: %s",
+ cfile, sm_errstring(errno));
exit(EX_NOINPUT);
}
- while (fgets(buf, sizeof(buf), cfp) != NULL)
+ while (sm_io_fgets(cfp, SM_TIME_DEFAULT, buf, sizeof(buf)) != NULL)
{
register char *b;
@@ -270,8 +266,9 @@ main(argc, argv)
TrustedUid = 0;
pw = getpwnam(b);
if (pw == NULL)
- fprintf(stderr,
- "TrustedUser: unknown user %s\n", b);
+ (void) sm_io_fprintf(smioerr,
+ SM_TIME_DEFAULT,
+ "TrustedUser: unknown user %s\n", b);
else
TrustedUid = pw->pw_uid;
}
@@ -279,8 +276,9 @@ main(argc, argv)
# ifdef UID_MAX
if (TrustedUid > UID_MAX)
{
- fprintf(stderr,
- "TrustedUser: uid value (%ld) > UID_MAX (%ld)",
+ (void) sm_io_fprintf(smioerr,
+ SM_TIME_DEFAULT,
+ "TrustedUser: uid value (%ld) > UID_MAX (%ld)",
(long) TrustedUid,
(long) UID_MAX);
TrustedUid = 0;
@@ -294,7 +292,7 @@ main(argc, argv)
continue;
}
}
- (void) fclose(cfp);
+ (void) sm_io_close(cfp, SM_TIME_DEFAULT);
#endif /* HASFCHOWN */
if (!params.smdbp_allow_dup && !allowreplace)
@@ -326,13 +324,14 @@ main(argc, argv)
if (errno == SMDBE_UNSUPPORTED_DB_TYPE &&
(hint = smdb_db_definition(typename)) != NULL)
- fprintf(stderr,
- "%s: Need to recompile with -D%s for %s support\n",
- progname, hint, typename);
+ (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "%s: Need to recompile with -D%s for %s support\n",
+ progname, hint, typename);
else
- fprintf(stderr,
- "%s: error opening type %s map %s: %s\n",
- progname, typename, mapname, errstring(errno));
+ (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "%s: error opening type %s map %s: %s\n",
+ progname, typename, mapname,
+ sm_errstring(errno));
exit(EX_CANTCREAT);
}
@@ -343,9 +342,9 @@ main(argc, argv)
errno = database->smdb_set_owner(database, TrustedUid, -1);
if (errno != SMDBE_OK)
{
- fprintf(stderr,
- "WARNING: ownership change on %s failed %s",
- mapname, errstring(errno));
+ (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "WARNING: ownership change on %s failed %s",
+ mapname, sm_errstring(errno));
}
}
@@ -360,9 +359,9 @@ main(argc, argv)
if (errno != SMDBE_OK)
{
- fprintf(stderr,
- "%s: cannot make cursor for type %s map %s\n",
- progname, typename, mapname);
+ (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "%s: cannot make cursor for type %s map %s\n",
+ progname, typename, mapname);
exit(EX_SOFTWARE);
}
@@ -376,11 +375,12 @@ main(argc, argv)
if (errno != SMDBE_OK)
break;
- printf("%.*s\t%.*s\n",
- (int) db_key.size,
- (char *) db_key.data,
- (int) db_val.size,
- (char *)db_val.data);
+ (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
+ "%.*s\t%.*s\n",
+ (int) db_key.size,
+ (char *) db_key.data,
+ (int) db_val.size,
+ (char *)db_val.data);
}
(void) cursor->smdbc_close(cursor);
@@ -388,7 +388,8 @@ main(argc, argv)
else
{
lineno = 0;
- while (fgets(ibuf, sizeof ibuf, stdin) != NULL)
+ while (sm_io_fgets(smioin, SM_TIME_DEFAULT, ibuf, sizeof ibuf)
+ != NULL)
{
register char *p;
@@ -401,26 +402,23 @@ main(argc, argv)
p = strchr(ibuf, '\n');
if (p != NULL)
*p = '\0';
- else if (!feof(stdin))
+ else if (!sm_io_eof(smioin))
{
- fprintf(stderr,
- "%s: %s: line %d: line too long (%ld bytes max)\n",
- progname, mapname, lineno, (long) sizeof ibuf);
+ (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "%s: %s: line %u: line too long (%ld bytes max)\n",
+ progname, mapname, lineno,
+ (long) sizeof ibuf);
exitstat = EX_DATAERR;
continue;
}
- if (ibuf[0] == '\0' || ibuf[0] == '#')
+ if (ibuf[0] == '\0' || ibuf[0] == comment)
continue;
- if (
-#if _FFR_DELIM
- sep == '\0' &&
-#endif /* _FFR_DELIM */
- isascii(ibuf[0]) && isspace(ibuf[0]))
+ if (sep == '\0' && isascii(ibuf[0]) && isspace(ibuf[0]))
{
- fprintf(stderr,
- "%s: %s: line %d: syntax error (leading space)\n",
- progname, mapname, lineno);
+ (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "%s: %s: line %u: syntax error (leading space)\n",
+ progname, mapname, lineno);
exitstat = EX_DATAERR;
continue;
}
@@ -440,14 +438,14 @@ main(argc, argv)
if (*p != '\0')
*p++ = '\0';
- while (ISSEP(*p))
+ while (*p != '\0' && ISSEP(*p))
p++;
if (!allowempty && *p == '\0')
{
- fprintf(stderr,
- "%s: %s: line %d: no RHS for LHS %s\n",
- progname, mapname, lineno,
- (char *) db_key.data);
+ (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "%s: %s: line %u: no RHS for LHS %s\n",
+ progname, mapname, lineno,
+ (char *) db_key.data);
exitstat = EX_DATAERR;
continue;
}
@@ -463,9 +461,10 @@ main(argc, argv)
if (verbose)
{
- printf("key=`%s', val=`%s'\n",
- (char *) db_key.data,
- (char *) db_val.data);
+ (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT,
+ "key=`%s', val=`%s'\n",
+ (char *) db_key.data,
+ (char *) db_val.data);
}
errno = database->smdb_put(database, &db_key, &db_val,
@@ -487,19 +486,20 @@ main(argc, argv)
if (st < 0)
{
- fprintf(stderr,
- "%s: %s: line %d: key %s: put error: %s\n",
- progname, mapname, lineno,
- (char *) db_key.data,
- errstring(errno));
+ (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "%s: %s: line %u: key %s: put error: %s\n",
+ progname, mapname, lineno,
+ (char *) db_key.data,
+ sm_errstring(errno));
exitstat = EX_IOERR;
}
else if (st > 0)
{
- fprintf(stderr,
- "%s: %s: line %d: key %s: duplicate key\n",
- progname, mapname,
- lineno, (char *) db_key.data);
+ (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "%s: %s: line %u: key %s: duplicate key\n",
+ progname, mapname,
+ lineno,
+ (char *) db_key.data);
exitstat = EX_DATAERR;
}
}
@@ -512,61 +512,15 @@ main(argc, argv)
errno = database->smdb_close(database);
if (errno != SMDBE_OK)
{
- fprintf(stderr, "%s: close(%s): %s\n",
- progname, mapname, errstring(errno));
+ (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT,
+ "%s: close(%s): %s\n",
+ progname, mapname, sm_errstring(errno));
exitstat = EX_IOERR;
}
smdb_free_database(database);
exit(exitstat);
+
/* NOTREACHED */
return exitstat;
}
-
-/*VARARGS1*/
-void
-#ifdef __STDC__
-message(const char *msg, ...)
-#else /* __STDC__ */
-message(msg, va_alist)
- const char *msg;
- va_dcl
-#endif /* __STDC__ */
-{
- const char *m;
- VA_LOCAL_DECL
-
- m = msg;
- if (isascii(m[0]) && isdigit(m[0]) &&
- isascii(m[1]) && isdigit(m[1]) &&
- isascii(m[2]) && isdigit(m[2]) && m[3] == ' ')
- m += 4;
- VA_START(msg);
- (void) vfprintf(stderr, m, ap);
- VA_END;
- (void) fprintf(stderr, "\n");
-}
-
-/*VARARGS1*/
-void
-#ifdef __STDC__
-syserr(const char *msg, ...)
-#else /* __STDC__ */
-syserr(msg, va_alist)
- const char *msg;
- va_dcl
-#endif /* __STDC__ */
-{
- const char *m;
- VA_LOCAL_DECL
-
- m = msg;
- if (isascii(m[0]) && isdigit(m[0]) &&
- isascii(m[1]) && isdigit(m[1]) &&
- isascii(m[2]) && isdigit(m[2]) && m[3] == ' ')
- m += 4;
- VA_START(msg);
- (void) vfprintf(stderr, m, ap);
- VA_END;
- (void) fprintf(stderr, "\n");
-}
OpenPOWER on IntegriCloud