summaryrefslogtreecommitdiffstats
path: root/source4/scripting/python/samba
Commit message (Expand)AuthorAgeFilesLines
* s4:provision.py - add the correct "CN=Sites" security descriptorMatthias Dieter Wallnöfer2010-10-231-5/+20
* s4:schema.py - reformat and fix the security descriptorMatthias Dieter Wallnöfer2010-10-231-14/+23
* s4:samdb.py - remove a pointless commentMatthias Dieter Wallnöfer2010-10-191-1/+0
* s4:samdb.py - use a more standard way to get to the domain realm/dns nameMatthias Dieter Wallnöfer2010-10-191-1/+2
* Addition of userPrincipalName attribute when new account is createdLukasz Zalewski2010-10-191-0/+2
* s4-provisionbackend Allow a fixed URI to be specified for LDAP backendAndrew Bartlett2010-10-192-54/+60
* s4-provision Remove serverdn parameter from Schema()Andrew Bartlett2010-10-193-12/+6
* s4-provision: Reset "debuglevel" after "provision" take placeKamen Mazdrashki2010-10-051-7/+9
* s4:dsdb python stuff - introduce also here the "show_recycled" controlMatthias Dieter Wallnöfer2010-10-031-2/+2
* s4-selftest: silence warnings about bind chownAndrew Tridgell2010-10-021-2/+2
* s4-test: silence the Failed to chown message in make testAndrew Tridgell2010-10-021-3/+5
* s4-getopt.py: Make Anonymous creds when no credentialsKamen Mazdrashki2010-10-031-2/+7
* s4-python-test: Common implementation for getting environment variable valueKamen Mazdrashki2010-10-031-0/+11
* s4-python-samba: Remove trailing ';'sKamen Mazdrashki2010-10-032-29/+29
* s4-python-test: Implement global connect_samdb() functionKamen Mazdrashki2010-10-031-0/+46
* s4-samba.samdb: Fix masking names from outer contextKamen Mazdrashki2010-10-031-17/+17
* s4-python-samba: 'file' is a built-inKamen Mazdrashki2010-10-031-3/+3
* s4-samba.samdb: Fix leading indention and trailing ';'Kamen Mazdrashki2010-10-031-10/+10
* s4-python-samba: Fix few cosmeticsKamen Mazdrashki2010-10-031-4/+3
* s4-provision: wipe the old keytabs when provisioningAndrew Tridgell2010-09-302-7/+29
* s4-rodc: fixed the keyVersionNumber on the RODC account in secrets.keytabAndrew Tridgell2010-09-301-2/+5
* s4-drsutils: expose DsBind() call in drs_utils.pyAndrew Tridgell2010-09-291-37/+38
* s4-provision: fixed the generation of the krb5.conf for vampireAndrew Tridgell2010-09-271-6/+6
* s4 provision: start with gpo of version 0 and be consistent between different...Matthieu Patou2010-09-261-1/+1
* s4 provision: Make GPO folder group writableMatthieu Patou2010-09-261-3/+3
* upgradeprovision: use the same case for hostname in reference provision as in...Matthieu Patou2010-09-261-1/+1
* s4-provision: switch to dns-HOSTNAME instead of dnsAndrew Tridgell2010-09-261-7/+23
* s4-net: added --ipaddress option to net commandsAndrew Tridgell2010-09-256-6/+13
* s4:provision - rootdse - remove static "ldapServiceName" attributeMatthias Dieter Wallnöfer2010-09-241-3/+0
* s4:provision - rootdse - remove static "dnsHostName" attributeMatthias Dieter Wallnöfer2010-09-241-1/+0
* s4:provision.py - support still not fully provisioned trees regarding the roo...Matthias Dieter Wallnöfer2010-09-241-2/+11
* s4:provision.py - make more use of "names.serverdn" on NTDS settings locationMatthias Dieter Wallnöfer2010-09-241-2/+2
* s4:python/samba/join.py - add a comment to point out that NCs have to be assi...Matthias Dieter Wallnöfer2010-09-241-0/+1
* s4:python/samba/join.py - use constant for DC function levelMatthias Dieter Wallnöfer2010-09-241-1/+2
* s4-drs: we don't need to decode to utf8 in python dcerpc strings any moreAndrew Tridgell2010-09-231-1/+1
* s4-selftest: Move credentials tests to standard python directory.Jelmer Vernooij2010-09-221-0/+100
* s4-selftest: Move samba3sam test to standard python directory.Jelmer Vernooij2010-09-221-0/+1092
* selftest: Fix idlist running.Jelmer Vernooij2010-09-222-41/+65
* s4-param: Fix more memory leaks, invalid memory context.Jelmer Vernooij2010-09-221-2/+1
* s4-param: Check type when converting python object to lp_ctx, fix someJelmer Vernooij2010-09-221-4/+3
* pygensec: Implement start_mech_by_name().Jelmer Vernooij2010-09-221-3/+10
* ndrdump: Move blackbox test to standard python namespace.Jelmer Vernooij2010-09-223-0/+41
* s4-selftest: Move more tests to scripting/python, simplifies running of tests.Jelmer Vernooij2010-09-218-4/+394
* selftest: Fix run for systems without testtools installed.Jelmer Vernooij2010-09-211-0/+1
* rpc_talloc: Update test now that we create fewer references.Jelmer Vernooij2010-09-201-7/+4
* pytestrpc: Be more verbose.Jelmer Vernooij2010-09-201-4/+6
* testrpc: Convert from a single unit test to a simple test script, beJelmer Vernooij2010-09-201-18/+32
* pidl: Fix segfault when accessing unicode objects.Jelmer Vernooij2010-09-201-1/+1
* s4-rodc: override client site from cldap responseAndrew Tridgell2010-09-191-0/+2
* s4-pydsdb: added am_rodc() method on samdbAndrew Tridgell2010-09-191-0/+3
>(TALLOC_CTX *mem_ctx, const char *address, bool use_symlink) { if (!use_symlink) { return talloc_strdup(mem_ctx, address); } return talloc_asprintf(mem_ctx, "%s.%lu", address, (unsigned long) getpid()); } static errno_t create_socket_symlink(const char *filename, const char *symlink_filename) { errno_t ret; DEBUG(SSSDBG_TRACE_LIBS, "Symlinking the dbus path %s to a link %s\n", filename, symlink_filename); errno = 0; ret = symlink(filename, symlink_filename); if (ret != 0 && errno == EEXIST) { /* Perhaps cruft after a previous server? */ errno = 0; ret = unlink(symlink_filename); if (ret != 0) { ret = errno; DEBUG(SSSDBG_CRIT_FAILURE, "Cannot remove old symlink: [%d][%s].\n", ret, strerror(ret)); return EIO; } errno = 0; ret = symlink(filename, symlink_filename); } if (ret != 0) { ret = errno; DEBUG(SSSDBG_CRIT_FAILURE, "symlink() failed on file '%s': [%d][%s].\n", filename, ret, strerror(ret)); return EIO; } return EOK; } static errno_t remove_socket_symlink(const char *symlink_name) { errno_t ret; char target[PATH_MAX]; char pidpath[PATH_MAX]; ssize_t numread = 0; errno = 0; numread = readlink(symlink_name, target, PATH_MAX-1); if (numread < 0) { ret = errno; DEBUG(SSSDBG_OP_FAILURE, "readlink failed [%d]: %s\n", ret, strerror(ret)); return ret; } target[numread] = '\0'; DEBUG(SSSDBG_TRACE_ALL, "The symlink points to [%s]\n", target); /* We can only remove the symlink if it points to a socket with * the same PID */ ret = snprintf(pidpath, PATH_MAX, "%s.%lu", symlink_name, (unsigned long) getpid()); if (ret < 0) { DEBUG(SSSDBG_OP_FAILURE, "snprintf failed\n"); return EIO; } else if (ret >= PATH_MAX) { DEBUG(SSSDBG_OP_FAILURE, "path too long?!?!\n"); return EIO; } DEBUG(SSSDBG_TRACE_ALL, "The path including our pid is [%s]\n", pidpath); if (strcmp(pidpath, target) != 0) { DEBUG(SSSDBG_CONF_SETTINGS, "Will not remove symlink, seems to be owned by " "another process\n"); return EOK; } ret = unlink(symlink_name); if (ret != 0) { ret = errno; DEBUG(SSSDBG_CRIT_FAILURE, "unlink failed to remove [%s] [%d]: %s\n", symlink_name, ret, strerror(ret)); return ret; } DEBUG(SSSDBG_TRACE_ALL, "Removed the symlink\n"); return EOK; } /* * dbus_new_server * Set up a D-BUS server, integrate with the event loop * for handling file descriptor and timed events */ int sbus_new_server(TALLOC_CTX *mem_ctx, struct tevent_context *ev, const char *address, uid_t uid, gid_t gid, bool use_symlink, struct sbus_connection **_server, sbus_server_conn_init_fn init_fn, void *init_pvt_data) { struct sbus_connection *server; DBusServer *dbus_server; DBusError dbus_error; dbus_bool_t dbret; char *tmp; int ret, tmp_ret; char *filename; char *symlink_filename = NULL; const char *socket_address; struct stat stat_buf; TALLOC_CTX *tmp_ctx; *_server = NULL; tmp_ctx = talloc_new(NULL); if (!tmp_ctx) return ENOMEM; socket_address = get_socket_address(tmp_ctx, address, use_symlink); if (!socket_address) { ret = ENOMEM; goto done; } /* Set up D-BUS server */ dbus_error_init(&dbus_error); dbus_server = dbus_server_listen(socket_address, &dbus_error); if (!dbus_server) { DEBUG(SSSDBG_CRIT_FAILURE, "dbus_server_listen failed! (name=%s, message=%s)\n", dbus_error.name, dbus_error.message); if (dbus_error_is_set(&dbus_error)) dbus_error_free(&dbus_error); ret = EIO; goto done; } filename = strchr(socket_address, '/'); if (filename == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Unexpected dbus address [%s].\n", socket_address); ret = EIO; goto done; } if (use_symlink) { symlink_filename = strchr(address, '/'); if (symlink_filename == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Unexpected dbus address [%s].\n", address); ret = EIO; goto done; } ret = create_socket_symlink(filename, symlink_filename); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Could not create symlink [%d]: %s\n", ret, strerror(ret)); ret = EIO; goto done; } } /* Both check_file and chmod can handle both the symlink and * the socket */ ret = check_file(filename, getuid(), getgid(), S_IFSOCK, S_IFMT, &stat_buf, true); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "check_file failed for [%s].\n", filename); ret = EIO; goto done; } if ((stat_buf.st_mode & ~S_IFMT) != (S_IRUSR|S_IWUSR)) { ret = chmod(filename, (S_IRUSR|S_IWUSR)); if (ret != EOK) { ret = errno; DEBUG(SSSDBG_CRIT_FAILURE, "chmod failed for [%s]: [%d][%s].\n", filename, ret, sss_strerror(ret)); ret = EIO; goto done; } } if (stat_buf.st_uid != uid || stat_buf.st_gid != gid) { ret = chown(filename, uid, gid); if (ret != EOK) { ret = errno; DEBUG(SSSDBG_CRIT_FAILURE, "chown failed for [%s]: [%d][%s].\n", filename, ret, sss_strerror(ret)); ret = EIO; goto done; } } tmp = dbus_server_get_address(dbus_server); DEBUG(SSSDBG_TRACE_FUNC, "D-BUS Server listening on %s\n", tmp); free(tmp); server = talloc_zero(tmp_ctx, struct sbus_connection); if (!server) { ret = ENOMEM; goto done; } server->ev = ev; server->type = SBUS_SERVER; server->dbus.server = dbus_server; server->srv_init_fn = init_fn; server->srv_init_data = init_pvt_data; talloc_set_destructor((TALLOC_CTX *)server, sbus_server_destructor); if (use_symlink) { server->symlink = talloc_strdup(server, symlink_filename); if (!server->symlink) { ret = ENOMEM; goto done; } } /* Set up D-BUS new connection handler */ dbus_server_set_new_connection_function(server->dbus.server, sbus_server_init_new_connection, server, NULL); /* Set up DBusWatch functions */ dbret = dbus_server_set_watch_functions(server->dbus.server, sbus_add_watch, sbus_remove_watch, sbus_toggle_watch, server, NULL); if (!dbret) { DEBUG(SSSDBG_CONF_SETTINGS, "Error setting up D-BUS server watch functions\n"); ret = EIO; goto done; } /* Set up DBusTimeout functions */ dbret = dbus_server_set_timeout_functions(server->dbus.server, sbus_add_timeout, sbus_remove_timeout, sbus_toggle_timeout, server, NULL); if (!dbret) { DEBUG(SSSDBG_CONF_SETTINGS, "Error setting up D-BUS server timeout functions\n"); dbus_server_set_watch_functions(server->dbus.server, NULL, NULL, NULL, NULL, NULL); ret = EIO; goto done; } *_server = talloc_steal(mem_ctx, server); ret = EOK; done: if (ret != EOK && symlink_filename) { tmp_ret = unlink(symlink_filename); /* non-fatal failure */ if (tmp_ret != EOK) { tmp_ret = errno; DEBUG(SSSDBG_MINOR_FAILURE, "Failed to remove symbolic link: %d [%s]!\n", tmp_ret, sss_strerror(tmp_ret)); } } talloc_free(tmp_ctx); return ret; } static int sbus_server_destructor(void *ctx) { struct sbus_connection *server; errno_t ret; server = talloc_get_type(ctx, struct sbus_connection); dbus_server_disconnect(server->dbus.server); if (server->symlink) { ret = remove_socket_symlink(server->symlink); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, "Could not remove the server symlink\n"); } } return 0; }