void recreate_passwd_unix(int force_create) { FILE *fp1, *fp2; int i, uid, sh_num; char tmp[32], *rootnm, *usernm; rootnm = nvram_safe_get("http_username"); if (strlen(rootnm) < 1) rootnm = SYS_USER_ROOT; fp1 = fopen("/etc/passwd", "w"); fp2 = fopen("/etc/group", "w"); if (fp1 && fp2) { fprintf(fp1, "%s:x:%d:%d::%s:%s\n", rootnm, 0, 0, SYS_HOME_PATH_ROOT, SYS_SHELL); fprintf(fp1, "%s:x:%d:%d::%s:%s\n", SYS_USER_NOBODY, 99, 99, "/media", "/bin/false"); fprintf(fp1, "%s:x:%d:%d::%s:%s\n", "sshd", 100, 99, "/var/empty", "/bin/false"); fprintf(fp2, "%s:x:%d:%s\n", SYS_GROUP_ROOT, 0, rootnm); fprintf(fp2, "%s:x:%d:\n", SYS_GROUP_NOGROUP, 99); uid = 1000; sh_num = nvram_safe_get_int("acc_num", 0, 0, 100); for (i=0; i<sh_num; i++) { snprintf(tmp, sizeof(tmp), "acc_username%d", i); usernm = nvram_safe_get(tmp); if (*usernm && strcmp(usernm, "root") && strcmp(usernm, rootnm) && strcmp(usernm, SYS_USER_NOBODY) && strcmp(usernm, "sshd")) { fprintf(fp1, "%s:x:%d:%d:::\n", usernm, uid, uid); fprintf(fp2, "%s:x:%d:\n", usernm, uid); uid++; } } } if (fp1) fclose(fp1); if (fp2) fclose(fp2); chmod("/etc/passwd", 0644); chmod("/etc/group", 0644); if (force_create) { fp1 = fopen("/etc/shadow", "w"); if (fp1) { fprintf(fp1, "%s:%s:%d:0:99999:7:::\n", rootnm, "", 16000); fprintf(fp1, "%s:%s:%d:0:99999:7:::\n", SYS_USER_NOBODY, "*", 16000); fprintf(fp1, "%s:%s:%d:0:99999:7:::\n", "sshd", "*", 16000); fclose(fp1); } chmod("/etc/shadow", 0640); change_passwd_unix(rootnm, nvram_safe_get("http_passwd")); } }
void recreate_passwd_unix(int force_create) { FILE *fp1, *fp2; int i, uid, sh_num; char tmpusernm[32]; char *rootnm, *usernm; rootnm = nvram_safe_get("http_username"); if (!*rootnm) rootnm = "admin"; fp1 = fopen("/etc/passwd", "w"); fp2 = fopen("/etc/group", "w"); if (fp1 && fp2) { fprintf(fp1, "%s:x:%d:%d::%s:%s\n", rootnm, 0, 0, "/home/admin", "/bin/sh"); fprintf(fp1, "%s:x:%d:%d::%s:%s\n", "nobody", 99, 99, "/media", "/bin/false"); fprintf(fp2, "%s:x:%d:%s\n", rootnm, 0, rootnm); fprintf(fp2, "%s:x:%d:\n", "nogroup", 99); sh_num = nvram_get_int("acc_num"); if (sh_num > 100) sh_num = 100; memset(tmpusernm, 0, sizeof(tmpusernm)); uid=1000; for (i=0; i<sh_num; i++) { sprintf(tmpusernm, "acc_username%d", i); usernm = nvram_safe_get(tmpusernm); if (*usernm && strcmp(usernm, "root") && strcmp(usernm, "nobody") && strcmp(usernm, rootnm)) { fprintf(fp1, "%s:x:%d:%d:::\n", usernm, uid, uid); fprintf(fp2, "%s:x:%d:\n", usernm, uid); uid++; } } } if (fp1) fclose(fp1); if (fp2) fclose(fp2); chmod("/etc/passwd", 0644); chmod("/etc/group", 0644); if (force_create) { fp1 = fopen("/etc/shadow", "w"); if (fp1) { fprintf(fp1, "%s:%s:%d:0:99999:7:::\n", rootnm, "", 16000); fprintf(fp1, "%s:%s:%d:0:99999:7:::\n", "nobody", "*", 16000); fclose(fp1); } chmod("/etc/shadow", 0640); change_passwd_unix(rootnm, nvram_safe_get("http_passwd")); } }