ソースを参照

- user2uid and group2gid made available to modules

Jan Janak 20 年 前
コミット
2ac451f2ae
2 ファイル変更92 行追加0 行削除
  1. 84 0
      ut.c
  2. 8 0
      ut.h

+ 84 - 0
ut.c

@@ -0,0 +1,84 @@
+/*
+ *$Id$
+ *
+ * various general purpose functions
+ *
+ * Copyright (C) 2001-2003 FhG Fokus
+ *
+ * This file is part of ser, a free SIP server.
+ *
+ * ser is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version
+ *
+ * For a license to use the ser software under conditions
+ * other than those described here, or to purchase support for this
+ * software, please contact iptel.org by e-mail at the following addresses:
+ *    [email protected]
+ *
+ * ser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License 
+ * along with this program; if not, write to the Free Software 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#include <sys/types.h>
+#include <pwd.h>
+#include <grp.h>
+#include <stdlib.h>
+#include "ut.h"
+
+/* converts a username into uid:gid,
+ * returns -1 on error & 0 on success */
+int user2uid(int* uid, int* gid, char* user)
+{
+	char* tmp;
+	struct passwd *pw_entry;
+	
+	if (user){
+		*uid=strtol(user, &tmp, 10);
+		if ((tmp==0) ||(*tmp)){
+			/* maybe it's a string */
+			pw_entry=getpwnam(user);
+			if (pw_entry==0){
+				goto error;
+			}
+			*uid=pw_entry->pw_uid;
+			if (gid) *gid=pw_entry->pw_gid;
+		}
+		return 0;
+	}
+error:
+	return -1;
+}
+
+
+
+/* converts a group name into a gid
+ * returns -1 on error, 0 on success */
+int group2gid(int* gid, char* group)
+{
+	char* tmp;
+	struct group  *gr_entry;
+	
+	if (group){
+		*gid=strtol(group, &tmp, 10);
+		if ((tmp==0) ||(*tmp)){
+			/* maybe it's a string */
+			gr_entry=getgrnam(group);
+			if (gr_entry==0){
+				goto error;
+			}
+			*gid=gr_entry->gr_gid;
+		}
+		return 0;
+	}
+error:
+	return -1;
+}

+ 8 - 0
ut.h

@@ -419,4 +419,12 @@ static inline int str2int(str* _s, unsigned int* _r)
 	return 0;
 }
 
+/* converts a username into uid:gid,
+ * returns -1 on error & 0 on success */
+int user2uid(int* uid, int* gid, char* user);
+
+/* converts a group name into a gid
+ * returns -1 on error, 0 on success */
+int group2gid(int* gid, char* group);
+
 #endif