From 38b245b46a51be82a5a5f798255cbbbbc0186f78 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Wed, 29 Dec 2010 12:00:30 +0100 Subject: Move files copied from maildrop to a separate hierarchy. Signed-off-by: Thomas Schwinge --- .../notmuch-deliver/maildrop/numlib/Makefile.am | 27 +++++ contrib/notmuch-deliver/maildrop/numlib/atotimet.c | 14 +++ contrib/notmuch-deliver/maildrop/numlib/atouidt.c | 15 +++ .../notmuch-deliver/maildrop/numlib/changeuidgid.c | 111 +++++++++++++++++++++ contrib/notmuch-deliver/maildrop/numlib/numlib.h | 97 ++++++++++++++++++ contrib/notmuch-deliver/maildrop/numlib/strdevt.c | 26 +++++ contrib/notmuch-deliver/maildrop/numlib/strgidt.c | 26 +++++ contrib/notmuch-deliver/maildrop/numlib/strhdevt.c | 29 ++++++ contrib/notmuch-deliver/maildrop/numlib/strhinot.c | 29 ++++++ contrib/notmuch-deliver/maildrop/numlib/strhpidt.c | 29 ++++++ .../notmuch-deliver/maildrop/numlib/strhtimet.c | 29 ++++++ contrib/notmuch-deliver/maildrop/numlib/strinot.c | 26 +++++ contrib/notmuch-deliver/maildrop/numlib/strofft.c | 37 +++++++ contrib/notmuch-deliver/maildrop/numlib/strpidt.c | 26 +++++ contrib/notmuch-deliver/maildrop/numlib/strsize.c | 62 ++++++++++++ contrib/notmuch-deliver/maildrop/numlib/strsizet.c | 26 +++++ contrib/notmuch-deliver/maildrop/numlib/strtimet.c | 26 +++++ contrib/notmuch-deliver/maildrop/numlib/struidt.c | 26 +++++ 18 files changed, 661 insertions(+) create mode 100644 contrib/notmuch-deliver/maildrop/numlib/Makefile.am create mode 100644 contrib/notmuch-deliver/maildrop/numlib/atotimet.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/atouidt.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/changeuidgid.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/numlib.h create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strdevt.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strgidt.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strhdevt.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strhinot.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strhpidt.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strhtimet.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strinot.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strofft.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strpidt.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strsize.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strsizet.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/strtimet.c create mode 100644 contrib/notmuch-deliver/maildrop/numlib/struidt.c (limited to 'contrib/notmuch-deliver/maildrop/numlib') diff --git a/contrib/notmuch-deliver/maildrop/numlib/Makefile.am b/contrib/notmuch-deliver/maildrop/numlib/Makefile.am new file mode 100644 index 00000000..c0f129fa --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/Makefile.am @@ -0,0 +1,27 @@ +# $Id: Makefile.am,v 1.12 2007/06/30 15:40:53 mrsam Exp $ +# +# Copyright 1998 - 2004 Double Precision, Inc. See COPYING for +# distribution information. + + +CLEANFILES=$(noinst_DATA) +noinst_LTLIBRARIES=libnumlib.la + +libnumlib_la_SOURCES=\ + atotimet.c \ + atouidt.c \ + changeuidgid.c \ + numlib.h \ + strdevt.c \ + strgidt.c \ + strhdevt.c \ + strhinot.c \ + strhpidt.c \ + strhtimet.c \ + strinot.c \ + strofft.c \ + strpidt.c \ + strsize.c \ + strsizet.c \ + strtimet.c \ + struidt.c diff --git a/contrib/notmuch-deliver/maildrop/numlib/atotimet.c b/contrib/notmuch-deliver/maildrop/numlib/atotimet.c new file mode 100644 index 00000000..d494fd22 --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/atotimet.c @@ -0,0 +1,14 @@ +/* +** Copyright 2003 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: atotimet.c,v 1.1 2003/08/03 03:09:19 mrsam Exp $"; + +LIBMAIL_STRIMPL(time_t, libmail_strtotime_t, libmail_atotime_t) diff --git a/contrib/notmuch-deliver/maildrop/numlib/atouidt.c b/contrib/notmuch-deliver/maildrop/numlib/atouidt.c new file mode 100644 index 00000000..3c01ecf5 --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/atouidt.c @@ -0,0 +1,15 @@ +/* +** Copyright 2003 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: atouidt.c,v 1.1 2004/01/11 02:47:33 mrsam Exp $"; + +LIBMAIL_STRIMPL(uid_t, libmail_strtouid_t, libmail_atouid_t) +LIBMAIL_STRIMPL(gid_t, libmail_strtogid_t, libmail_atogid_t) diff --git a/contrib/notmuch-deliver/maildrop/numlib/changeuidgid.c b/contrib/notmuch-deliver/maildrop/numlib/changeuidgid.c new file mode 100644 index 00000000..56793927 --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/changeuidgid.c @@ -0,0 +1,111 @@ +/* +** Copyright 1998 - 2002 Double Precision, Inc. See COPYING for +** distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include +#if HAVE_UNISTD_H +#include +#endif +#include +#include +#include +#include +#include +#include + +#include "numlib.h" + +static const char rcsid[]="$Id: changeuidgid.c,v 1.2 2003/01/05 04:01:17 mrsam Exp $"; + +void libmail_changegroup(gid_t gid) +{ + if ( setgid(gid)) + { + perror("setgid"); + exit(1); + } + +#if HAVE_SETGROUPS + if ( getuid() == 0 && setgroups(1, &gid) ) + { + perror("setgroups"); + exit(1); + } +#endif +} + +void libmail_changeuidgid(uid_t uid, gid_t gid) +{ + libmail_changegroup(gid); + if ( setuid(uid)) + { + perror("setuid"); + exit(1); + } +} + +void libmail_changeusername(const char *uname, const gid_t *forcegrp) +{ +struct passwd *pw; +uid_t changeuid; +gid_t changegid; + +/* uname might be a pointer returned from a previous called to getpw(), +** and libc has a problem getting it back. +*/ +char *p=malloc(strlen(uname)+1); + + if (!p) + { + perror("malloc"); + exit(1); + } + strcpy(p, uname); + + errno=ENOENT; + if ((pw=getpwnam(p)) == 0) + { + free(p); + perror("getpwnam"); + exit(1); + } + free(p); + + changeuid=pw->pw_uid; + + if ( !forcegrp ) forcegrp= &pw->pw_gid; + + changegid= *forcegrp; + + if ( setgid( changegid )) + { + perror("setgid"); + exit(1); + } + +#if HAVE_INITGROUPS + if ( getuid() == 0 && initgroups(pw->pw_name, changegid) ) + { + perror("initgroups"); + exit(1); + } +#else +#if HAVE_SETGROUPS + if ( getuid() == 0 && setgroups(1, &changegid) ) + { + perror("setgroups"); + exit(1); + } +#endif +#endif + + if (setuid(changeuid)) + { + perror("setuid"); + exit(1); + } +} diff --git a/contrib/notmuch-deliver/maildrop/numlib/numlib.h b/contrib/notmuch-deliver/maildrop/numlib/numlib.h new file mode 100644 index 00000000..d356c6d3 --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/numlib.h @@ -0,0 +1,97 @@ +#ifndef numlib_h +#define numlib_h + +/* +** Copyright 1998 - 2003 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +static const char numlib_h_rcsid[]="$Id: numlib.h,v 1.10 2004/01/11 02:47:33 mrsam Exp $"; + +#if HAVE_CONFIG_H +#include "../numlib/config.h" /* VPATH build */ +#endif + +#include +#include + +#define NUMBUFSIZE 60 + +/* Convert various system types to decimal */ + +char *libmail_str_time_t(time_t, char *); +char *libmail_str_off_t(off_t, char *); +char *libmail_str_pid_t(pid_t, char *); +char *libmail_str_dev_t(dev_t, char *); +char *libmail_str_ino_t(ino_t, char *); +char *libmail_str_uid_t(uid_t, char *); +char *libmail_str_gid_t(gid_t, char *); +char *libmail_str_size_t(size_t, char *); + +char *libmail_str_sizekb(unsigned long, char *); /* X Kb or X Mb */ + +/* Convert selected system types to hex */ + +char *libmail_strh_time_t(time_t, char *); +char *libmail_strh_pid_t(pid_t, char *); +char *libmail_strh_ino_t(ino_t, char *); +char *libmail_strh_dev_t(dev_t, char *); + +/* And, now let's do the reverse */ + +time_t libmail_strtotime_t(const char **); +time_t libmail_atotime_t(const char *); + +uid_t libmail_strtouid_t(const char **); +uid_t libmail_atouid_t(const char *); + +gid_t libmail_strtogid_t(const char **); +gid_t libmail_atogid_t(const char *); + + /* Common macros: */ + +#define LIBMAIL_STRIMPL(type, f1, f2) \ +\ +type f1(const char **p)\ +{\ + type n=0;\ + while ( **p >= '0' && **p <= '9') n=n*10 + (char)(*(*p)++ - '0');\ + return n;\ +}\ +\ +type f2(const char *p)\ +{\ + return f1(&p);\ +} + + +/* +** The following functions are used by root to reset its user and group id +** to the authenticated user's. Various functions are provided to handle +** various situations. +*/ + +void libmail_changegroup(gid_t); /* Set the group id only. Also clear any + ** auxiliary group ids */ + +void libmail_changeuidgid(uid_t, gid_t); + /* Set both user id and group id. Also clear + ** aux group ids */ + +void libmail_changeusername(const char *, const gid_t *); + /* + ** Set the userid to the indicate user's. If second argument is + ** not null, it points to the groupid to set. If it's null, the + ** group id is taken from the passwd file. Auxiliary IDs are set + ** to any aux IDs set for the user in the group file. If there are + ** no aux group IDs for the user, any AUX ids are cleared. + */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/contrib/notmuch-deliver/maildrop/numlib/strdevt.c b/contrib/notmuch-deliver/maildrop/numlib/strdevt.c new file mode 100644 index 00000000..2e542d54 --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/strdevt.c @@ -0,0 +1,26 @@ +/* +** Copyright 2003 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: strdevt.c,v 1.1 2003/01/26 03:22:40 mrsam Exp $"; + +char *libmail_str_dev_t(dev_t t, char *arg) +{ + char buf[NUMBUFSIZE]; + char *p=buf+sizeof(buf)-1; + + *p=0; + do + { + *--p= '0' + (t % 10); + t=t / 10; + } while(t); + return (strcpy(arg, p)); +} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strgidt.c b/contrib/notmuch-deliver/maildrop/numlib/strgidt.c new file mode 100644 index 00000000..89472e3b --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/strgidt.c @@ -0,0 +1,26 @@ +/* +** Copyright 1998 - 2000 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: strgidt.c,v 1.4 2003/01/05 04:01:17 mrsam Exp $"; + +char *libmail_str_gid_t(gid_t t, char *arg) +{ +char buf[NUMBUFSIZE]; +char *p=buf+sizeof(buf)-1; + + *p=0; + do + { + *--p= '0' + (t % 10); + t=t / 10; + } while(t); + return (strcpy(arg, p)); +} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strhdevt.c b/contrib/notmuch-deliver/maildrop/numlib/strhdevt.c new file mode 100644 index 00000000..98e25e53 --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/strhdevt.c @@ -0,0 +1,29 @@ +/* +** Copyright 1998 - 2003 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: strhdevt.c,v 1.2 2003/03/12 02:45:56 mrsam Exp $"; + +static const char xdigit[]="0123456789ABCDEF"; + +char *libmail_strh_dev_t(dev_t t, char *arg) +{ +char buf[sizeof(t)*2+1]; +char *p=buf+sizeof(buf)-1; +unsigned i; + + *p=0; + for (i=0; i + +static const char rcsid[]="$Id: strhinot.c,v 1.5 2003/03/12 02:45:56 mrsam Exp $"; + +static const char xdigit[]="0123456789ABCDEF"; + +char *libmail_strh_ino_t(ino_t t, char *arg) +{ +char buf[sizeof(t)*2+1]; +char *p=buf+sizeof(buf)-1; +unsigned i; + + *p=0; + for (i=0; i + +static const char rcsid[]="$Id: strhpidt.c,v 1.5 2003/03/12 02:45:56 mrsam Exp $"; + +static const char xdigit[]="0123456789ABCDEF"; + +char *libmail_strh_pid_t(pid_t t, char *arg) +{ +char buf[sizeof(t)*2+1]; +char *p=buf+sizeof(buf)-1; +unsigned i; + + *p=0; + for (i=0; i + +static const char rcsid[]="$Id: strhtimet.c,v 1.5 2003/03/12 02:45:56 mrsam Exp $"; + +static const char xdigit[]="0123456789ABCDEF"; + +char *libmail_strh_time_t(time_t t, char *arg) +{ +char buf[sizeof(t)*2+1]; +char *p=buf+sizeof(buf)-1; +unsigned i; + + *p=0; + for (i=0; i + +static const char rcsid[]="$Id: strinot.c,v 1.4 2003/01/05 04:01:17 mrsam Exp $"; + +char *libmail_str_ino_t(ino_t t, char *arg) +{ +char buf[NUMBUFSIZE]; +char *p=buf+sizeof(buf)-1; + + *p=0; + do + { + *--p= '0' + (t % 10); + t=t / 10; + } while(t); + return (strcpy(arg, p)); +} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strofft.c b/contrib/notmuch-deliver/maildrop/numlib/strofft.c new file mode 100644 index 00000000..d93edcbe --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/strofft.c @@ -0,0 +1,37 @@ +/* +** Copyright 1998 - 2002 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: strofft.c,v 1.5 2003/01/05 04:01:17 mrsam Exp $"; + +char *libmail_str_off_t(off_t t, char *arg) +{ + char buf[NUMBUFSIZE]; + char *p=buf+sizeof(buf)-1; + int isneg=0; + + if (t < 0) + { + t= -t; + isneg=1; + } + + *p=0; + do + { + *--p= '0' + (t % 10); + t=t / 10; + } while(t); + + if (isneg) + *--p='-'; + + return (strcpy(arg, p)); +} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strpidt.c b/contrib/notmuch-deliver/maildrop/numlib/strpidt.c new file mode 100644 index 00000000..12ee9ce1 --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/strpidt.c @@ -0,0 +1,26 @@ +/* +** Copyright 1998 - 2000 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: strpidt.c,v 1.4 2003/01/05 04:01:17 mrsam Exp $"; + +char *libmail_str_pid_t(pid_t t, char *arg) +{ +char buf[NUMBUFSIZE]; +char *p=buf+sizeof(buf)-1; + + *p=0; + do + { + *--p= '0' + (t % 10); + t=t / 10; + } while(t); + return (strcpy(arg, p)); +} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strsize.c b/contrib/notmuch-deliver/maildrop/numlib/strsize.c new file mode 100644 index 00000000..0a7dcaa8 --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/strsize.c @@ -0,0 +1,62 @@ +/* +** Copyright 2001 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: strsize.c,v 1.2 2003/01/05 04:01:17 mrsam Exp $"; + +static void cat_n(char *buf, unsigned long n) +{ +char bb[NUMBUFSIZE+1]; +char *p=bb+sizeof(bb)-1; + + *p=0; + do + { + *--p = "0123456789"[n % 10]; + n=n/10; + } while (n); + strcat(buf, p); +} + +char *libmail_str_sizekb(unsigned long n, char *sizebuf) +{ + /* If size is less than 1K bytes, display it as 0.xK */ + + if (n < 1024) + { + strcpy(sizebuf, "0."); + cat_n(sizebuf, (int)(10 * n / 1024 )); + strcat(sizebuf, "K"); + } + /* If size is less than 1 meg, display is as xK */ + + else if (n < 1024 * 1024) + { + *sizebuf=0; + cat_n(sizebuf, (unsigned long)(n+512)/1024); + strcat(sizebuf, "K"); + } + + /* Otherwise, display in megabytes */ + + else + { + unsigned long nm=(double)n / (1024.0 * 1024.0) * 10; + + *sizebuf=0; + cat_n( sizebuf, nm / 10); + strcat(sizebuf, "."); + cat_n( sizebuf, nm % 10); + strcat(sizebuf, "M"); + } + + return (sizebuf); +} + diff --git a/contrib/notmuch-deliver/maildrop/numlib/strsizet.c b/contrib/notmuch-deliver/maildrop/numlib/strsizet.c new file mode 100644 index 00000000..d4ec92d3 --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/strsizet.c @@ -0,0 +1,26 @@ +/* +** Copyright 1998 - 2000 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: strsizet.c,v 1.4 2003/01/05 04:01:18 mrsam Exp $"; + +char *libmail_str_size_t(size_t t, char *arg) +{ +char buf[NUMBUFSIZE]; +char *p=buf+sizeof(buf)-1; + + *p=0; + do + { + *--p= '0' + (t % 10); + t=t / 10; + } while(t); + return (strcpy(arg, p)); +} diff --git a/contrib/notmuch-deliver/maildrop/numlib/strtimet.c b/contrib/notmuch-deliver/maildrop/numlib/strtimet.c new file mode 100644 index 00000000..be7e051b --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/strtimet.c @@ -0,0 +1,26 @@ +/* +** Copyright 1998 - 2000 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: strtimet.c,v 1.4 2003/01/05 04:01:18 mrsam Exp $"; + +char *libmail_str_time_t(time_t t, char *arg) +{ +char buf[NUMBUFSIZE]; +char *p=buf+sizeof(buf)-1; + + *p=0; + do + { + *--p= '0' + (t % 10); + t=t / 10; + } while(t); + return (strcpy(arg, p)); +} diff --git a/contrib/notmuch-deliver/maildrop/numlib/struidt.c b/contrib/notmuch-deliver/maildrop/numlib/struidt.c new file mode 100644 index 00000000..50f3f742 --- /dev/null +++ b/contrib/notmuch-deliver/maildrop/numlib/struidt.c @@ -0,0 +1,26 @@ +/* +** Copyright 1998 - 2000 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "numlib.h" +#include + +static const char rcsid[]="$Id: struidt.c,v 1.4 2003/01/05 04:01:18 mrsam Exp $"; + +char *libmail_str_uid_t(uid_t t, char *arg) +{ +char buf[NUMBUFSIZE]; +char *p=buf+sizeof(buf)-1; + + *p=0; + do + { + *--p= '0' + (t % 10); + t=t / 10; + } while(t); + return (strcpy(arg, p)); +} -- cgit v1.2.3