Programmatically getting UID and GID from username in Unix?
#include <sys/types.h>#include <pwd.h>#include <stdlib.h>#include <unistd.h>#include <stdio.h>int main(){ char *username = ... struct passwd *pwd = calloc(1, sizeof(struct passwd)); if(pwd == NULL) { fprintf(stderr, "Failed to allocate struct passwd for getpwnam_r.\n"); exit(1); } size_t buffer_len = sysconf(_SC_GETPW_R_SIZE_MAX) * sizeof(char); char *buffer = malloc(buffer_len); if(buffer == NULL) { fprintf(stderr, "Failed to allocate buffer for getpwnam_r.\n"); exit(2); } getpwnam_r(username, pwd, buffer, buffer_len, &pwd); if(pwd == NULL) { fprintf(stderr, "getpwnam_r failed to find requested entry.\n"); exit(3); } printf("uid: %d\n", pwd->pw_uid); printf("gid: %d\n", pwd->pw_gid); free(pwd); free(buffer); return 0;}
You want to use the getpw* family of system calls, generally in pwd.h. It's essentially a C-level interface to the information in /etc/passwd.