5 ** Copyright 1998 - 2010 Double Precision, Inc.
6 ** See COPYING for distribution information.
15 #include "../numlib/config.h" /* VPATH build */
22 #include <sys/types.h>
27 /* Convert various system types to decimal */
29 char *libmail_str_time_t(time_t, char *);
30 char *libmail_str_off_t(off_t, char *);
31 char *libmail_str_int64_t(int64_t, char *);
32 char *libmail_str_pid_t(pid_t, char *);
33 char *libmail_str_dev_t(dev_t, char *);
34 char *libmail_str_ino_t(ino_t, char *);
35 char *libmail_str_uid_t(uid_t, char *);
36 char *libmail_str_gid_t(gid_t, char *);
37 char *libmail_str_size_t(size_t, char *);
39 char *libmail_str_sizekb(unsigned long, char *); /* X Kb or X Mb */
41 /* Convert selected system types to hex */
43 char *libmail_strh_time_t(time_t, char *);
44 char *libmail_strh_pid_t(pid_t, char *);
45 char *libmail_strh_ino_t(ino_t, char *);
46 char *libmail_strh_dev_t(dev_t, char *);
48 /* And, now let's do the reverse */
50 time_t libmail_strtotime_t(const char **);
51 time_t libmail_atotime_t(const char *);
53 uid_t libmail_strtouid_t(const char **);
54 uid_t libmail_atouid_t(const char *);
56 gid_t libmail_strtogid_t(const char **);
57 gid_t libmail_atogid_t(const char *);
61 #define LIBMAIL_STRIMPL(type, f1, f2) \
63 type f1(const char **p)\
66 while ( **p >= '0' && **p <= '9') n=n*10 + (char)(*(*p)++ - '0');\
70 type f2(const char *p)\
77 ** The following functions are used by root to reset its user and group id
78 ** to the authenticated user's. Various functions are provided to handle
79 ** various situations.
82 void libmail_changegroup(gid_t); /* Set the group id only. Also clear any
83 ** auxiliary group ids */
85 void libmail_changeuidgid(uid_t, gid_t);
86 /* Set both user id and group id. Also clear
89 void libmail_changeusername(const char *, const gid_t *);
91 ** Set the userid to the indicate user's. If second argument is
92 ** not null, it points to the groupid to set. If it's null, the
93 ** group id is taken from the passwd file. Auxiliary IDs are set
94 ** to any aux IDs set for the user in the group file. If there are
95 ** no aux group IDs for the user, any AUX ids are cleared.