C言語,getpwuid()関数で指定したUIDの情報を取得する

スポンサーリンク

鍛錬 822

C言語,getpwuid()関数で指定したUIDの情報を取得する

パスワードファイル(/etc/passwd)に記載されている情報について、指定したユーザーID(UID)についての情報を取得するには、getpwuid()関数を使用します。
 
以下は、getpwuid()関数についてです。

#include <sys/types.h>
#include <pwd.h>

struct passwd *getpwuid(uid_t uid);
 

引数

以下は、上記の引数についてです。

引数 意味
uid_t uid ユーザID(UID)

構造体

以下は、構造体 passwd についてです。

 
struct passwd {
	char *pw_name;		// ユーザ名
	char *pw_passwd;	// パスワード
	uid_t pw_uid;		// ユーザーID
	gid_t pw_gid;		// グループID
	char *pw_gecos;		// ユーザー情報
	char *pw_dir;		// ホームディレクトリ
	char *pw_shell;		// シェル
};
 

戻り値

以下は、戻り値についてです。

戻り値
struct 存在した場合 構造体 passwd へのポインタ
存在しない場合、またはエラーの場合 NULL
 
スポンサーリンク

プログラム

以下は、指定したユーザーID(UID)に関するパスワードファイル(/etc/passwd)の情報を取得するプログラム、test_getpwuid.c です。

今回は、ユーザーID(UID)「1001」について確認しています。

// include
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <pwd.h>

// main
int main(void)
{
	uid_t user_uid;
	struct passwd *pwd;
	
	// UID
	user_uid = 1001;
	
	// パスワードファイル(/etc/passwd)の情報を取得
	pwd = getpwuid(user_uid);
	if (pwd == NULL) {
		perror("getpwuid");
		exit(EXIT_FAILURE);
	}
	
	printf("pw_name   --> %s\n", pwd->pw_name);
	printf("pw_passwd --> %s\n", pwd->pw_passwd);
	printf("pw_uid    --> %d\n", pwd->pw_uid);
	printf("pw_gid    --> %d\n", pwd->pw_gid);
	printf("pw_gecos  --> %s\n", pwd->pw_gecos);
	printf("pw_dir    --> %s\n", pwd->pw_dir);
	printf("pw_shell  --> %s\n", pwd->pw_shell);
	
	return 0;
}

実行結果

以下は、プログラム test_getpwuid.c を実行しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra test_getpwuid.c -o test_getpwuid
***@ubuntu:~/***/test/c$ ./test_getpwuid
pw_name   --> john
pw_passwd --> x
pw_uid    --> 1001
pw_gid    --> 1001
pw_gecos  --> 
pw_dir    --> /home/john
pw_shell  --> /bin/sh

 
上記に示した通り、指定したユーザーID(UID)「1001」に関するパスワードファイルの情報を取得することができました。

pw_passwd の項目が x となっているのは、以下に示す通り、実際のパスワードは暗号化されて /etc/shadow に記載されており、/etc/passwd には x と記載されているためです。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ cat /etc/passwd | grep john | grep -v grep
john:x:1001:1001::/home/john:/bin/sh
スポンサーリンク

シェアする

フォローする