Merge branch 'tomato-ND-usbmod-mixvpn' into tomato-ND-USBmod
[tomato.git] / release / src / router / rc / telssh.c
blob9ece95f731b5dc6ca2b81f1f8d7537a5f2155ab3
1 /*
3 Tomato Firmware
4 Copyright (C) 2006-2009 Jonathan Zarate
6 */
8 #include "rc.h"
11 void create_passwd(void)
13 char s[512];
14 char *p;
15 char salt[32];
16 FILE *f;
17 mode_t m;
18 #ifdef TCONFIG_SAMBASRV //!!TB
19 char *smbd_user;
20 #endif
22 strcpy(salt, "$1$");
23 f_read("/dev/urandom", s, 6);
24 base64_encode(s, salt + 3, 6);
25 salt[3 + 8] = 0;
26 p = salt;
27 while (*p) {
28 if (*p == '+') *p = '.';
29 ++p;
31 if (((p = nvram_get("http_passwd")) == NULL) || (*p == 0)) p = "admin";
33 #ifdef TCONFIG_SAMBASRV //!!TB
34 if (((smbd_user = nvram_get("smbd_user")) == NULL) || (*smbd_user == 0) || !strcmp(smbd_user, "root"))
35 smbd_user = "nas";
36 #endif
38 m = umask(0777);
39 if ((f = fopen("/etc/shadow", "w")) != NULL) {
40 p = crypt(p, salt);
41 fprintf(f, "root:%s:0:0:99999:7:0:0:\n"
42 "nobody:*:0:0:99999:7:0:0:\n", p);
43 #if TOMATO_SL
44 // todo zzz
45 fprintf(f, "admin:*:0:0:99999:7:0:0:\n");
46 #endif
47 #ifdef TCONFIG_SAMBASRV //!!TB
48 fprintf(f, "%s:*:0:0:99999:7:0:0:\n", smbd_user);
49 #endif
51 fclose(f);
53 umask(m);
54 chmod("/etc/shadow", 0600);
56 #ifdef TCONFIG_SAMBASRV //!!TB
57 sprintf(s,
58 "root:x:0:0:root:/root:/bin/sh\n"
59 "%s:x:100:100:nas:/dev/null:/dev/null\n"
60 "nobody:x:65534:65534:nobody:/dev/null:/dev/null\n",
61 smbd_user);
62 f_write_string("/etc/passwd", s, 0, 0644);
63 #else //!!TB
64 f_write_string("/etc/passwd",
65 "root:x:0:0:root:/root:/bin/sh\n"
66 #if TOMATO_SL
67 // todo zzz
68 "admin:x:100:100:nas:/dev/null:/dev/null\n"
69 #endif
70 "nobody:x:65534:65534:nobody:/dev/null:/dev/null\n",
71 0, 0644);
72 #endif //!!TB
74 f_write_string("/etc/gshadow",
75 "root:*:0:\n"
76 //#if TOMATO_SL
77 #ifdef TCONFIG_SAMBASRV //!!TB
78 "nas:*:100:\n"
79 #endif
80 "nobody:*:65534:\n",
81 0, 0600);
82 f_write_string("/etc/group",
83 "root:x:0:\n"
84 //#if TOMATO_SL
85 #ifdef TCONFIG_SAMBASRV //!!TB
86 "nas:x:100:\n"
87 #endif
88 "nobody:x:65534:\n",
89 0, 0644);
92 static inline int check_host_key(const char *ktype, const char *nvname, const char *hkfn)
94 unlink(hkfn);
96 if (!nvram_get_file(nvname, hkfn, 2048)) {
97 eval("dropbearkey", "-t", (char *)ktype, "-f", (char *)hkfn);
98 if (nvram_set_file(nvname, hkfn, 2048)) {
99 return 1;
103 return 0;
106 void start_sshd(void)
108 mkdir("/etc/dropbear", 0700);
109 mkdir("/root/.ssh", 0700);
111 f_write_string("/root/.ssh/authorized_keys", nvram_safe_get("sshd_authkeys"), 0, 0700);
113 if (check_host_key("rsa", "sshd_hostkey", "/etc/dropbear/dropbear_rsa_host_key") ||
114 check_host_key("dss", "sshd_dsskey", "/etc/dropbear/dropbear_dss_host_key"))
115 nvram_commit_x();
118 xstart("dropbear", "-a", "-p", nvram_safe_get("sshd_port"), nvram_get_int("sshd_pass") ? "" : "-s");
121 char *argv[9];
122 int argc;
123 char *p;
125 argv[0] = "dropbear";
126 argv[1] = "-p";
127 argv[2] = nvram_safe_get("sshd_port");
128 argc = 3;
130 if (!nvram_get_int("sshd_pass")) argv[argc++] = "-s";
132 if (nvram_get_int("sshd_forwarding")) argv[argc++] = "-a";
134 if (((p = nvram_get("sshd_rwb")) != NULL) && (*p)) {
135 argv[argc++] = "-W";
136 argv[argc++] = p;
139 argv[argc] = NULL;
140 _eval(argv, NULL, 0, NULL);
143 void stop_sshd(void)
145 killall("dropbear", SIGTERM);
148 void start_telnetd(void)
150 xstart("telnetd", "-p", nvram_safe_get("telnetd_port"));
153 void stop_telnetd(void)
155 killall("telnetd", SIGTERM);