Tomato 1.28
[tomato.git] / release / src / router / rc / telssh.c
blob8f4e54cbb8fc7e58aa5d19da8be56319013fcf60
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;
19 strcpy(salt, "$1$");
20 f_read("/dev/urandom", s, 6);
21 base64_encode(s, salt + 3, 6);
22 salt[3 + 8] = 0;
23 p = salt;
24 while (*p) {
25 if (*p == '+') *p = '.';
26 ++p;
28 if (((p = nvram_get("http_passwd")) == NULL) || (*p == 0)) p = "admin";
30 m = umask(0777);
31 if ((f = fopen("/etc/shadow", "w")) != NULL) {
32 p = crypt(p, salt);
33 fprintf(f, "root:%s:0:0:99999:7:0:0:\n"
34 "nobody:*:0:0:99999:7:0:0:\n", p);
35 #if TOMATO_SL
36 // todo zzz
37 fprintf(f, "admin:*:0:0:99999:7:0:0:\n");
38 #endif
39 fclose(f);
41 umask(m);
42 chmod("/etc/shadow", 0600);
44 f_write_string("/etc/passwd",
45 "root:x:0:0:root:/root:/bin/sh\n"
46 #if TOMATO_SL
47 // todo zzz
48 "admin:x:100:100:nas:/dev/null:/dev/null\n"
49 #endif
50 "nobody:x:65534:65534:nobody:/dev/null:/dev/null\n",
51 0, 0644);
53 f_write_string("/etc/gshadow",
54 "root:*:0:\n"
55 #if TOMATO_SL
56 "nas:*:100:\n"
57 #endif
58 "nobody:*:65534:\n",
59 0, 0600);
60 f_write_string("/etc/group",
61 "root:x:0:\n"
62 #if TOMATO_SL
63 "nas:x:100:\n"
64 #endif
65 "nobody:x:65534:\n",
66 0, 0644);
69 void start_sshd(void)
71 static const char *hkfn = "/etc/dropbear/dropbear_rsa_host_key";
73 mkdir("/etc/dropbear", 0700);
74 mkdir("/root/.ssh", 0700);
76 f_write_string("/root/.ssh/authorized_keys", nvram_safe_get("sshd_authkeys"), 0, 0700);
78 unlink(hkfn);
80 if (!nvram_get_file("sshd_hostkey", hkfn, 2048)) {
81 eval("dropbearkey", "-t", "rsa", "-f", (char *)hkfn);
82 if (nvram_set_file("sshd_hostkey", hkfn, 2048)) {
83 nvram_commit_x();
87 char *argv[8];
88 int argc;
89 char *p;
91 argv[0] = "dropbear";
92 argv[1] = "-p";
93 argv[2] = nvram_safe_get("sshd_port");
94 argc = 3;
96 if (!nvram_get_int("sshd_pass")) argv[argc++] = "-s";
98 if (((p = nvram_get("sshd_rwb")) != NULL) && (*p)) {
99 argv[argc++] = "-W";
100 argv[argc++] = p;
103 argv[argc] = NULL;
104 _eval(argv, NULL, 0, NULL);
107 void stop_sshd(void)
109 killall("dropbear", SIGTERM);
112 void start_telnetd(void)
114 xstart("telnetd", "-p", nvram_safe_get("telnetd_port"));
117 void stop_telnetd(void)
119 killall("telnetd", SIGTERM);