#include "filesrvmng.h" int add_smbuser(char *SmbuserName, char *UserName) { // add user to smbpasswd if(fork_execl_log(SMBPASSWD_CMD, SMBPASSWD_CMD, "-a", "-n", UserName, NULL) != OK) { messlog2(NO_EXIT, NO_MESS, "Error during execute '%s -a -n %s'", SMBPASSWD_CMD, UserName); return ERR; } // add user to smbusers if (strcmp(SmbuserName, UserName)) { char *buff; buff = asprintf_safe("%s = %s", UserName, SmbuserName); if (file_str(SMBUSERS, buff, REMOVE, END)) messlog2(NO_EXIT, NO_MESS, "Unable to remove record for '%s' from '%s' file", UserName, SMBUSERS); if (file_str(SMBUSERS, buff, ADD, END)) { messlog2(NO_EXIT, NO_MESS, "Unable to add record for '%s' to '%s' file", UserName, SMBUSERS); return ERR; } free(buff); } return OK; } int set_smbuser_password(char *SmbuserName, char *UserName) { char *Password; char buff[N]; FILE *smbpasswd_in = NULL; Password = get_noncrypted_password(); snprintf(buff, sizeof(buff), "%s -s '%s'", SMBPASSWD_CMD, UserName); if (!(smbpasswd_in = popen(buff, "w"))) { messlog2(NO_EXIT, NO_MESS, "Error during execute '%s -s %s'", SMBPASSWD_CMD, UserName); return ERR; } fprintf(smbpasswd_in, "%s\n%s\n", Password, Password); if (pclose(smbpasswd_in) == -1) { messlog2(NO_EXIT, NO_MESS, "Error during pclose '%s -s %s'", SMBPASSWD_CMD, UserName); return ERR; } return OK; } int rename_smbuser(char *OldSmbuserName, char *NewSmbuserName, char *UserName) { char *buff; // remove user from smbusers buff = asprintf_safe("%s = %s", UserName, OldSmbuserName); if (file_str(SMBUSERS, buff, REMOVE, END)) messlog2(NO_EXIT, NO_MESS, "Unable to remove record for '%s' from '%s' file", UserName, SMBUSERS); free(buff); // add user to smbusers if (strcmp(NewSmbuserName, UserName)) { buff = asprintf_safe("%s = %s", UserName, NewSmbuserName); if (file_str(SMBUSERS, buff, REMOVE, END)) messlog2(NO_EXIT, NO_MESS, "Unable to remove record for '%s' from '%s' file", UserName, SMBUSERS); if (file_str(SMBUSERS, buff, ADD, END)) { messlog2(NO_EXIT, NO_MESS, "Unable to add record for '%s' to '%s' file", UserName, SMBUSERS); return ERR; } free(buff); } return OK; } int del_smbuser(char *SmbuserName, char *UserName) { if(fork_execl_log(SMBPASSWD_CMD, SMBPASSWD_CMD, "-x", UserName, NULL) != OK) { messlog2(NO_EXIT, NO_MESS, "Error during execute '%s -x %s'", SMBPASSWD_CMD, UserName); return ERR; } // remove user from smbusers if (strcmp(SmbuserName, UserName)) { char *buff; buff = asprintf_safe("%s = %s", UserName, SmbuserName); if (file_str(SMBUSERS, buff, REMOVE, END)) messlog2(NO_EXIT, NO_MESS, "Unable to remove record for '%s' from '%s' file", UserName, SMBUSERS); free(buff); } return OK; }