diff options
author | cvs2svn Import User <samba-bugs@samba.org> | 2002-07-15 15:14:02 +0000 |
---|---|---|
committer | cvs2svn Import User <samba-bugs@samba.org> | 2002-07-15 15:14:02 +0000 |
commit | f9a01d298ef1c7be0a214dd9ce51b8523be99f67 (patch) | |
tree | fcf0aa5580f2ffe34928ee818d7e9c1f4037c0ef | |
parent | 9556d3316cf262d14da4f3481d3e733b23d0862b (diff) | |
parent | 291551d80711daab7b7581720bcd9a08d6096517 (diff) | |
download | samba-f9a01d298ef1c7be0a214dd9ce51b8523be99f67.tar.gz |
This commit was manufactured by cvs2svn to create tagsamba-3.0.0alpha18
'release-3-0-alpha18'.
40 files changed, 0 insertions, 8671 deletions
diff --git a/source/include/rpc_client_proto.h b/source/include/rpc_client_proto.h deleted file mode 100644 index 0ecb1956913..00000000000 --- a/source/include/rpc_client_proto.h +++ /dev/null @@ -1,231 +0,0 @@ -#ifndef _RPC_CLIENT_PROTO_H_ -#define _RPC_CLIENT_PROTO_H_ -/* This file is automatically generated with "make proto". DO NOT EDIT */ - - -/*The following definitions come from lib/util_list.c */ - -BOOL copy_policy_hnd (POLICY_HND *dest, const POLICY_HND *src); -BOOL compare_rpc_hnd_node(const RPC_HND_NODE *x, - const RPC_HND_NODE *y); -BOOL RpcHndList_set_connection(const POLICY_HND *hnd, - struct cli_connection *con); -BOOL RpcHndList_del_connection(const POLICY_HND *hnd); -struct cli_connection* RpcHndList_get_connection(const POLICY_HND *hnd); - -/*The following definitions come from rpc_client/cli_connect.c */ - -void init_connections(void); -void free_connections(void); -void cli_connection_free(struct cli_connection *con); -void cli_connection_unlink(struct cli_connection *con); -BOOL cli_connection_init(const char *srv_name, char *pipe_name, - struct cli_connection **con); -BOOL cli_connection_init_auth(const char *srv_name, char *pipe_name, - struct cli_connection **con, - cli_auth_fns * auth, void *auth_creds); -struct _cli_auth_fns *cli_conn_get_authfns(struct cli_connection *con); -void *cli_conn_get_auth_creds(struct cli_connection *con); -BOOL rpc_hnd_pipe_req(const POLICY_HND * hnd, uint8 op_num, - prs_struct * data, prs_struct * rdata); -BOOL rpc_con_pipe_req(struct cli_connection *con, uint8 op_num, - prs_struct * data, prs_struct * rdata); -BOOL rpc_con_ok(struct cli_connection *con); - -/*The following definitions come from rpc_client/cli_login.c */ - -BOOL cli_nt_setup_creds(struct cli_state *cli, unsigned char mach_pwd[16]); -BOOL cli_nt_srv_pwset(struct cli_state *cli, unsigned char *new_hashof_mach_pwd); -BOOL cli_nt_login_interactive(struct cli_state *cli, char *domain, char *username, - uint32 smb_userid_low, char *password, - NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3); -BOOL cli_nt_login_network(struct cli_state *cli, char *domain, char *username, - uint32 smb_userid_low, char lm_chal[8], - char *lm_chal_resp, char *nt_chal_resp, - NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3); -BOOL cli_nt_logoff(struct cli_state *cli, NET_ID_INFO_CTR *ctr); - -/*The following definitions come from rpc_client/cli_lsarpc.c */ - -BOOL do_lsa_open_policy(struct cli_state *cli, - char *system_name, POLICY_HND *hnd, - BOOL sec_qos); -BOOL do_lsa_query_info_pol(struct cli_state *cli, - POLICY_HND *hnd, uint16 info_class, - fstring domain_name, DOM_SID *domain_sid); -BOOL do_lsa_close(struct cli_state *cli, POLICY_HND *hnd); -BOOL cli_lsa_get_domain_sid(struct cli_state *cli, char *server); -uint32 lsa_open_policy(const char *system_name, POLICY_HND *hnd, - BOOL sec_qos, uint32 des_access); -uint32 lsa_lookup_sids(POLICY_HND *hnd, int num_sids, DOM_SID *sids, - char ***names, uint32 **types, int *num_names); -uint32 lsa_lookup_names(POLICY_HND *hnd, int num_names, char **names, - DOM_SID **sids, uint32 **types, int *num_sids); - -/*The following definitions come from rpc_client/cli_netlogon.c */ - -BOOL cli_net_logon_ctrl2(struct cli_state *cli, uint32 status_level); -BOOL cli_net_auth2(struct cli_state *cli, uint16 sec_chan, - uint32 neg_flags, DOM_CHAL *srv_chal); -BOOL cli_net_req_chal(struct cli_state *cli, DOM_CHAL *clnt_chal, DOM_CHAL *srv_chal); -BOOL cli_net_srv_pwset(struct cli_state *cli, uint8 hashed_mach_pwd[16]); -BOOL cli_net_sam_logon(struct cli_state *cli, NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3); -BOOL cli_net_sam_logoff(struct cli_state *cli, NET_ID_INFO_CTR *ctr); -BOOL change_trust_account_password( char *domain, char *remote_machine_list); - -/*The following definitions come from rpc_client/cli_pipe.c */ - -BOOL rpc_api_pipe_req(struct cli_state *cli, uint8 op_num, - prs_struct *data, prs_struct *rdata); -BOOL rpc_pipe_bind(struct cli_state *cli, char *pipe_name, char *my_name); -void cli_nt_set_ntlmssp_flgs(struct cli_state *cli, uint32 ntlmssp_flgs); -BOOL cli_nt_session_open(struct cli_state *cli, char *pipe_name); -void cli_nt_session_close(struct cli_state *cli); - -/*The following definitions come from rpc_client/cli_reg.c */ - -BOOL do_reg_connect(struct cli_state *cli, char *full_keyname, char *key_name, - POLICY_HND *reg_hnd); -BOOL do_reg_open_hklm(struct cli_state *cli, uint16 unknown_0, uint32 level, - POLICY_HND *hnd); -BOOL do_reg_open_hku(struct cli_state *cli, uint16 unknown_0, uint32 level, - POLICY_HND *hnd); -BOOL do_reg_flush_key(struct cli_state *cli, POLICY_HND *hnd); -BOOL do_reg_query_key(struct cli_state *cli, POLICY_HND *hnd, - char *class, uint32 *class_len, - uint32 *num_subkeys, uint32 *max_subkeylen, - uint32 *max_subkeysize, uint32 *num_values, - uint32 *max_valnamelen, uint32 *max_valbufsize, - uint32 *sec_desc, NTTIME *mod_time); -BOOL do_reg_unknown_1a(struct cli_state *cli, POLICY_HND *hnd, uint32 *unk); -BOOL do_reg_query_info(struct cli_state *cli, POLICY_HND *hnd, - char *key_value, uint32* key_type); -BOOL do_reg_set_key_sec(struct cli_state *cli, POLICY_HND *hnd, SEC_DESC_BUF *sec_desc_buf); -BOOL do_reg_get_key_sec(struct cli_state *cli, POLICY_HND *hnd, uint32 *sec_buf_size, SEC_DESC_BUF **ppsec_desc_buf); -BOOL do_reg_delete_val(struct cli_state *cli, POLICY_HND *hnd, char *val_name); -BOOL do_reg_delete_key(struct cli_state *cli, POLICY_HND *hnd, char *key_name); -BOOL do_reg_create_key(struct cli_state *cli, POLICY_HND *hnd, - char *key_name, char *key_class, - SEC_ACCESS *sam_access, - POLICY_HND *key); -BOOL do_reg_enum_key(struct cli_state *cli, POLICY_HND *hnd, - int key_index, char *key_name, - uint32 *unk_1, uint32 *unk_2, - time_t *mod_time); -BOOL do_reg_create_val(struct cli_state *cli, POLICY_HND *hnd, - char *val_name, uint32 type, BUFFER3 *data); -BOOL do_reg_enum_val(struct cli_state *cli, POLICY_HND *hnd, - int val_index, int max_valnamelen, int max_valbufsize, - fstring val_name, - uint32 *val_type, BUFFER2 *value); -BOOL do_reg_open_entry(struct cli_state *cli, POLICY_HND *hnd, - char *key_name, uint32 unk_0, - POLICY_HND *key_hnd); -BOOL do_reg_close(struct cli_state *cli, POLICY_HND *hnd); - -/*The following definitions come from rpc_client/cli_samr.c */ - -BOOL get_samr_query_usergroups(struct cli_state *cli, - POLICY_HND *pol_open_domain, uint32 user_rid, - uint32 *num_groups, DOM_GID *gid); -BOOL get_samr_query_userinfo(struct cli_state *cli, - POLICY_HND *pol_open_domain, - uint32 info_level, - uint32 user_rid, SAM_USER_INFO_21 *usr); -BOOL do_samr_chgpasswd_user(struct cli_state *cli, - char *srv_name, char *user_name, - char nt_newpass[516], uchar nt_oldhash[16], - char lm_newpass[516], uchar lm_oldhash[16]); -BOOL do_samr_unknown_38(struct cli_state *cli, char *srv_name); -BOOL do_samr_query_dom_info(struct cli_state *cli, - POLICY_HND *domain_pol, uint16 switch_value); -BOOL do_samr_enum_dom_users(struct cli_state *cli, - POLICY_HND *pol, uint16 num_entries, uint16 unk_0, - uint16 acb_mask, uint16 unk_1, uint32 size, - struct acct_info **sam, - int *num_sam_users); -BOOL do_samr_connect(struct cli_state *cli, - char *srv_name, uint32 unknown_0, - POLICY_HND *connect_pol); -BOOL do_samr_open_user(struct cli_state *cli, - POLICY_HND *pol, uint32 unk_0, uint32 rid, - POLICY_HND *user_pol); -BOOL do_samr_open_domain(struct cli_state *cli, - POLICY_HND *connect_pol, uint32 rid, DOM_SID *sid, - POLICY_HND *domain_pol); -BOOL do_samr_query_unknown_12(struct cli_state *cli, - POLICY_HND *pol, uint32 rid, uint32 num_gids, uint32 *gids, - uint32 *num_aliases, - fstring als_names [MAX_LOOKUP_SIDS], - uint32 num_als_users[MAX_LOOKUP_SIDS]); -BOOL do_samr_query_usergroups(struct cli_state *cli, - POLICY_HND *pol, uint32 *num_groups, DOM_GID *gid); -BOOL do_samr_query_userinfo(struct cli_state *cli, - POLICY_HND *pol, uint16 switch_value, void* usr); -BOOL do_samr_close(struct cli_state *cli, POLICY_HND *hnd); - -/*The following definitions come from rpc_client/cli_spoolss_notify.c */ - -BOOL spoolss_disconnect_from_client( struct cli_state *cli); -BOOL spoolss_connect_to_client( struct cli_state *cli, char *remote_machine); -BOOL cli_spoolss_reply_open_printer(struct cli_state *cli, char *printer, uint32 localprinter, uint32 type, uint32 *status, POLICY_HND *handle); -BOOL cli_spoolss_reply_rrpcn(struct cli_state *cli, POLICY_HND *handle, - uint32 change_low, uint32 change_high, uint32 *status); -BOOL cli_spoolss_reply_close_printer(struct cli_state *cli, POLICY_HND *handle, uint32 *status); - -/*The following definitions come from rpc_client/cli_srvsvc.c */ - -BOOL do_srv_net_srv_conn_enum(struct cli_state *cli, - char *server_name, char *qual_name, - uint32 switch_value, SRV_CONN_INFO_CTR *ctr, - uint32 preferred_len, - ENUM_HND *hnd); -BOOL do_srv_net_srv_sess_enum(struct cli_state *cli, - char *server_name, char *qual_name, - uint32 switch_value, SRV_SESS_INFO_CTR *ctr, - uint32 preferred_len, - ENUM_HND *hnd); -BOOL do_srv_net_srv_share_enum(struct cli_state *cli, - char *server_name, - uint32 switch_value, SRV_R_NET_SHARE_ENUM *r_o, - uint32 preferred_len, ENUM_HND *hnd); -BOOL do_srv_net_srv_file_enum(struct cli_state *cli, - char *server_name, char *qual_name, - uint32 switch_value, SRV_FILE_INFO_CTR *ctr, - uint32 preferred_len, - ENUM_HND *hnd); -BOOL do_srv_net_srv_get_info(struct cli_state *cli, - char *server_name, uint32 switch_value, SRV_INFO_CTR *ctr); - -/*The following definitions come from rpc_client/cli_use.c */ - -void init_cli_use(void); -void free_cli_use(void); -struct cli_state *cli_net_use_add(const char *srv_name, - const struct ntuser_creds *usr_creds, - BOOL reuse, BOOL *is_new); -BOOL cli_net_use_del(const char *srv_name, - const struct ntuser_creds *usr_creds, - BOOL force_close, BOOL *connection_closed); -void cli_net_use_enum(uint32 *num_cons, struct use_info ***use); -void cli_use_wait_keyboard(void); - -/*The following definitions come from rpc_client/cli_wkssvc.c */ - -BOOL do_wks_query_info(struct cli_state *cli, - char *server_name, uint32 switch_value, - WKS_INFO_100 *wks100); - -/*The following definitions come from rpc_client/ncacn_np_use.c */ - -BOOL ncacn_np_use_del(const char *srv_name, const char *pipe_name, - const vuser_key * key, - BOOL force_close, BOOL *connection_closed); -struct ncacn_np *ncacn_np_initialise(struct ncacn_np *msrpc, - const vuser_key * key); -struct ncacn_np *ncacn_np_use_add(const char *pipe_name, - const vuser_key * key, - const char *srv_name, - const struct ntuser_creds *ntc, - BOOL reuse, BOOL *is_new_connection); -#endif /* _PROTO_H_ */ diff --git a/source/lib/domain_namemap.c b/source/lib/domain_namemap.c deleted file mode 100644 index 988f5e5d659..00000000000 --- a/source/lib/domain_namemap.c +++ /dev/null @@ -1,1317 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 1.9. - Groupname handling - Copyright (C) Jeremy Allison 1998. - - 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. -*/ - -/* - * UNIX gid and Local or Domain SID resolution. This module resolves - * only those entries in the map files, it is *NOT* responsible for - * resolving UNIX groups not listed: that is an entirely different - * matter, altogether... - */ - -/* - * - * - - format of the file is: - - unixname NT Group name - unixname Domain Admins (well-known Domain Group) - unixname DOMAIN_NAME\NT Group name - unixname OTHER_DOMAIN_NAME\NT Group name - unixname DOMAIN_NAME\Domain Admins (well-known Domain Group) - .... - - if the DOMAIN_NAME\ component is left off, then your own domain is assumed. - - * - * - */ - - -#include "includes.h" -extern int DEBUGLEVEL; - -extern fstring global_myworkgroup; -extern DOM_SID global_member_sid; -extern fstring global_sam_name; -extern DOM_SID global_sam_sid; -extern DOM_SID global_sid_S_1_5_20; - -/******************************************************************* - converts UNIX uid to an NT User RID. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uid_t pwdb_user_rid_to_uid(uint32 user_rid) -{ - return ((user_rid & (~RID_TYPE_USER))- 1000)/RID_MULTIPLIER; -} - -/******************************************************************* - converts NT Group RID to a UNIX uid. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_group_rid_to_gid(uint32 group_rid) -{ - return ((group_rid & (~RID_TYPE_GROUP))- 1000)/RID_MULTIPLIER; -} - -/******************************************************************* - converts NT Alias RID to a UNIX uid. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_alias_rid_to_gid(uint32 alias_rid) -{ - return ((alias_rid & (~RID_TYPE_ALIAS))- 1000)/RID_MULTIPLIER; -} - -/******************************************************************* - converts NT Group RID to a UNIX uid. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_gid_to_group_rid(uint32 gid) -{ - uint32 grp_rid = ((((gid)*RID_MULTIPLIER) + 1000) | RID_TYPE_GROUP); - return grp_rid; -} - -/****************************************************************** - converts UNIX gid to an NT Alias RID. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_gid_to_alias_rid(uint32 gid) -{ - uint32 alias_rid = ((((gid)*RID_MULTIPLIER) + 1000) | RID_TYPE_ALIAS); - return alias_rid; -} - -/******************************************************************* - converts UNIX uid to an NT User RID. NOTE: IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_uid_to_user_rid(uint32 uid) -{ - uint32 user_rid = ((((uid)*RID_MULTIPLIER) + 1000) | RID_TYPE_USER); - return user_rid; -} - -/****************************************************************** - converts SID + SID_NAME_USE type to a UNIX id. the Domain SID is, - and can only be, our own SID. - ********************************************************************/ -static BOOL pwdb_sam_sid_to_unixid(DOM_SID *sid, uint8 type, uint32 *id) -{ - DOM_SID tmp_sid; - uint32 rid; - - sid_copy(&tmp_sid, sid); - sid_split_rid(&tmp_sid, &rid); - if (!sid_equal(&global_sam_sid, &tmp_sid)) - { - return False; - } - - switch (type) - { - case SID_NAME_USER: - { - *id = pwdb_user_rid_to_uid(rid); - return True; - } - case SID_NAME_ALIAS: - { - *id = pwdb_alias_rid_to_gid(rid); - return True; - } - case SID_NAME_DOM_GRP: - case SID_NAME_WKN_GRP: - { - *id = pwdb_group_rid_to_gid(rid); - return True; - } - } - return False; -} - -/****************************************************************** - converts UNIX gid + SID_NAME_USE type to a SID. the Domain SID is, - and can only be, our own SID. - ********************************************************************/ -static BOOL pwdb_unixid_to_sam_sid(uint32 id, uint8 type, DOM_SID *sid) -{ - sid_copy(sid, &global_sam_sid); - switch (type) - { - case SID_NAME_USER: - { - sid_append_rid(sid, pwdb_uid_to_user_rid(id)); - return True; - } - case SID_NAME_ALIAS: - { - sid_append_rid(sid, pwdb_gid_to_alias_rid(id)); - return True; - } - case SID_NAME_DOM_GRP: - case SID_NAME_WKN_GRP: - { - sid_append_rid(sid, pwdb_gid_to_group_rid(id)); - return True; - } - } - return False; -} - -/******************************************************************* - Decides if a RID is a well known RID. - ********************************************************************/ -static BOOL pwdb_rid_is_well_known(uint32 rid) -{ - return (rid < 1000); -} - -/******************************************************************* - determines a rid's type. NOTE: THIS IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -static uint32 pwdb_rid_type(uint32 rid) -{ - /* lkcl i understand that NT attaches an enumeration to a RID - * such that it can be identified as either a user, group etc - * type: SID_ENUM_TYPE. - */ - if (pwdb_rid_is_well_known(rid)) - { - /* - * The only well known user RIDs are DOMAIN_USER_RID_ADMIN - * and DOMAIN_USER_RID_GUEST. - */ - if (rid == DOMAIN_USER_RID_ADMIN || rid == DOMAIN_USER_RID_GUEST) - { - return RID_TYPE_USER; - } - if (DOMAIN_GROUP_RID_ADMINS <= rid && rid <= DOMAIN_GROUP_RID_GUESTS) - { - return RID_TYPE_GROUP; - } - if (BUILTIN_ALIAS_RID_ADMINS <= rid && rid <= BUILTIN_ALIAS_RID_REPLICATOR) - { - return RID_TYPE_ALIAS; - } - } - return (rid & RID_TYPE_MASK); -} - -/******************************************************************* - checks whether rid is a user rid. NOTE: THIS IS SOMETHING SPECIFIC TO SAMBA - ********************************************************************/ -BOOL pwdb_rid_is_user(uint32 rid) -{ - return pwdb_rid_type(rid) == RID_TYPE_USER; -} - -/************************************************************************** - Groupname map functionality. The code loads a groupname map file and - (currently) loads it into a linked list. This is slow and memory - hungry, but can be changed into a more efficient storage format - if the demands on it become excessive. -***************************************************************************/ - -typedef struct name_map -{ - ubi_slNode next; - DOM_NAME_MAP grp; - -} name_map_entry; - -static ubi_slList groupname_map_list; -static ubi_slList aliasname_map_list; -static ubi_slList ntusrname_map_list; - -static void delete_name_entry(name_map_entry *gmep) -{ - if (gmep->grp.nt_name) - { - free(gmep->grp.nt_name); - } - if (gmep->grp.nt_domain) - { - free(gmep->grp.nt_domain); - } - if (gmep->grp.unix_name) - { - free(gmep->grp.unix_name); - } - free((char*)gmep); -} - -/************************************************************************** - Delete all the entries in the name map list. -***************************************************************************/ - -static void delete_map_list(ubi_slList *map_list) -{ - name_map_entry *gmep; - - while ((gmep = (name_map_entry *)ubi_slRemHead(map_list )) != NULL) - { - delete_name_entry(gmep); - } -} - - -/************************************************************************** - makes a group sid out of a domain sid and a _unix_ gid. -***************************************************************************/ -static BOOL make_mydomain_sid(DOM_NAME_MAP *grp, DOM_MAP_TYPE type) -{ - int ret = False; - fstring sid_str; - - if (!map_domain_name_to_sid(&grp->sid, &(grp->nt_domain))) - { - DEBUG(0,("make_mydomain_sid: unknown domain %s\n", - grp->nt_domain)); - return False; - } - - if (sid_equal(&grp->sid, &global_sid_S_1_5_20)) - { - /* - * only builtin aliases are recognised in S-1-5-20 - */ - DEBUG(10,("make_mydomain_sid: group %s in builtin domain\n", - grp->nt_name)); - - if (lookup_builtin_alias_name(grp->nt_name, "BUILTIN", &grp->sid, &grp->type) != 0x0) - { - DEBUG(0,("unix group %s mapped to an unrecognised BUILTIN domain name %s\n", - grp->unix_name, grp->nt_name)); - return False; - } - ret = True; - } - else if (lookup_wk_user_name(grp->nt_name, grp->nt_domain, &grp->sid, &grp->type) == 0x0) - { - if (type != DOM_MAP_USER) - { - DEBUG(0,("well-known NT user %s\\%s listed in wrong map file\n", - grp->nt_domain, grp->nt_name)); - return False; - } - ret = True; - } - else if (lookup_wk_group_name(grp->nt_name, grp->nt_domain, &grp->sid, &grp->type) == 0x0) - { - if (type != DOM_MAP_DOMAIN) - { - DEBUG(0,("well-known NT group %s\\%s listed in wrong map file\n", - grp->nt_domain, grp->nt_name)); - return False; - } - ret = True; - } - else - { - switch (type) - { - case DOM_MAP_USER: - { - grp->type = SID_NAME_USER; - break; - } - case DOM_MAP_DOMAIN: - { - grp->type = SID_NAME_DOM_GRP; - break; - } - case DOM_MAP_LOCAL: - { - grp->type = SID_NAME_ALIAS; - break; - } - } - - ret = pwdb_unixid_to_sam_sid(grp->unix_id, grp->type, &grp->sid); - } - - sid_to_string(sid_str, &grp->sid); - DEBUG(10,("nt name %s\\%s gid %d mapped to %s\n", - grp->nt_domain, grp->nt_name, grp->unix_id, sid_str)); - return ret; -} - -/************************************************************************** - makes a group sid out of an nt domain, nt group name or a unix group name. -***************************************************************************/ -static BOOL unix_name_to_nt_name_info(DOM_NAME_MAP *map, DOM_MAP_TYPE type) -{ - /* - * Attempt to get the unix gid_t for this name. - */ - - DEBUG(5,("unix_name_to_nt_name_info: unix_name:%s\n", map->unix_name)); - - if (type == DOM_MAP_USER) - { - const struct passwd *pwptr = Get_Pwnam(map->unix_name, False); - if (pwptr == NULL) - { - DEBUG(0,("unix_name_to_nt_name_info: Get_Pwnam for user %s\ -failed. Error was %s.\n", map->unix_name, strerror(errno) )); - return False; - } - - map->unix_id = (uint32)pwptr->pw_uid; - } - else - { - struct group *gptr = getgrnam(map->unix_name); - if (gptr == NULL) - { - DEBUG(0,("unix_name_to_nt_name_info: getgrnam for group %s\ -failed. Error was %s.\n", map->unix_name, strerror(errno) )); - return False; - } - - map->unix_id = (uint32)gptr->gr_gid; - } - - DEBUG(5,("unix_name_to_nt_name_info: unix gid:%d\n", map->unix_id)); - - /* - * Now map the name to an NT SID+RID. - */ - - if (map->nt_domain != NULL && !strequal(map->nt_domain, global_sam_name)) - { - /* Must add client-call lookup code here, to - * resolve remote domain's sid and the group's rid, - * in that domain. - * - * NOTE: it is _incorrect_ to put code here that assumes - * we are responsible for lookups for foriegn domains' RIDs. - * - * for foriegn domains for which we are *NOT* the PDC, all - * we can be responsible for is the unix gid_t to which - * the foriegn SID+rid maps to, on this _local_ machine. - * we *CANNOT* make any short-cuts or assumptions about - * RIDs in a foriegn domain. - */ - - if (!map_domain_name_to_sid(&map->sid, &(map->nt_domain))) - { - DEBUG(0,("unix_name_to_nt_name_info: no known sid for %s\n", - map->nt_domain)); - return False; - } - } - - return make_mydomain_sid(map, type); -} - -static BOOL make_name_entry(name_map_entry **new_ep, - char *nt_domain, char *nt_group, char *unix_group, - DOM_MAP_TYPE type) -{ - /* - * Create the list entry and add it onto the list. - */ - - DEBUG(5,("make_name_entry:%s,%s,%s\n", nt_domain, nt_group, unix_group)); - - (*new_ep) = (name_map_entry *)malloc(sizeof(name_map_entry)); - if ((*new_ep) == NULL) - { - DEBUG(0,("make_name_entry: malloc fail for name_map_entry.\n")); - return False; - } - - ZERO_STRUCTP(*new_ep); - - (*new_ep)->grp.nt_name = strdup(nt_group ); - (*new_ep)->grp.nt_domain = strdup(nt_domain ); - (*new_ep)->grp.unix_name = strdup(unix_group); - - if ((*new_ep)->grp.nt_name == NULL || - (*new_ep)->grp.unix_name == NULL) - { - DEBUG(0,("make_name_entry: malloc fail for names in name_map_entry.\n")); - delete_name_entry((*new_ep)); - return False; - } - - /* - * look up the group names, make the Group-SID and unix gid - */ - - if (!unix_name_to_nt_name_info(&(*new_ep)->grp, type)) - { - delete_name_entry((*new_ep)); - return False; - } - - return True; -} - -/************************************************************************** - Load a name map file. Sets last accessed timestamp. -***************************************************************************/ -static ubi_slList *load_name_map(DOM_MAP_TYPE type) -{ - static time_t groupmap_file_last_modified = (time_t)0; - static time_t aliasmap_file_last_modified = (time_t)0; - static time_t ntusrmap_file_last_modified = (time_t)0; - static BOOL initialised_group = False; - static BOOL initialised_alias = False; - static BOOL initialised_ntusr = False; - char *groupname_map_file = lp_groupname_map(); - char *aliasname_map_file = lp_aliasname_map(); - char *ntusrname_map_file = lp_ntusrname_map(); - - FILE *fp; - char *s; - pstring buf; - name_map_entry *new_ep; - - time_t *file_last_modified = NULL; - int *initialised = NULL; - char *map_file = NULL; - ubi_slList *map_list = NULL; - - switch (type) - { - case DOM_MAP_DOMAIN: - { - file_last_modified = &groupmap_file_last_modified; - initialised = &initialised_group; - map_file = groupname_map_file; - map_list = &groupname_map_list; - - break; - } - case DOM_MAP_LOCAL: - { - file_last_modified = &aliasmap_file_last_modified; - initialised = &initialised_alias; - map_file = aliasname_map_file; - map_list = &aliasname_map_list; - - break; - } - case DOM_MAP_USER: - { - file_last_modified = &ntusrmap_file_last_modified; - initialised = &initialised_ntusr; - map_file = ntusrname_map_file; - map_list = &ntusrname_map_list; - - break; - } - } - - if (!(*initialised)) - { - DEBUG(10,("initialising map %s\n", map_file)); - ubi_slInitList(map_list); - (*initialised) = True; - } - - if (!*map_file) - { - return map_list; - } - - /* - * Load the file. - */ - - fp = open_file_if_modified(map_file, "r", file_last_modified); - if (!fp) - { - return map_list; - } - - /* - * Throw away any previous list. - */ - delete_map_list(map_list); - - DEBUG(4,("load_name_map: Scanning name map %s\n",map_file)); - - while ((s = fgets_slash(buf, sizeof(buf), fp)) != NULL) - { - pstring unixname; - pstring nt_name; - fstring nt_domain; - fstring ntname; - char *p; - - DEBUG(10,("Read line |%s|\n", s)); - - memset(nt_name, 0, sizeof(nt_name)); - - if (!*s || strchr("#;",*s)) - continue; - - if (!next_token(&s,unixname, "\t\n\r=", sizeof(unixname))) - continue; - - if (!next_token(&s,nt_name, "\t\n\r=", sizeof(nt_name))) - continue; - - trim_string(unixname, " ", " "); - trim_string(nt_name, " ", " "); - - if (!*nt_name) - continue; - - if (!*unixname) - continue; - - p = strchr(nt_name, '\\'); - - if (p == NULL) - { - memset(nt_domain, 0, sizeof(nt_domain)); - fstrcpy(ntname, nt_name); - } - else - { - *p = 0; - p++; - fstrcpy(nt_domain, nt_name); - fstrcpy(ntname , p); - } - - if (make_name_entry(&new_ep, nt_domain, ntname, unixname, type)) - { - ubi_slAddTail(map_list, (ubi_slNode *)new_ep); - DEBUG(5,("unixname = %s, ntname = %s\\%s type = %d\n", - new_ep->grp.unix_name, - new_ep->grp.nt_domain, - new_ep->grp.nt_name, - new_ep->grp.type)); - } - } - - DEBUG(10,("load_name_map: Added %ld entries to name map.\n", - ubi_slCount(map_list))); - - fclose(fp); - - return map_list; -} - -static void copy_grp_map_entry(DOM_NAME_MAP *grp, const DOM_NAME_MAP *from) -{ - sid_copy(&grp->sid, &from->sid); - grp->unix_id = from->unix_id; - grp->nt_name = from->nt_name; - grp->nt_domain = from->nt_domain; - grp->unix_name = from->unix_name; - grp->type = from->type; -} - -#if 0 -/*********************************************************** - Lookup unix name. -************************************************************/ -static BOOL map_unixname(DOM_MAP_TYPE type, - char *unixname, DOM_NAME_MAP *grp_info) -{ - name_map_entry *gmep; - ubi_slList *map_list; - - /* - * Initialise and load if not already loaded. - */ - map_list = load_name_map(type); - - for (gmep = (name_map_entry *)ubi_slFirst(map_list); - gmep != NULL; - gmep = (name_map_entry *)ubi_slNext(gmep )) - { - if (strequal(gmep->grp.unix_name, unixname)) - { - copy_grp_map_entry(grp_info, &gmep->grp); - DEBUG(7,("map_unixname: Mapping unix name %s to nt group %s.\n", - gmep->grp.unix_name, gmep->grp.nt_name )); - return True; - } - } - - return False; -} - -#endif - -/*********************************************************** - Lookup nt name. -************************************************************/ -static BOOL map_ntname(DOM_MAP_TYPE type, char *ntname, char *ntdomain, - DOM_NAME_MAP *grp_info) -{ - name_map_entry *gmep; - ubi_slList *map_list; - - /* - * Initialise and load if not already loaded. - */ - map_list = load_name_map(type); - - for (gmep = (name_map_entry *)ubi_slFirst(map_list); - gmep != NULL; - gmep = (name_map_entry *)ubi_slNext(gmep )) - { - if (strequal(gmep->grp.nt_name , ntname) && - strequal(gmep->grp.nt_domain, ntdomain)) - { - copy_grp_map_entry(grp_info, &gmep->grp); - DEBUG(7,("map_ntname: Mapping unix name %s to nt name %s.\n", - gmep->grp.unix_name, gmep->grp.nt_name )); - return True; - } - } - - return False; -} - - -/*********************************************************** - Lookup by SID -************************************************************/ -static BOOL map_sid(DOM_MAP_TYPE type, - DOM_SID *psid, DOM_NAME_MAP *grp_info) -{ - name_map_entry *gmep; - ubi_slList *map_list; - - /* - * Initialise and load if not already loaded. - */ - map_list = load_name_map(type); - - for (gmep = (name_map_entry *)ubi_slFirst(map_list); - gmep != NULL; - gmep = (name_map_entry *)ubi_slNext(gmep )) - { - if (sid_equal(&gmep->grp.sid, psid)) - { - copy_grp_map_entry(grp_info, &gmep->grp); - DEBUG(7,("map_sid: Mapping unix name %s to nt name %s.\n", - gmep->grp.unix_name, gmep->grp.nt_name )); - return True; - } - } - - return False; -} - -/*********************************************************** - Lookup by gid_t. -************************************************************/ -static BOOL map_unixid(DOM_MAP_TYPE type, uint32 unix_id, DOM_NAME_MAP *grp_info) -{ - name_map_entry *gmep; - ubi_slList *map_list; - - /* - * Initialise and load if not already loaded. - */ - map_list = load_name_map(type); - - for (gmep = (name_map_entry *)ubi_slFirst(map_list); - gmep != NULL; - gmep = (name_map_entry *)ubi_slNext(gmep )) - { - fstring sid_str; - sid_to_string(sid_str, &gmep->grp.sid); - DEBUG(10,("map_unixid: enum entry unix group %s %d nt %s %s\n", - gmep->grp.unix_name, gmep->grp.unix_id, gmep->grp.nt_name, sid_str)); - if (gmep->grp.unix_id == unix_id) - { - copy_grp_map_entry(grp_info, &gmep->grp); - DEBUG(7,("map_unixid: Mapping unix name %s to nt name %s type %d\n", - gmep->grp.unix_name, gmep->grp.nt_name, gmep->grp.type)); - return True; - } - } - - return False; -} - -/*********************************************************** - * - * Call four functions to resolve unix group ids and either - * local group SIDs or domain group SIDs listed in the local group - * or domain group map files. - * - * Note that it is *NOT* the responsibility of these functions to - * resolve entries that are not in the map files. - * - * Any SID can be in the map files (i.e from any Domain). - * - ***********************************************************/ - -#if 0 - -/*********************************************************** - Lookup a UNIX Group entry by name. -************************************************************/ -BOOL map_unix_group_name(char *group_name, DOM_NAME_MAP *grp_info) -{ - return map_unixname(DOM_MAP_DOMAIN, group_name, grp_info); -} - -/*********************************************************** - Lookup a UNIX Alias entry by name. -************************************************************/ -BOOL map_unix_alias_name(char *alias_name, DOM_NAME_MAP *grp_info) -{ - return map_unixname(DOM_MAP_LOCAL, alias_name, grp_info); -} - -/*********************************************************** - Lookup an Alias name entry -************************************************************/ -BOOL map_nt_alias_name(char *ntalias_name, char *nt_domain, DOM_NAME_MAP *grp_info) -{ - return map_ntname(DOM_MAP_LOCAL, ntalias_name, nt_domain, grp_info); -} - -/*********************************************************** - Lookup a Group entry -************************************************************/ -BOOL map_nt_group_name(char *ntgroup_name, char *nt_domain, DOM_NAME_MAP *grp_info) -{ - return map_ntname(DOM_MAP_DOMAIN, ntgroup_name, nt_domain, grp_info); -} - -#endif - -/*********************************************************** - Lookup a Username entry by name. -************************************************************/ -static BOOL map_nt_username(char *nt_name, char *nt_domain, DOM_NAME_MAP *grp_info) -{ - return map_ntname(DOM_MAP_USER, nt_name, nt_domain, grp_info); -} - -/*********************************************************** - Lookup a Username entry by SID. -************************************************************/ -static BOOL map_username_sid(DOM_SID *sid, DOM_NAME_MAP *grp_info) -{ - return map_sid(DOM_MAP_USER, sid, grp_info); -} - -/*********************************************************** - Lookup a Username SID entry by uid. -************************************************************/ -static BOOL map_username_uid(uid_t gid, DOM_NAME_MAP *grp_info) -{ - return map_unixid(DOM_MAP_USER, (uint32)gid, grp_info); -} - -/*********************************************************** - Lookup an Alias SID entry by name. -************************************************************/ -BOOL map_alias_sid(DOM_SID *psid, DOM_NAME_MAP *grp_info) -{ - return map_sid(DOM_MAP_LOCAL, psid, grp_info); -} - -/*********************************************************** - Lookup a Group entry by sid. -************************************************************/ -BOOL map_group_sid(DOM_SID *psid, DOM_NAME_MAP *grp_info) -{ - return map_sid(DOM_MAP_DOMAIN, psid, grp_info); -} - -/*********************************************************** - Lookup an Alias SID entry by gid_t. -************************************************************/ -static BOOL map_alias_gid(gid_t gid, DOM_NAME_MAP *grp_info) -{ - return map_unixid(DOM_MAP_LOCAL, (uint32)gid, grp_info); -} - -/*********************************************************** - Lookup a Group SID entry by gid_t. -************************************************************/ -static BOOL map_group_gid( gid_t gid, DOM_NAME_MAP *grp_info) -{ - return map_unixid(DOM_MAP_DOMAIN, (uint32)gid, grp_info); -} - - -/************************************************************************ - Routine to look up User details by UNIX name -*************************************************************************/ -BOOL lookupsmbpwnam(const char *unix_usr_name, DOM_NAME_MAP *grp) -{ - uid_t uid; - DEBUG(10,("lookupsmbpwnam: unix user name %s\n", unix_usr_name)); - if (nametouid(unix_usr_name, &uid)) - { - return lookupsmbpwuid(uid, grp); - } - else - { - return False; - } -} - -/************************************************************************ - Routine to look up a remote nt name -*************************************************************************/ -static BOOL lookup_remote_ntname(const char *ntname, DOM_SID *sid, uint8 *type) -{ - struct cli_state cli; - POLICY_HND lsa_pol; - fstring srv_name; - extern struct ntuser_creds *usr_creds; - struct ntuser_creds usr; - - BOOL res3 = True; - BOOL res4 = True; - uint32 num_sids; - DOM_SID *sids; - uint8 *types; - char *names[1]; - - usr_creds = &usr; - - ZERO_STRUCT(usr); - pwd_set_nullpwd(&usr.pwd); - - DEBUG(5,("lookup_remote_ntname: %s\n", ntname)); - - if (!cli_connect_serverlist(&cli, lp_passwordserver())) - { - return False; - } - - names[0] = ntname; - - fstrcpy(srv_name, "\\\\"); - fstrcat(srv_name, cli.desthost); - strupper(srv_name); - - /* lookup domain controller; receive a policy handle */ - res3 = res3 ? lsa_open_policy( srv_name, - &lsa_pol, True) : False; - - /* send lsa lookup sids call */ - res4 = res3 ? lsa_lookup_names( &lsa_pol, - 1, names, - &sids, &types, &num_sids) : False; - - res3 = res3 ? lsa_close(&lsa_pol) : False; - - if (res4 && res3 && sids != NULL && types != NULL) - { - sid_copy(sid, &sids[0]); - *type = types[0]; - } - else - { - res3 = False; - } - if (types != NULL) - { - free(types); - } - - if (sids != NULL) - { - free(sids); - } - - return res3 && res4; -} - -/************************************************************************ - Routine to look up a remote nt name -*************************************************************************/ -static BOOL get_sid_and_type(const char *fullntname, uint8 expected_type, - DOM_NAME_MAP *gmep) -{ - /* - * check with the PDC to see if it owns the name. if so, - * the SID is resolved with the PDC database. - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { - if (lookup_remote_ntname(fullntname, &gmep->sid, &gmep->type)) - { - if (sid_front_equal(&gmep->sid, &global_member_sid) && - strequal(gmep->nt_domain, global_myworkgroup) && - gmep->type == expected_type) - { - return True; - } - return False; - } - } - - /* - * ... otherwise, it's one of ours. map the sid ourselves, - * which can only happen in our own SAM database. - */ - - if (!strequal(gmep->nt_domain, global_sam_name)) - { - return False; - } - if (!pwdb_unixid_to_sam_sid(gmep->unix_id, gmep->type, &gmep->sid)) - { - return False; - } - - return True; -} - -/* - * used by lookup functions below - */ - -static fstring nt_name; -static fstring unix_name; -static fstring nt_domain; - -/************************************************************************* - looks up a uid, returns User Information. -*************************************************************************/ -BOOL lookupsmbpwuid(uid_t uid, DOM_NAME_MAP *gmep) -{ - DEBUG(10,("lookupsmbpwuid: unix uid %d\n", uid)); - if (map_username_uid(uid, gmep)) - { - return True; - } -#if 0 - if (lp_server_role() != ROLE_DOMAIN_NONE) -#endif - { - gmep->nt_name = nt_name; - gmep->unix_name = unix_name; - gmep->nt_domain = nt_domain; - - gmep->unix_id = (uint32)uid; - - /* - * ok, assume it's one of ours. then double-check it - * if we are a member of a domain - */ - - gmep->type = SID_NAME_USER; - fstrcpy(gmep->nt_name, uidtoname(uid)); - fstrcpy(gmep->unix_name, gmep->nt_name); - - /* - * here we should do a LsaLookupNames() call - * to check the status of the name with the PDC. - * if the PDC know nothing of the name, it's ours. - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { -#if 0 - lsa_lookup_names(global_myworkgroup, gmep->nt_name, &gmep->sid...); -#endif - } - - /* - * ok, it's one of ours. - */ - - gmep->nt_domain = global_sam_name; - pwdb_unixid_to_sam_sid(gmep->unix_id, gmep->type, &gmep->sid); - - return True; - } - - /* oops. */ - - return False; -} - -/************************************************************************* - looks up by NT name, returns User Information. -*************************************************************************/ -BOOL lookupsmbpwntnam(const char *fullntname, DOM_NAME_MAP *gmep) -{ - DEBUG(10,("lookupsmbpwntnam: nt user name %s\n", fullntname)); - - if (!split_domain_name(fullntname, nt_domain, nt_name)) - { - return False; - } - - if (map_nt_username(nt_name, nt_domain, gmep)) - { - return True; - } - if (lp_server_role() != ROLE_DOMAIN_NONE) - { - uid_t uid; - gmep->nt_name = nt_name; - gmep->unix_name = unix_name; - gmep->nt_domain = nt_domain; - - /* - * ok, it's one of ours. we therefore "create" an nt user named - * after the unix user. this is the point where "appliance mode" - * should get its teeth in, as unix users won't really exist, - * they will only be numbers... - */ - - gmep->type = SID_NAME_USER; - fstrcpy(gmep->unix_name, gmep->nt_name); - if (!nametouid(gmep->unix_name, &uid)) - { - return False; - } - gmep->unix_id = (uint32)uid; - - return get_sid_and_type(fullntname, gmep->type, gmep); - } - - /* oops. */ - - return False; -} - -/************************************************************************* - looks up by RID, returns User Information. -*************************************************************************/ -BOOL lookupsmbpwsid(DOM_SID *sid, DOM_NAME_MAP *gmep) -{ - fstring sid_str; - sid_to_string(sid_str, sid); - DEBUG(10,("lookupsmbpwsid: nt sid %s\n", sid_str)); - - if (map_username_sid(sid, gmep)) - { - return True; - } - if (lp_server_role() != ROLE_DOMAIN_NONE) - { - gmep->nt_name = nt_name; - gmep->unix_name = unix_name; - gmep->nt_domain = nt_domain; - - /* - * here we should do a LsaLookupNames() call - * to check the status of the name with the PDC. - * if the PDC know nothing of the name, it's ours. - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { -#if 0 - if (lookup_remote_sid(global_myworkgroup, gmep->sid, gmep->nt_name, gmep->nt_domain...); -#endif - } - - /* - * ok, it's one of ours. we therefore "create" an nt user named - * after the unix user. this is the point where "appliance mode" - * should get its teeth in, as unix users won't really exist, - * they will only be numbers... - */ - - gmep->type = SID_NAME_USER; - sid_copy(&gmep->sid, sid); - if (!pwdb_sam_sid_to_unixid(&gmep->sid, gmep->type, &gmep->unix_id)) - { - return False; - } - fstrcpy(gmep->nt_name, uidtoname((uid_t)gmep->unix_id)); - fstrcpy(gmep->unix_name, gmep->nt_name); - gmep->nt_domain = global_sam_name; - - return True; - } - - /* oops. */ - - return False; -} - -/************************************************************************ - Routine to look up group / alias / well-known group RID by UNIX name -*************************************************************************/ -BOOL lookupsmbgrpnam(const char *unix_grp_name, DOM_NAME_MAP *grp) -{ - gid_t gid; - DEBUG(10,("lookupsmbgrpnam: unix user group %s\n", unix_grp_name)); - if (nametogid(unix_grp_name, &gid)) - { - return lookupsmbgrpgid(gid, grp); - } - else - { - return False; - } -} - -/************************************************************************* - looks up a SID, returns name map entry -*************************************************************************/ -BOOL lookupsmbgrpsid(DOM_SID *sid, DOM_NAME_MAP *gmep) -{ - fstring sid_str; - sid_to_string(sid_str, sid); - DEBUG(10,("lookupsmbgrpsid: nt sid %s\n", sid_str)); - - if (map_alias_sid(sid, gmep)) - { - return True; - } - if (map_group_sid(sid, gmep)) - { - return True; - } - if (lp_server_role() != ROLE_DOMAIN_NONE) - { - gmep->nt_name = nt_name; - gmep->unix_name = unix_name; - gmep->nt_domain = nt_domain; - - /* - * here we should do a LsaLookupNames() call - * to check the status of the name with the PDC. - * if the PDC know nothing of the name, it's ours. - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { -#if 0 - lsa_lookup_sids(global_myworkgroup, gmep->sid, gmep->nt_name, gmep->nt_domain...); -#endif - } - - /* - * ok, it's one of ours. we therefore "create" an nt group or - * alias name named after the unix group. this is the point - * where "appliance mode" should get its teeth in, as unix - * groups won't really exist, they will only be numbers... - */ - - /* name is not explicitly mapped - * with map files or the PDC - * so we are responsible for it... - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { - /* ... as a LOCAL group. */ - gmep->type = SID_NAME_ALIAS; - } - else - { - /* ... as a DOMAIN group. */ - gmep->type = SID_NAME_DOM_GRP; - } - - sid_copy(&gmep->sid, sid); - if (!pwdb_sam_sid_to_unixid(&gmep->sid, gmep->type, &gmep->unix_id)) - { - return False; - } - fstrcpy(gmep->nt_name, gidtoname((gid_t)gmep->unix_id)); - fstrcpy(gmep->unix_name, gmep->nt_name); - gmep->nt_domain = global_sam_name; - - return True; - } - - /* oops */ - return False; -} - -/************************************************************************* - looks up a gid, returns RID and type local, domain or well-known domain group -*************************************************************************/ -BOOL lookupsmbgrpgid(gid_t gid, DOM_NAME_MAP *gmep) -{ - DEBUG(10,("lookupsmbgrpgid: unix gid %d\n", (int)gid)); - if (map_alias_gid(gid, gmep)) - { - return True; - } - if (map_group_gid(gid, gmep)) - { - return True; - } - if (lp_server_role() != ROLE_DOMAIN_NONE) - { - gmep->nt_name = nt_name; - gmep->unix_name = unix_name; - gmep->nt_domain = nt_domain; - - gmep->unix_id = (uint32)gid; - - /* - * here we should do a LsaLookupNames() call - * to check the status of the name with the PDC. - * if the PDC know nothing of the name, it's ours. - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { -#if 0 - if (lsa_lookup_names(global_myworkgroup, gmep->nt_name, &gmep->sid...); - { - return True; - } -#endif - } - - /* - * ok, it's one of ours. we therefore "create" an nt group or - * alias name named after the unix group. this is the point - * where "appliance mode" should get its teeth in, as unix - * groups won't really exist, they will only be numbers... - */ - - /* name is not explicitly mapped - * with map files or the PDC - * so we are responsible for it... - */ - - if (lp_server_role() == ROLE_DOMAIN_MEMBER) - { - /* ... as a LOCAL group. */ - gmep->type = SID_NAME_ALIAS; - } - else - { - /* ... as a DOMAIN group. */ - gmep->type = SID_NAME_DOM_GRP; - } - fstrcpy(gmep->nt_name, gidtoname(gid)); - fstrcpy(gmep->unix_name, gmep->nt_name); - - return get_sid_and_type(gmep->nt_name, gmep->type, gmep); - } - - /* oops */ - return False; -} - diff --git a/source/python/.cvsignore b/source/python/.cvsignore deleted file mode 100644 index 659ddbfdf95..00000000000 --- a/source/python/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -setup.py diff --git a/source/python/examples/spoolss/changeid.py b/source/python/examples/spoolss/changeid.py deleted file mode 100755 index b2345094edc..00000000000 --- a/source/python/examples/spoolss/changeid.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/python -# -# Display the changeid for a list of printers given on the command line -# - -import sys, spoolss - -if len(sys.argv) == 1: - print "Usage: changeid.py <printername>" - sys.exit(1) - -for printer in sys.argv[1:]: - - # Open printer handle - - try: - hnd = spoolss.openprinter(printer) - except: - print "error opening printer %s" % printer - sys.exit(1) - - # Fetch and display changeid - - info = hnd.getprinter(level = 0) - print info["change_id"] - - # Clean up - - spoolss.closeprinter(hnd) diff --git a/source/python/examples/spoolss/enumprinters.py b/source/python/examples/spoolss/enumprinters.py deleted file mode 100755 index bf08b95bb95..00000000000 --- a/source/python/examples/spoolss/enumprinters.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# -# Display information on all printers on a print server -# - -import sys, spoolss - -if len(sys.argv) != 2: - print "Usage: changeid.py <printername>" - sys.exit(1) - -printserver = sys.argv[1] - -# Get list of printers - -try: - printer_list = spoolss.enumprinters(printserver) -except: - print "error enumerating printers on %s" % printserver - sys.exit(1) - -# Display basic info - -for printer in printer_list: - print "%s: %s" % (printer["printer_name"], printer["comment"]) diff --git a/source/python/examples/spoolss/psec.py b/source/python/examples/spoolss/psec.py deleted file mode 100755 index f3fdb7bccd6..00000000000 --- a/source/python/examples/spoolss/psec.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env python -# -# Get or set the security descriptor on a printer -# - -import sys, spoolss, re, string - -if len(sys.argv) != 3: - print "Usage: psec.py getsec|setsec printername" - sys.exit(1) - -op = sys.argv[1] -printername = sys.argv[2] - -# Display security descriptor - -if op == "getsec": - - try: - hnd = spoolss.openprinter(printername) - except: - print "error opening printer %s" % printername - sys.exit(1) - - secdesc = hnd.getprinter(level = 3)["security_descriptor"] - - print secdesc["owner_sid"] - print secdesc["group_sid"] - - for acl in secdesc["dacl"]["ace_list"]: - print "%d %d 0x%08x %s" % (acl["type"], acl["flags"], - acl["mask"], acl["trustee"]) - - spoolss.closeprinter(hnd) - - sys.exit(0) - -# Set security descriptor - -if op == "setsec": - - # Open printer - - try: - hnd = spoolss.openprinter(printername, - creds = {"domain": "NPSD-TEST2", - "username": "Administrator", - "password": "penguin"}) - except: - print "error opening printer %s" % printername - sys.exit(1) - - # Read lines from standard input and build security descriptor - - lines = sys.stdin.readlines() - - secdesc = {} - - secdesc["owner_sid"] = lines[0] - secdesc["group_sid"] = lines[1] - - secdesc["revision"] = 1 - secdesc["dacl"] = {} - secdesc["dacl"]["revision"] = 2 - secdesc["dacl"]["ace_list"] = [] - - for acl in lines[2:]: - match = re.match("(\d+) (\d+) (0[xX][\dA-Fa-f]+) (\S+)", acl) - secdesc["dacl"]["ace_list"].append( - {"type": int(match.group(1)), "flags": int(match.group(2)), - "mask": string.atoi(match.group(3), 0), "trustee": match.group(4)}) - - # Build info3 structure - - info3 = {} - - info3["flags"] = 0x8004 # self-relative, dacl present - info3["level"] = 3 - info3["security_descriptor"] = secdesc - - hnd.setprinter(info3) - - spoolss.closeprinter(hnd) - sys.exit(0) - -print "invalid operation %s" % op -sys.exit(1) diff --git a/source/python/gtdbtool b/source/python/gtdbtool deleted file mode 100755 index 65133667909..00000000000 --- a/source/python/gtdbtool +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/bin/env python - -from gtk import * -import sys -import tdb -import string -import re - -# -# The gdbtool user interface. The design here is to keep all the gtk stuff -# separate from the tdb stuff so all the user interface magic is stored -# here. -# - -class gtdbtool: - - # Initialise the user interface. A dictionary argument is passed - # in which is the dictionary to display keys and values on the left - # hand and right hand side of the user interface respectively.""" - - def __init__(self, dict): - self.dict = dict - self.value_display_fns = [] - self.filter_regex = "" - - # Create and configure user interface widgets. A string argument is - # used to set the window title. - - def build_ui(self, title): - win = GtkWindow() - win.set_title(title) - - win.connect("destroy", mainquit) - - hpaned = GtkHPaned() - win.add(hpaned) - hpaned.set_border_width(5) - hpaned.show() - - vbox = GtkVBox() - hpaned.add1(vbox) - vbox.show() - - scrolled_win = GtkScrolledWindow() - scrolled_win.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) - vbox.pack_start(scrolled_win) - scrolled_win.show() - - hbox = GtkHBox() - vbox.pack_end(hbox, expand = 0, padding = 5) - hbox.show() - - label = GtkLabel("Filter:") - hbox.pack_start(label, expand = 0, padding = 5) - label.show() - - self.entry = GtkEntry() - hbox.pack_end(self.entry, padding = 5) - self.entry.show() - - self.entry.connect("activate", self.filter_activated) - - self.list = GtkList() - self.list.set_selection_mode(SELECTION_MULTIPLE) - self.list.set_selection_mode(SELECTION_BROWSE) - scrolled_win.add_with_viewport(self.list) - self.list.show() - - self.list.connect("select_child", self.key_selected) - - scrolled_win = GtkScrolledWindow() - scrolled_win.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) - hpaned.add2(scrolled_win) - scrolled_win.set_usize(500,400) - scrolled_win.show() - - self.text = GtkText() - self.text.set_editable(FALSE) - scrolled_win.add_with_viewport(self.text) - self.text.show() - - self.text.connect("event", self.event_handler) - - self.menu = GtkMenu() - self.menu.show() - - self.font = load_font("fixed") - - self.update_keylist() - - win.show() - - # Add a key to the left hand side of the user interface - - def add_key(self, key): - display_key = self.display_key(key) - list_item = GtkListItem(display_key) - list_item.set_data("raw_key", key) # Store raw key in item data - self.list.add(list_item) - list_item.show() - - # Event handler registered by build_ui() - - def event_handler(self, event, menu): - return FALSE - - # Set the text to appear in the right hand side of the user interface - - def set_value_text(self, text): - self.text.delete_text(0, self.text.get_length()) - - # The text widget has trouble inserting text containing NULL - # characters. - - text = string.replace(text, "\x00", ".") - - self.text.insert(self.font, None, None, text) - - # This function is called when a key is selected in the left hand side - # of the user interface. - - def key_selected(self, list, list_item): - key = list_item.children()[0].get() - - # Look for a match in the value display function list - - text = t[list_item.get_data("raw_key")] - - for entry in self.value_display_fns: - if re.match(entry[0], key): - text = entry[1](text) - break - - self.set_value_text(text) - - # Refresh the key list by removing all items and re-inserting them. - # Items are only inserted if they pass through the filter regexp. - - def update_keylist(self): - self.list.remove_items(self.list.children()) - self.set_value_text("") - for k in self.dict.keys(): - if re.match(self.filter_regex, k): - self.add_key(k) - - # Invoked when the user hits return in the filter text entry widget. - - def filter_activated(self, entry): - self.filter_regex = entry.get_text() - self.update_keylist() - - # - # Public methods - # - - # Set a function that translates between how keys look in the user - # interface (displayed keys) versus how they are represented in the tdb - # (raw keys). - - def set_display_key_fn(self, fn): - self.display_key = fn - - # Register a value display function for a key. The first argument is a - # regex that matches key values, and the second argument is a function - # to call to convert the raw value data to a string to display in the - # right hand side of the UI. - - def register_display_value_fn(self, key_regexp, fn): - self.value_display_fns.append((key_regexp, fn)) - - def display_value_hex(self, value): - return "foo" - -def convert_to_hex(data): - """Return a hex dump of a string as a string. - - The output produced is in the standard 16 characters per line hex + - ascii format: - - 00000000: 40 00 00 00 00 00 00 00 40 00 00 00 01 00 04 80 @....... @....... - 00000010: 01 01 00 00 00 00 00 01 00 00 00 00 ........ .... - """ - - pos = 0 # Position in data - line = 0 # Line of data - - hex = "" # Hex display - ascii = "" # ASCII display - - result = "" - - while pos < len(data): - - # Start with header - - if pos % 16 == 0: - hex = "%08x: " % (line * 16) - ascii = "" - - # Add character - - hex = hex + "%02x " % (ord(data[pos])) - - if ord(data[pos]) < 32 or ord(data[pos]) > 176: - ascii = ascii + '.' - else: - ascii = ascii + data[pos] - - pos = pos + 1 - - # Add separator if half way - - if pos % 16 == 8: - hex = hex + " " - ascii = ascii + " " - - # End of line - - if pos % 16 == 0: - result = result + "%s %s\n" % (hex, ascii) - line = line + 1 - - # Leftover bits - - if pos % 16 != 0: - - # Pad hex string - - for i in range(0, (16 - (pos % 16))): - hex = hex + " " - - # Half way separator - - if (pos % 16) < 8: - hex = hex + " " - - result = result + "%s %s\n" % (hex, ascii) - - return result - -# Open handle on tdb - -if len(sys.argv) != 2: - print "Usage: gdbtool <tdbfile>" - sys.exit(1) - -t = tdb.open(sys.argv[1]) - -# Create user interface - -w = gtdbtool(t) - -# Set up a key display function. A lot of keys have \x00 appended to the -# end which mucks up gtk. - -def display_key_x00(key): - return string.replace(key, "\x00", "") - -w.set_display_key_fn(display_key_x00) - -def display_value_hex(value): - return value; - -w.register_display_value_fn("DRIVERS/", convert_to_hex) -w.register_display_value_fn("SECDESC/", convert_to_hex) -w.register_display_value_fn("PRINTERS/", convert_to_hex) - -# Show user interface - -w.build_ui("gtdbtool: %s" % sys.argv[1]) - -mainloop() diff --git a/source/python/mkpatch b/source/python/mkpatch deleted file mode 100755 index ab5be1b6a2f..00000000000 --- a/source/python/mkpatch +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# -# Make samba-head.patch. Must be run from samba source directory. -# - -cvs -z3 diff -u Makefile.in configure.in > python/samba-head.patch diff --git a/source/python/py_common.c b/source/python/py_common.c deleted file mode 100644 index 890422536e0..00000000000 --- a/source/python/py_common.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "Python.h" - -#include "python/py_common_proto.h" - -/* Return a tuple of (error code, error string) from a WERROR */ - -PyObject *py_werror_tuple(WERROR werror) -{ - return Py_BuildValue("[is]", W_ERROR_V(werror), - dos_errstr(werror)); -} - -/* Return a tuple of (error code, error string) from a WERROR */ - -PyObject *py_ntstatus_tuple(NTSTATUS ntstatus) -{ - return Py_BuildValue("[is]", NT_STATUS_V(ntstatus), - nt_errstr(ntstatus)); -} - -/* Initialise samba client routines */ - -static BOOL initialised; - -void py_samba_init(void) -{ - extern pstring global_myname; - char *p; - - if (initialised) - return; - - /* Load configuration file */ - - if (!lp_load(dyn_CONFIGFILE, True, False, False)) - fprintf(stderr, "Can't load %s\n", dyn_CONFIGFILE); - - /* Misc other stuff */ - - load_interfaces(); - - fstrcpy(global_myname, myhostname()); - p = strchr(global_myname, '.'); - if (p) - *p = 0; - - initialised = True; -} - -/* Debuglevel routines */ - -PyObject *get_debuglevel(PyObject *self, PyObject *args) -{ - PyObject *debuglevel; - - if (!PyArg_ParseTuple(args, "")) - return NULL; - - debuglevel = PyInt_FromLong(DEBUGLEVEL); - - return debuglevel; -} - -PyObject *set_debuglevel(PyObject *self, PyObject *args) -{ - int debuglevel; - - if (!PyArg_ParseTuple(args, "i", &debuglevel)) - return NULL; - - DEBUGLEVEL = debuglevel; - - Py_INCREF(Py_None); - return Py_None; -} - -/* Initialise logging */ - -PyObject *py_setup_logging(PyObject *self, PyObject *args, PyObject *kw) -{ - BOOL interactive = False; - char *logfilename = NULL; - static char *kwlist[] = {"interactive", "logfilename", NULL}; - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "|is", kwlist, &interactive, &logfilename)) - return NULL; - - if (interactive && logfilename) { - PyErr_SetString(PyExc_RuntimeError, - "can't be interactive and set log file name"); - return NULL; - } - - if (interactive) - setup_logging("spoolss", True); - - if (logfilename) { - lp_set_logfile(logfilename); - setup_logging(logfilename, False); - reopen_logs(); - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Return a cli_state to a RPC pipe on the given server. Use the - credentials passed if not NULL. If an error occurs errstr is set to a - string describing the error and NULL is returned. If set, errstr must - be freed by calling free(). */ - -struct cli_state *open_pipe_creds(char *server, PyObject *creds, - char *pipe_name, char **errstr) -{ - char *username = "", *password = "", *domain = ""; - struct cli_state *cli; - NTSTATUS result; - - /* Extract credentials from the python dictionary */ - - if (creds && PyDict_Size(creds) > 0) { - PyObject *username_obj, *password_obj, *domain_obj; - - /* Check credentials passed are valid. This means the - username, domain and password keys must exist and be - string objects. */ - - username_obj = PyDict_GetItemString(creds, "username"); - domain_obj = PyDict_GetItemString(creds, "domain"); - password_obj = PyDict_GetItemString(creds, "password"); - - if (!username_obj || !domain_obj || !password_obj) { - creds_error: - *errstr = strdup("invalid credentials"); - return NULL; - } - - if (!PyString_Check(username_obj) || - !PyString_Check(domain_obj) || - !PyString_Check(password_obj)) - goto creds_error; - - username = PyString_AsString(username_obj); - domain = PyString_AsString(domain_obj); - password = PyString_AsString(password_obj); - - if (!username || !domain || !password) - goto creds_error; - } - - /* Now try to connect */ - - result = cli_full_connection( - &cli, NULL, server, NULL, 0, "IPC$", "IPC", - username, domain, password, 0); - - if (!NT_STATUS_IS_OK(result)) { - *errstr = strdup("error connecting to IPC$ pipe"); - return NULL; - } - - if (!cli_nt_session_open(cli, pipe_name)) { - cli_shutdown(cli); - free(cli); - asprintf(errstr, "error opening %s", pipe_name); - return NULL; - } - - *errstr = NULL; - - return cli; -} - -/* Return true if a dictionary contains a "level" key with an integer - value. Set the value if so. */ - -BOOL get_level_value(PyObject *dict, uint32 *level) -{ - PyObject *obj; - - if (!(obj = PyDict_GetItemString(dict, "level")) || - !PyInt_Check(obj)) - return False; - - if (level) - *level = PyInt_AsLong(obj); - - return True; -} diff --git a/source/python/py_common.h b/source/python/py_common.h deleted file mode 100644 index 1f5188971db..00000000000 --- a/source/python/py_common.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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. -*/ - -#ifndef _PY_COMMON_H -#define _PY_COMMON_H - -#include "includes.h" - -/* Return a cli_state struct opened on the specified pipe. If credentials - are passed use them. */ - -typedef struct cli_state *(cli_pipe_fn)( - struct cli_state *cli, char *system_name, - struct ntuser_creds *creds); - -#include "python/py_common_proto.h" - -#endif /* _PY_COMMON_H */ diff --git a/source/python/py_common_proto.h b/source/python/py_common_proto.h deleted file mode 100644 index 143ea2947c3..00000000000 --- a/source/python/py_common_proto.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _PY_COMMON_PROTO_H -#define _PY_COMMON_PROTO_H - -/* This file is automatically generated with "make proto". DO NOT EDIT */ - - -/* The following definitions come from python/py_common.c */ - -PyObject *py_werror_tuple(WERROR werror); -PyObject *py_ntstatus_tuple(NTSTATUS ntstatus); -void py_samba_init(void); -PyObject *get_debuglevel(PyObject *self, PyObject *args); -PyObject *set_debuglevel(PyObject *self, PyObject *args); -PyObject *py_setup_logging(PyObject *self, PyObject *args, PyObject *kw); -struct cli_state *open_pipe_creds(char *server, PyObject *creds, - char *pipe_name, char **errstr); -BOOL get_level_value(PyObject *dict, uint32 *level); - -/* The following definitions come from python/py_ntsec.c */ - -BOOL py_from_SID(PyObject **obj, DOM_SID *sid); -BOOL py_to_SID(DOM_SID *sid, PyObject *obj); -BOOL py_from_ACE(PyObject **dict, SEC_ACE *ace); -BOOL py_to_ACE(SEC_ACE *ace, PyObject *dict); -BOOL py_from_ACL(PyObject **dict, SEC_ACL *acl); -BOOL py_to_ACL(SEC_ACL *acl, PyObject *dict, TALLOC_CTX *mem_ctx); -BOOL py_from_SECDESC(PyObject **dict, SEC_DESC *sd); -BOOL py_to_SECDESC(SEC_DESC **sd, PyObject *dict, TALLOC_CTX *mem_ctx); - -#endif /* _PY_COMMON_PROTO_H */ diff --git a/source/python/py_conv.c b/source/python/py_conv.c deleted file mode 100644 index 39b20ace861..00000000000 --- a/source/python/py_conv.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "Python.h" -#include "py_conv.h" - -/* Helper for rpcstr_pull() function */ - -static void fstr_pull(fstring str, UNISTR *uni) -{ - rpcstr_pull(str, uni->buffer, sizeof(fstring), -1, STR_TERMINATE); -} - -/* Convert a structure to a Python dict */ - -PyObject *from_struct(void *s, struct pyconv *conv) -{ - PyObject *obj, *item; - int i; - - obj = PyDict_New(); - - for (i = 0; conv[i].name; i++) { - switch (conv[i].type) { - case PY_UNISTR: { - UNISTR *u = (UNISTR *)((char *)s + conv[i].offset); - fstring s = ""; - - if (u->buffer) - fstr_pull(s, u); - - item = PyString_FromString(s); - PyDict_SetItemString(obj, conv[i].name, item); - - break; - } - case PY_UINT32: { - uint32 *u = (uint32 *)((char *)s + conv[i].offset); - - item = PyInt_FromLong(*u); - PyDict_SetItemString(obj, conv[i].name, item); - - break; - } - case PY_UINT16: { - uint16 *u = (uint16 *)((char *)s + conv[i].offset); - - item = PyInt_FromLong(*u); - PyDict_SetItemString(obj, conv[i].name, item); - - break; - } - default: - break; - } - } - - return obj; -} - -/* Convert a Python dict to a structure */ - -BOOL to_struct(void *s, PyObject *dict, struct pyconv *conv) -{ - PyObject *visited, *key, *value; - BOOL result = False; - int i; - - visited = PyDict_New(); - - for (i = 0; conv[i].name; i++) { - PyObject *obj; - - obj = PyDict_GetItemString(dict, conv[i].name); - - if (!obj) - goto done; - - switch (conv[i].type) { - case PY_UNISTR: { - UNISTR *u = (UNISTR *)((char *)s + conv[i].offset); - char *s = ""; - - if (!PyString_Check(obj)) - goto done; - - s = PyString_AsString(obj); - init_unistr(u, s); - - break; - } - case PY_UINT32: { - uint32 *u = (uint32 *)((char *)s + conv[i].offset); - - if (!PyInt_Check(obj)) - goto done; - - *u = PyInt_AsLong(obj); - - break; - } - case PY_UINT16: { - uint16 *u = (uint16 *)((char *)s + conv[i].offset); - - if (!PyInt_Check(obj)) - goto done; - - *u = PyInt_AsLong(obj); - break; - } - default: - break; - } - - /* Mark as visited */ - - PyDict_SetItemString(visited, conv[i].name, - PyInt_FromLong(1)); - } - - /* Iterate over each item in the input dictionary and see if it was - visited. If it wasn't then the user has added some extra crap - to the dictionary. */ - - i = 0; - - while (PyDict_Next(dict, &i, &key, &value)) { - if (!PyDict_GetItem(visited, key)) - goto done; - } - - result = True; - -done: - /* We must decrement the reference count here or the visited - dictionary will not be freed. */ - - Py_DECREF(visited); - - return result; -} diff --git a/source/python/py_conv.h b/source/python/py_conv.h deleted file mode 100644 index ed06b9a852a..00000000000 --- a/source/python/py_conv.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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. -*/ - -#ifndef _PY_CONV_H -#define _PY_CONV_H - -enum pyconv_types { PY_UNISTR, PY_UINT32, PY_UINT16 }; - -struct pyconv { - char *name; /* Name of member */ - enum pyconv_types type; /* Type */ - size_t offset; /* Offset into structure */ -}; - -PyObject *from_struct(void *s, struct pyconv *conv); -BOOL to_struct(void *s, PyObject *dict, struct pyconv *conv); - -/* Another version of offsetof (-: */ - -#undef offsetof -#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) - -#endif /* _PY_CONV_H */ diff --git a/source/python/py_lsa.c b/source/python/py_lsa.c deleted file mode 100644 index 21e6463c5f2..00000000000 --- a/source/python/py_lsa.c +++ /dev/null @@ -1,462 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_lsa.h" - -PyObject *new_lsa_policy_hnd_object(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *pol) -{ - lsa_policy_hnd_object *o; - - o = PyObject_New(lsa_policy_hnd_object, &lsa_policy_hnd_type); - - o->cli = cli; - o->mem_ctx = mem_ctx; - memcpy(&o->pol, pol, sizeof(POLICY_HND)); - - return (PyObject*)o; -} - -/* - * Exceptions raised by this module - */ - -PyObject *lsa_error; /* This indicates a non-RPC related error - such as name lookup failure */ - -PyObject *lsa_ntstatus; /* This exception is raised when a RPC call - returns a status code other than - NT_STATUS_OK */ - -/* - * Open/close lsa handles - */ - -static PyObject *lsa_open_policy(PyObject *self, PyObject *args, - PyObject *kw) -{ - static char *kwlist[] = { "servername", "creds", "access", NULL }; - char *server, *errstr; - PyObject *creds = NULL, *result = NULL; - uint32 desired_access = MAXIMUM_ALLOWED_ACCESS; - struct cli_state *cli = NULL; - NTSTATUS ntstatus; - TALLOC_CTX *mem_ctx = NULL; - POLICY_HND hnd; - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|Oi", kwlist, &server, &creds, &desired_access)) - return NULL; - - if (creds && creds != Py_None && !PyDict_Check(creds)) { - PyErr_SetString(PyExc_TypeError, - "credentials must be dictionary or None"); - return NULL; - } - - if (server[0] != '\\' || server[1] != '\\') { - PyErr_SetString(PyExc_ValueError, "UNC name required"); - return NULL; - } - - server += 2; - - if (!(cli = open_pipe_creds(server, creds, PIPE_LSARPC, &errstr))) { - PyErr_SetString(lsa_error, errstr); - free(errstr); - return NULL; - } - - if (!(mem_ctx = talloc_init())) { - PyErr_SetString(lsa_error, "unable to init talloc context\n"); - goto done; - } - - ntstatus = cli_lsa_open_policy(cli, mem_ctx, True, - SEC_RIGHTS_MAXIMUM_ALLOWED, &hnd); - - if (!NT_STATUS_IS_OK(ntstatus)) { - PyErr_SetObject(lsa_ntstatus, py_ntstatus_tuple(ntstatus)); - goto done; - } - - result = new_lsa_policy_hnd_object(cli, mem_ctx, &hnd); - -done: - if (!result) { - if (cli) - cli_shutdown(cli); - - if (mem_ctx) - talloc_destroy(mem_ctx); - } - - return result; -} - -static PyObject *lsa_close(PyObject *self, PyObject *args, PyObject *kw) -{ - PyObject *po; - lsa_policy_hnd_object *hnd; - NTSTATUS result; - - /* Parse parameters */ - - if (!PyArg_ParseTuple(args, "O!", &lsa_policy_hnd_type, &po)) - return NULL; - - hnd = (lsa_policy_hnd_object *)po; - - /* Call rpc function */ - - result = cli_lsa_close(hnd->cli, hnd->mem_ctx, &hnd->pol); - - /* Cleanup samba stuff */ - - cli_shutdown(hnd->cli); - talloc_destroy(hnd->mem_ctx); - - /* Return value */ - - Py_INCREF(Py_None); - return Py_None; -} - -static PyObject *lsa_lookup_names(PyObject *self, PyObject *args) -{ - PyObject *py_names, *result; - NTSTATUS ntstatus; - lsa_policy_hnd_object *hnd = (lsa_policy_hnd_object *)self; - int num_names, i; - const char **names; - DOM_SID *sids; - uint32 *name_types; - - if (!PyArg_ParseTuple(args, "O", &py_names)) - return NULL; - - if (!PyList_Check(py_names) && !PyString_Check(py_names)) { - PyErr_SetString(PyExc_TypeError, "must be list or string"); - return NULL; - } - - if (PyList_Check(py_names)) { - - /* Convert list to char ** array */ - - num_names = PyList_Size(py_names); - names = (const char **)talloc( - hnd->mem_ctx, num_names * sizeof(char *)); - - for (i = 0; i < num_names; i++) { - PyObject *obj = PyList_GetItem(py_names, i); - - names[i] = talloc_strdup(hnd->mem_ctx, PyString_AsString(obj)); - } - - } else { - - /* Just a single element */ - - num_names = 1; - names = (const char **)talloc(hnd->mem_ctx, sizeof(char *)); - - names[0] = PyString_AsString(py_names); - } - - ntstatus = cli_lsa_lookup_names(hnd->cli, hnd->mem_ctx, &hnd->pol, - num_names, names, &sids, &name_types); - - if (!NT_STATUS_IS_OK(ntstatus) && NT_STATUS_V(ntstatus) != 0x107) { - PyErr_SetObject(lsa_ntstatus, py_ntstatus_tuple(ntstatus)); - return NULL; - } - - result = PyList_New(num_names); - - for (i = 0; i < num_names; i++) { - PyObject *sid_obj, *obj; - - py_from_SID(&sid_obj, &sids[i]); - - obj = Py_BuildValue("(Oi)", sid_obj, name_types[i]); - - PyList_SetItem(result, i, obj); - } - - return result; -} - -static PyObject *lsa_lookup_sids(PyObject *self, PyObject *args, - PyObject *kw) -{ - PyObject *py_sids, *result; - NTSTATUS ntstatus; - int num_sids, i; - char **domains, **names; - uint32 *types; - lsa_policy_hnd_object *hnd = (lsa_policy_hnd_object *)self; - DOM_SID *sids; - - if (!PyArg_ParseTuple(args, "O", &py_sids)) - return NULL; - - if (!PyList_Check(py_sids) && !PyString_Check(py_sids)) { - PyErr_SetString(PyExc_TypeError, "must be list or string"); - return NULL; - } - - if (PyList_Check(py_sids)) { - - /* Convert dictionary to char ** array */ - - num_sids = PyList_Size(py_sids); - sids = (DOM_SID *)talloc(hnd->mem_ctx, num_sids * sizeof(DOM_SID)); - - memset(sids, 0, num_sids * sizeof(DOM_SID)); - - for (i = 0; i < num_sids; i++) { - PyObject *obj = PyList_GetItem(py_sids, i); - - string_to_sid(&sids[i], PyString_AsString(obj)); - } - - } else { - - /* Just a single element */ - - num_sids = 1; - sids = (DOM_SID *)talloc(hnd->mem_ctx, sizeof(DOM_SID)); - - string_to_sid(&sids[0], PyString_AsString(py_sids)); - } - - ntstatus = cli_lsa_lookup_sids(hnd->cli, hnd->mem_ctx, &hnd->pol, - num_sids, sids, &domains, &names, - &types); - - if (!NT_STATUS_IS_OK(ntstatus)) { - PyErr_SetObject(lsa_ntstatus, py_ntstatus_tuple(ntstatus)); - return NULL; - } - - result = PyList_New(num_sids); - - for (i = 0; i < num_sids; i++) { - PyObject *obj; - - obj = Py_BuildValue("{sssssi}", "username", names[i], - "domain", domains[i], "name_type", - types[i]); - - PyList_SetItem(result, i, obj); - } - - return result; -} - -static PyObject *lsa_enum_trust_dom(PyObject *self, PyObject *args) -{ - lsa_policy_hnd_object *hnd = (lsa_policy_hnd_object *)self; - NTSTATUS ntstatus; - uint32 enum_ctx = 0, num_domains, i, pref_num_domains = 0; - char **domain_names; - DOM_SID *domain_sids; - PyObject *result; - - if (!PyArg_ParseTuple(args, "")) - return NULL; - - ntstatus = cli_lsa_enum_trust_dom( - hnd->cli, hnd->mem_ctx, &hnd->pol, &enum_ctx, - &pref_num_domains, &num_domains, &domain_names, &domain_sids); - - if (!NT_STATUS_IS_OK(ntstatus)) { - PyErr_SetObject(lsa_ntstatus, py_ntstatus_tuple(ntstatus)); - return NULL; - } - - result = PyList_New(num_domains); - - for (i = 0; i < num_domains; i++) { - fstring sid_str; - - sid_to_string(sid_str, &domain_sids[i]); - PyList_SetItem( - result, i, - Py_BuildValue("(ss)", domain_names[i], sid_str)); - } - - return result; -} - -/* - * Method dispatch tables - */ - -static PyMethodDef lsa_hnd_methods[] = { - - /* SIDs<->names */ - - { "lookup_sids", (PyCFunction)lsa_lookup_sids, - METH_VARARGS | METH_KEYWORDS, - "Convert sids to names." }, - - { "lookup_names", (PyCFunction)lsa_lookup_names, - METH_VARARGS | METH_KEYWORDS, - "Convert names to sids." }, - - /* Trusted domains */ - - { "enum_trusted_domains", (PyCFunction)lsa_enum_trust_dom, - METH_VARARGS, - "Enumerate trusted domains." }, - - { NULL } -}; - -static void py_lsa_policy_hnd_dealloc(PyObject* self) -{ - PyObject_Del(self); -} - -static PyObject *py_lsa_policy_hnd_getattr(PyObject *self, char *attrname) -{ - return Py_FindMethod(lsa_hnd_methods, self, attrname); -} - -PyTypeObject lsa_policy_hnd_type = { - PyObject_HEAD_INIT(NULL) - 0, - "LSA Policy Handle", - sizeof(lsa_policy_hnd_object), - 0, - py_lsa_policy_hnd_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - py_lsa_policy_hnd_getattr, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ -}; - -static PyMethodDef lsa_methods[] = { - - /* Open/close lsa handles */ - - { "open_policy", (PyCFunction)lsa_open_policy, - METH_VARARGS | METH_KEYWORDS, - "Open a policy handle" }, - - { "close", (PyCFunction)lsa_close, - METH_VARARGS, - "Close a policy handle" }, - - /* Other stuff - this should really go into a samba config module - but for the moment let's leave it here. */ - - { "setup_logging", (PyCFunction)py_setup_logging, - METH_VARARGS | METH_KEYWORDS, - "Set up debug logging. - -Initialises Samba's debug logging system. One argument is expected which -is a boolean specifying whether debugging is interactive and sent to stdout -or logged to a file. - -Example: - ->>> spoolss.setup_logging(interactive = 1)" }, - - { "get_debuglevel", (PyCFunction)get_debuglevel, - METH_VARARGS, - "Set the current debug level. - -Example: - ->>> spoolss.get_debuglevel() -0" }, - - { "set_debuglevel", (PyCFunction)set_debuglevel, - METH_VARARGS, - "Get the current debug level. - -Example: - ->>> spoolss.set_debuglevel(10)" }, - - { NULL } -}; - -static struct const_vals { - char *name; - uint32 value; -} module_const_vals[] = { - { NULL } -}; - -static void const_init(PyObject *dict) -{ - struct const_vals *tmp; - PyObject *obj; - - for (tmp = module_const_vals; tmp->name; tmp++) { - obj = PyInt_FromLong(tmp->value); - PyDict_SetItemString(dict, tmp->name, obj); - Py_DECREF(obj); - } -} - -/* - * Module initialisation - */ - -void initlsa(void) -{ - PyObject *module, *dict; - - /* Initialise module */ - - module = Py_InitModule("lsa", lsa_methods); - dict = PyModule_GetDict(module); - - lsa_error = PyErr_NewException("lsa.error", NULL, NULL); - PyDict_SetItemString(dict, "error", lsa_error); - - lsa_ntstatus = PyErr_NewException("lsa.ntstatus", NULL, NULL); - PyDict_SetItemString(dict, "ntstatus", lsa_ntstatus); - - /* Initialise policy handle object */ - - lsa_policy_hnd_type.ob_type = &PyType_Type; - - /* Initialise constants */ - - const_init(dict); - - /* Do samba initialisation */ - - py_samba_init(); - - setup_logging("lsa", True); - DEBUGLEVEL = 10; -} diff --git a/source/python/py_lsa.h b/source/python/py_lsa.h deleted file mode 100644 index f9a30d2f7e7..00000000000 --- a/source/python/py_lsa.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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. -*/ - -#ifndef _PY_LSA_H -#define _PY_LSA_H - -#include "includes.h" -#include "Python.h" - -#include "python/py_common_proto.h" - -/* LSA policy handle object */ - -typedef struct { - PyObject_HEAD - struct cli_state *cli; - TALLOC_CTX *mem_ctx; - POLICY_HND pol; -} lsa_policy_hnd_object; - -/* Exceptions raised by this module */ - -extern PyTypeObject lsa_policy_hnd_type; - -extern PyObject *lsa_error; - -#include "python/py_lsa_proto.h" - -#endif /* _PY_LSA_H */ diff --git a/source/python/py_lsa_proto.h b/source/python/py_lsa_proto.h deleted file mode 100644 index 1c6f6ab1d16..00000000000 --- a/source/python/py_lsa_proto.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _PY_LSA_PROTO_H -#define _PY_LSA_PROTO_H - -/* This file is automatically generated with "make proto". DO NOT EDIT */ - - -/* The following definitions come from python/py_lsa.c */ - -PyObject *new_lsa_policy_hnd_object(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *pol); -void initlsa(void); - -#endif /* _PY_LSA_PROTO_H */ diff --git a/source/python/py_ntsec.c b/source/python/py_ntsec.c deleted file mode 100644 index f216d96aa8f..00000000000 --- a/source/python/py_ntsec.c +++ /dev/null @@ -1,284 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "Python.h" - -#include "python/py_common_proto.h" - -/* Convert a SID to a Python dict */ - -BOOL py_from_SID(PyObject **obj, DOM_SID *sid) -{ - fstring sidstr; - - if (!sid) { - Py_INCREF(Py_None); - *obj = Py_None; - return True; - } - - if (!sid_to_string(sidstr, sid)) - return False; - - *obj = PyString_FromString(sidstr); - - return True; -} - -BOOL py_to_SID(DOM_SID *sid, PyObject *obj) -{ - if (!PyString_Check(obj)) - return False; - - return string_to_sid(sid, PyString_AsString(obj)); -} - -BOOL py_from_ACE(PyObject **dict, SEC_ACE *ace) -{ - PyObject *obj; - - if (!ace) { - Py_INCREF(Py_None); - *dict = Py_None; - return True; - } - - *dict = PyDict_New(); - - PyDict_SetItemString(*dict, "type", PyInt_FromLong(ace->type)); - PyDict_SetItemString(*dict, "flags", PyInt_FromLong(ace->flags)); - PyDict_SetItemString(*dict, "mask", PyInt_FromLong(ace->info.mask)); - - if (py_from_SID(&obj, &ace->trustee)) - PyDict_SetItemString(*dict, "trustee", obj); - - return True; -} - -BOOL py_to_ACE(SEC_ACE *ace, PyObject *dict) -{ - PyObject *obj; - uint8 ace_type, ace_flags; - DOM_SID trustee; - SEC_ACCESS sec_access; - - if (!PyDict_Check(dict)) - return False; - - if (!(obj = PyDict_GetItemString(dict, "type")) || - !PyInt_Check(obj)) - return False; - - ace_type = PyInt_AsLong(obj); - - if (!(obj = PyDict_GetItemString(dict, "flags")) || - !PyInt_Check(obj)) - return False; - - ace_flags = PyInt_AsLong(obj); - - if (!(obj = PyDict_GetItemString(dict, "trustee")) || - !PyString_Check(obj)) - return False; - - if (!py_to_SID(&trustee, obj)) - return False; - - if (!(obj = PyDict_GetItemString(dict, "mask")) || - !PyInt_Check(obj)) - return False; - - sec_access.mask = PyInt_AsLong(obj); - - init_sec_ace(ace, &trustee, ace_type, sec_access, ace_flags); - - /* Fill in size field */ - - ace->size = SEC_ACE_HEADER_SIZE + sid_size(&trustee); - - return True; -} - -BOOL py_from_ACL(PyObject **dict, SEC_ACL *acl) -{ - PyObject *ace_list; - int i; - - if (!acl) { - Py_INCREF(Py_None); - *dict = Py_None; - return True; - } - - *dict = PyDict_New(); - - PyDict_SetItemString(*dict, "revision", PyInt_FromLong(acl->revision)); - - ace_list = PyList_New(acl->num_aces); - - for (i = 0; i < acl->num_aces; i++) { - PyObject *obj; - - if (py_from_ACE(&obj, &acl->ace[i])) - PyList_SetItem(ace_list, i, obj); - } - - PyDict_SetItemString(*dict, "ace_list", ace_list); - - return True; -} - -BOOL py_to_ACL(SEC_ACL *acl, PyObject *dict, TALLOC_CTX *mem_ctx) -{ - PyObject *obj; - uint32 i; - - if (!(obj = PyDict_GetItemString(dict, "revision")) || - !PyInt_Check(obj)) - return False; - - acl->revision = PyInt_AsLong(obj); - - if (!(obj = PyDict_GetItemString(dict, "ace_list")) || - !PyList_Check(obj)) - return False; - - acl->num_aces = PyList_Size(obj); - - acl->ace = talloc(mem_ctx, acl->num_aces * sizeof(SEC_ACE)); - acl->size = SEC_ACL_HEADER_SIZE; - - for (i = 0; i < acl->num_aces; i++) { - PyObject *py_ace = PyList_GetItem(obj, i); - - if (!py_to_ACE(&acl->ace[i], py_ace)) - return False; - - acl->size += acl->ace[i].size; - } - - return True; -} - -BOOL py_from_SECDESC(PyObject **dict, SEC_DESC *sd) -{ - PyObject *obj; - - *dict = PyDict_New(); - - PyDict_SetItemString(*dict, "revision", PyInt_FromLong(sd->revision)); - - if (py_from_SID(&obj, sd->owner_sid)) - PyDict_SetItemString(*dict, "owner_sid", obj); - - if (py_from_SID(&obj, sd->grp_sid)) - PyDict_SetItemString(*dict, "group_sid", obj); - - if (py_from_ACL(&obj, sd->dacl)) - PyDict_SetItemString(*dict, "dacl", obj); - - if (py_from_ACL(&obj, sd->sacl)) - PyDict_SetItemString(*dict, "sacl", obj); - - return True; -} - -BOOL py_to_SECDESC(SEC_DESC **sd, PyObject *dict, TALLOC_CTX *mem_ctx) -{ - PyObject *obj; - uint16 revision; - DOM_SID owner_sid, group_sid; - SEC_ACL sacl, dacl; - BOOL got_dacl = False, got_sacl = False; - BOOL got_owner_sid = False, got_group_sid = False; - - ZERO_STRUCT(dacl); ZERO_STRUCT(sacl); - ZERO_STRUCT(owner_sid); ZERO_STRUCT(group_sid); - - if (!(obj = PyDict_GetItemString(dict, "revision"))) - return False; - - revision = PyInt_AsLong(obj); - - if ((obj = PyDict_GetItemString(dict, "owner_sid"))) { - - if (obj != Py_None) { - - if (!py_to_SID(&owner_sid, obj)) - return False; - - got_owner_sid = True; - } - } - - if ((obj = PyDict_GetItemString(dict, "group_sid"))) { - - if (obj != Py_None) { - - if (!py_to_SID(&group_sid, obj)) - return False; - - got_group_sid = True; - } - } - - if ((obj = PyDict_GetItemString(dict, "dacl"))) { - - if (obj != Py_None) { - - if (!py_to_ACL(&dacl, obj, mem_ctx)) - return False; - - got_dacl = True; - } - } - - if ((obj = PyDict_GetItemString(dict, "sacl"))) { - - if (obj != Py_None) { - - if (!py_to_ACL(&sacl, obj, mem_ctx)) - return False; - - got_sacl = True; - } - } - -#if 0 /* For new secdesc code */ - *sd = make_sec_desc(mem_ctx, revision, - got_owner_sid ? &owner_sid : NULL, - got_group_sid ? &group_sid : NULL, - got_sacl ? &sacl : NULL, - got_dacl ? &dacl : NULL); -#else - { - size_t sd_size; - - *sd = make_sec_desc(mem_ctx, revision, - got_owner_sid ? &owner_sid : NULL, - got_group_sid ? &group_sid : NULL, - got_sacl ? &sacl : NULL, - got_dacl ? &dacl : NULL, &sd_size); - } -#endif - - return True; -} diff --git a/source/python/py_samr.c b/source/python/py_samr.c deleted file mode 100644 index ce6eda99c23..00000000000 --- a/source/python/py_samr.c +++ /dev/null @@ -1,456 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_samr.h" - -/* - * Exceptions raised by this module - */ - -PyObject *samr_error; /* This indicates a non-RPC related error - such as name lookup failure */ - -PyObject *samr_ntstatus; /* This exception is raised when a RPC call - returns a status code other than - NT_STATUS_OK */ - -/* SAMR connect handle object */ - -static void py_samr_connect_hnd_dealloc(PyObject* self) -{ - PyObject_Del(self); -} - -PyObject *new_samr_domain_hnd_object(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *pol) -{ - samr_domain_hnd_object *o; - - o = PyObject_New(samr_domain_hnd_object, &samr_domain_hnd_type); - - o->cli = cli; - o->mem_ctx = mem_ctx; - memcpy(&o->domain_pol, pol, sizeof(POLICY_HND)); - - return (PyObject*)o; -} - -static PyObject *samr_open_domain(PyObject *self, PyObject *args, PyObject *kw) -{ - samr_connect_hnd_object *connect_hnd = (samr_connect_hnd_object *)self; - static char *kwlist[] = { "sid", "access", NULL }; - uint32 desired_access = MAXIMUM_ALLOWED_ACCESS; - char *sid_str; - DOM_SID sid; - TALLOC_CTX *mem_ctx = NULL; - POLICY_HND domain_pol; - NTSTATUS ntstatus; - PyObject *result = NULL; - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|i", kwlist, &sid_str, &desired_access)) - return NULL; - - if (!string_to_sid(&sid, sid_str)) { - PyErr_SetString(PyExc_TypeError, "string is not a sid"); - return NULL; - } - - if (!(mem_ctx = talloc_init())) { - PyErr_SetString(samr_error, "unable to init talloc context"); - return NULL; - } - - ntstatus = cli_samr_open_domain( - connect_hnd->cli, mem_ctx, &connect_hnd->connect_pol, - desired_access, &sid, &domain_pol); - - if (!NT_STATUS_IS_OK(ntstatus)) { - PyErr_SetObject(samr_ntstatus, py_ntstatus_tuple(ntstatus)); - goto done; - } - - result = new_samr_domain_hnd_object( - connect_hnd->cli, mem_ctx, &domain_pol); - -done: - if (!result) { - if (mem_ctx) - talloc_destroy(mem_ctx); - } - - return result; -} - -static PyMethodDef samr_connect_methods[] = { - { "open_domain", (PyCFunction)samr_open_domain, - METH_VARARGS | METH_KEYWORDS, - "Open a handle on a domain" }, - - { NULL } -}; - -static PyObject *py_samr_connect_hnd_getattr(PyObject *self, char *attrname) -{ - return Py_FindMethod(samr_connect_methods, self, attrname); -} - -PyTypeObject samr_connect_hnd_type = { - PyObject_HEAD_INIT(NULL) - 0, - "SAMR Connect Handle", - sizeof(samr_connect_hnd_object), - 0, - py_samr_connect_hnd_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - py_samr_connect_hnd_getattr, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ -}; - -PyObject *new_samr_connect_hnd_object(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *pol) -{ - samr_connect_hnd_object *o; - - o = PyObject_New(samr_connect_hnd_object, &samr_connect_hnd_type); - - o->cli = cli; - o->mem_ctx = mem_ctx; - memcpy(&o->connect_pol, pol, sizeof(POLICY_HND)); - - return (PyObject*)o; -} - -/* SAMR domain handle object */ - -static void py_samr_domain_hnd_dealloc(PyObject* self) -{ - PyObject_Del(self); -} - -static PyMethodDef samr_domain_methods[] = { - { NULL } -}; - -static PyObject *py_samr_domain_hnd_getattr(PyObject *self, char *attrname) -{ - return Py_FindMethod(samr_domain_methods, self, attrname); -} - -PyTypeObject samr_domain_hnd_type = { - PyObject_HEAD_INIT(NULL) - 0, - "SAMR Domain Handle", - sizeof(samr_domain_hnd_object), - 0, - py_samr_domain_hnd_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - py_samr_domain_hnd_getattr, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ -}; - -/* SAMR user handle object */ - -static void py_samr_user_hnd_dealloc(PyObject* self) -{ - PyObject_Del(self); -} - -static PyMethodDef samr_user_methods[] = { - { NULL } -}; - -static PyObject *py_samr_user_hnd_getattr(PyObject *self, char *attrname) -{ - return Py_FindMethod(samr_user_methods, self, attrname); -} - -PyTypeObject samr_user_hnd_type = { - PyObject_HEAD_INIT(NULL) - 0, - "SAMR User Handle", - sizeof(samr_user_hnd_object), - 0, - py_samr_user_hnd_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - py_samr_user_hnd_getattr, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ -}; - -PyObject *new_samr_user_hnd_object(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *pol) -{ - samr_user_hnd_object *o; - - o = PyObject_New(samr_user_hnd_object, &samr_user_hnd_type); - - o->cli = cli; - o->mem_ctx = mem_ctx; - memcpy(&o->user_pol, pol, sizeof(POLICY_HND)); - - return (PyObject*)o; -} - -/* SAMR group handle object */ - -static void py_samr_group_hnd_dealloc(PyObject* self) -{ - PyObject_Del(self); -} - -static PyMethodDef samr_group_methods[] = { - { NULL } -}; - -static PyObject *py_samr_group_hnd_getattr(PyObject *self, char *attrname) -{ - return Py_FindMethod(samr_group_methods, self, attrname); -} - -PyTypeObject samr_group_hnd_type = { - PyObject_HEAD_INIT(NULL) - 0, - "SAMR Group Handle", - sizeof(samr_group_hnd_object), - 0, - py_samr_group_hnd_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - py_samr_group_hnd_getattr, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ -}; - -PyObject *new_samr_group_hnd_object(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *pol) -{ - samr_group_hnd_object *o; - - o = PyObject_New(samr_group_hnd_object, &samr_group_hnd_type); - - o->cli = cli; - o->mem_ctx = mem_ctx; - memcpy(&o->group_pol, pol, sizeof(POLICY_HND)); - - return (PyObject*)o; -} - -/* Alias handle object */ - -static void py_samr_alias_hnd_dealloc(PyObject* self) -{ - PyObject_Del(self); -} - -static PyMethodDef samr_alias_methods[] = { - { NULL } -}; - -static PyObject *py_samr_alias_hnd_getattr(PyObject *self, char *attrname) -{ - return Py_FindMethod(samr_alias_methods, self, attrname); -} - -PyTypeObject samr_alias_hnd_type = { - PyObject_HEAD_INIT(NULL) - 0, - "SAMR Alias Handle", - sizeof(samr_alias_hnd_object), - 0, - py_samr_alias_hnd_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - py_samr_alias_hnd_getattr, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ -}; - -PyObject *new_samr_alias_hnd_object(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *pol) -{ - samr_alias_hnd_object *o; - - o = PyObject_New(samr_alias_hnd_object, &samr_alias_hnd_type); - - o->cli = cli; - o->mem_ctx = mem_ctx; - memcpy(&o->alias_pol, pol, sizeof(POLICY_HND)); - - return (PyObject*)o; -} - -static PyObject *samr_connect(PyObject *self, PyObject *args, PyObject *kw) -{ - static char *kwlist[] = { "server", "creds", "access", NULL }; - uint32 desired_access = MAXIMUM_ALLOWED_ACCESS; - char *server, *errstr; - struct cli_state *cli = NULL; - POLICY_HND hnd; - TALLOC_CTX *mem_ctx = NULL; - PyObject *result = NULL, *creds = NULL; - NTSTATUS ntstatus; - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|Oi", kwlist, &server, &creds, - &desired_access)) - return NULL; - - if (server[0] != '\\' || server[1] != '\\') { - PyErr_SetString(PyExc_ValueError, "UNC name required"); - return NULL; - } - - server += 2; - - if (creds && creds != Py_None && !PyDict_Check(creds)) { - PyErr_SetString(PyExc_TypeError, - "credentials must be dictionary or None"); - return NULL; - } - - if (!(cli = open_pipe_creds(server, creds, PIPE_SAMR, &errstr))) { - PyErr_SetString(samr_error, errstr); - free(errstr); - return NULL; - } - - if (!(mem_ctx = talloc_init())) { - PyErr_SetString(samr_ntstatus, - "unable to init talloc context\n"); - goto done; - } - - ntstatus = cli_samr_connect(cli, mem_ctx, desired_access, &hnd); - - if (!NT_STATUS_IS_OK(ntstatus)) { - cli_shutdown(cli); - SAFE_FREE(cli); - PyErr_SetObject(samr_ntstatus, py_ntstatus_tuple(ntstatus)); - goto done; - } - - result = new_samr_connect_hnd_object(cli, mem_ctx, &hnd); - -done: - if (!result) { - if (cli) - cli_shutdown(cli); - - if (mem_ctx) - talloc_destroy(mem_ctx); - } - - return result; -} - -/* - * Module initialisation - */ - -static PyMethodDef samr_methods[] = { - - /* Open/close samr connect handles */ - - { "connect", (PyCFunction)samr_connect, - METH_VARARGS | METH_KEYWORDS, - "Open a connect handle" }, - - { NULL } -}; - -static struct const_vals { - char *name; - uint32 value; -} module_const_vals[] = { - { NULL } -}; - -static void const_init(PyObject *dict) -{ - struct const_vals *tmp; - PyObject *obj; - - for (tmp = module_const_vals; tmp->name; tmp++) { - obj = PyInt_FromLong(tmp->value); - PyDict_SetItemString(dict, tmp->name, obj); - Py_DECREF(obj); - } -} - -void initsamr(void) -{ - PyObject *module, *dict; - - /* Initialise module */ - - module = Py_InitModule("samr", samr_methods); - dict = PyModule_GetDict(module); - - samr_error = PyErr_NewException("samr.error", NULL, NULL); - PyDict_SetItemString(dict, "error", samr_error); - - samr_ntstatus = PyErr_NewException("samr.ntstatus", NULL, NULL); - PyDict_SetItemString(dict, "ntstatus", samr_ntstatus); - - /* Initialise policy handle object */ - - samr_connect_hnd_type.ob_type = &PyType_Type; - samr_domain_hnd_type.ob_type = &PyType_Type; - samr_user_hnd_type.ob_type = &PyType_Type; - samr_group_hnd_type.ob_type = &PyType_Type; - samr_alias_hnd_type.ob_type = &PyType_Type; - - /* Initialise constants */ - - const_init(dict); - - /* Do samba initialisation */ - - py_samba_init(); - - setup_logging("samr", True); - DEBUGLEVEL = 10; -} diff --git a/source/python/py_samr.h b/source/python/py_samr.h deleted file mode 100644 index 22c3660ef98..00000000000 --- a/source/python/py_samr.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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. -*/ - -#ifndef _PY_SAMR_H -#define _PY_SAMR_H - -#include "includes.h" -#include "Python.h" - -#include "python/py_common_proto.h" - -/* SAMR connect policy handle object */ - -typedef struct { - PyObject_HEAD - struct cli_state *cli; - TALLOC_CTX *mem_ctx; - POLICY_HND connect_pol; -} samr_connect_hnd_object; - -/* SAMR domain policy handle object */ - -typedef struct { - PyObject_HEAD - struct cli_state *cli; - TALLOC_CTX *mem_ctx; - POLICY_HND domain_pol; -} samr_domain_hnd_object; - -/* SAMR user policy handle object */ - -typedef struct { - PyObject_HEAD - struct cli_state *cli; - TALLOC_CTX *mem_ctx; - POLICY_HND user_pol; -} samr_user_hnd_object; - -/* SAMR group policy handle object */ - -typedef struct { - PyObject_HEAD - struct cli_state *cli; - TALLOC_CTX *mem_ctx; - POLICY_HND group_pol; -} samr_group_hnd_object; - -/* SAMR alias policy handle object */ - -typedef struct { - PyObject_HEAD - struct cli_state *cli; - TALLOC_CTX *mem_ctx; - POLICY_HND alias_pol; -} samr_alias_hnd_object; - -extern PyTypeObject samr_connect_hnd_type, samr_domain_hnd_type, - samr_user_hnd_type, samr_group_hnd_type, samr_alias_hnd_type; - -/* Exceptions raised by this module */ - -extern PyObject *samr_error; - -/* #include "python/py_samr_proto.h" */ - -#endif /* _PY_SAMR_H */ diff --git a/source/python/py_spoolss.c b/source/python/py_spoolss.c deleted file mode 100644 index 95be77de55b..00000000000 --- a/source/python/py_spoolss.c +++ /dev/null @@ -1,478 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" - -/* Exceptions this module can raise */ - -PyObject *spoolss_error, *spoolss_werror; - -/* - * Routines to convert from python hashes to Samba structures - */ - -PyObject *new_spoolss_policy_hnd_object(struct cli_state *cli, - TALLOC_CTX *mem_ctx, POLICY_HND *pol) -{ - spoolss_policy_hnd_object *o; - - o = PyObject_New(spoolss_policy_hnd_object, &spoolss_policy_hnd_type); - - o->cli = cli; - o->mem_ctx = mem_ctx; - memcpy(&o->pol, pol, sizeof(POLICY_HND)); - - return (PyObject*)o; -} - -/* - * Method dispatch table - */ - -static PyMethodDef spoolss_methods[] = { - - /* Open/close printer handles */ - - { "openprinter", (PyCFunction)spoolss_openprinter, METH_VARARGS | METH_KEYWORDS, - "Open a printer by name in UNC format. - -Optionally a dictionary of (domain, username, password) may be given in -which case they are used when opening the RPC pipe. An access mask may -also be given which defaults to MAXIMUM_ALLOWED_ACCESS. - -Example: - ->>> hnd = spoolss.openprinter(\"\\\\\\\\NPSD-PDC2\\\\meanie\")"}, - - { "closeprinter", spoolss_closeprinter, METH_VARARGS, - "Close a printer handle opened with openprinter or addprinter. - -Example: - ->>> spoolss.closeprinter(hnd)"}, - - { "addprinterex", (PyCFunction)spoolss_addprinterex, METH_VARARGS, - "addprinterex()"}, - - /* Server enumeratation functions */ - - { "enumprinters", (PyCFunction)spoolss_enumprinters, - METH_VARARGS | METH_KEYWORDS, - "Enumerate printers on a print server. - -Return a list of printers on a print server. The credentials, info level -and flags may be specified as keyword arguments. - -Example: - ->>> print spoolss.enumprinters(\"\\\\\\\\npsd-pdc2\") -[{'comment': 'i am a comment', 'printer_name': 'meanie', 'flags': 8388608, - 'description': 'meanie,Generic / Text Only,i am a location'}, - {'comment': '', 'printer_name': 'fileprint', 'flags': 8388608, - 'description': 'fileprint,Generic / Text Only,'}]"}, - - { "enumports", (PyCFunction)spoolss_enumports, - METH_VARARGS | METH_KEYWORDS, - "Enumerate ports on a print server. - -Return a list of ports on a print server. - -Example: - ->>> print spoolss.enumports(\"\\\\\\\\npsd-pdc2\") -[{'name': 'LPT1:'}, {'name': 'LPT2:'}, {'name': 'COM1:'}, {'name': 'COM2:'}, - {'name': 'FILE:'}, {'name': '\\\\nautilus1\\zpekt3r'}]"}, - - { "enumprinterdrivers", (PyCFunction)spoolss_enumprinterdrivers, - METH_VARARGS | METH_KEYWORDS, - "Enumerate printer drivers on a print server. - -Return a list of printer drivers."}, - /* Miscellaneous other commands */ - - { "getprinterdriverdir", (PyCFunction)spoolss_getprinterdriverdir, - METH_VARARGS | METH_KEYWORDS, - "Return printer driver directory. - -Return the printer driver directory for a given architecture. The -architecture defaults to \"Windows NT x86\"."}, - - /* Other stuff - this should really go into a samba config module - but for the moment let's leave it here. */ - - { "setup_logging", (PyCFunction)py_setup_logging, - METH_VARARGS | METH_KEYWORDS, - "Set up debug logging. - -Initialises Samba's debug logging system. One argument is expected which -is a boolean specifying whether debugging is interactive and sent to stdout -or logged to a file. - -Example: - ->>> spoolss.setup_logging(interactive = 1)" }, - - { "get_debuglevel", (PyCFunction)get_debuglevel, - METH_VARARGS, - "Set the current debug level. - -Example: - ->>> spoolss.get_debuglevel() -0" }, - - { "set_debuglevel", (PyCFunction)set_debuglevel, - METH_VARARGS, - "Get the current debug level. - -Example: - ->>> spoolss.set_debuglevel(10)" }, - - /* Printer driver routines */ - - { "addprinterdriver", (PyCFunction)spoolss_addprinterdriver, - METH_VARARGS | METH_KEYWORDS, - "Add a printer driver." }, - - { "addprinterdriverex", (PyCFunction)spoolss_addprinterdriverex, - METH_VARARGS | METH_KEYWORDS, - "Add a printer driver." }, - - { "deleteprinterdriver", (PyCFunction)spoolss_deleteprinterdriver, - METH_VARARGS | METH_KEYWORDS, - "Delete a printer driver." }, - - { "deleteprinterdriverex", (PyCFunction)spoolss_deleteprinterdriverex, - METH_VARARGS | METH_KEYWORDS, - "Delete a printer driver." }, - - { NULL } -}; - -/* Methods attached to a spoolss handle object */ - -static PyMethodDef spoolss_hnd_methods[] = { - - /* Printer info */ - - { "getprinter", (PyCFunction)spoolss_hnd_getprinter, - METH_VARARGS | METH_KEYWORDS, - "Get printer information. - -Return a dictionary of print information. The info level defaults to 1. - -Example: - ->>> hnd.getprinter() -{'comment': 'i am a comment', 'printer_name': '\\\\NPSD-PDC2\\meanie', - 'description': '\\\\NPSD-PDC2\\meanie,Generic / Text Only,i am a location', - 'flags': 8388608}"}, - - { "setprinter", (PyCFunction)spoolss_hnd_setprinter, - METH_VARARGS | METH_KEYWORDS, - "Set printer information."}, - - /* Printer drivers */ - - { "getprinterdriver", (PyCFunction)spoolss_hnd_getprinterdriver, - METH_VARARGS | METH_KEYWORDS, - "Return printer driver information. - -Return a dictionary of printer driver information for the printer driver -bound to this printer."}, - - /* Forms */ - - { "enumforms", (PyCFunction)spoolss_hnd_enumforms, - METH_VARARGS | METH_KEYWORDS, - "Enumerate supported forms. - -Return a list of forms supported by this printer or print server."}, - - { "setform", (PyCFunction)spoolss_hnd_setform, - METH_VARARGS | METH_KEYWORDS, - "Set form data. - -Set the form given by the dictionary argument."}, - - { "addform", (PyCFunction)spoolss_hnd_addform, - METH_VARARGS | METH_KEYWORDS, - "Add a new form." }, - - { "getform", (PyCFunction)spoolss_hnd_getform, - METH_VARARGS | METH_KEYWORDS, - "Get form properties." }, - - { "deleteform", (PyCFunction)spoolss_hnd_deleteform, - METH_VARARGS | METH_KEYWORDS, - "Delete a form." }, - - /* Job related methods */ - - { "enumjobs", (PyCFunction)spoolss_hnd_enumjobs, - METH_VARARGS | METH_KEYWORDS, - "Enumerate jobs." }, - - { "setjob", (PyCFunction)spoolss_hnd_setjob, - METH_VARARGS | METH_KEYWORDS, - "Set job information." }, - - { "getjob", (PyCFunction)spoolss_hnd_getjob, - METH_VARARGS | METH_KEYWORDS, - "Get job information." }, - - { "startpageprinter", (PyCFunction)spoolss_hnd_startpageprinter, - METH_VARARGS | METH_KEYWORDS, - "Notify spooler that a page is about to be printed." }, - - { "endpageprinter", (PyCFunction)spoolss_hnd_endpageprinter, - METH_VARARGS | METH_KEYWORDS, - "Notify spooler that a page is about to be printed." }, - - { "startdocprinter", (PyCFunction)spoolss_hnd_startdocprinter, - METH_VARARGS | METH_KEYWORDS, - "Notify spooler that a document is about to be printed." }, - - { "enddocprinter", (PyCFunction)spoolss_hnd_enddocprinter, - METH_VARARGS | METH_KEYWORDS, - "Notify spooler that a document is about to be printed." }, - - { "writeprinter", (PyCFunction)spoolss_hnd_writeprinter, - METH_VARARGS | METH_KEYWORDS, - "Write job data to a printer." }, - - { "addjob", (PyCFunction)spoolss_hnd_addjob, - METH_VARARGS | METH_KEYWORDS, - "Add a job to the list of print jobs." }, - - /* Printer data */ - - { "getprinterdata", (PyCFunction)spoolss_hnd_getprinterdata, - METH_VARARGS | METH_KEYWORDS, - "Get printer data." }, - - { "setprinterdata", (PyCFunction)spoolss_hnd_setprinterdata, - METH_VARARGS | METH_KEYWORDS, - "Set printer data." }, - - { "enumprinterdata", (PyCFunction)spoolss_hnd_enumprinterdata, - METH_VARARGS | METH_KEYWORDS, - "Enumerate printer data." }, - - { "deleteprinterdata", (PyCFunction)spoolss_hnd_deleteprinterdata, - METH_VARARGS | METH_KEYWORDS, - "Delete printer data." }, - - { "deleteprinterdataex", (PyCFunction)spoolss_hnd_deleteprinterdataex, - METH_VARARGS | METH_KEYWORDS, - "Delete printer data." }, - - { NULL } - -}; - -static void py_policy_hnd_dealloc(PyObject* self) -{ - spoolss_policy_hnd_object *hnd; - - /* Close down policy handle and free talloc context */ - - hnd = (spoolss_policy_hnd_object*)self; - - cli_shutdown(hnd->cli); - talloc_destroy(hnd->mem_ctx); - - PyObject_Del(self); -} - -static PyObject *py_policy_hnd_getattr(PyObject *self, char *attrname) -{ - return Py_FindMethod(spoolss_hnd_methods, self, attrname); -} - -static char spoolss_type_doc[] = -"Python wrapper for Windows NT SPOOLSS rpc pipe."; - -PyTypeObject spoolss_policy_hnd_type = { - PyObject_HEAD_INIT(NULL) - 0, - "spoolss.hnd", - sizeof(spoolss_policy_hnd_object), - 0, - py_policy_hnd_dealloc, /* tp_dealloc*/ - 0, /* tp_print*/ - py_policy_hnd_getattr, /* tp_getattr*/ - 0, /* tp_setattr*/ - 0, /* tp_compare*/ - 0, /* tp_repr*/ - 0, /* tp_as_number*/ - 0, /* tp_as_sequence*/ - 0, /* tp_as_mapping*/ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - spoolss_type_doc, /* tp_doc */ -}; - -/* Initialise constants */ - -static struct const_vals { - char *name; - uint32 value; -} module_const_vals[] = { - - /* Access permissions */ - - { "MAXIMUM_ALLOWED_ACCESS", MAXIMUM_ALLOWED_ACCESS }, - { "SERVER_ALL_ACCESS", SERVER_ALL_ACCESS }, - { "SERVER_READ", SERVER_READ }, - { "SERVER_WRITE", SERVER_WRITE }, - { "SERVER_EXECUTE", SERVER_EXECUTE }, - { "SERVER_ACCESS_ADMINISTER", SERVER_ACCESS_ADMINISTER }, - { "SERVER_ACCESS_ENUMERATE", SERVER_ACCESS_ENUMERATE }, - { "PRINTER_ALL_ACCESS", PRINTER_ALL_ACCESS }, - { "PRINTER_READ", PRINTER_READ }, - { "PRINTER_WRITE", PRINTER_WRITE }, - { "PRINTER_EXECUTE", PRINTER_EXECUTE }, - { "PRINTER_ACCESS_ADMINISTER", PRINTER_ACCESS_ADMINISTER }, - { "PRINTER_ACCESS_USE", PRINTER_ACCESS_USE }, - { "JOB_ACCESS_ADMINISTER", JOB_ACCESS_ADMINISTER }, - { "JOB_ALL_ACCESS", JOB_ALL_ACCESS }, - { "JOB_READ", JOB_READ }, - { "JOB_WRITE", JOB_WRITE }, - { "JOB_EXECUTE", JOB_EXECUTE }, - { "STANDARD_RIGHTS_ALL_ACCESS", STANDARD_RIGHTS_ALL_ACCESS }, - { "STANDARD_RIGHTS_EXECUTE_ACCESS", STANDARD_RIGHTS_EXECUTE_ACCESS }, - { "STANDARD_RIGHTS_READ_ACCESS", STANDARD_RIGHTS_READ_ACCESS }, - { "STANDARD_RIGHTS_REQUIRED_ACCESS", STANDARD_RIGHTS_REQUIRED_ACCESS }, - { "STANDARD_RIGHTS_WRITE_ACCESS", STANDARD_RIGHTS_WRITE_ACCESS }, - - /* Printer enumeration flags */ - - { "PRINTER_ENUM_DEFAULT", PRINTER_ENUM_DEFAULT }, - { "PRINTER_ENUM_LOCAL", PRINTER_ENUM_LOCAL }, - { "PRINTER_ENUM_CONNECTIONS", PRINTER_ENUM_CONNECTIONS }, - { "PRINTER_ENUM_FAVORITE", PRINTER_ENUM_FAVORITE }, - { "PRINTER_ENUM_NAME", PRINTER_ENUM_NAME }, - { "PRINTER_ENUM_REMOTE", PRINTER_ENUM_REMOTE }, - { "PRINTER_ENUM_SHARED", PRINTER_ENUM_SHARED }, - { "PRINTER_ENUM_NETWORK", PRINTER_ENUM_NETWORK }, - - /* Form types */ - - { "FORM_USER", FORM_USER }, - { "FORM_BUILTIN", FORM_BUILTIN }, - { "FORM_PRINTER", FORM_PRINTER }, - - /* WERRORs */ - - { "WERR_OK", 0 }, - { "WERR_BADFILE", 2 }, - { "WERR_ACCESS_DENIED", 5 }, - { "WERR_BADFID", 6 }, - { "WERR_BADFUNC", 1 }, - { "WERR_INSUFFICIENT_BUFFER", 122 }, - { "WERR_NO_SUCH_SHARE", 67 }, - { "WERR_ALREADY_EXISTS", 80 }, - { "WERR_INVALID_PARAM", 87 }, - { "WERR_NOT_SUPPORTED", 50 }, - { "WERR_BAD_PASSWORD", 86 }, - { "WERR_NOMEM", 8 }, - { "WERR_INVALID_NAME", 123 }, - { "WERR_UNKNOWN_LEVEL", 124 }, - { "WERR_OBJECT_PATH_INVALID", 161 }, - { "WERR_NO_MORE_ITEMS", 259 }, - { "WERR_MORE_DATA", 234 }, - { "WERR_UNKNOWN_PRINTER_DRIVER", 1797 }, - { "WERR_INVALID_PRINTER_NAME", 1801 }, - { "WERR_PRINTER_ALREADY_EXISTS", 1802 }, - { "WERR_INVALID_DATATYPE", 1804 }, - { "WERR_INVALID_ENVIRONMENT", 1805 }, - { "WERR_INVALID_FORM_NAME", 1902 }, - { "WERR_INVALID_FORM_SIZE", 1903 }, - { "WERR_BUF_TOO_SMALL", 2123 }, - { "WERR_JOB_NOT_FOUND", 2151 }, - { "WERR_DEST_NOT_FOUND", 2152 }, - { "WERR_NOT_LOCAL_DOMAIN", 2320 }, - { "WERR_PRINTER_DRIVER_IN_USE", 3001 }, - { "WERR_STATUS_MORE_ENTRIES ", 0x0105 }, - - /* Job control constants */ - - { "JOB_CONTROL_PAUSE", JOB_CONTROL_PAUSE }, - { "JOB_CONTROL_RESUME", JOB_CONTROL_RESUME }, - { "JOB_CONTROL_CANCEL", JOB_CONTROL_CANCEL }, - { "JOB_CONTROL_RESTART", JOB_CONTROL_RESTART }, - { "JOB_CONTROL_DELETE", JOB_CONTROL_DELETE }, - - { NULL }, -}; - -static void const_init(PyObject *dict) -{ - struct const_vals *tmp; - PyObject *obj; - - for (tmp = module_const_vals; tmp->name; tmp++) { - obj = PyInt_FromLong(tmp->value); - PyDict_SetItemString(dict, tmp->name, obj); - Py_DECREF(obj); - } -} - -/* Module initialisation */ - -void initspoolss(void) -{ - PyObject *module, *dict; - - /* Initialise module */ - - module = Py_InitModule("spoolss", spoolss_methods); - dict = PyModule_GetDict(module); - - /* Exceptions we can raise */ - - spoolss_error = PyErr_NewException("spoolss.error", NULL, NULL); - PyDict_SetItemString(dict, "error", spoolss_error); - - spoolss_werror = PyErr_NewException("spoolss.werror", NULL, NULL); - PyDict_SetItemString(dict, "werror", spoolss_werror); - - /* Initialise policy handle object */ - - spoolss_policy_hnd_type.ob_type = &PyType_Type; - - PyDict_SetItemString(dict, "spoolss.hnd", - (PyObject *)&spoolss_policy_hnd_type); - - /* Initialise constants */ - - const_init(dict); - - /* Do samba initialisation */ - - py_samba_init(); -} diff --git a/source/python/py_spoolss.h b/source/python/py_spoolss.h deleted file mode 100644 index 40a6ae972e8..00000000000 --- a/source/python/py_spoolss.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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. -*/ - -#ifndef _PY_SPOOLSS_H -#define _PY_SPOOLSS_H - -#include "includes.h" -#include "Python.h" - -#include "python/py_common_proto.h" - -/* Spoolss policy handle object */ - -typedef struct { - PyObject_HEAD - struct cli_state *cli; - TALLOC_CTX *mem_ctx; - POLICY_HND pol; -} spoolss_policy_hnd_object; - -/* Exceptions raised by this module */ - -extern PyTypeObject spoolss_policy_hnd_type; - -extern PyObject *spoolss_error, *spoolss_werror; - -#include "python/py_spoolss_proto.h" - -#endif /* _PY_SPOOLSS_H */ diff --git a/source/python/py_spoolss_drivers.c b/source/python/py_spoolss_drivers.c deleted file mode 100644 index b5357a78ad3..00000000000 --- a/source/python/py_spoolss_drivers.c +++ /dev/null @@ -1,434 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" - -/* Enumerate printer drivers */ - -PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args, - PyObject *kw) -{ - WERROR werror; - PyObject *result = NULL, *creds = NULL; - PRINTER_DRIVER_CTR ctr; - int level = 1, i; - uint32 needed, num_drivers; - char *arch = "Windows NT x86", *server, *errstr; - static char *kwlist[] = {"server", "level", "creds", "arch", NULL}; - struct cli_state *cli = NULL; - TALLOC_CTX *mem_ctx = NULL; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|iOs", kwlist, &server, &level, &creds, - &arch)) - return NULL; - - if (server[0] != '\\' || server[1] != '\\') { - PyErr_SetString(PyExc_ValueError, "UNC name required"); - return NULL; - } - - server += 2; - - if (creds && creds != Py_None && !PyDict_Check(creds)) { - PyErr_SetString(PyExc_TypeError, - "credentials must be dictionary or None"); - return NULL; - } - - /* Call rpc function */ - - if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) { - PyErr_SetString(spoolss_error, errstr); - free(errstr); - goto done; - } - - if (!(mem_ctx = talloc_init())) { - PyErr_SetString( - spoolss_error, "unable to init talloc context\n"); - goto done; - } - - werror = cli_spoolss_enumprinterdrivers( - cli, mem_ctx, 0, &needed, level, arch, - &num_drivers, &ctr); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_enumprinterdrivers( - cli, mem_ctx, needed, NULL, level, arch, - &num_drivers, &ctr); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - goto done; - } - - /* Return value */ - - switch (level) { - case 1: - result = PyDict_New(); - - for (i = 0; i < num_drivers; i++) { - PyObject *value; - fstring name; - - rpcstr_pull(name, ctr.info1[i].name.buffer, - sizeof(fstring), -1, STR_TERMINATE); - - py_from_DRIVER_INFO_1(&value, &ctr.info1[i]); - - PyDict_SetItemString( - value, "level", PyInt_FromLong(1)); - - PyDict_SetItemString(result, name, value); - } - - break; - case 2: - result = PyDict_New(); - - for(i = 0; i < num_drivers; i++) { - PyObject *value; - fstring name; - - rpcstr_pull(name, ctr.info2[i].name.buffer, - sizeof(fstring), -1, STR_TERMINATE); - - py_from_DRIVER_INFO_2(&value, &ctr.info2[i]); - - PyDict_SetItemString( - value, "level", PyInt_FromLong(2)); - - PyDict_SetItemString(result, name, value); - } - - break; - case 3: - result = PyDict_New(); - - for(i = 0; i < num_drivers; i++) { - PyObject *value; - fstring name; - - rpcstr_pull(name, ctr.info3[i].name.buffer, - sizeof(fstring), -1, STR_TERMINATE); - - py_from_DRIVER_INFO_3(&value, &ctr.info3[i]); - - PyDict_SetItemString( - value, "level", PyInt_FromLong(3)); - - PyDict_SetItemString(result, name, value); - } - - break; - case 6: - result = PyDict_New(); - - for(i = 0; i < num_drivers; i++) { - PyObject *value; - fstring name; - - rpcstr_pull(name, ctr.info6[i].name.buffer, - sizeof(fstring), -1, STR_TERMINATE); - - py_from_DRIVER_INFO_6(&value, &ctr.info6[i]); - - PyDict_SetItemString( - value, "level", PyInt_FromLong(6)); - - PyList_SetItem(result, i, value); - } - - break; - default: - PyErr_SetString(spoolss_error, "unknown info level"); - goto done; - } - - done: - if (cli) - cli_shutdown(cli); - - if (mem_ctx) - talloc_destroy(mem_ctx); - - return result; -} - -/* Fetch printer driver */ - -PyObject *spoolss_hnd_getprinterdriver(PyObject *self, PyObject *args, - PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - PyObject *result = Py_None; - PRINTER_DRIVER_CTR ctr; - int level = 1; - uint32 needed; - char *arch = "Windows NT x86"; - static char *kwlist[] = {"level", "arch", NULL}; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "|is", kwlist, &level, &arch)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_getprinterdriver( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, level, - arch, &ctr); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_getprinterdriver( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, - level, arch, &ctr); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - /* Return value */ - - switch (level) { - case 1: - py_from_DRIVER_INFO_1(&result, ctr.info1); - break; - case 2: - py_from_DRIVER_INFO_2(&result, ctr.info2); - break; - case 3: - py_from_DRIVER_INFO_3(&result, ctr.info3); - break; - case 6: - py_from_DRIVER_INFO_6(&result, ctr.info6); - break; - default: - PyErr_SetString(spoolss_error, "unsupported info level"); - return NULL; - } - - Py_INCREF(result); - return result; -} - -/* Fetch printer driver directory */ - -PyObject *spoolss_getprinterdriverdir(PyObject *self, PyObject *args, - PyObject *kw) -{ - WERROR werror; - PyObject *result = NULL, *creds = NULL; - DRIVER_DIRECTORY_CTR ctr; - uint32 needed, level = 1; - char *arch = "Windows NT x86", *server, *errstr; - static char *kwlist[] = {"server", "level", "arch", "creds", NULL}; - struct cli_state *cli = NULL; - TALLOC_CTX *mem_ctx = NULL; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|isO", kwlist, &server, &level, - &arch, &creds)) - return NULL; - - if (server[0] != '\\' || server[1] != '\\') { - PyErr_SetString(PyExc_ValueError, "UNC name required"); - return NULL; - } - - server += 2; - - if (creds && creds != Py_None && !PyDict_Check(creds)) { - PyErr_SetString(PyExc_TypeError, - "credentials must be dictionary or None"); - return NULL; - } - - /* Call rpc function */ - - if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) { - PyErr_SetString(spoolss_error, errstr); - free(errstr); - goto done; - } - - if (!(mem_ctx = talloc_init())) { - PyErr_SetString( - spoolss_error, "unable to init talloc context\n"); - goto done; - } - - werror = cli_spoolss_getprinterdriverdir( - cli, mem_ctx, 0, &needed, level, arch, &ctr); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_getprinterdriverdir( - cli, mem_ctx, needed, NULL, level, arch, &ctr); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - goto done; - } - - /* Return value */ - - switch (level) { - case 1: - py_from_DRIVER_DIRECTORY_1(&result, ctr.info1); - PyDict_SetItemString( - result, "level", PyInt_FromLong(1)); - break; - default: - PyErr_SetString(spoolss_error, "unknown info level"); - goto done; - } - - done: - if (cli) - cli_shutdown(cli); - - if (mem_ctx) - talloc_destroy(mem_ctx); - - return result; -} - -PyObject *spoolss_addprinterdriver(PyObject *self, PyObject *args, - PyObject *kw) -{ - static char *kwlist[] = { "server", "info", "creds", NULL }; - char *server, *errstr; - uint32 level; - PyObject *info, *result = NULL, *creds = NULL; - WERROR werror; - TALLOC_CTX *mem_ctx = NULL; - struct cli_state *cli = NULL; - PRINTER_DRIVER_CTR ctr; - union { - DRIVER_INFO_3 driver_3; - } dinfo; - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "sO!|O", kwlist, &server, &PyDict_Type, - &info, &creds)) - return NULL; - - if (server[0] == '\\' || server[1] == '\\') - server += 2; - - if (creds && creds != Py_None && !PyDict_Check(creds)) { - PyErr_SetString(PyExc_TypeError, - "credentials must be dictionary or None"); - return NULL; - } - - if (!(mem_ctx = talloc_init())) { - PyErr_SetString( - spoolss_error, "unable to init talloc context\n"); - return NULL; - } - - if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) { - PyErr_SetString(spoolss_error, errstr); - free(errstr); - goto done; - } - - if (!get_level_value(info, &level)) { - PyErr_SetString(spoolss_error, "invalid info level"); - goto done; - } - - if (level != 3) { - PyErr_SetString(spoolss_error, "unsupported info level"); - goto done; - } - - ZERO_STRUCT(ctr); - - switch(level) { - case 3: - ctr.info3 = &dinfo.driver_3; - - if (!py_to_DRIVER_INFO_3(&dinfo.driver_3, info)) { - PyErr_SetString(spoolss_error, - "error converting to driver info 3"); - goto done; - } - - break; - default: - PyErr_SetString(spoolss_error, "unsupported info level"); - goto done; - } - - werror = cli_spoolss_addprinterdriver(cli, mem_ctx, level, &ctr); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - goto done; - } - - Py_INCREF(Py_None); - result = Py_None; - -done: - if (cli) - cli_shutdown(cli); - - if (mem_ctx) - talloc_destroy(mem_ctx); - - return result; - -} - -PyObject *spoolss_addprinterdriverex(PyObject *self, PyObject *args, - PyObject *kw) -{ - /* Not supported by Samba server */ - - PyErr_SetString(spoolss_error, "Not implemented"); - return NULL; -} - -PyObject *spoolss_deleteprinterdriver(PyObject *self, PyObject *args, - PyObject *kw) -{ - PyErr_SetString(spoolss_error, "Not implemented"); - return NULL; -} - -PyObject *spoolss_deleteprinterdriverex(PyObject *self, PyObject *args, - PyObject *kw) -{ - PyErr_SetString(spoolss_error, "Not implemented"); - return NULL; -} diff --git a/source/python/py_spoolss_drivers_conv.c b/source/python/py_spoolss_drivers_conv.c deleted file mode 100644 index dbf33905ae5..00000000000 --- a/source/python/py_spoolss_drivers_conv.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" -#include "python/py_conv.h" - -/* Structure/hash conversions */ - -struct pyconv py_DRIVER_INFO_1[] = { - { "name", PY_UNISTR, offsetof(DRIVER_INFO_1, name) }, - { NULL } -}; - -struct pyconv py_DRIVER_INFO_2[] = { - { "version", PY_UINT32, offsetof(DRIVER_INFO_2, version) }, - { "name", PY_UNISTR, offsetof(DRIVER_INFO_2, name) }, - { "architecture", PY_UNISTR, offsetof(DRIVER_INFO_2, architecture) }, - { "driver_path", PY_UNISTR, offsetof(DRIVER_INFO_2, driverpath) }, - { "data_file", PY_UNISTR, offsetof(DRIVER_INFO_2, datafile) }, - { "config_file", PY_UNISTR, offsetof(DRIVER_INFO_2, configfile) }, - { NULL } -}; - -struct pyconv py_DRIVER_INFO_3[] = { - { "version", PY_UINT32, offsetof(DRIVER_INFO_3, version) }, - { "name", PY_UNISTR, offsetof(DRIVER_INFO_3, name) }, - { "architecture", PY_UNISTR, offsetof(DRIVER_INFO_3, architecture) }, - { "driver_path", PY_UNISTR, offsetof(DRIVER_INFO_3, driverpath) }, - { "data_file", PY_UNISTR, offsetof(DRIVER_INFO_3, datafile) }, - { "config_file", PY_UNISTR, offsetof(DRIVER_INFO_3, configfile) }, - { "help_file", PY_UNISTR, offsetof(DRIVER_INFO_3, helpfile) }, - /* dependentfiles */ - { "monitor_name", PY_UNISTR, offsetof(DRIVER_INFO_3, monitorname) }, - { "default_datatype", PY_UNISTR, offsetof(DRIVER_INFO_3, defaultdatatype) }, - { NULL } -}; - -struct pyconv py_DRIVER_INFO_6[] = { - { "version", PY_UINT32, offsetof(DRIVER_INFO_6, version) }, - { "name", PY_UNISTR, offsetof(DRIVER_INFO_6, name) }, - { "architecture", PY_UNISTR, offsetof(DRIVER_INFO_6, architecture) }, - { "driver_path", PY_UNISTR, offsetof(DRIVER_INFO_6, driverpath) }, - { "data_file", PY_UNISTR, offsetof(DRIVER_INFO_6, datafile) }, - { "config_file", PY_UNISTR, offsetof(DRIVER_INFO_6, configfile) }, - { "help_file", PY_UNISTR, offsetof(DRIVER_INFO_6, helpfile) }, - /* dependentfiles */ - { "monitor_name", PY_UNISTR, offsetof(DRIVER_INFO_6, monitorname) }, - { "default_datatype", PY_UNISTR, offsetof(DRIVER_INFO_6, defaultdatatype) }, - /* driver_date */ - { "padding", PY_UINT32, offsetof(DRIVER_INFO_6, padding) }, - { "driver_version_low", PY_UINT32, offsetof(DRIVER_INFO_6, driver_version_low) }, - { "driver_version_high", PY_UINT32, offsetof(DRIVER_INFO_6, driver_version_high) }, - { "mfg_name", PY_UNISTR, offsetof(DRIVER_INFO_6, mfgname) }, - { "oem_url", PY_UNISTR, offsetof(DRIVER_INFO_6, oem_url) }, - { "hardware_id", PY_UNISTR, offsetof(DRIVER_INFO_6, hardware_id) }, - { "provider", PY_UNISTR, offsetof(DRIVER_INFO_6, provider) }, - - { NULL } -}; - -struct pyconv py_DRIVER_DIRECTORY_1[] = { - { "name", PY_UNISTR, offsetof(DRIVER_DIRECTORY_1, name) }, - { NULL } -}; - -BOOL py_from_DRIVER_INFO_1(PyObject **dict, DRIVER_INFO_1 *info) -{ - *dict = from_struct(info, py_DRIVER_INFO_1); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(1)); - return True; -} - -BOOL py_to_DRIVER_INFO_1(DRIVER_INFO_1 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_DRIVER_INFO_2(PyObject **dict, DRIVER_INFO_2 *info) -{ - *dict = from_struct(info, py_DRIVER_INFO_2); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(2)); - return True; -} - -BOOL py_to_DRIVER_INFO_2(DRIVER_INFO_2 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_DRIVER_INFO_3(PyObject **dict, DRIVER_INFO_3 *info) -{ - *dict = from_struct(info, py_DRIVER_INFO_3); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(3)); - return True; -} - -BOOL py_to_DRIVER_INFO_3(DRIVER_INFO_3 *info, PyObject *dict) -{ - PyObject *dict_copy = PyDict_Copy(dict); - BOOL result; - - PyDict_DelItemString(dict_copy, "level"); - result = to_struct(info, dict_copy, py_DRIVER_INFO_3); - - Py_DECREF(dict_copy); - return result; -} - -BOOL py_from_DRIVER_INFO_6(PyObject **dict, DRIVER_INFO_6 *info) -{ - *dict = from_struct(info, py_DRIVER_INFO_6); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(6)); - return True; -} - -BOOL py_to_DRIVER_INFO_6(DRIVER_INFO_6 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_DRIVER_DIRECTORY_1(PyObject **dict, DRIVER_DIRECTORY_1 *info) -{ - *dict = from_struct(info, py_DRIVER_DIRECTORY_1); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(1)); - return True; -} - -BOOL py_to_DRIVER_DIRECTORY_1(DRIVER_DIRECTORY_1 *info, PyObject *dict) -{ - return False; -} diff --git a/source/python/py_spoolss_forms.c b/source/python/py_spoolss_forms.c deleted file mode 100644 index c216e00afe4..00000000000 --- a/source/python/py_spoolss_forms.c +++ /dev/null @@ -1,266 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" - -/* Add a form */ - -PyObject *spoolss_hnd_addform(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - PyObject *info; - FORM form; - int level; - static char *kwlist[] = {"form", NULL}; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "O!", kwlist, &PyDict_Type, &info)) - return NULL; - - /* Call rpc function */ - - if (!py_to_FORM(&form, info)) { - PyErr_SetString(spoolss_error, "invalid form"); - return NULL; - } - - if (!get_level_value(info, &level)) { - PyErr_SetString(spoolss_error, "invalid info level"); - return NULL; - } - - if (level != 1) { - PyErr_SetString(spoolss_error, "unsupported info level"); - return NULL; - } - - switch (level) { - case 1: { - PyObject *obj = PyDict_GetItemString(info, "name"); - char *form_name = PyString_AsString(obj); - - init_unistr2(&form.name, form_name, strlen(form_name) + 1); - break; - } - default: - PyErr_SetString(spoolss_error, "unsupported info level"); - return NULL; - } - - werror = cli_spoolss_addform(hnd->cli, hnd->mem_ctx, &hnd->pol, - level, &form); - - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Get form properties */ - -PyObject *spoolss_hnd_getform(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - PyObject *result; - char *form_name; - int level = 1; - static char *kwlist[] = {"form_name", "level", NULL}; - uint32 needed; - FORM_1 form; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|i", kwlist, &form_name, &level)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_getform(hnd->cli, hnd->mem_ctx, 0, &needed, - &hnd->pol, form_name, 1, &form); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_getform( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, - form_name, 1, &form); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - result = Py_None; - - switch(level) { - case 1: - py_from_FORM_1(&result, &form); - break; - } - - Py_INCREF(result); - return result; -} - -/* Set form properties */ - -PyObject *spoolss_hnd_setform(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - PyObject *info, *form_name; - int level; - static char *kwlist[] = { "form", NULL}; - FORM form; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "O!", kwlist, &PyDict_Type, &info)) - return NULL; - - if (!get_level_value(info, &level)) { - PyErr_SetString(spoolss_error, "invalid info level"); - return NULL; - } - - if (level != 1) { - PyErr_SetString(spoolss_error, "unsupported info level"); - return NULL; - } - - /* Call rpc function */ - - if (!py_to_FORM(&form, info)) { - PyErr_SetString(spoolss_error, "invalid form"); - return NULL; - } - - form_name = PyDict_GetItemString(info, "name"); - - werror = cli_spoolss_setform( - hnd->cli, hnd->mem_ctx, &hnd->pol, level, - PyString_AsString(form_name), &form); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Delete a form */ - -PyObject *spoolss_hnd_deleteform(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = {"form_name", NULL}; - char *form_name; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s", kwlist, &form_name)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_deleteform( - hnd->cli, hnd->mem_ctx, &hnd->pol, form_name); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Enumerate forms */ - -PyObject *spoolss_hnd_enumforms(PyObject *self, PyObject *args, PyObject *kw) -{ - PyObject *result; - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - uint32 level = 1, num_forms, needed, i; - static char *kwlist[] = {"level", NULL}; - FORM_1 *forms; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "|i", kwlist, &level)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_enumforms( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, level, - &num_forms, &forms); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_enumforms( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, level, - &num_forms, &forms); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - switch(level) { - case 1: - result = PyDict_New(); - - for (i = 0; i < num_forms; i++) { - PyObject *value; - fstring name; - - rpcstr_pull(name, forms[i].name.buffer, - sizeof(fstring), -1, STR_TERMINATE); - - py_from_FORM_1(&value, &forms[i]); - - PyDict_SetItemString( - value, "level", PyInt_FromLong(1)); - - PyDict_SetItemString(result, name, value); - } - - break; - default: - PyErr_SetString(spoolss_error, "unknown info level"); - return NULL; - } - - return result; -} diff --git a/source/python/py_spoolss_forms_conv.c b/source/python/py_spoolss_forms_conv.c deleted file mode 100644 index 6ef953cbc9b..00000000000 --- a/source/python/py_spoolss_forms_conv.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" -#include "python/py_conv.h" - -struct pyconv py_FORM[] = { - { "flags", PY_UINT32, offsetof(FORM, flags) }, - { "width", PY_UINT32, offsetof(FORM, size_x) }, - { "length", PY_UINT32, offsetof(FORM, size_y) }, - { "top", PY_UINT32, offsetof(FORM, top) }, - { "left", PY_UINT32, offsetof(FORM, left) }, - { "right", PY_UINT32, offsetof(FORM, right) }, - { "bottom", PY_UINT32, offsetof(FORM, bottom) }, - { NULL } -}; - -struct pyconv py_FORM_1[] = { - { "flags", PY_UINT32, offsetof(FORM_1, flag) }, - { "width", PY_UINT32, offsetof(FORM_1, width) }, - { "length", PY_UINT32, offsetof(FORM_1, length) }, - { "top", PY_UINT32, offsetof(FORM_1, top) }, - { "left", PY_UINT32, offsetof(FORM_1, left) }, - { "right", PY_UINT32, offsetof(FORM_1, right) }, - { "bottom", PY_UINT32, offsetof(FORM_1, bottom) }, - { "name", PY_UNISTR, offsetof(FORM_1, name) }, - { NULL } -}; - -BOOL py_from_FORM_1(PyObject **dict, FORM_1 *form) -{ - *dict = from_struct(form, py_FORM_1); - - PyDict_SetItemString(*dict, "level", PyInt_FromLong(1)); - - return True; -} - -BOOL py_to_FORM(FORM *form, PyObject *dict) -{ - PyObject *obj, *dict_copy = PyDict_Copy(dict); - char *name; - - obj = PyDict_GetItemString(dict, "name"); - - if (!obj || !PyString_Check(obj)) - return False; - - PyDict_DelItemString(dict_copy, "level"); - PyDict_DelItemString(dict_copy, "name"); - - if (!to_struct(form, dict_copy, py_FORM)) { - Py_DECREF(dict_copy); - return False; - } - - name = PyString_AsString(obj); - - init_unistr2(&form->name, name, strlen(name) + 1); - - return True; -} diff --git a/source/python/py_spoolss_jobs.c b/source/python/py_spoolss_jobs.c deleted file mode 100644 index cc5d42e0eef..00000000000 --- a/source/python/py_spoolss_jobs.c +++ /dev/null @@ -1,377 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" - -/* Enumerate jobs */ - -PyObject *spoolss_hnd_enumjobs(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - PyObject *result; - int level = 1; - uint32 i, needed, num_jobs; - static char *kwlist[] = {"level", NULL}; - JOB_INFO_CTR ctr; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "|i", kwlist, &level)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_enumjobs( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, level, 0, - 1000, &num_jobs, &ctr); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_enumjobs( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, - level, 0, 1000, &num_jobs, &ctr); - - /* Return value */ - - result = Py_None; - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - goto done; - } - - result = PyList_New(num_jobs); - - switch (level) { - case 1: - for (i = 0; i < num_jobs; i++) { - PyObject *value; - - py_from_JOB_INFO_1(&value, &ctr.job.job_info_1[i]); - - PyList_SetItem(result, i, value); - } - - break; - case 2: - for(i = 0; i < num_jobs; i++) { - PyObject *value; - - py_from_JOB_INFO_2(&value, &ctr.job.job_info_2[i]); - - PyList_SetItem(result, i, value); - } - - break; - } - - done: - Py_INCREF(result); - return result; -} - -/* Set job command */ - -PyObject *spoolss_hnd_setjob(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - uint32 level = 0, command, jobid; - static char *kwlist[] = {"jobid", "command", "level", NULL}; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "ii|i", kwlist, &jobid, &command, &level)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_setjob(hnd->cli, hnd->mem_ctx, &hnd->pol, - jobid, level, command); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Get job */ - -PyObject *spoolss_hnd_getjob(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - PyObject *result; - uint32 level = 1, jobid, needed; - static char *kwlist[] = {"jobid", "level", NULL}; - JOB_INFO_CTR ctr; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "i|i", kwlist, &jobid, &level)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_getjob(hnd->cli, hnd->mem_ctx, 0, &needed, - &hnd->pol, jobid, level, &ctr); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_getjob( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, - jobid, level, &ctr); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - switch(level) { - case 1: - py_from_JOB_INFO_1(&result, ctr.job.job_info_1); - break; - case 2: - py_from_JOB_INFO_2(&result, ctr.job.job_info_2); - break; - } - - return result; -} - -/* Start page printer. This notifies the spooler that a page is about to be - printed on the specified printer. */ - -PyObject *spoolss_hnd_startpageprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = { NULL }; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_startpageprinter( - hnd->cli, hnd->mem_ctx, &hnd->pol); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* End page printer. This notifies the spooler that a page has finished - being printed on the specified printer. */ - -PyObject *spoolss_hnd_endpageprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = { NULL }; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_endpageprinter( - hnd->cli, hnd->mem_ctx, &hnd->pol); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Start doc printer. This notifies the spooler that a document is about to be - printed on the specified printer. */ - -PyObject *spoolss_hnd_startdocprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = { "document_info", NULL }; - PyObject *info, *obj; - uint32 level, jobid; - char *document_name = NULL, *output_file = NULL, *data_type = NULL; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "O!", kwlist, &PyDict_Type, &info)) - return NULL; - - /* Check document_info parameter */ - - if (!get_level_value(info, &level)) { - PyErr_SetString(spoolss_error, "invalid info level"); - return NULL; - } - - if (level != 1) { - PyErr_SetString(spoolss_error, "unsupported info level"); - return NULL; - } - - if ((obj = PyDict_GetItemString(info, "document_name"))) { - - if (!PyString_Check(obj) && obj != Py_None) { - PyErr_SetString(spoolss_error, - "document_name not a string"); - return NULL; - } - - if (PyString_Check(obj)) - document_name = PyString_AsString(obj); - - } else { - PyErr_SetString(spoolss_error, "no document_name present"); - return NULL; - } - - if ((obj = PyDict_GetItemString(info, "output_file"))) { - - if (!PyString_Check(obj) && obj != Py_None) { - PyErr_SetString(spoolss_error, - "output_file not a string"); - return NULL; - } - - if (PyString_Check(obj)) - output_file = PyString_AsString(obj); - - } else { - PyErr_SetString(spoolss_error, "no output_file present"); - return NULL; - } - - if ((obj = PyDict_GetItemString(info, "data_type"))) { - - if (!PyString_Check(obj) && obj != Py_None) { - PyErr_SetString(spoolss_error, - "data_type not a string"); - return NULL; - } - - if (PyString_Check(obj)) - data_type = PyString_AsString(obj); - - } else { - PyErr_SetString(spoolss_error, "no data_type present"); - return NULL; - } - - /* Call rpc function */ - - werror = cli_spoolss_startdocprinter( - hnd->cli, hnd->mem_ctx, &hnd->pol, document_name, - output_file, data_type, &jobid); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - /* The return value is zero for an error (where does the status - code come from now??) and the return value is the jobid - allocated for the new job. */ - - return Py_BuildValue("i", jobid); -} - -/* End doc printer. This notifies the spooler that a document has finished - being printed on the specified printer. */ - -PyObject *spoolss_hnd_enddocprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = { NULL }; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_enddocprinter(hnd->cli, hnd->mem_ctx, &hnd->pol); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Write data to a printer */ - -PyObject *spoolss_hnd_writeprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = { "data", NULL }; - PyObject *data; - uint32 num_written; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "O!", kwlist, &PyString_Type, &data)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_writeprinter( - hnd->cli, hnd->mem_ctx, &hnd->pol, PyString_Size(data), - PyString_AsString(data), &num_written); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -PyObject *spoolss_hnd_addjob(PyObject *self, PyObject *args, PyObject *kw) -{ - PyErr_SetString(spoolss_error, "Not implemented"); - return NULL; -} diff --git a/source/python/py_spoolss_jobs_conv.c b/source/python/py_spoolss_jobs_conv.c deleted file mode 100644 index cb04ec6713c..00000000000 --- a/source/python/py_spoolss_jobs_conv.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" -#include "python/py_conv.h" - -struct pyconv py_JOB_INFO_1[] = { - { "jobid", PY_UINT32, offsetof(JOB_INFO_1, jobid) }, - { "printer_name", PY_UNISTR, offsetof(JOB_INFO_1, printername) }, - { "server_name", PY_UNISTR, offsetof(JOB_INFO_1, machinename) }, - { "user_name", PY_UNISTR, offsetof(JOB_INFO_1, username) }, - { "document_name", PY_UNISTR, offsetof(JOB_INFO_1, document) }, - { "data_type", PY_UNISTR, offsetof(JOB_INFO_1, datatype) }, - { "text_status", PY_UNISTR, offsetof(JOB_INFO_1, text_status) }, - { "status", PY_UINT32, offsetof(JOB_INFO_1, status) }, - { "priority", PY_UINT32, offsetof(JOB_INFO_1, priority) }, - { "position", PY_UINT32, offsetof(JOB_INFO_1, position) }, - { "total_pages", PY_UINT32, offsetof(JOB_INFO_1, totalpages) }, - { "pages_printed", PY_UINT32, offsetof(JOB_INFO_1, pagesprinted) }, - { NULL } -}; - -struct pyconv py_JOB_INFO_2[] = { - { "jobid", PY_UINT32, offsetof(JOB_INFO_2, jobid) }, - { "printer_name", PY_UNISTR, offsetof(JOB_INFO_2, printername) }, - { "server_name", PY_UNISTR, offsetof(JOB_INFO_2, machinename) }, - { "user_name", PY_UNISTR, offsetof(JOB_INFO_2, username) }, - { "document_name", PY_UNISTR, offsetof(JOB_INFO_2, document) }, - { "notify_name", PY_UNISTR, offsetof(JOB_INFO_2, notifyname) }, - { "data_type", PY_UNISTR, offsetof(JOB_INFO_2, datatype) }, - { "print_processor", PY_UNISTR, offsetof(JOB_INFO_2, printprocessor) }, - { "parameters", PY_UNISTR, offsetof(JOB_INFO_2, parameters) }, - { "driver_name", PY_UNISTR, offsetof(JOB_INFO_2, drivername) }, - { "text_status", PY_UNISTR, offsetof(JOB_INFO_2, text_status) }, - { "status", PY_UINT32, offsetof(JOB_INFO_2, status) }, - { "priority", PY_UINT32, offsetof(JOB_INFO_2, priority) }, - { "position", PY_UINT32, offsetof(JOB_INFO_2, position) }, - { "start_time", PY_UINT32, offsetof(JOB_INFO_2, starttime) }, - { "until_time", PY_UINT32, offsetof(JOB_INFO_2, untiltime) }, - { "total_pages", PY_UINT32, offsetof(JOB_INFO_2, totalpages) }, - { "size", PY_UINT32, offsetof(JOB_INFO_2, size) }, - { "time_elapsed", PY_UINT32, offsetof(JOB_INFO_2, timeelapsed) }, - { "pages_printed", PY_UINT32, offsetof(JOB_INFO_2, pagesprinted) }, - { NULL } -}; - -struct pyconv py_DOC_INFO_1[] = { - { "document_name", PY_UNISTR, offsetof(DOC_INFO_1, docname) }, - { "output_file", PY_UNISTR, offsetof(DOC_INFO_1, outputfile) }, - { "data_type", PY_UNISTR, offsetof(DOC_INFO_1, datatype) }, - { NULL } -}; - -BOOL py_from_JOB_INFO_1(PyObject **dict, JOB_INFO_1 *info) -{ - *dict = from_struct(info, py_JOB_INFO_1); - return True; -} - -BOOL py_to_JOB_INFO_1(JOB_INFO_1 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_JOB_INFO_2(PyObject **dict, JOB_INFO_2 *info) -{ - *dict = from_struct(info, py_JOB_INFO_2); - return True; -} - -BOOL py_to_JOB_INFO_2(JOB_INFO_2 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_DOC_INFO_1(PyObject **dict, DOC_INFO_1 *info) -{ - *dict = from_struct(info, py_DOC_INFO_1); - return True; -} - -BOOL py_to_DOC_INFO_1(DOC_INFO_1 *info, PyObject *dict) -{ - return to_struct(info, dict, py_DOC_INFO_1); -} diff --git a/source/python/py_spoolss_ports.c b/source/python/py_spoolss_ports.c deleted file mode 100644 index b5f2102e5e8..00000000000 --- a/source/python/py_spoolss_ports.c +++ /dev/null @@ -1,137 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" - -/* Enumerate ports */ - -PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw) -{ - WERROR werror; - PyObject *result = NULL, *creds = NULL; - int level = 1; - uint32 i, needed, num_ports; - static char *kwlist[] = {"server", "level", "creds", NULL}; - TALLOC_CTX *mem_ctx = NULL; - struct cli_state *cli = NULL; - char *server, *errstr; - PORT_INFO_CTR ctr; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|iO", kwlist, &server, &level, &creds)) - return NULL; - - if (server[0] != '\\' || server[1] != '\\') { - PyErr_SetString(PyExc_ValueError, "UNC name required"); - return NULL; - } - - server += 2; - - if (creds && creds != Py_None && !PyDict_Check(creds)) { - PyErr_SetString(PyExc_TypeError, - "credentials must be dictionary or None"); - return NULL; - } - - if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) { - PyErr_SetString(spoolss_error, errstr); - free(errstr); - goto done; - } - - if (!(mem_ctx = talloc_init())) { - PyErr_SetString( - spoolss_error, "unable to init talloc context\n"); - goto done; - } - - /* Call rpc function */ - - werror = cli_spoolss_enum_ports( - cli, mem_ctx, 0, &needed, level, &num_ports, &ctr); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_enum_ports( - cli, mem_ctx, needed, NULL, level, - &num_ports, &ctr); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - goto done; - } - - /* Return value */ - - switch (level) { - case 1: - result = PyDict_New(); - - for (i = 0; i < num_ports; i++) { - PyObject *value; - fstring name; - - rpcstr_pull(name, ctr.port.info_1[i].port_name.buffer, - sizeof(fstring), -1, STR_TERMINATE); - - py_from_PORT_INFO_1(&value, &ctr.port.info_1[i]); - - PyDict_SetItemString( - value, "level", PyInt_FromLong(1)); - - PyDict_SetItemString(result, name, value); - } - - break; - case 2: - result = PyDict_New(); - - for(i = 0; i < num_ports; i++) { - PyObject *value; - fstring name; - - rpcstr_pull(name, ctr.port.info_2[i].port_name.buffer, - sizeof(fstring), -1, STR_TERMINATE); - - py_from_PORT_INFO_2(&value, &ctr.port.info_2[i]); - - PyDict_SetItemString( - value, "level", PyInt_FromLong(2)); - - PyDict_SetItemString(result, name, value); - } - - break; - default: - PyErr_SetString(spoolss_error, "unknown info level"); - goto done; - } - - done: - if (cli) - cli_shutdown(cli); - - if (mem_ctx) - talloc_destroy(mem_ctx); - - return result; -} diff --git a/source/python/py_spoolss_ports_conv.c b/source/python/py_spoolss_ports_conv.c deleted file mode 100644 index 3f6d94bf7e7..00000000000 --- a/source/python/py_spoolss_ports_conv.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" -#include "python/py_conv.h" - -struct pyconv py_PORT_INFO_1[] = { - { "name", PY_UNISTR, offsetof(PORT_INFO_1, port_name) }, - { NULL } -}; - -struct pyconv py_PORT_INFO_2[] = { - { "name", PY_UNISTR, offsetof(PORT_INFO_2, port_name) }, - { "monitor_name", PY_UNISTR, offsetof(PORT_INFO_2, monitor_name) }, - { "description", PY_UNISTR, offsetof(PORT_INFO_2, description) }, - { "reserved", PY_UINT32, offsetof(PORT_INFO_2, reserved) }, - { "type", PY_UINT32, offsetof(PORT_INFO_2, port_type) }, - { NULL } -}; - -BOOL py_from_PORT_INFO_1(PyObject **dict, PORT_INFO_1 *info) -{ - *dict = from_struct(info, py_PORT_INFO_1); - return True; -} - -BOOL py_to_PORT_INFO_1(PORT_INFO_1 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_PORT_INFO_2(PyObject **dict, PORT_INFO_2 *info) -{ - *dict = from_struct(info, py_PORT_INFO_2); - return True; -} - -BOOL py_to_PORT_INFO_2(PORT_INFO_2 *info, PyObject *dict) -{ - return False; -} diff --git a/source/python/py_spoolss_printerdata.c b/source/python/py_spoolss_printerdata.c deleted file mode 100644 index e1e43fa7366..00000000000 --- a/source/python/py_spoolss_printerdata.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" - -static BOOL py_from_printerdata(PyObject **dict, char *value, - uint32 data_type, char *data, - uint32 data_size) -{ - *dict = PyDict_New(); - - PyDict_SetItemString(*dict, "type", Py_BuildValue("i", data_type)); - PyDict_SetItemString(*dict, "value", Py_BuildValue("s", value)); - - PyDict_SetItemString(*dict, "data", - Py_BuildValue("s#", data, data_size)); - - return True; -} - -static BOOL py_to_printerdata(char **value, uint32 *data_type, - char **data, uint32 *data_size, - PyObject *dict) -{ - PyObject *obj; - - if ((obj = PyDict_GetItemString(dict, "type"))) { - - if (!PyInt_Check(obj)) { - PyErr_SetString(spoolss_error, - "type not an integer"); - return False; - } - - *data_type = PyInt_AsLong(obj); - } else { - PyErr_SetString(spoolss_error, "no type present"); - return False; - } - - if ((obj = PyDict_GetItemString(dict, "value"))) { - - if (!PyString_Check(obj)) { - PyErr_SetString(spoolss_error, - "value not a string"); - return False; - } - - *value = PyString_AsString(obj); - } else { - PyErr_SetString(spoolss_error, "no value present"); - return False; - } - - if ((obj = PyDict_GetItemString(dict, "data"))) { - - if (!PyString_Check(obj)) { - PyErr_SetString(spoolss_error, - "data not a string"); - return False; - } - - *data = PyString_AsString(obj); - *data_size = PyString_Size(obj); - } else { - PyErr_SetString(spoolss_error, "no data present"); - return False; - } - - return True; -} - -PyObject *spoolss_hnd_getprinterdata(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - static char *kwlist[] = { "value", NULL }; - char *value; - WERROR werror; - uint32 needed, data_type, data_size; - char *data; - PyObject *result; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &value)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_getprinterdata( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, value, - &data_type, &data, &data_size); - - if (W_ERROR_V(werror) == ERRmoredata) - werror = cli_spoolss_getprinterdata( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, value, - &data_type, &data, &data_size); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - py_from_printerdata(&result, value, data_type, data, needed); - - return result; -} - -PyObject *spoolss_hnd_setprinterdata(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - static char *kwlist[] = { "data", NULL }; - PyObject *py_data; - char *value, *data; - uint32 data_size, data_type; - WERROR werror; - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "O!", kwlist, &PyDict_Type, &py_data)) - return NULL; - - if (!py_to_printerdata(&value, &data_type, &data, &data_size, py_data)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_setprinterdata( - hnd->cli, hnd->mem_ctx, &hnd->pol, value, data_type, - data, data_size); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - static char *kwlist[] = { NULL }; - uint32 data_needed, value_needed, ndx = 0, data_size, data_type; - char *value, *data; - WERROR werror; - PyObject *result; - - if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist)) - return NULL; - - /* Get max buffer sizes for value and data */ - - werror = cli_spoolss_enumprinterdata( - hnd->cli, hnd->mem_ctx, &hnd->pol, ndx, 0, 0, - &value_needed, &data_needed, NULL, NULL, NULL, NULL); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - /* Iterate over all printerdata */ - - result = PyDict_New(); - - while (W_ERROR_IS_OK(werror)) { - PyObject *obj; - - werror = cli_spoolss_enumprinterdata( - hnd->cli, hnd->mem_ctx, &hnd->pol, ndx, - value_needed, data_needed, NULL, NULL, - &value, &data_type, &data, &data_size); - - if (py_from_printerdata(&obj, value, data_type, data, - data_size)) - PyDict_SetItemString(result, value, obj); - - ndx++; - } - - return result; -} - -PyObject *spoolss_hnd_deleteprinterdata(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - static char *kwlist[] = { "value", NULL }; - char *value; - WERROR werror; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &value)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_deleteprinterdata( - hnd->cli, hnd->mem_ctx, &hnd->pol, value); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -PyObject *spoolss_hnd_deleteprinterdataex(PyObject *self, PyObject *args, PyObject *kw) -{ - /* Not supported by Samba server */ - - PyErr_SetString(spoolss_error, "Not implemented"); - return NULL; -} diff --git a/source/python/py_spoolss_printers.c b/source/python/py_spoolss_printers.c deleted file mode 100644 index 8d4cd24778c..00000000000 --- a/source/python/py_spoolss_printers.c +++ /dev/null @@ -1,480 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" - -/* Open a printer */ - -PyObject *spoolss_openprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - char *unc_name, *server, *errstr; - TALLOC_CTX *mem_ctx = NULL; - POLICY_HND hnd; - WERROR werror; - PyObject *result = NULL, *creds = NULL; - static char *kwlist[] = { "printername", "creds", "access", NULL }; - uint32 desired_access = MAXIMUM_ALLOWED_ACCESS; - struct cli_state *cli; - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|Oi", kwlist, &unc_name, &creds, - &desired_access)) - return NULL; - - if (unc_name[0] != '\\' || unc_name[1] != '\\') { - PyErr_SetString(PyExc_ValueError, "UNC name required"); - return NULL; - } - - server = strdup(unc_name + 2); - - if (strchr(server, '\\')) { - char *c = strchr(server, '\\'); - *c = 0; - } - - if (creds && creds != Py_None && !PyDict_Check(creds)) { - PyErr_SetString(PyExc_TypeError, - "credentials must be dictionary or None"); - return NULL; - } - - if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) { - PyErr_SetString(spoolss_error, errstr); - free(errstr); - goto done; - } - - if (!(mem_ctx = talloc_init())) { - PyErr_SetString(spoolss_error, - "unable to init talloc context\n"); - goto done; - } - - werror = cli_spoolss_open_printer_ex( - cli, mem_ctx, unc_name, "", desired_access, server, - "", &hnd); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - goto done; - } - - result = new_spoolss_policy_hnd_object(cli, mem_ctx, &hnd); - - done: - if (!result) { - if (cli) - cli_shutdown(cli); - - if (mem_ctx) - talloc_destroy(mem_ctx); - } - - SAFE_FREE(server); - - return result; -} - -/* Close a printer */ - -PyObject *spoolss_closeprinter(PyObject *self, PyObject *args) -{ - PyObject *po; - spoolss_policy_hnd_object *hnd; - WERROR result; - - /* Parse parameters */ - - if (!PyArg_ParseTuple(args, "O!", &spoolss_policy_hnd_type, &po)) - return NULL; - - hnd = (spoolss_policy_hnd_object *)po; - - /* Call rpc function */ - - result = cli_spoolss_close_printer(hnd->cli, hnd->mem_ctx, &hnd->pol); - - /* Return value */ - - Py_INCREF(Py_None); - return Py_None; -} - -/* Fetch printer information */ - -PyObject *spoolss_hnd_getprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - PyObject *result = NULL; - PRINTER_INFO_CTR ctr; - int level = 1; - uint32 needed; - static char *kwlist[] = {"level", NULL}; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "|i", kwlist, &level)) - return NULL; - - if (level < 0 || level > 3) { - PyErr_SetString(spoolss_error, "Invalid info level"); - return NULL; - } - - ZERO_STRUCT(ctr); - - /* Call rpc function */ - - werror = cli_spoolss_getprinter( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, level, &ctr); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_getprinter( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, - level, &ctr); - - /* Return value */ - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - result = Py_None; - - switch (level) { - - case 0: - py_from_PRINTER_INFO_0(&result, ctr.printers_0); - break; - - case 1: - py_from_PRINTER_INFO_1(&result, ctr.printers_1); - break; - - case 2: - py_from_PRINTER_INFO_2(&result, ctr.printers_2); - break; - - case 3: - py_from_PRINTER_INFO_3(&result, ctr.printers_3); - break; - } - - Py_INCREF(result); - return result; -} - -/* Set printer information */ - -PyObject *spoolss_hnd_setprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - PyObject *info; - PRINTER_INFO_CTR ctr; - uint32 level; - static char *kwlist[] = {"dict", NULL}; - union { - PRINTER_INFO_1 printers_1; - PRINTER_INFO_2 printers_2; - PRINTER_INFO_3 printers_3; - } pinfo; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "O!", kwlist, &PyDict_Type, &info)) - return NULL; - - if (!get_level_value(info, &level)) { - PyErr_SetString(spoolss_error, "invalid info level"); - return NULL; - } - - if (level < 1 && level > 3) { - PyErr_SetString(spoolss_error, "unsupported info level"); - return NULL; - } - - /* Fill in printer info */ - - ZERO_STRUCT(ctr); - - switch (level) { - case 1: - ctr.printers_1 = &pinfo.printers_1; - - if (!py_to_PRINTER_INFO_1(&pinfo.printers_1, info)){ - PyErr_SetString(spoolss_error, - "error converting printer to info 1"); - return NULL; - } - - break; - case 2: - ctr.printers_2 = &pinfo.printers_2; - - if (!py_to_PRINTER_INFO_2(&pinfo.printers_2, info, - hnd->mem_ctx)){ - PyErr_SetString(spoolss_error, - "error converting printer to info 2"); - return NULL; - } - - break; - case 3: - ctr.printers_3 = &pinfo.printers_3; - - if (!py_to_PRINTER_INFO_3(&pinfo.printers_3, info, - hnd->mem_ctx)) { - PyErr_SetString(spoolss_error, - "error converting to printer info 3"); - return NULL; - } - - break; - default: - PyErr_SetString(spoolss_error, "unsupported info level"); - return NULL; - } - - /* Call rpc function */ - - werror = cli_spoolss_setprinter(hnd->cli, hnd->mem_ctx, &hnd->pol, - level, &ctr, 0); - - /* Return value */ - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Enumerate printers */ - -PyObject *spoolss_enumprinters(PyObject *self, PyObject *args, PyObject *kw) -{ - WERROR werror; - PyObject *result = NULL, *creds = NULL; - PRINTER_INFO_CTR ctr; - int level = 1, flags = PRINTER_ENUM_LOCAL, i; - uint32 needed, num_printers; - static char *kwlist[] = {"server", "name", "level", "flags", - "creds", NULL}; - TALLOC_CTX *mem_ctx = NULL; - struct cli_state *cli = NULL; - char *server, *errstr, *name = NULL; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|siiO", kwlist, &server, &name, &level, - &flags, &creds)) - return NULL; - - if (server[0] != '\\' || server[1] != '\\') { - PyErr_SetString(PyExc_ValueError, "UNC name required"); - return NULL; - } - - server += 2; - - if (creds && creds != Py_None && !PyDict_Check(creds)) { - PyErr_SetString(PyExc_TypeError, - "credentials must be dictionary or None"); - return NULL; - } - - if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) { - PyErr_SetString(spoolss_error, errstr); - free(errstr); - goto done; - } - - if (!(mem_ctx = talloc_init())) { - PyErr_SetString( - spoolss_error, "unable to init talloc context\n"); - goto done; - } - - /* This RPC is weird. By setting the server name to different - values we can get different behaviour. If however the server - name is not specified, we default it to being the full server - name as this is probably what the caller intended. To pass a - NULL name, pass a value of "" */ - - if (!name) - name = server; - else { - if (!name[0]) - name = NULL; - } - - /* Call rpc function */ - - werror = cli_spoolss_enum_printers( - cli, mem_ctx, 0, &needed, flags, level, - &num_printers, &ctr); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_enum_printers( - cli, mem_ctx, needed, NULL, flags, level, - &num_printers, &ctr); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - goto done; - } - - /* Return value */ - - switch (level) { - case 0: - result = PyDict_New(); - - for (i = 0; i < num_printers; i++) { - PyObject *value; - fstring name; - - rpcstr_pull(name, ctr.printers_0[i].printername.buffer, - sizeof(fstring), -1, STR_TERMINATE); - - py_from_PRINTER_INFO_0(&value, &ctr.printers_0[i]); - - PyDict_SetItemString( - value, "level", PyInt_FromLong(0)); - - PyDict_SetItemString(result, name, value); - } - - break; - case 1: - result = PyDict_New(); - - for(i = 0; i < num_printers; i++) { - PyObject *value; - fstring name; - - rpcstr_pull(name, ctr.printers_1[i].name.buffer, - sizeof(fstring), -1, STR_TERMINATE); - - py_from_PRINTER_INFO_1(&value, &ctr.printers_1[i]); - - PyDict_SetItemString( - value, "level", PyInt_FromLong(1)); - - PyDict_SetItemString(result, name, value); - } - - break; - case 2: - result = PyDict_New(); - - for(i = 0; i < num_printers; i++) { - PyObject *value; - fstring name; - - rpcstr_pull(name, ctr.printers_2[i].printername.buffer, - sizeof(fstring), -1, STR_TERMINATE); - - py_from_PRINTER_INFO_2(&value, &ctr.printers_2[i]); - - PyDict_SetItemString( - value, "level", PyInt_FromLong(2)); - - PyDict_SetItemString(result, name, value); - } - - break; - default: - PyErr_SetString(spoolss_error, "unknown info level"); - goto done; - } - -done: - if (cli) - cli_shutdown(cli); - - if (mem_ctx) - talloc_destroy(mem_ctx); - - return result; -} - -/* Add a printer */ - -PyObject *spoolss_addprinterex(PyObject *self, PyObject *args, PyObject *kw) -{ - static char *kwlist[] = { "server", "printername", "info", "creds", - NULL}; - char *printername, *server, *errstr; - PyObject *info, *result = NULL, *creds = NULL; - struct cli_state *cli = NULL; - TALLOC_CTX *mem_ctx = NULL; - PRINTER_INFO_CTR ctr; - PRINTER_INFO_2 info2; - WERROR werror; - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "ssO!|O!", kwlist, &server, &printername, - &PyDict_Type, &info, &PyDict_Type, &creds)) - return NULL; - - if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) { - PyErr_SetString(spoolss_error, errstr); - free(errstr); - goto done; - } - - if (!(mem_ctx = talloc_init())) { - PyErr_SetString( - spoolss_error, "unable to init talloc context\n"); - goto done; - } - - if (!py_to_PRINTER_INFO_2(&info2, info, mem_ctx)) { - PyErr_SetString(spoolss_error, - "error converting to printer info 2"); - goto done; - } - - ctr.printers_2 = &info2; - - werror = cli_spoolss_addprinterex(cli, mem_ctx, 2, &ctr); - - Py_INCREF(Py_None); - result = Py_None; - -done: - if (cli) - cli_shutdown(cli); - - if (mem_ctx) - talloc_destroy(mem_ctx); - - return result; -} diff --git a/source/python/py_spoolss_printers_conv.c b/source/python/py_spoolss_printers_conv.c deleted file mode 100644 index 247db65b1ef..00000000000 --- a/source/python/py_spoolss_printers_conv.c +++ /dev/null @@ -1,296 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_spoolss.h" -#include "python/py_conv.h" - -struct pyconv py_PRINTER_INFO_0[] = { - { "name", PY_UNISTR, offsetof(PRINTER_INFO_0, printername) }, - { "server_name", PY_UNISTR, offsetof(PRINTER_INFO_0, servername) }, - - { "cjobs", PY_UINT32, offsetof(PRINTER_INFO_0, cjobs) }, - { "total_jobs", PY_UINT32, offsetof(PRINTER_INFO_0, total_jobs) }, - { "total_bytes", PY_UINT32, offsetof(PRINTER_INFO_0, total_bytes) }, - - { "year", PY_UINT16, offsetof(PRINTER_INFO_0, year) }, - { "month", PY_UINT16, offsetof(PRINTER_INFO_0, month) }, - { "day_of_week", PY_UINT16, offsetof(PRINTER_INFO_0, dayofweek) }, - { "day", PY_UINT16, offsetof(PRINTER_INFO_0, day) }, - { "hour", PY_UINT16, offsetof(PRINTER_INFO_0, hour) }, - { "minute", PY_UINT16, offsetof(PRINTER_INFO_0, minute) }, - { "second", PY_UINT16, offsetof(PRINTER_INFO_0, second) }, - { "milliseconds", PY_UINT16, offsetof(PRINTER_INFO_0, milliseconds) }, - - { "global_counter", PY_UINT32, offsetof(PRINTER_INFO_0, global_counter) }, - { "total_pages", PY_UINT32, offsetof(PRINTER_INFO_0, total_pages) }, - - { "major_version", PY_UINT16, offsetof(PRINTER_INFO_0, major_version) }, - { "build_version", PY_UINT16, offsetof(PRINTER_INFO_0, build_version) }, - - { "unknown7", PY_UINT32, offsetof(PRINTER_INFO_0, unknown7) }, - { "unknown8", PY_UINT32, offsetof(PRINTER_INFO_0, unknown8) }, - { "unknown9", PY_UINT32, offsetof(PRINTER_INFO_0, unknown9) }, - { "session_counter", PY_UINT32, offsetof(PRINTER_INFO_0, session_counter)}, - { "unknown11", PY_UINT32, offsetof(PRINTER_INFO_0, unknown11) }, - { "printer_errors", PY_UINT32, offsetof(PRINTER_INFO_0, printer_errors) }, - { "unknown13", PY_UINT32, offsetof(PRINTER_INFO_0, unknown13) }, - { "unknown14", PY_UINT32, offsetof(PRINTER_INFO_0, unknown14) }, - { "unknown15", PY_UINT32, offsetof(PRINTER_INFO_0, unknown15) }, - { "unknown16", PY_UINT32, offsetof(PRINTER_INFO_0, unknown16) }, - { "change_id", PY_UINT32, offsetof(PRINTER_INFO_0, change_id) }, - { "unknown18", PY_UINT32, offsetof(PRINTER_INFO_0, unknown18) }, - { "status", PY_UINT32, offsetof(PRINTER_INFO_0, status) }, - { "unknown20", PY_UINT32, offsetof(PRINTER_INFO_0, unknown20) }, - { "c_setprinter", PY_UINT32, offsetof(PRINTER_INFO_0, c_setprinter) }, - { "unknown22", PY_UINT32, offsetof(PRINTER_INFO_0, unknown22) }, - { "unknown23", PY_UINT32, offsetof(PRINTER_INFO_0, unknown23) }, - { "unknown24", PY_UINT32, offsetof(PRINTER_INFO_0, unknown24) }, - { "unknown25", PY_UINT32, offsetof(PRINTER_INFO_0, unknown25) }, - { "unknown26", PY_UINT32, offsetof(PRINTER_INFO_0, unknown26) }, - { "unknown27", PY_UINT32, offsetof(PRINTER_INFO_0, unknown27) }, - { "unknown28", PY_UINT32, offsetof(PRINTER_INFO_0, unknown28) }, - { "unknown29", PY_UINT32, offsetof(PRINTER_INFO_0, unknown29) }, - - { NULL } -}; - -struct pyconv py_PRINTER_INFO_1[] = { - { "name", PY_UNISTR, offsetof(PRINTER_INFO_1, name) }, - { "description", PY_UNISTR, offsetof(PRINTER_INFO_1, description) }, - { "comment", PY_UNISTR, offsetof(PRINTER_INFO_1, comment) }, - { "flags", PY_UINT32, offsetof(PRINTER_INFO_1, flags) }, - { NULL } -}; - -struct pyconv py_PRINTER_INFO_2[] = { - { "server_name", PY_UNISTR, offsetof(PRINTER_INFO_2, servername) }, - { "name", PY_UNISTR, offsetof(PRINTER_INFO_2, printername) }, - { "share_name", PY_UNISTR, offsetof(PRINTER_INFO_2, sharename) }, - { "port_name", PY_UNISTR, offsetof(PRINTER_INFO_2, portname) }, - { "driver_name", PY_UNISTR, offsetof(PRINTER_INFO_2, drivername) }, - { "comment", PY_UNISTR, offsetof(PRINTER_INFO_2, comment) }, - { "location", PY_UNISTR, offsetof(PRINTER_INFO_2, location) }, - { "datatype", PY_UNISTR, offsetof(PRINTER_INFO_2, datatype) }, - { "sepfile", PY_UNISTR, offsetof(PRINTER_INFO_2, sepfile) }, - { "print_processor", PY_UNISTR, offsetof(PRINTER_INFO_2, printprocessor) }, - { "parameters", PY_UNISTR, offsetof(PRINTER_INFO_2, parameters) }, - { "attributes", PY_UINT32, offsetof(PRINTER_INFO_2, attributes) }, - { "default_priority", PY_UINT32, offsetof(PRINTER_INFO_2, defaultpriority) }, - { "priority", PY_UINT32, offsetof(PRINTER_INFO_2, priority) }, - { "start_time", PY_UINT32, offsetof(PRINTER_INFO_2, starttime) }, - { "until_time", PY_UINT32, offsetof(PRINTER_INFO_2, untiltime) }, - { "status", PY_UINT32, offsetof(PRINTER_INFO_2, status) }, - { "cjobs", PY_UINT32, offsetof(PRINTER_INFO_2, cjobs) }, - { "average_ppm", PY_UINT32, offsetof(PRINTER_INFO_2, averageppm) }, - { NULL } -}; - -struct pyconv py_PRINTER_INFO_3[] = { - { "flags", PY_UINT32, offsetof(PRINTER_INFO_3, flags) }, - { NULL } -}; - -struct pyconv py_DEVICEMODE[] = { - { "device_name", PY_UNISTR, offsetof(DEVICEMODE, devicename) }, - { "spec_version", PY_UINT16, offsetof(DEVICEMODE, specversion) }, - { "driver_version", PY_UINT16, offsetof(DEVICEMODE, driverversion) }, - { "size", PY_UINT16, offsetof(DEVICEMODE, size) }, - { "fields", PY_UINT16, offsetof(DEVICEMODE, fields) }, - { "orientation", PY_UINT16, offsetof(DEVICEMODE, orientation) }, - { "paper_size", PY_UINT16, offsetof(DEVICEMODE, papersize) }, - { "paper_width", PY_UINT16, offsetof(DEVICEMODE, paperwidth) }, - { "paper_length", PY_UINT16, offsetof(DEVICEMODE, paperlength) }, - { "scale", PY_UINT16, offsetof(DEVICEMODE, scale) }, - { "copies", PY_UINT16, offsetof(DEVICEMODE, copies) }, - { "default_source", PY_UINT16, offsetof(DEVICEMODE, defaultsource) }, - { "print_quality", PY_UINT16, offsetof(DEVICEMODE, printquality) }, - { "color", PY_UINT16, offsetof(DEVICEMODE, color) }, - { "duplex", PY_UINT16, offsetof(DEVICEMODE, duplex) }, - { "y_resolution", PY_UINT16, offsetof(DEVICEMODE, yresolution) }, - { "tt_option", PY_UINT16, offsetof(DEVICEMODE, ttoption) }, - { "collate", PY_UINT16, offsetof(DEVICEMODE, collate) }, - { "form_name", PY_UNISTR, offsetof(DEVICEMODE, formname) }, - { "log_pixels", PY_UINT16, offsetof(DEVICEMODE, logpixels) }, - { "bits_per_pel", PY_UINT32, offsetof(DEVICEMODE, bitsperpel) }, - { "pels_width", PY_UINT32, offsetof(DEVICEMODE, pelswidth) }, - { "pels_height", PY_UINT32, offsetof(DEVICEMODE, pelsheight) }, - { "display_flags", PY_UINT32, offsetof(DEVICEMODE, displayflags) }, - { "display_frequency", PY_UINT32, offsetof(DEVICEMODE, displayfrequency) }, - { "icm_method", PY_UINT32, offsetof(DEVICEMODE, icmmethod) }, - { "icm_intent", PY_UINT32, offsetof(DEVICEMODE, icmintent) }, - { "media_type", PY_UINT32, offsetof(DEVICEMODE, mediatype) }, - { "dither_type", PY_UINT32, offsetof(DEVICEMODE, dithertype) }, - { "reserved1", PY_UINT32, offsetof(DEVICEMODE, reserved1) }, - { "reserved2", PY_UINT32, offsetof(DEVICEMODE, reserved2) }, - { "panning_width", PY_UINT32, offsetof(DEVICEMODE, panningwidth) }, - { "panning_height", PY_UINT32, offsetof(DEVICEMODE, panningheight) }, - { NULL } -}; - -/* - * Convert between DEVICEMODE and Python - */ - -BOOL py_from_DEVICEMODE(PyObject **dict, DEVICEMODE *devmode) -{ - *dict = from_struct(devmode, py_DEVICEMODE); - - PyDict_SetItemString(*dict, "private", - PyString_FromStringAndSize( - devmode->private, devmode->driverextra)); - - return True; -} - -BOOL py_to_DEVICEMODE(DEVICEMODE *devmode, PyObject *dict) -{ - PyObject *obj; - - if (!to_struct(devmode, dict, py_DEVICEMODE)) - return False; - - if (!(obj = PyDict_GetItemString(dict, "private"))) - return False; - - devmode->private = PyString_AsString(obj); - devmode->driverextra = PyString_Size(obj); - - return True; -} - -/* - * Convert between PRINTER_INFO_0 and Python - */ - -BOOL py_from_PRINTER_INFO_0(PyObject **dict, PRINTER_INFO_0 *info) -{ - *dict = from_struct(info, py_PRINTER_INFO_0); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(0)); - return True; -} - -BOOL py_to_PRINTER_INFO_0(PRINTER_INFO_0 *info, PyObject *dict) -{ - return False; -} - -/* - * Convert between PRINTER_INFO_1 and Python - */ - -BOOL py_from_PRINTER_INFO_1(PyObject **dict, PRINTER_INFO_1 *info) -{ - *dict = from_struct(info, py_PRINTER_INFO_1); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(1)); - return True; -} - -BOOL py_to_PRINTER_INFO_1(PRINTER_INFO_1 *info, PyObject *dict) -{ - PyObject *dict_copy = PyDict_Copy(dict); - BOOL result; - - PyDict_DelItemString(dict_copy, "level"); - result = to_struct(info, dict_copy, py_PRINTER_INFO_1); - - Py_DECREF(dict_copy); - return result; -} - -/* - * Convert between PRINTER_INFO_2 and Python - */ - -BOOL py_from_PRINTER_INFO_2(PyObject **dict, PRINTER_INFO_2 *info) -{ - PyObject *obj; - - *dict = from_struct(info, py_PRINTER_INFO_2); - - if (py_from_SECDESC(&obj, info->secdesc)) - PyDict_SetItemString(*dict, "security_descriptor", obj); - - if (py_from_DEVICEMODE(&obj, info->devmode)) - PyDict_SetItemString(*dict, "device_mode", obj); - - PyDict_SetItemString(*dict, "level", PyInt_FromLong(2)); - - return True; -} - -BOOL py_to_PRINTER_INFO_2(PRINTER_INFO_2 *info, PyObject *dict, - TALLOC_CTX *mem_ctx) -{ - PyObject *obj; - - if (!to_struct(info, dict, py_PRINTER_INFO_2)) - return False; - - if (!(obj = PyDict_GetItemString(dict, "security_descriptor"))) - return False; - - if (!py_to_SECDESC(&info->secdesc, obj, mem_ctx)) - return False; - - if (!(obj = PyDict_GetItemString(dict, "device_mode"))) - return False; - - info->devmode = talloc(mem_ctx, sizeof(DEVICEMODE)); - - if (!py_to_DEVICEMODE(info->devmode, obj)) - return False; - - return True; -} - -/* - * Convert between PRINTER_INFO_1 and Python - */ - -BOOL py_from_PRINTER_INFO_3(PyObject **dict, PRINTER_INFO_3 *info) -{ - PyObject *obj; - - *dict = from_struct(info, py_PRINTER_INFO_3); - - if (py_from_SECDESC(&obj, info->secdesc)) - PyDict_SetItemString(*dict, "security_descriptor", obj); - - PyDict_SetItemString(*dict, "level", PyInt_FromLong(3)); - - return True; -} - -BOOL py_to_PRINTER_INFO_3(PRINTER_INFO_3 *info, PyObject *dict, - TALLOC_CTX *mem_ctx) -{ - PyObject *obj; - - if (!to_struct(info, dict, py_PRINTER_INFO_3)) - return False; - - if (!(obj = PyDict_GetItemString(dict, "security_descriptor"))) - return False; - - if (!py_to_SECDESC(&info->secdesc, obj, mem_ctx)) - return False; - - return True; -} diff --git a/source/python/py_spoolss_proto.h b/source/python/py_spoolss_proto.h deleted file mode 100644 index 5b68ef815af..00000000000 --- a/source/python/py_spoolss_proto.h +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef _PY_SPOOLSS_PROTO_H -#define _PY_SPOOLSS_PROTO_H - -/* This file is automatically generated with "make proto". DO NOT EDIT */ - - -/* The following definitions come from python/py_spoolss.c */ - -PyObject *new_spoolss_policy_hnd_object(struct cli_state *cli, - TALLOC_CTX *mem_ctx, POLICY_HND *pol); -void initspoolss(void); - -/* The following definitions come from python/py_spoolss_drivers.c */ - -PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args, - PyObject *kw); -PyObject *spoolss_hnd_getprinterdriver(PyObject *self, PyObject *args, - PyObject *kw); -PyObject *spoolss_getprinterdriverdir(PyObject *self, PyObject *args, - PyObject *kw); -PyObject *spoolss_addprinterdriver(PyObject *self, PyObject *args, - PyObject *kw); -PyObject *spoolss_addprinterdriverex(PyObject *self, PyObject *args, - PyObject *kw); -PyObject *spoolss_deleteprinterdriver(PyObject *self, PyObject *args, - PyObject *kw); -PyObject *spoolss_deleteprinterdriverex(PyObject *self, PyObject *args, - PyObject *kw); - -/* The following definitions come from python/py_spoolss_drivers_conv.c */ - -BOOL py_from_DRIVER_INFO_1(PyObject **dict, DRIVER_INFO_1 *info); -BOOL py_to_DRIVER_INFO_1(DRIVER_INFO_1 *info, PyObject *dict); -BOOL py_from_DRIVER_INFO_2(PyObject **dict, DRIVER_INFO_2 *info); -BOOL py_to_DRIVER_INFO_2(DRIVER_INFO_2 *info, PyObject *dict); -BOOL py_from_DRIVER_INFO_3(PyObject **dict, DRIVER_INFO_3 *info); -BOOL py_to_DRIVER_INFO_3(DRIVER_INFO_3 *info, PyObject *dict); -BOOL py_from_DRIVER_INFO_6(PyObject **dict, DRIVER_INFO_6 *info); -BOOL py_to_DRIVER_INFO_6(DRIVER_INFO_6 *info, PyObject *dict); -BOOL py_from_DRIVER_DIRECTORY_1(PyObject **dict, DRIVER_DIRECTORY_1 *info); -BOOL py_to_DRIVER_DIRECTORY_1(DRIVER_DIRECTORY_1 *info, PyObject *dict); - -/* The following definitions come from python/py_spoolss_forms.c */ - -PyObject *spoolss_hnd_addform(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_getform(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_setform(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_deleteform(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_enumforms(PyObject *self, PyObject *args, PyObject *kw); - -/* The following definitions come from python/py_spoolss_forms_conv.c */ - -BOOL py_from_FORM_1(PyObject **dict, FORM_1 *form); -BOOL py_to_FORM(FORM *form, PyObject *dict); - -/* The following definitions come from python/py_spoolss_jobs.c */ - -PyObject *spoolss_hnd_enumjobs(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_setjob(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_getjob(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_startpageprinter(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_endpageprinter(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_startdocprinter(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_enddocprinter(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_writeprinter(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_addjob(PyObject *self, PyObject *args, PyObject *kw); - -/* The following definitions come from python/py_spoolss_jobs_conv.c */ - -BOOL py_from_JOB_INFO_1(PyObject **dict, JOB_INFO_1 *info); -BOOL py_to_JOB_INFO_1(JOB_INFO_1 *info, PyObject *dict); -BOOL py_from_JOB_INFO_2(PyObject **dict, JOB_INFO_2 *info); -BOOL py_to_JOB_INFO_2(JOB_INFO_2 *info, PyObject *dict); -BOOL py_from_DOC_INFO_1(PyObject **dict, DOC_INFO_1 *info); -BOOL py_to_DOC_INFO_1(DOC_INFO_1 *info, PyObject *dict); - -/* The following definitions come from python/py_spoolss_ports.c */ - -PyObject *spoolss_enumports(PyObject *self, PyObject *args, PyObject *kw); - -/* The following definitions come from python/py_spoolss_ports_conv.c */ - -BOOL py_from_PORT_INFO_1(PyObject **dict, PORT_INFO_1 *info); -BOOL py_to_PORT_INFO_1(PORT_INFO_1 *info, PyObject *dict); -BOOL py_from_PORT_INFO_2(PyObject **dict, PORT_INFO_2 *info); -BOOL py_to_PORT_INFO_2(PORT_INFO_2 *info, PyObject *dict); - -/* The following definitions come from python/py_spoolss_printerdata.c */ - -PyObject *spoolss_hnd_getprinterdata(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_setprinterdata(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_deleteprinterdata(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_deleteprinterdataex(PyObject *self, PyObject *args, PyObject *kw); - -/* The following definitions come from python/py_spoolss_printers.c */ - -PyObject *spoolss_openprinter(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_closeprinter(PyObject *self, PyObject *args); -PyObject *spoolss_hnd_getprinter(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_hnd_setprinter(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_enumprinters(PyObject *self, PyObject *args, PyObject *kw); -PyObject *spoolss_addprinterex(PyObject *self, PyObject *args, PyObject *kw); - -/* The following definitions come from python/py_spoolss_printers_conv.c */ - -BOOL py_from_DEVICEMODE(PyObject **dict, DEVICEMODE *devmode); -BOOL py_to_DEVICEMODE(DEVICEMODE *devmode, PyObject *dict); -BOOL py_from_PRINTER_INFO_0(PyObject **dict, PRINTER_INFO_0 *info); -BOOL py_to_PRINTER_INFO_0(PRINTER_INFO_0 *info, PyObject *dict); -BOOL py_from_PRINTER_INFO_1(PyObject **dict, PRINTER_INFO_1 *info); -BOOL py_to_PRINTER_INFO_1(PRINTER_INFO_1 *info, PyObject *dict); -BOOL py_from_PRINTER_INFO_2(PyObject **dict, PRINTER_INFO_2 *info); -BOOL py_to_PRINTER_INFO_2(PRINTER_INFO_2 *info, PyObject *dict, - TALLOC_CTX *mem_ctx); -BOOL py_from_PRINTER_INFO_3(PyObject **dict, PRINTER_INFO_3 *info); -BOOL py_to_PRINTER_INFO_3(PRINTER_INFO_3 *info, PyObject *dict, - TALLOC_CTX *mem_ctx); - -#endif /* _PY_SPOOLSS_PROTO_H */ diff --git a/source/python/py_tdb.c b/source/python/py_tdb.c deleted file mode 100644 index 4969c1047ef..00000000000 --- a/source/python/py_tdb.c +++ /dev/null @@ -1,614 +0,0 @@ -/* - Python wrappers for TDB module - - Copyright (C) Tim Potter, 2002 - - 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. -*/ - -/* - NOTE: Since tdb is licenced under the GPL any program that uses these bindings - must be distributed under the GPL license terms since this is what - the GPL requires. - - http://www.gnu.org/licenses/gpl-faq.html#IfInterpreterIsGPL -*/ - -#include "includes.h" -#include "Python.h" - -/* Tdb exception */ - -PyObject *py_tdb_error; - -/* tdb handle object */ - -typedef struct { - PyObject_HEAD - TDB_CONTEXT *tdb; -} tdb_hnd_object; - -PyTypeObject tdb_hnd_type; - -PyObject *new_tdb_hnd_object(TDB_CONTEXT *tdb) -{ - tdb_hnd_object *obj; - - obj = PyObject_New(tdb_hnd_object, &tdb_hnd_type); - obj->tdb = tdb; - - return (PyObject *)obj; -} - -PyObject *py_tdb_close(PyObject *self, PyObject *args) -{ - tdb_hnd_object *obj; - - if (!PyArg_ParseTuple(args, "O!", &tdb_hnd_type, &obj)) - return NULL; - - if (tdb_close(obj->tdb) == -1) { - obj->tdb = NULL; - PyErr_SetString(py_tdb_error, strerror(errno)); - return NULL; - } - - obj->tdb = NULL; - - Py_INCREF(Py_None); - return Py_None; -} - -PyObject *py_tdb_open(PyObject *self, PyObject *args, PyObject *kw) -{ - static char *kwlist[] = { "name", "hash_size", "tdb_flags", - "open_flags", "mode", NULL }; - char *name; - int hash_size = 0, flags = TDB_DEFAULT, open_flags = -1, open_mode = 0600; - TDB_CONTEXT *tdb; - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "s|iiii", kwlist, &name, &hash_size, &flags, - &open_flags, &open_mode)) - return NULL; - - /* Default open_flags to read/write */ - - if (open_flags == -1) { - if (access(name, W_OK) == -1) - open_flags = O_RDONLY; - else - open_flags = O_RDWR; - } - - if (!(tdb = tdb_open(name, hash_size, flags, open_flags, open_mode))) { - PyErr_SetString(py_tdb_error, strerror(errno)); - return NULL; - } - - return new_tdb_hnd_object(tdb); -} - -/* - * Allow a tdb to act as a python mapping (dictionary) - */ - -static int tdb_traverse_count(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA value, - void *state) -{ - /* Do nothing - tdb_traverse will return the number of records - traversed. */ - - return 0; -} - -static int tdb_hnd_length(tdb_hnd_object *obj) -{ - int result; - - result = tdb_traverse(obj->tdb, tdb_traverse_count, NULL); - - return result; -} - -static PyObject *tdb_hnd_subscript(tdb_hnd_object *obj, PyObject *key) -{ - TDB_DATA drec, krec; - PyObject *result; - - if (!PyArg_Parse(key, "s#", &krec.dptr, &krec.dsize)) - return NULL; - - drec = tdb_fetch(obj->tdb, krec); - - if (!drec.dptr) { - PyErr_SetString(PyExc_KeyError, - PyString_AsString(key)); - return NULL; - } - - result = PyString_FromStringAndSize(drec.dptr, drec.dsize); - free(drec.dptr); - - return result; -} - -static int tdb_ass_subscript(tdb_hnd_object *obj, PyObject *key, PyObject *value) -{ - TDB_DATA krec, drec; - - if (!PyArg_Parse(key, "s#", &krec.dptr, &krec.dsize)) { - PyErr_SetString(PyExc_TypeError, - "tdb mappings have string indices only"); - return -1; - } - - if (!obj->tdb) { - PyErr_SetString( - py_tdb_error, "tdb object has been closed"); - return -1; - } - - if (!value) { - - /* Delete value */ - - if (tdb_delete(obj->tdb, krec) == -1) { - PyErr_SetString(PyExc_KeyError, - PyString_AsString(value)); - return -1; - } - - } else { - - /* Set value */ - - if (!PyArg_Parse(value, "s#", &drec.dptr, &drec.dsize)) { - PyErr_SetString(PyExc_TypeError, - "tdb mappings have string elements only"); - return -1; - } - - errno = 0; - - if (tdb_store(obj->tdb, krec, drec, 0) < 0 ) { - if (errno != 0) - PyErr_SetFromErrno(py_tdb_error); - else - PyErr_SetString( - py_tdb_error, - (char *)tdb_errorstr(obj->tdb)); - - return -1; - } - } - - return 0; -} - -static PyMappingMethods tdb_mapping = { - (inquiry) tdb_hnd_length, - (binaryfunc) tdb_hnd_subscript, - (objobjargproc) tdb_ass_subscript -}; - -/* - * Utility methods - */ - -/* Return non-zero if a given key exists in the tdb */ - -PyObject *py_tdb_hnd_has_key(PyObject *self, PyObject *args) -{ - tdb_hnd_object *obj = (tdb_hnd_object *)self; - TDB_DATA key; - - if (!PyArg_ParseTuple(args, "s#", &key.dptr, &key.dsize)) - return NULL; - - if (!obj->tdb) { - PyErr_SetString( - py_tdb_error, "tdb object has been closed"); - return NULL; - } - - return PyInt_FromLong(tdb_exists(obj->tdb, key)); -} - -/* Return a list of keys in the tdb */ - -static int tdb_traverse_keys(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA value, - void *state) -{ - PyObject *key_list = (PyObject *)state; - - PyList_Append(key_list, - PyString_FromStringAndSize(key.dptr, key.dsize)); - - return 0; -} - -PyObject *py_tdb_hnd_keys(PyObject *self, PyObject *args) -{ - tdb_hnd_object *obj = (tdb_hnd_object *)self; - PyObject *key_list = PyList_New(0); - - if (!obj->tdb) { - PyErr_SetString(py_tdb_error, "tdb object has been closed"); - return NULL; - } - - if (tdb_traverse(obj->tdb, tdb_traverse_keys, key_list) == -1) { - PyErr_SetString(py_tdb_error, "error traversing tdb"); - Py_DECREF(key_list); - return NULL; - } - - return key_list; -} - -PyObject *py_tdb_hnd_first_key(PyObject *self, PyObject *args) -{ - tdb_hnd_object *obj = (tdb_hnd_object *)self; - TDB_DATA key; - - if (!obj->tdb) { - PyErr_SetString(py_tdb_error, "tdb object has been closed"); - return NULL; - } - - key = tdb_firstkey(obj->tdb); - - return Py_BuildValue("s#", key.dptr, key.dsize); -} - -PyObject *py_tdb_hnd_next_key(PyObject *self, PyObject *py_oldkey) -{ - tdb_hnd_object *obj = (tdb_hnd_object *)self; - TDB_DATA key, oldkey; - - if (!obj->tdb) { - PyErr_SetString(py_tdb_error, "tdb object has been closed"); - return NULL; - } - - if (!PyArg_Parse(py_oldkey, "s#", &oldkey.dptr, &oldkey.dsize)) - return NULL; - - key = tdb_nextkey(obj->tdb, oldkey); - - return Py_BuildValue("s#", key.dptr, key.dsize); -} - -/* - * Locking routines - */ - -PyObject *py_tdb_hnd_lock_all(PyObject *self, PyObject *args) -{ - tdb_hnd_object *obj = (tdb_hnd_object *)self; - int result; - - if (!obj->tdb) { - PyErr_SetString(py_tdb_error, "tdb object has been closed"); - return NULL; - } - - result = tdb_lockall(obj->tdb); - - return PyInt_FromLong(result != -1); -} - -PyObject *py_tdb_hnd_unlock_all(PyObject *self, PyObject *args) -{ - tdb_hnd_object *obj = (tdb_hnd_object *)self; - - if (!obj->tdb) { - PyErr_SetString(py_tdb_error, "tdb object has been closed"); - return NULL; - } - - tdb_unlockall(obj->tdb); - - Py_INCREF(Py_None); - return Py_None; -} - -/* Return an array of keys from a python object which must be a string or a - list of strings. */ - -static BOOL make_lock_list(PyObject *py_keys, TDB_DATA **keys, int *num_keys) -{ - /* Are we a list or a string? */ - - if (!PyList_Check(py_keys) && !PyString_Check(py_keys)) { - PyErr_SetString(PyExc_TypeError, "arg must be list of string"); - return False; - } - - if (PyList_Check(py_keys)) { - int i; - - /* Turn python list into array of keys */ - - *num_keys = PyList_Size(py_keys); - *keys = (TDB_DATA *)malloc(sizeof(TDB_DATA) * (*num_keys)); - - for (i = 0; i < *num_keys; i++) { - PyObject *key = PyList_GetItem(py_keys, i); - - if (!PyString_Check(key)) { - PyErr_SetString( - PyExc_TypeError, - "list elements must be strings"); - return False; - } - - PyArg_Parse(key, "s#", &(*keys)[i].dptr, - &(*keys)[i].dsize); - } - - } else { - - /* Turn python string into a single key */ - - *keys = (TDB_DATA *)malloc(sizeof(TDB_DATA)); - *num_keys = 1; - PyArg_Parse(py_keys, "s#", &(*keys)->dptr, &(*keys)->dsize); - } - - return True; -} - -PyObject *py_tdb_hnd_lock(PyObject *self, PyObject *args) -{ - tdb_hnd_object *obj = (tdb_hnd_object *)self; - PyObject *py_keys; - TDB_DATA *keys; - int num_keys, result; - - if (!obj->tdb) { - PyErr_SetString(py_tdb_error, "tdb object has been closed"); - return NULL; - } - - if (!PyArg_ParseTuple(args, "O", &py_keys)) - return NULL; - - if (!make_lock_list(py_keys, &keys, &num_keys)) - return NULL; - - result = tdb_lockkeys(obj->tdb, num_keys, keys); - - free(keys); - - return PyInt_FromLong(result != -1); -} - -PyObject *py_tdb_hnd_unlock(PyObject *self, PyObject *args) -{ - tdb_hnd_object *obj = (tdb_hnd_object *)self; - - if (!obj->tdb) { - PyErr_SetString(py_tdb_error, "tdb object has been closed"); - return NULL; - } - - if (!PyArg_ParseTuple(args, "")) - return NULL; - - tdb_unlockkeys(obj->tdb); - - Py_INCREF(Py_None); - return Py_None; -} - -/* - * tdb traversal - */ - -struct traverse_info { - PyObject *callback; - PyObject *state; -}; - -static int tdb_traverse_traverse(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA value, - void *state) -{ - struct traverse_info *info = state; - PyObject *arglist, *py_result; - int result; - - arglist = Py_BuildValue("(s#s#O)", key.dptr, key.dsize, value.dptr, - value.dsize, info->state); - - py_result = PyEval_CallObject(info->callback, arglist); - - Py_DECREF(arglist); - - if (!PyInt_Check(py_result)) { - result = 1; /* Hmm - non-integer object returned by callback */ - goto done; - } - - result = PyInt_AsLong(py_result); - -done: - Py_DECREF(py_result); - return result; -} - -PyObject *py_tdb_hnd_traverse(PyObject *self, PyObject *args, PyObject *kw) -{ - tdb_hnd_object *obj = (tdb_hnd_object *)self; - static char *kwlist[] = { "traverse_fn", "state", NULL }; - PyObject *state = Py_None, *callback; - struct traverse_info info; - int result; - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "O|O", kwlist, &callback, &state)) - return NULL; - - if (!PyCallable_Check(callback)) { - PyErr_SetString(PyExc_TypeError, "parameter must be callable"); - return NULL; - } - - Py_INCREF(callback); - Py_INCREF(state); - - info.callback = callback; - info.state = state; - - result = tdb_traverse(obj->tdb, tdb_traverse_traverse, &info); - - Py_DECREF(callback); - Py_DECREF(state); - - return PyInt_FromLong(result); -} - -/* - * Method dispatch table for this module - */ - -static PyMethodDef tdb_methods[] = { - { "open", (PyCFunction)py_tdb_open, METH_VARARGS | METH_KEYWORDS }, - { "close", (PyCFunction)py_tdb_close, METH_VARARGS }, - { NULL } -}; - -/* - * Methods on a tdb object - */ - -static PyMethodDef tdb_hnd_methods[] = { - { "keys", (PyCFunction)py_tdb_hnd_keys, METH_VARARGS }, - { "has_key", (PyCFunction)py_tdb_hnd_has_key, METH_VARARGS }, - { "first_key", (PyCFunction)py_tdb_hnd_first_key, METH_VARARGS }, - { "next_key", (PyCFunction)py_tdb_hnd_next_key, METH_VARARGS }, - { "lock_all", (PyCFunction)py_tdb_hnd_lock_all, METH_VARARGS }, - { "unlock_all", (PyCFunction)py_tdb_hnd_unlock_all, METH_VARARGS }, - { "lock", (PyCFunction)py_tdb_hnd_lock, METH_VARARGS }, - { "unlock", (PyCFunction)py_tdb_hnd_unlock, METH_VARARGS }, - { "traverse", (PyCFunction)py_tdb_hnd_traverse, METH_VARARGS | METH_KEYWORDS }, - { NULL } -}; - -/* Deallocate a tdb handle object */ - -static void tdb_hnd_dealloc(PyObject* self) -{ - tdb_hnd_object *hnd = (tdb_hnd_object *)self; - - if (hnd->tdb) { - tdb_close(hnd->tdb); - hnd->tdb = NULL; - } -} - -/* Return tdb handle attributes */ - -static PyObject *tdb_hnd_getattr(PyObject *self, char *attrname) -{ - return Py_FindMethod(tdb_hnd_methods, self, attrname); -} - -static char tdb_hnd_type_doc[] = -"Python wrapper for tdb."; - -PyTypeObject tdb_hnd_type = { - PyObject_HEAD_INIT(NULL) - 0, - "tdb", - sizeof(tdb_hnd_object), - 0, - tdb_hnd_dealloc, /* tp_dealloc*/ - 0, /* tp_print*/ - tdb_hnd_getattr, /* tp_getattr*/ - 0, /* tp_setattr*/ - 0, /* tp_compare*/ - 0, /* tp_repr*/ - 0, /* tp_as_number*/ - 0, /* tp_as_sequence*/ - &tdb_mapping, /* tp_as_mapping*/ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - tdb_hnd_type_doc, /* tp_doc */ -}; - -/* Constants */ - -static struct const_vals { - char *name; - uint32 value; -} module_const_vals[] = { - - /* Flags for tdb_open() */ - - { "TDB_DEFAULT", TDB_DEFAULT }, - { "TDB_CLEAR_IF_FIRST", TDB_CLEAR_IF_FIRST }, - { "TDB_INTERNAL", TDB_INTERNAL }, - { "TDB_NOLOCK", TDB_NOLOCK }, - { "TDB_NOMMAP", TDB_NOMMAP }, - { "TDB_CONVERT", TDB_CONVERT }, - { "TDB_BIGENDIAN", TDB_BIGENDIAN }, - - { NULL }, -}; - -static void const_init(PyObject *dict) -{ - struct const_vals *tmp; - PyObject *obj; - - for (tmp = module_const_vals; tmp->name; tmp++) { - obj = PyInt_FromLong(tmp->value); - PyDict_SetItemString(dict, tmp->name, obj); - Py_DECREF(obj); - } -} - -/* Module initialisation */ - -void inittdb(void) -{ - PyObject *module, *dict; - - /* Initialise module */ - - module = Py_InitModule("tdb", tdb_methods); - dict = PyModule_GetDict(module); - - py_tdb_error = PyErr_NewException("tdb.error", NULL, NULL); - PyDict_SetItemString(dict, "error", py_tdb_error); - - /* Initialise policy handle object */ - - tdb_hnd_type.ob_type = &PyType_Type; - - PyDict_SetItemString(dict, "tdb.hnd", - (PyObject *)&tdb_hnd_type); - - /* Initialise constants */ - - const_init(dict); -} diff --git a/source/python/py_tdb.h b/source/python/py_tdb.h deleted file mode 100644 index 794a20cf2b1..00000000000 --- a/source/python/py_tdb.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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. -*/ - -#ifndef _PY_TDB_H -#define _PY_TDB_H - -#include "includes.h" -#include "Python.h" - -#include "python/py_common_proto.h" - -#endif /* _PY_TDB_H */ diff --git a/source/python/py_winbind.c b/source/python/py_winbind.c deleted file mode 100644 index 49c7f8e924f..00000000000 --- a/source/python/py_winbind.c +++ /dev/null @@ -1,651 +0,0 @@ -/* - Unix SMB/CIFS implementation. - - Python wrapper for winbind client functions. - - Copyright (C) Tim Potter 2002 - - 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 "Python.h" - -#include "py_common_proto.h" - -/* - * Exceptions raised by this module - */ - -PyObject *winbind_error; /* A winbind call returned WINBINDD_ERROR */ - -/* Prototypes from common.h */ - -NSS_STATUS winbindd_request(int req_type, - struct winbindd_request *request, - struct winbindd_response *response); - -/* - * Name <-> SID conversion - */ - -/* Convert a name to a sid */ - -static PyObject *py_name_to_sid(PyObject *self, PyObject *args) - -{ - struct winbindd_request request; - struct winbindd_response response; - PyObject *result; - char *name, *p, *sep; - - if (!PyArg_ParseTuple(args, "s", &name)) - return NULL; - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - sep = lp_winbind_separator(); - - if ((p = strchr(name, sep[0]))) { - *p = 0; - fstrcpy(request.data.name.dom_name, name); - fstrcpy(request.data.name.name, p + 1); - } else { - fstrcpy(request.data.name.dom_name, lp_workgroup()); - fstrcpy(request.data.name.name, name); - } - - if (winbindd_request(WINBINDD_LOOKUPNAME, &request, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - result = PyString_FromString(response.data.sid.sid); - - return result; -} - -/* Convert a sid to a name */ - -static PyObject *py_sid_to_name(PyObject *self, PyObject *args) -{ - struct winbindd_request request; - struct winbindd_response response; - PyObject *result; - char *sid, *name; - - if (!PyArg_ParseTuple(args, "s", &sid)) - return NULL; - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - fstrcpy(request.data.sid, sid); - - if (winbindd_request(WINBINDD_LOOKUPSID, &request, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - asprintf(&name, "%s%s%s", response.data.name.dom_name, - lp_winbind_separator(), response.data.name.name); - - result = PyString_FromString(name); - - free(name); - - return result; -} - -/* - * Enumerate users/groups - */ - -/* Enumerate domain users */ - -static PyObject *py_enum_domain_users(PyObject *self, PyObject *args) -{ - struct winbindd_response response; - PyObject *result; - - if (!PyArg_ParseTuple(args, "")) - return NULL; - - ZERO_STRUCT(response); - - if (winbindd_request(WINBINDD_LIST_USERS, NULL, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - result = PyList_New(0); - - if (response.extra_data) { - char *extra_data = response.extra_data; - fstring name; - - while (next_token(&extra_data, name, ",", sizeof(fstring))) - PyList_Append(result, PyString_FromString(name)); - } - - return result; -} - -/* Enumerate domain groups */ - -static PyObject *py_enum_domain_groups(PyObject *self, PyObject *args) -{ - struct winbindd_response response; - PyObject *result = NULL; - - if (!PyArg_ParseTuple(args, "")) - return NULL; - - ZERO_STRUCT(response); - - if (winbindd_request(WINBINDD_LIST_GROUPS, NULL, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - result = PyList_New(0); - - if (response.extra_data) { - char *extra_data = response.extra_data; - fstring name; - - while (next_token(&extra_data, name, ",", sizeof(fstring))) - PyList_Append(result, PyString_FromString(name)); - } - - return result; -} - -/* - * Miscellaneous domain related - */ - -/* Enumerate domain groups */ - -static PyObject *py_enum_trust_dom(PyObject *self, PyObject *args) -{ - struct winbindd_response response; - PyObject *result = NULL; - - if (!PyArg_ParseTuple(args, "")) - return NULL; - - ZERO_STRUCT(response); - - if (winbindd_request(WINBINDD_LIST_TRUSTDOM, NULL, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - result = PyList_New(0); - - if (response.extra_data) { - char *extra_data = response.extra_data; - fstring name; - - while (next_token(&extra_data, name, ",", sizeof(fstring))) - PyList_Append(result, PyString_FromString(name)); - } - - return result; -} - -/* Check machine account password */ - -static PyObject *py_check_secret(PyObject *self, PyObject *args) -{ - struct winbindd_response response; - - if (!PyArg_ParseTuple(args, "")) - return NULL; - - ZERO_STRUCT(response); - - if (winbindd_request(WINBINDD_CHECK_MACHACC, NULL, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - return PyInt_FromLong(response.data.num_entries); -} - -/* - * Return a dictionary consisting of all the winbind related smb.conf - * parameters. This is stored in the module object. - */ - -static PyObject *py_config_dict(void) -{ - PyObject *result; - uid_t ulow, uhi; - gid_t glow, ghi; - - if (!(result = PyDict_New())) - return NULL; - - /* Various string parameters */ - - PyDict_SetItemString(result, "workgroup", - PyString_FromString(lp_workgroup())); - - PyDict_SetItemString(result, "separator", - PyString_FromString(lp_winbind_separator())); - - PyDict_SetItemString(result, "template_homedir", - PyString_FromString(lp_template_homedir())); - - PyDict_SetItemString(result, "template_shell", - PyString_FromString(lp_template_shell())); - - /* Winbind uid/gid range */ - - if (lp_winbind_uid(&ulow, &uhi)) { - PyDict_SetItemString(result, "uid_low", PyInt_FromLong(ulow)); - PyDict_SetItemString(result, "uid_high", PyInt_FromLong(uhi)); - } - - if (lp_winbind_gid(&glow, &ghi)) { - PyDict_SetItemString(result, "gid_low", PyInt_FromLong(glow)); - PyDict_SetItemString(result, "gid_high", PyInt_FromLong(ghi)); - } - - return result; -} - -/* - * ID mapping - */ - -/* Convert a uid to a SID */ - -static PyObject *py_uid_to_sid(PyObject *self, PyObject *args) -{ - struct winbindd_request request; - struct winbindd_response response; - int id; - - if (!PyArg_ParseTuple(args, "i", &id)) - return NULL; - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - request.data.uid = id; - - if (winbindd_request(WINBINDD_UID_TO_SID, &request, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - return PyString_FromString(response.data.sid.sid); -} - -/* Convert a gid to a SID */ - -static PyObject *py_gid_to_sid(PyObject *self, PyObject *args) -{ - struct winbindd_request request; - struct winbindd_response response; - int id; - - if (!PyArg_ParseTuple(args, "i", &id)) - return NULL; - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - request.data.gid = id; - - if (winbindd_request(WINBINDD_GID_TO_SID, &request, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - return PyString_FromString(response.data.sid.sid); -} - -/* Convert a sid to a uid */ - -static PyObject *py_sid_to_uid(PyObject *self, PyObject *args) -{ - struct winbindd_request request; - struct winbindd_response response; - char *sid; - - if (!PyArg_ParseTuple(args, "s", &sid)) - return NULL; - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - fstrcpy(request.data.sid, sid); - - if (winbindd_request(WINBINDD_SID_TO_UID, &request, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - return PyInt_FromLong(response.data.uid); -} - -/* Convert a sid to a gid */ - -static PyObject *py_sid_to_gid(PyObject *self, PyObject *args) -{ - struct winbindd_request request; - struct winbindd_response response; - char *sid; - - if (!PyArg_ParseTuple(args, "s", &sid)) - return NULL; - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - fstrcpy(request.data.sid, sid); - - if (winbindd_request(WINBINDD_SID_TO_GID, &request, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - return PyInt_FromLong(response.data.gid); -} - -/* - * PAM authentication functions - */ - -/* Plaintext authentication */ - -static PyObject *py_auth_plaintext(PyObject *self, PyObject *args) -{ - struct winbindd_request request; - struct winbindd_response response; - char *username, *password; - - if (!PyArg_ParseTuple(args, "ss", &username, &password)) - return NULL; - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - fstrcpy(request.data.auth.user, username); - fstrcpy(request.data.auth.pass, password); - - if (winbindd_request(WINBINDD_PAM_AUTH, &request, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - return PyInt_FromLong(response.data.auth.nt_status); -} - -/* Challenge/response authentication */ - -static PyObject *py_auth_crap(PyObject *self, PyObject *args) -{ - struct winbindd_request request; - struct winbindd_response response; - char *username, *password; - - if (!PyArg_ParseTuple(args, "ss", &username, &password)) - return NULL; - - ZERO_STRUCT(request); - ZERO_STRUCT(response); - - fstrcpy(request.data.auth_crap.user, username); - - generate_random_buffer(request.data.auth_crap.chal, 8, False); - - SMBencrypt((uchar *)password, request.data.auth_crap.chal, - (uchar *)request.data.auth_crap.lm_resp); - SMBNTencrypt((uchar *)password, request.data.auth_crap.chal, - (uchar *)request.data.auth_crap.nt_resp); - - request.data.auth_crap.lm_resp_len = 24; - request.data.auth_crap.nt_resp_len = 24; - - if (winbindd_request(WINBINDD_PAM_AUTH_CRAP, &request, &response) - != NSS_STATUS_SUCCESS) { - PyErr_SetString(winbind_error, "lookup failed"); - return NULL; - } - - return PyInt_FromLong(response.data.auth.nt_status); -} - -/* - * Method dispatch table - */ - -static PyMethodDef winbind_methods[] = { - - /* Name <-> SID conversion */ - - { "name_to_sid", py_name_to_sid, METH_VARARGS, - "name_to_sid(s) -> string - -Return the SID for a name. - -Example: - ->>> winbind.name_to_sid('FOO/Administrator') -'S-1-5-21-406022937-1377575209-526660263-500' " }, - - { "sid_to_name", py_sid_to_name, METH_VARARGS, - "sid_to_name(s) -> string - -Return the name for a SID. - -Example: - ->>> import winbind ->>> winbind.sid_to_name('S-1-5-21-406022937-1377575209-526660263-500') -'FOO/Administrator' " }, - - /* Enumerate users/groups */ - - { "enum_domain_users", py_enum_domain_users, METH_VARARGS, - "enum_domain_users() -> list of strings - -Return a list of domain users. - -Example: - ->>> winbind.enum_domain_users() -['FOO/Administrator', 'FOO/anna', 'FOO/Anne Elk', 'FOO/build', -'FOO/foo', 'FOO/foo2', 'FOO/foo3', 'FOO/Guest', 'FOO/user1', -'FOO/whoops-ptang'] " }, - - { "enum_domain_groups", py_enum_domain_groups, METH_VARARGS, - "enum_domain_groups() -> list of strings - -Return a list of domain groups. - -Example: - ->>> winbind.enum_domain_groups() -['FOO/cows', 'FOO/Domain Admins', 'FOO/Domain Guests', -'FOO/Domain Users'] " }, - - /* ID mapping */ - - { "uid_to_sid", py_uid_to_sid, METH_VARARGS, - "uid_to_sid(int) -> string - -Return the SID for a UNIX uid. - -Example: - ->>> winbind.uid_to_sid(10000) -'S-1-5-21-406022937-1377575209-526660263-500' " }, - - { "gid_to_sid", py_gid_to_sid, METH_VARARGS, - "gid_to_sid(int) -> string - -Return the UNIX gid for a SID. - -Example: - ->>> winbind.gid_to_sid(10001) -'S-1-5-21-406022937-1377575209-526660263-512' " }, - - { "sid_to_uid", py_sid_to_uid, METH_VARARGS, - "sid_to_uid(string) -> int - -Return the UNIX uid for a SID. - -Example: - ->>> winbind.sid_to_uid('S-1-5-21-406022937-1377575209-526660263-500') -10000 " }, - - { "sid_to_gid", py_sid_to_gid, METH_VARARGS, - "sid_to_gid(string) -> int - -Return the UNIX gid corresponding to a SID. - -Example: - ->>> winbind.sid_to_gid('S-1-5-21-406022937-1377575209-526660263-512') -10001 " }, - - /* Miscellaneous */ - - { "check_secret", py_check_secret, METH_VARARGS, - "check_secret() -> int - -Check the machine trust account password. The NT status is returned -with zero indicating success. " }, - - { "enum_trust_dom", py_enum_trust_dom, METH_VARARGS, - "enum_trust_dom() -> list of strings - -Return a list of trusted domains. The domain the server is a member -of is not included. - -Example: - ->>> winbind.enum_trust_dom() -['NPSD-TEST2', 'SP2NDOM'] " }, - - /* PAM authorisation functions */ - - { "auth_plaintext", py_auth_plaintext, METH_VARARGS, - "auth_plaintext(s, s) -> int - -Authenticate a username and password using plaintext authentication. -The NT status code is returned with zero indicating success." }, - - { "auth_crap", py_auth_crap, METH_VARARGS, - "auth_crap(s, s) -> int - -Authenticate a username and password using the challenge/response -protocol. The NT status code is returned with zero indicating -success." }, - - { NULL } -}; - -static struct const_vals { - char *name; - uint32 value; - char *docstring; -} module_const_vals[] = { - - /* Well known RIDs */ - - { "DOMAIN_USER_RID_ADMIN", DOMAIN_USER_RID_ADMIN, - "Well-known RID for Administrator user" }, - - { "DOMAIN_USER_RID_GUEST", DOMAIN_USER_RID_GUEST, - "Well-known RID for Guest user" }, - - { "DOMAIN_GROUP_RID_ADMINS", DOMAIN_GROUP_RID_ADMINS, - "Well-known RID for Domain Admins group" }, - - { "DOMAIN_GROUP_RID_USERS", DOMAIN_GROUP_RID_USERS, - "Well-known RID for Domain Users group" }, - - { "DOMAIN_GROUP_RID_GUESTS", DOMAIN_GROUP_RID_GUESTS, - "Well-known RID for Domain Guests group" }, - - { NULL } -}; - -static void const_init(PyObject *dict) -{ - struct const_vals *tmp; - PyObject *obj; - - for (tmp = module_const_vals; tmp->name; tmp++) { - obj = PyInt_FromLong(tmp->value); - PyDict_SetItemString(dict, tmp->name, obj); - Py_DECREF(obj); - } -} - -/* - * Module initialisation - */ - -static char winbind_module__doc__[] = -"A python extension to winbind client functions."; - -void initwinbind(void) -{ - PyObject *module, *dict; - - /* Initialise module */ - - module = Py_InitModule3("winbind", winbind_methods, - winbind_module__doc__); - - dict = PyModule_GetDict(module); - - winbind_error = PyErr_NewException("winbind.error", NULL, NULL); - PyDict_SetItemString(dict, "error", winbind_error); - - /* Do samba initialisation */ - - py_samba_init(); - - /* Initialise constants */ - - const_init(dict); - - /* Insert configuration dictionary */ - - PyDict_SetItemString(dict, "config", py_config_dict()); -} diff --git a/source/python/py_winreg.c b/source/python/py_winreg.c deleted file mode 100644 index ce27f5c533b..00000000000 --- a/source/python/py_winreg.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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 "python/py_winreg.h" - -static struct const_vals { - char *name; - uint32 value; -} module_const_vals[] = { - - /* Registry value types */ - - { "REG_NONE", REG_NONE }, - { "REG_SZ", REG_SZ }, - { "REG_EXPAND_SZ", REG_EXPAND_SZ }, - { "REG_BINARY", REG_BINARY }, - { "REG_DWORD", REG_DWORD }, - { "REG_DWORD_LE", REG_DWORD_LE }, - { "REG_DWORD_BE", REG_DWORD_BE }, - { "REG_LINK", REG_LINK }, - { "REG_MULTI_SZ", REG_MULTI_SZ }, - { "REG_RESOURCE_LIST", REG_RESOURCE_LIST }, - { "REG_FULL_RESOURCE_DESCRIPTOR", REG_FULL_RESOURCE_DESCRIPTOR }, - { "REG_RESOURCE_REQUIREMENTS_LIST", REG_RESOURCE_REQUIREMENTS_LIST }, - - { NULL }, -}; - -static void const_init(PyObject *dict) -{ - struct const_vals *tmp; - PyObject *obj; - - for (tmp = module_const_vals; tmp->name; tmp++) { - obj = PyInt_FromLong(tmp->value); - PyDict_SetItemString(dict, tmp->name, obj); - Py_DECREF(obj); - } -} - -/* - * Module initialisation - */ - -static PyMethodDef winreg_methods[] = { - { NULL } -}; - -void initwinreg(void) -{ - PyObject *module, *dict; - - /* Initialise module */ - - module = Py_InitModule("winreg", winreg_methods); - dict = PyModule_GetDict(module); - - /* Initialise constants */ - - const_init(dict); - - /* Do samba initialisation */ - - py_samba_init(); -} diff --git a/source/python/py_winreg.h b/source/python/py_winreg.h deleted file mode 100644 index 088be724e2a..00000000000 --- a/source/python/py_winreg.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - 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. -*/ - -#ifndef _PY_WINREG_H -#define _PY_WINREG_H - -#include "includes.h" -#include "Python.h" - -#include "python/py_common_proto.h" - -#endif /* _PY_WINREG_H */ diff --git a/source/python/samba-head.patch b/source/python/samba-head.patch deleted file mode 100644 index 41b040d8f64..00000000000 --- a/source/python/samba-head.patch +++ /dev/null @@ -1,70 +0,0 @@ -Index: Makefile.in -=================================================================== -RCS file: /data/cvs/samba/source/Makefile.in,v -retrieving revision 1.494 -diff -u -r1.494 Makefile.in ---- Makefile.in 2002/07/03 07:37:50 1.494 -+++ Makefile.in 2002/07/11 23:18:11 -@@ -834,6 +834,46 @@ - -$(INSTALLCMD) -d ${prefix}/include - -$(INSTALLCMD) include/libsmbclient.h ${prefix}/include - -+# Python extensions -+ -+PYTHON_OBJS = $(LIB_OBJ) $(LIBSMB_OBJ) $(RPC_PARSE_OBJ) $(UBIQX_OBJ) \ -+ $(PARAM_OBJ) $(LIBMSRPC_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \ -+ $(SECRETS_OBJ) -+ -+PY_SPOOLSS_PROTO_OBJ = python/py_spoolss.o \ -+ python/py_spoolss_printers.o python/py_spoolss_printers_conv.o\ -+ python/py_spoolss_forms.o python/py_spoolss_forms_conv.o \ -+ python/py_spoolss_ports.o python/py_spoolss_ports_conv.o \ -+ python/py_spoolss_drivers.o python/py_spoolss_drivers_conv.o \ -+ python/py_spoolss_jobs.o python/py_spoolss_jobs_conv.o \ -+ python/py_spoolss_printerdata.o -+ -+PY_LSA_PROTO_OBJ = python/py_lsa.o -+ -+PY_COMMON_PROTO_OBJ = python/py_common.c python/py_ntsec.c -+ -+python_proto: python_spoolss_proto python_lsa_proto python_common_proto -+ -+python_spoolss_proto: -+ @cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \ -+ -h _PY_SPOOLSS_PROTO_H python/py_spoolss_proto.h \ -+ $(PY_SPOOLSS_PROTO_OBJ) -+ -+python_lsa_proto: -+ @cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \ -+ -h _PY_LSA_PROTO_H python/py_lsa_proto.h \ -+ $(PY_LSA_PROTO_OBJ) -+ -+python_common_proto: -+ @cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \ -+ -h _PY_COMMON_PROTO_H python/py_common_proto.h \ -+ $(PY_COMMON_PROTO_OBJ) -+ -+python_ext: $(PYTHON_OBJS) -+ @echo python python/setup.py build -+ @PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ -+ python python/setup.py build -+ - # revert to the previously installed version - revert: - @$(SHELL) $(srcdir)/script/revert.sh $(SBINDIR) $(SPROGS) -Index: configure.in -=================================================================== -RCS file: /data/cvs/samba/source/configure.in,v -retrieving revision 1.321 -diff -u -r1.321 configure.in ---- configure.in 2002/07/03 00:44:39 1.321 -+++ configure.in 2002/07/11 23:18:11 -@@ -2820,7 +2820,7 @@ - builddir=`pwd` - AC_SUBST(builddir) - --AC_OUTPUT(include/stamp-h Makefile script/findsmb) -+AC_OUTPUT(include/stamp-h Makefile script/findsmb python/setup.py) - - ################################################# - # Print very concise instructions on building/use diff --git a/source/python/setup.py.in b/source/python/setup.py.in deleted file mode 100755 index 0895e25c08c..00000000000 --- a/source/python/setup.py.in +++ /dev/null @@ -1,154 +0,0 @@ -# -*- mode: python -*- -# -# Unix SMB/CIFS implementation. -# Module packaging setup for Samba python extensions -# -# Copyright (C) Tim Potter, 2002 -# -# 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. -# - -from distutils.core import setup -from distutils.extension import Extension - -import sys, string, os - -# The Makefile passes in environment variable $PYTHON_OBJ as being the -# list of Samba objects. This kind of goes against the distutils.cmd -# method of adding setup commands and will also confuse people who are -# familiar with the python Distutils module. - -samba_objs = "" -if os.environ.has_key("PYTHON_OBJS"): - samba_objs = os.environ.get("PYTHON_OBJS") - -samba_cflags = "" -if os.environ.has_key("PYTHON_CFLAGS"): - samba_cflags = os.environ.get("PYTHON_CFLAGS") - -samba_srcdir = "" -if os.environ.has_key("SRCDIR"): - samba_srcdir = os.environ.get("SRCDIR") - -# These variables are filled in by configure - -samba_libs = "@LIBS@" - -# Convert libs and objs from space separated strings to lists of strings -# for distutils to digest. Split "-l" prefix off library list. - -obj_list = string.split(samba_objs) - -lib_list = [] - -for lib in string.split(samba_libs): - lib_list.append(string.replace(lib, "-l", "")) - -flags_list = string.split(samba_cflags) - -# Invoke distutils.setup - -setup( - - # Overview information - - name = "Samba Python Extensions", - version = "0.1", - author = "Tim Potter", - author_email = "tpot@samba.org", - license = "GPL", - - # Build info - - include_dirs = [samba_srcdir + '.', samba_srcdir + "include", - samba_srcdir + "ubiqx", samba_srcdir + "smbwrapper", - samba_srcdir + "popt", "/usr/kerberos/include", - "/usr/local/include"], - - # Module list - - ext_modules = [ - - # SPOOLSS pipe module - - Extension(name = "spoolss", - sources = [samba_srcdir + "python/py_spoolss.c", - samba_srcdir + "python/py_common.c", - samba_srcdir + "python/py_conv.c", - samba_srcdir + "python/py_ntsec.c", - samba_srcdir + "python/py_spoolss_forms.c", - samba_srcdir + "python/py_spoolss_forms_conv.c", - samba_srcdir + "python/py_spoolss_drivers.c", - samba_srcdir + "python/py_spoolss_drivers_conv.c", - samba_srcdir + "python/py_spoolss_printers.c", - samba_srcdir + "python/py_spoolss_printers_conv.c", - samba_srcdir + "python/py_spoolss_printerdata.c", - samba_srcdir + "python/py_spoolss_ports.c", - samba_srcdir + "python/py_spoolss_ports_conv.c", - samba_srcdir + "python/py_spoolss_jobs.c", - samba_srcdir + "python/py_spoolss_jobs_conv.c", - ], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # LSA pipe module - - Extension(name = "lsa", - sources = [samba_srcdir + "python/py_lsa.c", - samba_srcdir + "python/py_common.c", - samba_srcdir + "python/py_ntsec.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # SAMR pipe module - - Extension(name = "samr", - sources = [samba_srcdir + "python/py_samr.c", - samba_srcdir + "python/py_common.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # winbind client module - - Extension(name = "winbind", - sources = [samba_srcdir + "python/py_winbind.c", - samba_srcdir + "python/py_common.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list, - extra_compile_args = flags_list), - - # WINREG pipe module - - Extension(name = "winreg", - sources = [samba_srcdir + "python/py_winreg.c", - samba_srcdir + "python/py_common.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # tdb module - - Extension(name = "tdb", - sources = [samba_srcdir + "python/py_tdb.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - ], -) |