1 /* ========================================================================
2 * Copyright 2008-2010 Mark Crispin
3 * ========================================================================
7 * Program: UNIX environment routines
12 * Last Edited: 15 November 2010
14 * Previous versions of this file were:
16 * Copyright 1988-2006 University of Washington
18 * Licensed under the Apache License, Version 2.0 (the "License");
19 * you may not use this file except in compliance with the License.
20 * You may obtain a copy of the License at
22 * http://www.apache.org/licenses/LICENSE-2.0
27 typedef struct dotlock_base
{
28 char lock
[MAILTMPLEN
];
34 /* Bits that can be set in restrictBox */
36 #define RESTRICTROOT 0x1 /* restricted box doesn't allow root */
37 #define RESTRICTOTHERUSER 0x2 /* restricted box doesn't allow other user */
39 /* Subscription definitions for UNIX */
41 #define SUBSCRIPTIONFILE(t) sprintf (t,"%s/.mailboxlist",myhomedir ())
42 #define SUBSCRIPTIONTEMP(t) sprintf (t,"%s/.mlbxlsttmp",myhomedir ())
47 #define SYSCONFIG "/etc/c-client.cf"
52 #define ANONYMOUSUSER "nobody" /* anonymous user */
53 #define UNLOGGEDUSER "root" /* unlogged-in user */
54 #define ADMINGROUP "mailadm" /* mail administrator group */
56 /* Function prototypes */
60 void rfc822_fixed_date (char *date
);
61 long env_init (char *user
,char *home
);
62 char *myusername_full (unsigned long *flags
);
64 #define MU_NOTLOGGEDIN 1
65 #define MU_ANONYMOUS 2
66 #define myusername() \
68 char *sysinbox (void);
69 char *mailboxdir (char *dst
,char *dir
,char *name
);
70 long dotlock_lock (char *file
,DOTLOCK
*base
,int fd
);
71 long dotlock_unlock (DOTLOCK
*base
);
72 int lockname (char *lock
,char *fname
,int op
,long *pid
);
73 int lockfd (int fd
,char *lock
,int op
);
74 int lock_work (char *lock
,void *sbuf
,int op
,long *pid
);
75 long chk_notsymlink (char *name
,void *sbuf
);
76 void unlockfd (int fd
,char *lock
);
77 long set_mbx_protections (char *mailbox
,char *path
);
78 long get_dir_protection (char *mailbox
);
79 MAILSTREAM
*user_flags (MAILSTREAM
*stream
);
80 char *default_user_flag (unsigned long i
);
81 void dorc (char *file
,long flag
);
82 long path_create (MAILSTREAM
*stream
,char *mailbox
);
83 void grim_pid_reap_status (int pid
,int killreq
,void *status
);
84 #define grim_pid_reap(pid,killreq) \
85 grim_pid_reap_status (pid,killreq,NIL)
86 long safe_write (int fd
,char *buf
,long nbytes
);
87 void *arm_signal (int sig
,void *action
);
88 struct passwd
*checkpw (struct passwd
*pw
,char *pass
,int argc
,char *argv
[]);
89 long loginpw (struct passwd
*pw
,int argc
,char *argv
[]);
90 long pw_login (struct passwd
*pw
,char *auser
,char *user
,char *home
,int argc
,
92 void *mm_blocknotify (int reason
,void *data
);