s/qmail 4.2.29a
Next generation secure email transport
Loading...
Searching...
No Matches
qmail-getpw.c
Go to the documentation of this file.
1#include <sys/types.h>
2#include <sys/stat.h>
3#include <pwd.h>
4#include <unistd.h>
5#include "error.h"
6#include "buffer.h"
7#include "exit.h"
8#include "byte.h"
9#include "str.h"
10#include "case.h"
11#include "fmt.h"
12#include "auto_usera.h"
13#include "auto_break.h"
14#include "qlx.h"
15
16#define GETPW_USERLEN 32
17
18char *local;
19struct passwd *pw;
20char *dash;
22
24{
26 struct stat st;
27
28 extension = local + str_len(local);
29 for (;;) {
30 if (extension - local < sizeof(username))
31 if (!*extension || (*extension == *auto_break)) {
32 byte_copy(username,extension - local,local);
34 case_lowers(username);
35 errno = 0;
36 pw = getpwnam(username);
37 if (errno == ETXTBSY) _exit(QLX_SYS);
38 if (pw)
39 if (pw->pw_uid)
40 if (stat(pw->pw_dir,&st) == 0) {
41 if (st.st_uid == pw->pw_uid) {
42 dash = "";
43 if (*extension) { ++extension; dash = "-"; }
44 return 1;
45 }
46 } else {
47 if (errno) _exit(QLX_NFS);
48 }
49 }
50 if (extension == local) return 0;
51 --extension;
52 }
53}
54
55char num[FMT_ULONG];
56
57int main(int argc,char **argv)
58{
59 local = argv[1];
60 if (!local) _exit(100);
61
62 if (!userext()) {
64 dash = "-";
65 pw = getpwnam(auto_usera);
66 }
67
68 if (!pw) _exit(QLX_NOALIAS);
69
70 buffer_puts(buffer_1small,pw->pw_name);
71 buffer_put(buffer_1small,"",1);
72 buffer_put(buffer_1small,num,fmt_ulong(num,(long) pw->pw_uid));
73 buffer_put(buffer_1small,"",1);
74 buffer_put(buffer_1small,num,fmt_ulong(num,(long) pw->pw_gid));
75 buffer_put(buffer_1small,"",1);
76 buffer_puts(buffer_1small,pw->pw_dir);
77 buffer_put(buffer_1small,"",1);
78 buffer_puts(buffer_1small,dash);
79 buffer_put(buffer_1small,"",1);
80 buffer_puts(buffer_1small,extension);
81 buffer_put(buffer_1small,"",1);
82 buffer_flush(buffer_1small);
83
84 _exit(0);
85}
char auto_break[]
char auto_usera[]
int main()
Definition: chkshsgr.c:6
void _exit()
#define QLX_NFS
Definition: qlx.h:9
#define QLX_SYS
Definition: qlx.h:12
#define QLX_NOALIAS
Definition: qlx.h:10
char * local
Definition: qmail-getpw.c:18
#define GETPW_USERLEN
Definition: qmail-getpw.c:16
char * extension
Definition: qmail-getpw.c:21
struct passwd * pw
Definition: qmail-getpw.c:19
char num[FMT_ULONG]
Definition: qmail-getpw.c:55
int userext()
Definition: qmail-getpw.c:23
char * dash
Definition: qmail-getpw.c:20
stralloc username
Definition: qmail-popup.c:127