summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Bokovoy <ab@samba.org>2012-05-18 10:00:58 +0300
committerAlexander Bokovoy <ab@samba.org>2012-05-23 17:51:50 +0300
commit2d9a0d8d0c2587fcfdbab83c0a241830d2fcaafb (patch)
tree1a693f01cc35023e237554ab95313aa9222553f6
parentf32d43763d35fe386bfa1e9f7997b7eb1014b20c (diff)
downloadsamba-2d9a0d8d0c2587fcfdbab83c0a241830d2fcaafb.tar.gz
samba-2d9a0d8d0c2587fcfdbab83c0a241830d2fcaafb.tar.bz2
samba-2d9a0d8d0c2587fcfdbab83c0a241830d2fcaafb.zip
s3-passdb: add unixid_from_uid/unixid_from_gid/unixid_from_both API
struct unixid is defined in idmap.idl and therefore to use it one would need generated headers from librpc/gen_ndr. Not all of these files are installed and available as public headers. Also, they pull in some support headers which requires them to be available via specific locations like <librpc/gen_ndr/*> or <libcli/util>. Instead of pulling the headers to get structure and enum definitions, introduce three simple helpers to fill in 'struct unixid' based on the type of id. This is sufficient for PASSDB users and does not require exposing generated headers or code.
-rw-r--r--source3/include/passdb.h5
-rw-r--r--source3/passdb/pdb_unixid.c47
-rwxr-xr-xsource3/wscript_build3
3 files changed, 54 insertions, 1 deletions
diff --git a/source3/include/passdb.h b/source3/include/passdb.h
index b22d17aa63..ec724bccfa 100644
--- a/source3/include/passdb.h
+++ b/source3/include/passdb.h
@@ -917,4 +917,9 @@ NTSTATUS create_builtin_administrators(const struct dom_sid *sid);
#include "passdb/machine_sid.h"
#include "passdb/lookup_sid.h"
+/* The following definitions come from passdb/pdb_unixid.c */
+void unixid_from_uid(struct unixid *id, uint32_t some_uid);
+void unixid_from_gid(struct unixid *id, uint32_t some_gid);
+void unixid_from_both(struct unixid *id, uint32_t some_id);
+
#endif /* _PASSDB_H */
diff --git a/source3/passdb/pdb_unixid.c b/source3/passdb/pdb_unixid.c
new file mode 100644
index 0000000000..59b157668a
--- /dev/null
+++ b/source3/passdb/pdb_unixid.c
@@ -0,0 +1,47 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * IDMAP unixid utility functions
+ * Copyright (C) Alexander Bokovoy 2012
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "includes.h"
+#include "passdb.h"
+#include "../librpc/gen_ndr/idmap.h"
+
+void unixid_from_uid(struct unixid *id, uint32_t some_uid)
+{
+ if(id) {
+ id->id = some_uid;
+ id->type = ID_TYPE_UID;
+ }
+}
+
+void unixid_from_gid(struct unixid *id, uint32_t some_gid)
+{
+ if(id) {
+ id->id = some_gid;
+ id->type = ID_TYPE_GID;
+ }
+}
+
+void unixid_from_both(struct unixid *id, uint32_t some_id)
+{
+ if(id) {
+ id->id = some_id;
+ id->type = ID_TYPE_BOTH;
+ }
+}
+
diff --git a/source3/wscript_build b/source3/wscript_build
index e517b402fb..69d988958d 100755
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -216,7 +216,8 @@ PASSDB_SRC = '''${PASSDB_GET_SET_SRC} passdb/passdb.c
lib/util_nscd.c lib/winbind_util.c
passdb/pdb_util.c passdb/pdb_interface.c
passdb/pdb_ldap_schema.c
- passdb/pdb_secrets.c'''
+ passdb/pdb_secrets.c
+ passdb/pdb_unixid.c'''
#FIXME: lib/winbind_util.c probably is not part of PASSDB_SRC
GROUPDB_SRC = '''groupdb/mapping.c groupdb/mapping_tdb.c'''