summaryrefslogtreecommitdiff
path: root/source3/utils/net_ads.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2001-11-25 01:31:07 +0000
committerAndrew Tridgell <tridge@samba.org>2001-11-25 01:31:07 +0000
commitcb697dd72a51daa14f174fae4fede2b86e7a7fd2 (patch)
treeeabbb7d47cc28bc4b3562904101022e26d871d4e /source3/utils/net_ads.c
parent3906f9dff6f83e0075ae3d08709a35a629e97fa7 (diff)
downloadsamba-cb697dd72a51daa14f174fae4fede2b86e7a7fd2.tar.gz
samba-cb697dd72a51daa14f174fae4fede2b86e7a7fd2.tar.bz2
samba-cb697dd72a51daa14f174fae4fede2b86e7a7fd2.zip
added "net ads user" and "net ads group" commands
(This used to be commit f482583139eedb75a23c7a720dca4e8fb7070fd5)
Diffstat (limited to 'source3/utils/net_ads.c')
-rw-r--r--source3/utils/net_ads.c85
1 files changed, 66 insertions, 19 deletions
diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c
index d7b508bf89..87db4ada34 100644
--- a/source3/utils/net_ads.c
+++ b/source3/utils/net_ads.c
@@ -76,22 +76,79 @@ int net_ads_usage(void)
return -1;
}
+
-static int net_ads_status(int argc, const char **argv)
+static ADS_STRUCT *ads_startup(void)
{
ADS_STRUCT *ads;
int rc;
- extern pstring global_myname;
- void *res;
-
ads = ads_init(NULL, NULL, NULL);
rc = ads_connect(ads);
if (rc) {
d_printf("ads_connect: %s\n", ads_errstr(rc));
+ return NULL;
+ }
+ return ads;
+}
+
+
+
+static int net_ads_user(int argc, const char **argv)
+{
+ ADS_STRUCT *ads;
+ int rc;
+ void *res;
+ const char *attrs[] = {"sAMAccountName", "name", "objectSid", NULL};
+
+ if (!(ads = ads_startup())) return -1;
+ rc = ads_search(ads, &res, "(objectclass=user)", attrs);
+ if (rc) {
+ d_printf("ads_search: %s\n", ads_errstr(rc));
+ return -1;
+ }
+
+ if (ads_count_replies(ads, res) == 0) {
+ d_printf("No users found\n");
+ return -1;
+ }
+
+ ads_dump(ads, res);
+ return 0;
+}
+
+static int net_ads_group(int argc, const char **argv)
+{
+ ADS_STRUCT *ads;
+ int rc;
+ void *res;
+ const char *attrs[] = {"sAMAccountName", "name", "objectSid", NULL};
+
+ if (!(ads = ads_startup())) return -1;
+ rc = ads_search(ads, &res, "(objectclass=group)", attrs);
+ if (rc) {
+ d_printf("ads_search: %s\n", ads_errstr(rc));
+ return -1;
+ }
+
+ if (ads_count_replies(ads, res) == 0) {
+ d_printf("No groups found\n");
return -1;
}
+ ads_dump(ads, res);
+ return 0;
+}
+
+static int net_ads_status(int argc, const char **argv)
+{
+ ADS_STRUCT *ads;
+ int rc;
+ extern pstring global_myname;
+ void *res;
+
+ if (!(ads = ads_startup())) return -1;
+
rc = ads_find_machine_acct(ads, &res, global_myname);
if (rc) {
d_printf("ads_find_machine_acct: %s\n", ads_errstr(rc));
@@ -114,19 +171,13 @@ static int net_ads_leave(int argc, const char **argv)
int rc;
extern pstring global_myname;
+ if (!(ads = ads_startup())) return -1;
+
if (!secrets_init()) {
DEBUG(1,("Failed to initialise secrets database\n"));
return -1;
}
- ads = ads_init(NULL, NULL, NULL);
-
- rc = ads_connect(ads);
- if (rc) {
- d_printf("ads_connect: %s\n", ads_errstr(rc));
- return -1;
- }
-
rc = ads_leave_realm(ads, global_myname);
if (rc) {
d_printf("Failed to delete host '%s' from the '%s' realm.\n",
@@ -154,13 +205,7 @@ static int net_ads_join(int argc, const char **argv)
password = generate_random_password(15);
- ads = ads_init(NULL, NULL, NULL);
-
- rc = ads_connect(ads);
- if (rc) {
- d_printf("ads_connect: %s\n", ads_errstr(rc));
- return -1;
- }
+ if (!(ads = ads_startup())) return -1;
rc = ads_join_realm(ads, global_myname);
if (rc) {
@@ -190,6 +235,8 @@ int net_ads(int argc, const char **argv)
{"JOIN", net_ads_join},
{"LEAVE", net_ads_leave},
{"STATUS", net_ads_status},
+ {"USER", net_ads_user},
+ {"GROUP", net_ads_group},
{NULL, NULL}
};