問題タブ [getpwnam]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - getpwnam は /etc/nsswitch.conf を尊重しますか?
getpwnam は /etc/nsswitch.conf を尊重しますか?
getpwnam
状態のマンページ
getpwnam() 関数は、ユーザー名に一致するパスワード データベース (ローカル パスワード ファイル /etc/passwd、NIS、および LDAP など) 内のレコードの分割フィールドを含む構造体へのポインタを返します。
これにより、/etc/nsswitch.conf を尊重し、その行にリストされているエントリを反復処理する必要があると思われますpasswd
(... しかし、そのように動作しないことを示すバグ レポートがあります)。
編集:それを尊重していることを示す3cのマンページを見つけたので、問題はどのオペレーティングシステムでサポートされているかです
c - 32 ビットでコンパイルされた場合、Ubuntu の getpwnam の動作が異なる
2 台の Ubuntu 64 ビット サーバーで ZABBIX エージェント (C で記述) をセットアップしています。特に64ビットが必要でない限り(データベースサーバーなど)、通常はすべて32ビットでコンパイルします。問題のサーバーは仮想サーバーをホストし、8GBのRAMを搭載するため、64ビットのままにしています。
ZABBIX エージェントが root として起動する場合、C の getpwnam() 関数を使用してルックアップする zabbix ユーザーのアクセス許可レベルにドロップダウンしようとします。
純粋な 32 ビット システムでは、この関数は動作します。ただし、64 ビット システムで 32 ビットでコンパイルされた場合、ユーザーが存在する場合、getpwnam() は NULL を返します。64 ビット システムで 64 ビットでコンパイルすると、問題なく動作します。
これを証明する小さなアプリケーションをモックアップしましたが、GCC や STL のバグというよりも、私のセットアップに問題があることを願っています。zabbix ユーザーは LDAP ディレクトリにいます。
まず、このプログラムの出力は次のとおりです。
以下は、ZABBIX エージェントのソース コードを使用して適応させた小さなプログラムのコードです。
これが私のセットアップの問題であることが判明した場合は、serverfault.com で喜んで質問しますが、getpwnam() 関数を中心にしているため、プログラミングに関連していると思いました。私もグーグルで調べましたが、役に立つものは何も見つかりませんでした。そのため、それが私の設定だと思う傾向があります。
cocoa - uidのリスト/システム環境設定の名前>アカウント
uidと名前の配列を取得するにはどうすればよいですか?
0から99999まで繰り返して、を実行できgetpwnam()
ます。ただし、ほとんどのマシンのアカウントは5つ未満であるため、最適ではありません。どのフレームワークがこれに関与しているのかわからないため、何を検索すればよいかわかりません。
アカウントをトラバースできるより最適なソリューションはありますか?
編集:投稿した直後にgetpwent()
、アカウントをトラバースするために発見しました。
ただし、それはアカウントがシステム環境設定アカウントであるかどうかを示すものではありません。
それでも、システム環境設定のアカウントを取得するにはどうすればよいでしょうか。
編集:私はこれに相当するコマンドライン、コマンドを見つけましたdscl
。
samba - passdb のユーザーですが、getpwnam() が失敗します!
nss_ldap を使用して Samba + OpenLDAP をセットアップしようとしています。
Windows7 を Samba スタンドアロン PDC に参加させた後、ドメイン アカウントも /etc/passwd ファイルに追加しないとログインできません。
私は得ます: passdb のユーザーですが、getpwnam() は失敗します!
私が読んだすべてのものはまだ NSS_LDAP の問題を指摘しています。
さらに、/etc/passwd ファイルをクラックして開き、問題のユーザーの行を追加すると、ログインできます。
私はPAMを使用していません。Samba.org サイトごとに必要な 2 つの Windows7 レジストリ アップデートを追加しました。
ソフトウェア スタックは次のとおりです。 Samba 3.5.3 OpenLDAP 2.4.21 nss_ldap 264
考え/提案?
- - - - - - - - - - - - - - - - - アップデート - - - - - - - - -----------------
近くなってる!私の nsswitch.conf にはファイル ldap があったので、順序を逆にすると (現在は ldap ファイル)、奇妙なことが起こりました。前に、SSH でログインできると言いましたが、getent passwd は LDAP とファイルの両方にユーザーをダンプしました。nsswitch.conf の変更、ファイルの前の ldap を行った後、ls などの単純なコマンドに長い時間がかかりました。さらに、次のような nss_ldap エラーを観察しました。
ls: nss_ldap: LDAP サーバーを検索できませんでした - サーバーが利用できません
と
ls: nss_ldap: LDAP サーバーへのバインドに失敗しました ldap://tsrvr.example.corp: 資格情報が無効です
ldap.conf の rootbinddn 行をコメントアウトすると、これらのエラーはなくなり、getent passwd はすぐに再び機能し始めました。出力の順序も変更されました。ファイル エントリの前に ldap エントリがリストされます。
それでも、私の Windows7 クライアントはドメインにログインせず、同じ Samba エラー メッセージが引き続き表示されます。
passdb でユーザー テストを行うが、getpwnam() が失敗する!
私の smb.conf で、ldapsam:trusted = yes 行を削除しようとしましたが、そうすると、ドメイン認証エラーが発生します。
OpenLDAP で SSL/TLS を使用しておらず、SSL = no 設定を使用しています。ldap.secret ファイル セットもあります。root アカウントで slapd を実行しています。私の rootbinddn は、コメント アウトする前に、uid=root,ou=Users,dc=example,dc=corp の LDAP ルート ユーザーを参照していました。CRYPT を使用する root の userPassword は、bindpw および /etc/shadow のものと一致します。
Samba エラーが発生したときの LDAP ログ アクティビティを見ると、LDAP が Samba クエリに対して正しい結果を返しているように見えます。
6 月 19 日 14:20:14 tsrvr slapd[3803]: conn=1025 op=15 SRCH base="dc=example,dc=corp" scope=2 deref=0 filter="(&(uid=test)(objectClass= sambaSamAccount))" Jun 19 14:20:14 tsrvr slapd[3803]: conn=1025 op=15 SRCH attr=uid uidNumber gidNumber homeDirectory sambaPwdLastSet sambaPwdCanChange sambaPwdMustChange sambaLogonTime sambaLogoffTime sambaKickoffTime cn sn displayName sambaHomeDrive sambaHomePath sambaLogonScript sambaProfilePath description sambaUserWorkstations sambaSID sambaPrimaryGroupSID sambaLMPassword sam baNTPassword sambaDomainName objectClass sambaAcctFlags sambaMungedDial sambaBadPasswordCount sambaBadPasswordTime sambaPasswordHistory modifyTimestamp sambaLogonHours modifyTimestam p uidNumber gidNumber homeDirectory loginShell gecos Jun 19 14:20:14 tsrvr slapd[3803]:conn=1025 op=15 SEARCH RESULT tag=101 err=0 nentries=1 text=
他の提案はありますか?
とても有難い
tcl - Tcl で getpwnam/getpwuid などを実行する方法
tcl には NSS ルックアップ (getpwnam、setpwent など) を行う標準的な方法がありますか?
c - 関数内で getpwnam() が常にルート情報を返すのはなぜですか?
getpwnam()
ユーザー名を呼び出し、そのユーザー名を関数に渡し、再度呼び出す簡単なプログラムを作成しgetpwnam()
ました。何らかの理由で、常に関数内の root の passwd 情報を取得します。
プログラムは常に次の出力を生成します。
これに関連するマニュアルページには何も見つかりません。私が間違っていることはありますか?
前もって感謝します!
perl - Perl getpwnam がサブで失敗する
だから私は getpwnam() を使用して etc/passwd でサブのユーザー名を検索し、存在する場合は true を返そうとしています。「getpwnam で初期化されていない値が使用されています」というエラーが表示され続けます。
私はこのサブにチョップされた文字列を渡しています。私はちょうど使用してみまし@name = getpwnam($_[0])
た@name = getpwnam($_)
私が渡している文字列が /etc/passwd にユーザー名として存在し、コードがサブにない場合に機能することは事実として知っています。