1 #include <sys/types.h>
2 #include <unistd.h>
3 #include "matrixSsl.h"
4 #include "uidgid.h"
5 #include "prot.h"
6 #include "error.h"
7 #include "strerr.h"
8 #include "fd.h"
9 #include "pathexec.h"
10 #include "stralloc.h"
11 #include "byte.h"
12 #include "taia.h"
13 #include "iopause.h"
14 #include "ndelay.h"
15 #include "fmt.h"
16 #include "scan.h"
17 #include "sgetopt.h"
18 #include "env.h"
19 #include "sig.h"
20 #include "sslerror_str.h"
21 #include "ssl_io.h"
22
23 #define USAGEROOT " -u user [-U user] [-/ root] [-C cert] [-K key] [-A ca] [-vc] prog"
24 #define USAGE " [-C cert] [-K key] [-A ca] [-cv] prog"
25 #define VERSION "$Id: c08b30d00b9743c5bd24fa59a281a90dd4c742c4 $"
26
27 const char *progname;
28 unsigned int verbose =0;
29
usage()30 void usage() {
31 if (getuid() == 0) strerr_die4x(111, "usage: ", progname, USAGEROOT, "\n");
32 strerr_die4x(111, "usage: ", progname, USAGE, "\n");
33 }
34
main(int argc,const char ** argv)35 int main(int argc, const char **argv) {
36 int opt;
37
38 progname =*argv;
39 pid =getpid();
40 id[fmt_ulong(id, pid)] =0;
41
42 while ((opt =getopt(argc, argv, "u:U:/:C:K:A:cvV")) != opteof) {
43 switch(opt) {
44 case 'u': ssluser =(char*)optarg; break;
45 case 'U': svuser =(char*)optarg; break;
46 case '/': root =(char*)optarg; break;
47 case 'C': cert =(char*)optarg; break;
48 case 'K': key =(char*)optarg; break;
49 case 'c': client =1; break;
50 case 'A': ca =(char*)optarg; break;
51 case 'v': ++verbose; break;
52 case 'V': strerr_warn1(VERSION, 0);
53 case '?': usage();
54 }
55 }
56 argv +=optind;
57 if (! argv || ! *argv) usage();
58
59 if (getuid() == 0) { if (! ssluser) usage(); }
60 else { if (root || ssluser || svuser) usage(); }
61
62 if (! client) {
63 if (! cert) cert ="./cert.pem";
64 if (! key) key =cert;
65 }
66 if (ssluser) if (! uidgids_get(&sslugid, ssluser)) {
67 if (errno)
68 strerr_die3sys(111, "sslio[", id, "]: fatal: unable to get user/group: ");
69 strerr_die4x(100, "sslio[", id, "]: fatal: unknown user/group: ", ssluser);
70 }
71 if (svuser) if (! uidgids_get(&ugid, svuser)) {
72 if (errno)
73 strerr_die3sys(111, "sslio[", id, "]: fatal: unable to get user/group: ");
74 strerr_die4x(100, "sslio[", id, "]: fatal: unknown user/group: ", svuser);
75 }
76
77 return(ssl_io(1, argv));
78 }
79