diff options
| -rw-r--r-- | source3/Makefile.in | 2 | ||||
| -rw-r--r-- | source3/utils/net.c | 144 | ||||
| -rw-r--r-- | source3/utils/net_groupmap.c | 50 | ||||
| -rw-r--r-- | source3/utils/net_help.c | 30 | ||||
| -rw-r--r-- | source3/utils/net_idmap.c | 156 | 
5 files changed, 203 insertions, 179 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index 02b8cd112f..d82d731549 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -476,7 +476,7 @@ CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) \  NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_ads_cldap.o utils/net_help.o \  	   utils/net_rap.o utils/net_rpc.o utils/net_rpc_samsync.o \  	   utils/net_rpc_join.o utils/net_time.o utils/net_lookup.o \ -	   utils/net_cache.o utils/net_groupmap.o +	   utils/net_cache.o utils/net_groupmap.o utils/net_idmap.o  NET_OBJ = $(NET_OBJ1) $(PARAM_OBJ) $(SECRETS_OBJ) $(LIBSMB_OBJ) \  	  $(RPC_PARSE_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \ diff --git a/source3/utils/net.c b/source3/utils/net.c index 0f43c4aad3..da83886364 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -348,150 +348,6 @@ static int net_file(int argc, const char **argv)  	return net_rap_file(argc, argv);  } -/*********************************************************** - migrated functionality from smbgroupedit - **********************************************************/ -static int net_groupmap(int argc, const char **argv) -{ -	if ( 0 == argc ) -		return net_help_groupmap( argc, argv ); - -	if ( !StrCaseCmp( argv[0], "add" ) ) -		return net_groupmap_add(argc-1, argv+1); -	else if ( !StrCaseCmp( argv[0], "modify" ) ) -		return net_groupmap_modify(argc-1, argv+1); -	else if ( !StrCaseCmp( argv[0], "delete" ) ) -		return net_groupmap_delete(argc-1, argv+1); -	else if ( !StrCaseCmp( argv[0], "list" ) ) -		return net_groupmap_list(argc-1, argv+1); -	 -	return net_help_groupmap( argc, argv ); -} - -/*********************************************************** - Helper function for net_idmap_dump. Dump one entry. - **********************************************************/ -static int net_idmap_dump_one_entry(TDB_CONTEXT *tdb, -				    TDB_DATA key, -				    TDB_DATA data, -				    void *unused) -{ -	if (strcmp(key.dptr, "USER HWM") == 0) { -		printf("USER HWM %d\n", IVAL(data.dptr,0)); -		return 0; -	} - -	if (strcmp(key.dptr, "GROUP HWM") == 0) { -		printf("GROUP HWM %d\n", IVAL(data.dptr,0)); -		return 0; -	} - -	if (strncmp(key.dptr, "S-", 2) != 0) -		return 0; - -	printf("%s %s\n", data.dptr, key.dptr); -	return 0; -} - -/*********************************************************** - Dump the current idmap - **********************************************************/ -static int net_idmap_dump(int argc, const char **argv) -{ -	TDB_CONTEXT *idmap_tdb; - -	if ( argc != 1 ) -		return net_help_idmap( argc, argv ); - -	idmap_tdb = tdb_open_log(argv[0], 0, TDB_DEFAULT, O_RDONLY, 0); - -	if (idmap_tdb == NULL) { -		d_printf("Could not open idmap: %s\n", argv[0]); -		return -1; -	} - -	tdb_traverse(idmap_tdb, net_idmap_dump_one_entry, NULL); - -	tdb_close(idmap_tdb); - -	return 0; -} - -/*********************************************************** - Write entries from stdin to current local idmap - **********************************************************/ -static int net_idmap_restore(int argc, const char **argv) -{ -	if (!idmap_init()) { -		d_printf("Could not init idmap\n"); -		return -1; -	} - -	while (!feof(stdin)) { -		fstring line, sid_string; -		int len; -		unid_t id; -		int type = ID_EMPTY; -		DOM_SID sid; - -		if (fgets(line, sizeof(line)-1, stdin) == NULL) -			break; - -		len = strlen(line); - -		if ( (len > 0) && (line[len-1] == '\n') ) -			line[len-1] = '\0'; - -		if (sscanf(line, "GID %d %s", &id.gid, sid_string) == 2) { -			type = ID_GROUPID; -		} - -		if (sscanf(line, "UID %d %s", &id.uid, sid_string) == 2) { -			type = ID_USERID; -		} - -		if (type == ID_EMPTY) { -			d_printf("ignoring invalid line [%s]\n", line); -			continue; -		} - -		if (!string_to_sid(&sid, sid_string)) { -			d_printf("ignoring invalid sid [%s]\n", sid_string); -			continue; -		} - -		if (!NT_STATUS_IS_OK(idmap_set_mapping(&sid, id, type))) { -			d_printf("Could not set mapping of %s %d to sid %s\n", -				 (type == ID_GROUPID) ? "GID" : "UID", -				 (type == ID_GROUPID) ? id.gid : id.uid, -				 sid_string_static(&sid)); -			continue; -		} -				  -	} - -	idmap_close(); -	return 0; -} - -/*********************************************************** - Look at the current idmap - **********************************************************/ -static int net_idmap(int argc, const char **argv) -{ -	if ( 0 == argc ) -		return net_help_idmap( argc, argv ); - -	if ( !StrCaseCmp( argv[0], "dump" ) ) -		return net_idmap_dump(argc-1, argv+1); - -	if ( !StrCaseCmp( argv[0], "restore" ) ) -		return net_idmap_restore(argc-1, argv+1); - -	return net_help_idmap( argc, argv ); -} - -  /*   Retrieve our local SID or the SID for the specified name   */ diff --git a/source3/utils/net_groupmap.c b/source3/utils/net_groupmap.c index fd6e4aef59..c9c37a68c2 100644 --- a/source3/utils/net_groupmap.c +++ b/source3/utils/net_groupmap.c @@ -106,7 +106,7 @@ static void print_map_entry ( GROUP_MAP map, BOOL long_list )  /*********************************************************   List the groups.  **********************************************************/ -int net_groupmap_list(int argc, const char **argv) +static int net_groupmap_list(int argc, const char **argv)  {  	int entries;  	BOOL long_list = False; @@ -177,7 +177,7 @@ int net_groupmap_list(int argc, const char **argv)   Add a new group mapping entry  **********************************************************/ -int net_groupmap_add(int argc, const char **argv) +static int net_groupmap_add(int argc, const char **argv)  {  	DOM_SID sid;  	fstring ntgroup = ""; @@ -283,7 +283,7 @@ int net_groupmap_add(int argc, const char **argv)  	return 0;  } -int net_groupmap_modify(int argc, const char **argv) +static int net_groupmap_modify(int argc, const char **argv)  {  	DOM_SID sid;  	GROUP_MAP map; @@ -412,7 +412,7 @@ int net_groupmap_modify(int argc, const char **argv)  	return 0;  } -int net_groupmap_delete(int argc, const char **argv) +static int net_groupmap_delete(int argc, const char **argv)  {  	DOM_SID sid;  	fstring ntgroup = ""; @@ -466,3 +466,45 @@ int net_groupmap_delete(int argc, const char **argv)  	return 0;  } +int net_help_groupmap(int argc, const char **argv) +{ +	d_printf("net groupmap add"\ +		"\n  Create a new group mapping\n"); +	d_printf("net groupmap modify"\ +		"\n  Update a group mapping\n"); +	d_printf("net groupmap delete"\ +		"\n  Remove a group mapping\n"); +	d_printf("net groupmap list"\ +		"\n  List current group map\n"); +	 +	return -1; +} + + +/*********************************************************** + migrated functionality from smbgroupedit + **********************************************************/ +int net_groupmap(int argc, const char **argv) +{ +	/* we shouldn't have silly checks like this */ +	if (getuid() != 0) { +		d_printf("You must be root to edit group mappings.\nExiting...\n"); +		return -1; +	} +	 +	struct functable func[] = { +		{"add", net_groupmap_add}, +		{"modify", net_groupmap_modify}, +		{"delete", net_groupmap_delete}, +		{"list", net_groupmap_list}, +		{"help", net_help_groupmap}, +		{NULL, NULL} +	}; + +	return net_run_function(argc, argv, func, net_help_groupmap); +	if ( 0 == argc ) +		return net_help_groupmap( argc, argv ); + +	return net_help_groupmap( argc, argv ); +} + diff --git a/source3/utils/net_help.c b/source3/utils/net_help.c index 941baf3378..1f3afb1690 100644 --- a/source3/utils/net_help.c +++ b/source3/utils/net_help.c @@ -99,36 +99,6 @@ int net_help_group(int argc, const char **argv)  	return -1;  } -int net_help_groupmap(int argc, const char **argv) -{ -	if (getuid() != 0) { -		d_printf("You must be root to edit group mappings.\nExiting...\n"); -		return -1; -	} -	 -	d_printf("net groupmap add"\ -		"\n  Create a new group mapping\n"); -	d_printf("net groupmap modify"\ -		"\n  Update a group mapping\n"); -	d_printf("net groupmap delete"\ -		"\n  Remove a group mapping\n"); -	d_printf("net groupmap list"\ -		"\n  List current group map\n"); -	 -	return -1; -} - -int net_help_idmap(int argc, const char **argv) -{ -	d_printf("net idmap dump filename"\ -		 "\n  Dump current id mapping\n"); - -	d_printf("net idmap restore"\ -		 "\n  Restore entries from stdin to current local idmap\n"); - -	return -1; -} -  int net_help_join(int argc, const char **argv)  {  	d_printf("\nnet [<method>] join [misc. options]\n" diff --git a/source3/utils/net_idmap.c b/source3/utils/net_idmap.c new file mode 100644 index 0000000000..0fea4311ec --- /dev/null +++ b/source3/utils/net_idmap.c @@ -0,0 +1,156 @@ +/*  +   Samba Unix/Linux SMB client library  +   Distributed SMB/CIFS Server Management Utility  +   Copyright (C) 2003 Andrew Bartlett (abartlet@samba.org) + +   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 2 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, write to the Free Software +   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */ + +#include "includes.h" +#include "../utils/net.h" + + +/*********************************************************** + Helper function for net_idmap_dump. Dump one entry. + **********************************************************/ +static int net_idmap_dump_one_entry(TDB_CONTEXT *tdb, +				    TDB_DATA key, +				    TDB_DATA data, +				    void *unused) +{ +	if (strcmp(key.dptr, "USER HWM") == 0) { +		printf("USER HWM %d\n", IVAL(data.dptr,0)); +		return 0; +	} + +	if (strcmp(key.dptr, "GROUP HWM") == 0) { +		printf("GROUP HWM %d\n", IVAL(data.dptr,0)); +		return 0; +	} + +	if (strncmp(key.dptr, "S-", 2) != 0) +		return 0; + +	printf("%s %s\n", data.dptr, key.dptr); +	return 0; +} + +/*********************************************************** + Dump the current idmap + **********************************************************/ +static int net_idmap_dump(int argc, const char **argv) +{ +	TDB_CONTEXT *idmap_tdb; + +	if ( argc != 1 ) +		return net_help_idmap( argc, argv ); + +	idmap_tdb = tdb_open_log(argv[0], 0, TDB_DEFAULT, O_RDONLY, 0); + +	if (idmap_tdb == NULL) { +		d_printf("Could not open idmap: %s\n", argv[0]); +		return -1; +	} + +	tdb_traverse(idmap_tdb, net_idmap_dump_one_entry, NULL); + +	tdb_close(idmap_tdb); + +	return 0; +} + +/*********************************************************** + Write entries from stdin to current local idmap + **********************************************************/ +static int net_idmap_restore(int argc, const char **argv) +{ +	if (!idmap_init()) { +		d_printf("Could not init idmap\n"); +		return -1; +	} + +	while (!feof(stdin)) { +		fstring line, sid_string; +		int len; +		unid_t id; +		int type = ID_EMPTY; +		DOM_SID sid; + +		if (fgets(line, sizeof(line)-1, stdin) == NULL) +			break; + +		len = strlen(line); + +		if ( (len > 0) && (line[len-1] == '\n') ) +			line[len-1] = '\0'; + +		if (sscanf(line, "GID %d %s", &id.gid, sid_string) == 2) { +			type = ID_GROUPID; +		} + +		if (sscanf(line, "UID %d %s", &id.uid, sid_string) == 2) { +			type = ID_USERID; +		} + +		if (type == ID_EMPTY) { +			d_printf("ignoring invalid line [%s]\n", line); +			continue; +		} + +		if (!string_to_sid(&sid, sid_string)) { +			d_printf("ignoring invalid sid [%s]\n", sid_string); +			continue; +		} + +		if (!NT_STATUS_IS_OK(idmap_set_mapping(&sid, id, type))) { +			d_printf("Could not set mapping of %s %d to sid %s\n", +				 (type == ID_GROUPID) ? "GID" : "UID", +				 (type == ID_GROUPID) ? id.gid : id.uid, +				 sid_string_static(&sid)); +			continue; +		} +				  +	} + +	idmap_close(); +	return 0; +} + +int net_help_idmap(int argc, const char **argv) +{ +	d_printf("net idmap dump filename"\ +		 "\n  Dump current id mapping\n"); + +	d_printf("net idmap restore"\ +		 "\n  Restore entries from stdin to current local idmap\n"); + +	return -1; +} + +/*********************************************************** + Look at the current idmap + **********************************************************/ +int net_idmap(int argc, const char **argv) +{ +	struct functable func[] = { +		{"dump", net_idmap_dump}, +		{"restore", net_idmap_restore}, +		{"help", net_help_idmap}, +		{NULL, NULL} +	}; + +	return net_run_function(argc, argv, func, net_help_idmap); +} + +  | 
