From e2cd994c9033f4c8ebc840efcbadd572528fb12d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 17 Aug 2002 07:21:01 +0000 Subject: Quick hack to get around the inadequacy of pdb_smbpasswd. This should make the build farm happy again, and allow the 'guest account' to be added to smbpasswd. Andrew Bartlett (This used to be commit 5e5cd2874527dd9a213c4bfcf98a425c39f3f2e2) --- source3/passdb/pdb_smbpasswd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/passdb/pdb_smbpasswd.c b/source3/passdb/pdb_smbpasswd.c index a5af0a786e..d40ea03511 100644 --- a/source3/passdb/pdb_smbpasswd.c +++ b/source3/passdb/pdb_smbpasswd.c @@ -1149,7 +1149,7 @@ static BOOL build_smb_pass (struct smb_passwd *smb_pw, const SAM_ACCOUNT *sampas uid = pdb_get_uid(sampass); /* If the user specified a RID, make sure its able to be both stored and retreived */ - if (rid && uid != fallback_pdb_user_rid_to_uid(rid)) { + if (rid && rid != DOMAIN_USER_RID_GUEST && uid != fallback_pdb_user_rid_to_uid(rid)) { DEBUG(0,("build_sam_pass: Failing attempt to store user with non-uid based user RID. \n")); return False; } -- cgit From 8f5f2eb454b89e0988ab795fb6e695a3d090c54d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 17 Aug 2002 07:31:54 +0000 Subject: Change which session key we negotiate. This uses the NT-based session key that we previously expected, rather than the LM based key. A Win2k SPNEGO enabled join goes a *lot* further with this option on. Andrew Bartlett (This used to be commit b224938e4e843288630cdc7c3c3931b241bd0e1a) --- source3/smbd/sesssetup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index 8fb5a50697..77f93812dd 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -312,7 +312,7 @@ static int reply_spnego_negotiate(connection_struct *conn, return the flags we want. Obviously this is not correct */ chal_flags = NTLMSSP_NEGOTIATE_UNICODE | - NTLMSSP_NEGOTIATE_LM_KEY | + NTLMSSP_NEGOTIATE_128 | NTLMSSP_NEGOTIATE_NTLM | NTLMSSP_CHAL_TARGET_INFO; -- cgit From cb36e520b38edf063157024b46d9e58f8a341028 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sat, 17 Aug 2002 13:17:41 +0000 Subject: * the printing code should now be back to the working state it was before the swap from NT_PRINTER_PARAM to REGISTRY_VALUE. * XxxPrinterDataEx() functions have not been expanded to support keys other than SPOOL_PRINTERDATA_KEY yet * fixed apparent long standing bug regarding the dependentfiles list in the DRIVER_INFO struct (This used to be commit d59b0eb1236cf5bb9371030a94eb60d4131c15fb) --- source3/printing/nt_printing.c | 57 +++++++++++++------------------------ source3/rpc_parse/parse_spoolss.c | 2 +- source3/rpc_server/srv_spoolss_nt.c | 56 ++++++++++++++++++++++++------------ 3 files changed, 58 insertions(+), 57 deletions(-) diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index c497c65bfe..3b85fce020 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -1759,7 +1759,8 @@ static WERROR get_a_printer_driver_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 **info_ptr, driver.defaultdatatype); i=0; - while (len < dbuf.dsize) { + while (len < dbuf.dsize) + { fstring *tddfs; tddfs = (fstring *)Realloc(driver.dependentfiles, @@ -1774,13 +1775,15 @@ static WERROR get_a_printer_driver_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 **info_ptr, &driver.dependentfiles[i]); i++; } + if (driver.dependentfiles != NULL) fstrcpy(driver.dependentfiles[i], ""); SAFE_FREE(dbuf.dptr); - if (len != dbuf.dsize) { - SAFE_FREE(driver.dependentfiles); + if (len != dbuf.dsize) + { + SAFE_FREE(driver.dependentfiles); return get_a_printer_driver_3_default(info_ptr, drivername, arch); } @@ -3034,15 +3037,17 @@ static BOOL set_driver_init_2( NT_PRINTER_INFO_LEVEL_2 *info_ptr ) TDB_DATA kbuf, dbuf; NT_PRINTER_INFO_LEVEL_2 info; + + ZERO_STRUCT(info); + /* * Delete any printer data 'values' already set. When called for driver * replace, there will generally be some, but during an add printer, there * should not be any (if there are delete them). */ + delete_all_printer_data( info_ptr ); - - ZERO_STRUCT(info); - + slprintf(key, sizeof(key)-1, "%s%s", DRIVER_INIT_PREFIX, info_ptr->drivername); kbuf.dptr = key; @@ -3057,16 +3062,18 @@ static BOOL set_driver_init_2( NT_PRINTER_INFO_LEVEL_2 *info_ptr ) free_nt_devicemode(&info_ptr->devmode); return False; } - + /* * Get the saved DEVMODE.. */ + len += unpack_devicemode(&info.devmode,dbuf.dptr+len, dbuf.dsize-len); /* * The saved DEVMODE contains the devicename from the printer used during * the initialization save. Change it to reflect the new printer. */ + ZERO_STRUCT(info.devmode->devicename); fstrcpy(info.devmode->devicename, info_ptr->printername); @@ -3082,44 +3089,18 @@ static BOOL set_driver_init_2( NT_PRINTER_INFO_LEVEL_2 *info_ptr ) * --jerry */ -#if 1 /* JERRY */ - /* - * Bind the saved DEVMODE to the new the printer. - */ + /* Bind the saved DEVMODE to the new the printer */ + free_nt_devicemode(&info_ptr->devmode); info_ptr->devmode = info.devmode; -#else - /* copy the entire devmode if we currently don't have one */ - - if (!info_ptr->devmode) { - DEBUG(10,("set_driver_init_2: Current Devmode is NULL. Copying entire Device Mode\n")); - info_ptr->devmode = info.devmode; - } - else { - /* only set the necessary fields */ - - DEBUG(10,("set_driver_init_2: Setting driverversion [0x%x] and private data [0x%x]\n", - info.devmode->driverversion, info.devmode->driverextra)); - - info_ptr->devmode->driverversion = info.devmode->driverversion; - SAFE_FREE(info_ptr->devmode->private); - info_ptr->devmode->private = NULL; - - if (info.devmode->driverversion) - info_ptr->devmode->private = memdup(info.devmode->private, info.devmode->driverversion); - - free_nt_devicemode(&info.devmode); - } -#endif DEBUG(10,("set_driver_init_2: Set printer [%s] init DEVMODE for driver [%s]\n", info_ptr->printername, info_ptr->drivername)); - /* - * Add the printer data 'values' to the new printer - */ + /* Add the printer data 'values' to the new printer */ + len += unpack_values( &info_ptr->data, dbuf.dptr+len, dbuf.dsize-len ); @@ -3142,7 +3123,7 @@ BOOL set_driver_init(NT_PRINTER_INFO_LEVEL *printer, uint32 level) switch (level) { case 2: - result=set_driver_init_2(printer->info_2); + result = set_driver_init_2(printer->info_2); break; default: diff --git a/source3/rpc_parse/parse_spoolss.c b/source3/rpc_parse/parse_spoolss.c index ac41a81a5a..3a7f4b57ae 100644 --- a/source3/rpc_parse/parse_spoolss.c +++ b/source3/rpc_parse/parse_spoolss.c @@ -5200,7 +5200,7 @@ static BOOL uniarray_2_dosarray(BUFFER5 *buf5, fstring **ar) *ar = NULL; while (src < ((char *)buf5->buffer) + buf5->buf_len*2) { - rpcstr_pull(f, src, sizeof(f)-1, 0, 0); + rpcstr_pull(f, src, sizeof(f)-1, -1, STR_TERMINATE); src = skip_unibuf(src, 2*buf5->buf_len - PTR_DIFF(src,buf5->buffer)); tar = (fstring *)Realloc(*ar, sizeof(fstring)*(n+2)); if (!tar) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 2c1dbefd8b..7aceaa548f 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -4395,22 +4395,29 @@ static void init_unistr_array(uint16 **uni_array, fstring *char_array, char *ser DEBUG(6,("init_unistr_array\n")); *uni_array=NULL; - while (1) { + while (True) + { if (char_array == NULL) v = ""; else { v = char_array[i]; if (!v) v = ""; /* hack to handle null lists */ } - if (strlen(v) == 0) break; + + if ( !strlen(v) ) + break; + slprintf(line, sizeof(line)-1, "\\\\%s%s", servername, v); + DEBUGADD(6,("%d:%s:%d\n", i, line, strlen(line))); + if((tuary=Realloc(*uni_array, (j+strlen(line)+2)*sizeof(uint16))) == NULL) { DEBUG(2,("init_unistr_array: Realloc error\n" )); return; } else *uni_array = tuary; - j += (rpcstr_push((*uni_array+j), line, sizeof(uint16)*strlen(line)+2, 0)/ sizeof(uint16)); + + j += (rpcstr_push((*uni_array+j), line, sizeof(uint16)*strlen(line)+2, STR_TERMINATE) / sizeof(uint16)); i++; } @@ -4572,8 +4579,8 @@ static void fill_printer_driver_info_6(DRIVER_INFO_6 *info, NT_PRINTER_DRIVER_IN init_unistr( &info->monitorname, driver.info_3->monitorname ); init_unistr( &info->defaultdatatype, driver.info_3->defaultdatatype ); - info->dependentfiles=NULL; - init_unistr_array(&info->dependentfiles, driver.info_3->dependentfiles, servername); + info->dependentfiles = NULL; + init_unistr_array( &info->dependentfiles, driver.info_3->dependentfiles, servername ); info->previousdrivernames=NULL; init_unistr_array(&info->previousdrivernames, &nullstr, servername); @@ -4596,21 +4603,28 @@ static void fill_printer_driver_info_6(DRIVER_INFO_6 *info, NT_PRINTER_DRIVER_IN * fill a printer_info_6 struct ********************************************************************/ -static WERROR construct_printer_driver_info_6(DRIVER_INFO_6 *info, int snum, fstring servername, fstring architecture, uint32 version) +static WERROR construct_printer_driver_info_6(DRIVER_INFO_6 *info, int snum, + fstring servername, fstring architecture, uint32 version) { - NT_PRINTER_INFO_LEVEL *printer = NULL; - NT_PRINTER_DRIVER_INFO_LEVEL driver; - WERROR status; + NT_PRINTER_INFO_LEVEL *printer = NULL; + NT_PRINTER_DRIVER_INFO_LEVEL driver; + WERROR status; + ZERO_STRUCT(driver); status=get_a_printer(&printer, 2, lp_servicename(snum) ); + DEBUG(8,("construct_printer_driver_info_6: status: %s\n", dos_errstr(status))); + if (!W_ERROR_IS_OK(status)) return WERR_INVALID_PRINTER_NAME; - status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version); + status = get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version); + DEBUG(8,("construct_printer_driver_info_6: status: %s\n", dos_errstr(status))); - if (!W_ERROR_IS_OK(status)) { + + if (!W_ERROR_IS_OK(status)) + { /* * Is this a W2k client ? */ @@ -4821,9 +4835,9 @@ WERROR _spoolss_getprinterdriver2(pipes_struct *p, SPOOL_Q_GETPRINTERDRIVER2 *q_ DEBUG(4,("_spoolss_getprinterdriver2\n")); - *needed=0; - *servermajorversion=0; - *serverminorversion=0; + *needed = 0; + *servermajorversion = 0; + *serverminorversion = 0; pstrcpy(servername, get_called_name()); unistr2_to_ascii(architecture, uni_arch, sizeof(architecture)-1); @@ -5340,7 +5354,8 @@ static WERROR update_printer(pipes_struct *p, POLICY_HND *handle, uint32 level, * requires Win32 client code (see other notes elsewhere in the code). */ if (printer->info_2->devmode && - printer->info_2->devmode->displayfrequency == MAGIC_DISPLAY_FREQUENCY) { + printer->info_2->devmode->displayfrequency == MAGIC_DISPLAY_FREQUENCY) + { DEBUG(10,("update_printer: Save printer driver init data\n")); printer->info_2->devmode->displayfrequency = 0; @@ -5356,20 +5371,25 @@ static WERROR update_printer(pipes_struct *p, POLICY_HND *handle, uint32 level, srv_spoolss_reset_printerdata( printer->info_2->drivername ); - } else { + } + else + { /* * When a *new* driver is bound to a printer, the drivername is used to * lookup previously saved driver initialization info, which is then * bound to the printer, simulating what happens in the Windows arch. */ - if (!strequal(printer->info_2->drivername, old_printer->info_2->drivername)){ - if (!set_driver_init(printer, 2)) { + if (!strequal(printer->info_2->drivername, old_printer->info_2->drivername)) + { + if (!set_driver_init(printer, 2)) + { DEBUG(5,("update_printer: Error restoring driver initialization data for driver [%s]!\n", printer->info_2->drivername)); } DEBUG(10,("update_printer: changing driver [%s]! Sending event!\n", printer->info_2->drivername)); + notify_printer_driver(snum, printer->info_2->drivername); } } -- cgit From ee92edf7dafc4da220fde07c1a42d3b9b1ab477a Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 17 Aug 2002 13:52:02 +0000 Subject: paramater -> parameter (This used to be commit 0db310d82c9d8f403c41e158662be1260c609542) --- docs/docbook/manpages/smb.conf.5.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index 1e713147c9..54e5f3ed73 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -396,7 +396,7 @@ to change your config based on what the client calls you. Your server can have a "dual personality". - Note that this paramater is not available when Samba listens + Note that this parameter is not available when Samba listens on port 445, as clients no longer send this information @@ -5108,7 +5108,7 @@ (eg --with-tdbsam) at configure time. - This paramater is in two parts, the backend's name, and a 'location' + This parameter is in two parts, the backend's name, and a 'location' string that has meaning only to that particular backed. These are separated by a : character. -- cgit From d5f8f1be7ed05fa31787a4352d8b01eff44c1fdd Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 17 Aug 2002 16:15:20 +0000 Subject: Update indent arguments, they're now correct. (This used to be commit 7f2d506bab0b649f707a25dec856639b18eee625) --- source3/CodingSuggestions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/CodingSuggestions b/source3/CodingSuggestions index e5f366ec71..5e99bc54ca 100644 --- a/source3/CodingSuggestions +++ b/source3/CodingSuggestions @@ -29,7 +29,7 @@ programmers who have contributed. The indent utility can be used to format C files in the general samba coding style. The arguments you should give to indent are: --bad -bap -br -ce -cdw -nbc -brs -bbb -nbc -npsl +-bad -bap -br -ce -cdw -nbc -brs -bbb -nbc -npsl -ut -i8 Following are some considerations you should use when adding new code to Samba. First and foremost remember that: -- cgit From 3312086d7a2b1e2adb75c323e882f1cd4ea52e2e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 17 Aug 2002 16:25:39 +0000 Subject: Better coding style Move out last Makefile.pdb dependencies (This used to be commit 2dc8b48632b0f14834db79f851a06469d2c0c00b) --- examples/pdb/xml/Makefile.in | 2 -- examples/pdb/xml/pdb_xml.c | 24 ++++++++---------------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/examples/pdb/xml/Makefile.in b/examples/pdb/xml/Makefile.in index 87d4546972..252641da6d 100644 --- a/examples/pdb/xml/Makefile.in +++ b/examples/pdb/xml/Makefile.in @@ -2,8 +2,6 @@ PDB_OBJS = pdb_xml.so PDB_CFLAGS = `xml2-config --cflags` PDB_LDFLAGS = `xml2-config --libs` -include $(MAKEFILE) - CC = @CC@ LIBTOOL = libtool CFLAGS = @CFLAGS@ $(PDB_CFLAGS) diff --git a/examples/pdb/xml/pdb_xml.c b/examples/pdb/xml/pdb_xml.c index f237a7da9d..17261873cd 100644 --- a/examples/pdb/xml/pdb_xml.c +++ b/examples/pdb/xml/pdb_xml.c @@ -42,8 +42,7 @@ static char * iota(int a) { return tmp; } -BOOL -parsePass(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, SAM_ACCOUNT * u) +BOOL parsePass(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, SAM_ACCOUNT * u) { pstring temp; @@ -72,8 +71,7 @@ parsePass(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, SAM_ACCOUNT * u) return True; } -BOOL -parseUser(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, SAM_ACCOUNT * u) +BOOL parseUser(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, SAM_ACCOUNT * u) { char *tmp; DOM_SID sid; @@ -242,8 +240,7 @@ typedef struct pdb_xml { xmlNsPtr ns; } pdb_xml; -xmlNodePtr -parseSambaXMLFile(struct pdb_xml *data) +xmlNodePtr parseSambaXMLFile(struct pdb_xml *data) { xmlNodePtr cur; @@ -290,8 +287,7 @@ parseSambaXMLFile(struct pdb_xml *data) return cur; } -static BOOL -xmlsam_setsampwent(struct pdb_methods *methods, BOOL update) +static BOOL xmlsam_setsampwent(struct pdb_methods *methods, BOOL update) { pdb_xml *data; @@ -314,8 +310,7 @@ xmlsam_setsampwent(struct pdb_methods *methods, BOOL update) End enumeration of the passwd list. ****************************************************************/ -static void -xmlsam_endsampwent(struct pdb_methods *methods) +static void xmlsam_endsampwent(struct pdb_methods *methods) { pdb_xml *data; @@ -340,8 +335,7 @@ xmlsam_endsampwent(struct pdb_methods *methods) Get one SAM_ACCOUNT from the list (next in line) *****************************************************************/ -static BOOL -xmlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) +static BOOL xmlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) { pdb_xml *data; @@ -373,8 +367,7 @@ xmlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) Adds an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL -xmlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * u) +static BOOL xmlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * u) { pstring temp; fstring sid_str; @@ -514,8 +507,7 @@ xmlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * u) return True; } -NTSTATUS -pdb_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method, +NTSTATUS pdb_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method, const char *location) { NTSTATUS nt_status; -- cgit From 36e9005cc2fb37b6c005ab537209618a3a26191b Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 17 Aug 2002 16:27:27 +0000 Subject: Better coding style (This used to be commit 09cb706dd1347ff29893ef33214332990be86b43) --- examples/pdb/mysql/Makefile.in | 2 -- examples/pdb/mysql/pdb_mysql.c | 57 ++++++++++++++---------------------------- 2 files changed, 19 insertions(+), 40 deletions(-) diff --git a/examples/pdb/mysql/Makefile.in b/examples/pdb/mysql/Makefile.in index 1da6ea789e..3ebecad762 100644 --- a/examples/pdb/mysql/Makefile.in +++ b/examples/pdb/mysql/Makefile.in @@ -2,8 +2,6 @@ PDB_OBJS = pdb_mysql.so PDB_LDFLAGS = -lmysqlclient MAKEFILE = Makefile.pdb -include $(MAKEFILE) - CC = @CC@ LIBTOOL = libtool CFLAGS = @CFLAGS@ $(PDB_CFLAGS) diff --git a/examples/pdb/mysql/pdb_mysql.c b/examples/pdb/mysql/pdb_mysql.c index c7e9e781c3..0cc1de6aaf 100644 --- a/examples/pdb/mysql/pdb_mysql.c +++ b/examples/pdb/mysql/pdb_mysql.c @@ -80,7 +80,6 @@ typedef struct pdb_mysql_query { char *part1; char *part2; } pdb_mysql_query; - #define SET_DATA(data,methods) { \ if(!methods){ \ DEBUG(0, ("invalid methods!\n")); \ @@ -92,8 +91,8 @@ typedef struct pdb_mysql_query { return False; \ } \ } -void -pdb_mysql_int_field(struct pdb_methods *m, + +void pdb_mysql_int_field(struct pdb_methods *m, struct pdb_mysql_query *q, char *name, int value) { if (!name || strchr(name, '\'')) @@ -111,8 +110,7 @@ pdb_mysql_int_field(struct pdb_methods *m, } } -static BOOL -pdb_mysql_string_field(struct pdb_methods *methods, +static BOOL pdb_mysql_string_field(struct pdb_methods *methods, struct pdb_mysql_query *q, char *name, const char *value) { @@ -145,8 +143,7 @@ pdb_mysql_string_field(struct pdb_methods *methods, return True; } -static char * -config_value(pdb_mysql_data * data, char *name, char *default_value) +static char * config_value(pdb_mysql_data * data, char *name, char *default_value) { if (lp_parm_string(NULL, data->location, name)) return lp_parm_string(NULL, data->location, name); @@ -154,9 +151,7 @@ config_value(pdb_mysql_data * data, char *name, char *default_value) return default_value; } -static char * -config_value_write(pdb_mysql_data * data, char *name, char *default_value) -{ +static char * config_value_write(pdb_mysql_data * data, char *name, char *default_value) { char *v = config_value(data, name, NULL); char *write; @@ -179,8 +174,7 @@ config_value_write(pdb_mysql_data * data, char *name, char *default_value) return write; } -static const char * -config_value_read(pdb_mysql_data * data, char *name, char *default_value) +static const char * config_value_read(pdb_mysql_data * data, char *name, char *default_value) { char *v = config_value(data, name, NULL); char *write; @@ -206,8 +200,7 @@ config_value_read(pdb_mysql_data * data, char *name, char *default_value) } /* Wrapper for atol that returns 0 if 'a' points to NULL */ -static long -xatol(char *a) +static long xatol(char *a) { long ret = 0; @@ -217,8 +210,7 @@ xatol(char *a) return ret; } -static BOOL -row_to_sam_account(MYSQL_RES * r, SAM_ACCOUNT * u) +static BOOL row_to_sam_account(MYSQL_RES * r, SAM_ACCOUNT * u) { MYSQL_ROW row; pstring temp; @@ -280,8 +272,7 @@ row_to_sam_account(MYSQL_RES * r, SAM_ACCOUNT * u) return True; } -static BOOL -mysqlsam_setsampwent(struct pdb_methods *methods, BOOL update) +static BOOL mysqlsam_setsampwent(struct pdb_methods *methods, BOOL update) { struct pdb_mysql_data *data = (struct pdb_mysql_data *) methods->private_data; @@ -386,8 +377,7 @@ mysqlsam_setsampwent(struct pdb_methods *methods, BOOL update) End enumeration of the passwd list. ****************************************************************/ -static void -mysqlsam_endsampwent(struct pdb_methods *methods) +static void mysqlsam_endsampwent(struct pdb_methods *methods) { struct pdb_mysql_data *data = (struct pdb_mysql_data *) methods->private_data; @@ -409,8 +399,7 @@ mysqlsam_endsampwent(struct pdb_methods *methods) Get one SAM_ACCOUNT from the list (next in line) *****************************************************************/ -static BOOL -mysqlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) +static BOOL mysqlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) { struct pdb_mysql_data *data; @@ -424,8 +413,7 @@ mysqlsam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT * user) return row_to_sam_account(data->pwent, user); } -BOOL -mysqlsam_select_by_field(struct pdb_methods * methods, SAM_ACCOUNT * user, +BOOL mysqlsam_select_by_field(struct pdb_methods * methods, SAM_ACCOUNT * user, const char *field, const char *sname) { char *esc_sname; @@ -551,8 +539,7 @@ mysqlsam_select_by_field(struct pdb_methods * methods, SAM_ACCOUNT * user, Lookup a name in the SAM database ******************************************************************/ -static BOOL -mysqlsam_getsampwnam(struct pdb_methods *methods, SAM_ACCOUNT * user, +static BOOL mysqlsam_getsampwnam(struct pdb_methods *methods, SAM_ACCOUNT * user, const char *sname) { struct pdb_mysql_data *data; @@ -573,8 +560,7 @@ mysqlsam_getsampwnam(struct pdb_methods *methods, SAM_ACCOUNT * user, Search by sid **************************************************************************/ -static BOOL -mysqlsam_getsampwsid(struct pdb_methods *methods, SAM_ACCOUNT * user, +static BOOL mysqlsam_getsampwsid(struct pdb_methods *methods, SAM_ACCOUNT * user, const DOM_SID * sid) { BOOL ret = False; @@ -597,8 +583,7 @@ mysqlsam_getsampwsid(struct pdb_methods *methods, SAM_ACCOUNT * user, Delete a SAM_ACCOUNT ****************************************************************************/ -static BOOL -mysqlsam_delete_sam_account(struct pdb_methods *methods, +static BOOL mysqlsam_delete_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * sam_pass) { const char *sname = pdb_get_username(sam_pass); @@ -656,8 +641,7 @@ mysqlsam_delete_sam_account(struct pdb_methods *methods, return True; } -static BOOL -mysqlsam_replace_sam_account(struct pdb_methods *methods, +static BOOL mysqlsam_replace_sam_account(struct pdb_methods *methods, const SAM_ACCOUNT * newpwd, char isupdate) { pstring temp; @@ -889,21 +873,18 @@ mysqlsam_replace_sam_account(struct pdb_methods *methods, return True; } -static BOOL -mysqlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * newpwd) +static BOOL mysqlsam_add_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * newpwd) { return mysqlsam_replace_sam_account(methods, newpwd, 0); } -static BOOL -mysqlsam_update_sam_account(struct pdb_methods *methods, +static BOOL mysqlsam_update_sam_account(struct pdb_methods *methods, SAM_ACCOUNT * newpwd) { return mysqlsam_replace_sam_account(methods, newpwd, 1); } -NTSTATUS -pdb_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method, +NTSTATUS pdb_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method, char *location) { NTSTATUS nt_status; -- cgit From be4b8b3e7f37ac1f2bbdfc5f42fd21ae1e280e25 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 17 Aug 2002 20:54:11 +0000 Subject: Update whatsnew for 3.0alpha19 (This used to be commit 9617b8f0081adb68230870db2311a7b83b84a13e) --- WHATSNEW.txt | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/WHATSNEW.txt b/WHATSNEW.txt index ba9956cdbb..53467f85db 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,6 +1,85 @@ WHATS NEW IN Samba 3.0 alphaX ============================= +Changes in alpha19 + - Virtual registry framework with printing hooks (jerry) + - Heavy registry updates (jerry) + - Use 850 as the default DOS character set in smb.conf (tpot) + - printer fixes - removed encoding of queueid in job number (jra) + - A lot of small fixes (jra) + - Don't crash on setfileinfo on printer fsp(jra) + - fixed line buffer mode in XFILE(jra) + - update samba.schema from 2.2 (jerry,idra) + - Fix problem with oplock breaks and win2k - + noticed by Lev Iserovich (jra) + - Update smbgroupedit to document -d - thanks to metze (abartlet) + - Support weird behaviour used by win9x pass-through auth (abartlet,tpot) + - Support for duplicating stderr in log files (abartlet) + - Move startup time initialisation to server.c (abartlet) + - *A lot* of fixes and cleanups (abartlet) + - Fix up compiler warnings (abartlet) + - Few small fixes (tpot) + - Renamed new_cli_netlogon_* -> cli_netlogon_* (tpot) + - Fixed segfault in net time when host is unavailable (tridge) + - Ensure to be root when opening printer backend tdb (jra) + - Merges from APPLIANCE_HEAD (tpot,jerry) + - configure updates (tridge) + - getgrouplist() updates (tridge) + - Support for pdbedit to query account policy values (abartlet) + - Allow one to create trusting domain account using smbpasswd (mimir,abartlet) + - 'Net rpc trustdom list' (mimir, abartlet) + - Fix fallback to anonymous connection (mimir, abartlet) + - Fix for pdb_ldap and OpenLDAP 2.1 + - Added support in swat to determine whether winbind is running (idra) + - Add 'hide unwritable' option (idra) + - Correct pickup of [homes] share after subsequent session setups (abartlet) + - Update rebind code in pdb_ldap (abartlet) + - Add some info levels to RPC srvsvc code - + thanks to Nigel Williams" (abartlet) + - Small doc fixes (tridge) + - good security patch from Timothy.Sell@unisys.com (tridge) + - fix minor nits in nmbd from adtam@cup.hp.com (tridge) + - make sure async dns nmbd child dies (tridge) + - interim fix for nmbd not registering DOMAIN#1b (tridge) + - fix for smbtar filename matching (tridge) + - Better quote handling in smb.conf (abartlet) + - Support browsers setting multiple languages in swat (idra) + - Changed str_list_make to be able to use a different separator string (idra) + - Samsync support to insert account info into the pdb (tpot) + - Don't hide unwritable dirs when 'hide unwritable' is enabled - + suggested by Alexander Oswald (idra) + - Fix for handling sparse files in smbd (tridge) + - Merges from 2_2 (jerry) + - Minor printer fixes (jerry) + - Add some checks to SID lookup code (abartlet) + - Cascaded VFS (Alexander Bokovoy, idra) + - Some netbios-less connections support in ADS mode (tridge) + - ADS tweaks (tridge) + - Fix plaintext passwords with win2k (tridge) + - 'net ads info' reports IP of LDAP server (tridge) + - Add some more RPC functions (jmcd) + - Add 'smb ports = ' option (tridge) + - Various small fixes (tridge) + - Passdb security checks (abartlet) + - Large winbind updates (abartlet) + - Moved rpc client routines from libsmb to rpc_client (tpot) + - Few nmbd fixes (jmcd) + - Fix swat to handle new debug level code (idra) + - Fix name length bug in namequeries (tridge) + - Don't have client binaries depend on libs they don't use - + patch from Steve Langasek (abartlet) + - Printing change notification (merged from HEAD_APPLIANCE) (jerry) + - fix delete printer driver (from HEAD_APPLIANCE) (jerry) + - Added pdb_xml and pdb_mysql (jelmer) + - Update pdb_test (jelmer) + - Fix security issues with %m (abartlet) + - Support for service joins from win2k AND use SPNEGO (jmcd) + - pdbedit -i and -e fix, add -b (idra) + - textdocs converted to sgml (jelmer, jerry) + - Merge netbios namecache code from APPLIANCE_HEAD (tpot) + - Fix segs in new NTLMSSP code (abartlet) + - Always make guest rid 501 (abartlet) + Changes in alpha18 - huge number of changes! really too many to list ... (and its 1am here, and I'm too tired) -- cgit From 2727f74132b8066e1aba1c31a601e076dbdf19ab Mon Sep 17 00:00:00 2001 From: Samba Release Account Date: Sat, 17 Aug 2002 20:59:17 +0000 Subject: preparing for release of 19 (This used to be commit be5a649ed4c06aa1ffb709f1d3ff8ed26919bf1c) --- source3/include/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/include/version.h b/source3/include/version.h index 74df1c9914..b333f68feb 100644 --- a/source3/include/version.h +++ b/source3/include/version.h @@ -1 +1 @@ -#define VERSION "3.0-alpha18" +#define VERSION "19" -- cgit From b3ce3a877c5af840edcc07a7e053b939795086db Mon Sep 17 00:00:00 2001 From: Samba Release Account Date: Sat, 17 Aug 2002 21:11:13 +0000 Subject: preparing for release of 3.0-alpha19 (This used to be commit 227472286f479bddfac7ea958b779fc4459a9e1e) --- source3/include/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/include/version.h b/source3/include/version.h index b333f68feb..87e3673a7f 100644 --- a/source3/include/version.h +++ b/source3/include/version.h @@ -1 +1 @@ -#define VERSION "19" +#define VERSION "3.0-alpha19" -- cgit From c2831ae82c4b17d27651776ee599741c20f0e91f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 17 Aug 2002 23:30:18 +0000 Subject: amazing! we've had a reversed comparison in our blocking lock code since 1998 and nobody noticed. It means that sometimes smbd would sit there forever, and smbd would never get the timing part of blocking locks right. (This used to be commit 5d4df58b6d4de548d8aa0a49ec307dce7cd1515a) --- source3/smbd/blocking.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/blocking.c b/source3/smbd/blocking.c index 6623c6df64..cb69b60144 100644 --- a/source3/smbd/blocking.c +++ b/source3/smbd/blocking.c @@ -576,7 +576,7 @@ void process_blocking_lock_queue(time_t t) DEBUG(5,("process_blocking_lock_queue: examining pending lock fnum = %d for file %s\n", fsp->fnum, fsp->fsp_name )); - if((blr->expire_time != -1) && (blr->expire_time > t)) { + if((blr->expire_time != -1) && (blr->expire_time <= t)) { /* * Lock expired - throw away all previously * obtained locks and return lock error. -- cgit From 28d89d3e66328213d87aa9a247c24adfc579d21c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 17 Aug 2002 23:57:48 +0000 Subject: get the error code right in case of a blocking lock timeout. (This used to be commit 01d35694ae0497ee11a7677eecc597336e6b59ca) --- source3/smbd/blocking.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/blocking.c b/source3/smbd/blocking.c index cb69b60144..72cf3e59b6 100644 --- a/source3/smbd/blocking.c +++ b/source3/smbd/blocking.c @@ -584,7 +584,7 @@ void process_blocking_lock_queue(time_t t) DEBUG(5,("process_blocking_lock_queue: pending lock fnum = %d for file %s timed out.\n", fsp->fnum, fsp->fsp_name )); - blocking_lock_reply_error(blr,NT_STATUS_ACCESS_DENIED); + blocking_lock_reply_error(blr,NT_STATUS_FILE_LOCK_CONFLICT); free_blocking_lock_record((blocking_lock_record *)ubi_slRemNext( &blocking_lock_queue, prev)); blr = (blocking_lock_record *)(prev ? ubi_slNext(prev) : ubi_slFirst(&blocking_lock_queue)); continue; -- cgit From 66992aff21605e372546808e00fa0b0659add868 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sun, 18 Aug 2002 00:59:47 +0000 Subject: * fix Get/SetPrinterDataEx() to work with printer key other than SPOOL_PRINTERDATA_KEY * created an internal set/get_printer_dataex() call for reuse in Set/GetPrinterData() (This used to be commit 4eb8ffba032971cf83a0fcec7ca3730b4ded0bf0) --- source3/include/nt_printing.h | 1 + source3/rpc_server/srv_spoolss_nt.c | 336 +++++++++++++++++++++++------------- 2 files changed, 218 insertions(+), 119 deletions(-) diff --git a/source3/include/nt_printing.h b/source3/include/nt_printing.h index 5e2b8f7f64..26d6e7e5f2 100644 --- a/source3/include/nt_printing.h +++ b/source3/include/nt_printing.h @@ -181,6 +181,7 @@ typedef struct nt_printer_driver_info_level #define SPOOL_DSDRIVER_KEY "DsDriver" #define SPOOL_DSUSER_KEY "DsUser" #define SPOOL_PNPDATA_KEY "PnPData" +#define SPOOL_OID_KEY "OID" /* container for a single registry key */ diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 7aceaa548f..02bd0ef45b 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1231,8 +1231,8 @@ Can't find printer handle we created for printer %s\n", name )); /* Allow admin access */ - if (printer_default->access_required & - SERVER_ACCESS_ADMINISTER) { + if ( printer_default->access_required & SERVER_ACCESS_ADMINISTER ) + { if (!lp_ms_add_printer_wizard()) { close_printer_handle(p, handle); @@ -1296,7 +1296,9 @@ Can't find printer handle we created for printer %s\n", name )); else printer_default->access_required = PRINTER_ACCESS_USE; - DEBUG(4,("Setting printer access=%x\n", printer_default->access_required)); + DEBUG(4,("Setting printer access = %s\n", (printer_default->access_required == PRINTER_ACCESS_ADMINISTER) + ? "PRINTER_ACCESS_ADMINSTER" : "PRINTER_ACCESS_USE" )); + Printer->access_granted = printer_default->access_required; /* @@ -1695,11 +1697,62 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV } +/**************************************************************************** + Internal routine for retreiving printerdata + ***************************************************************************/ + +static WERROR get_printer_dataex( TALLOC_CTX *ctx, NT_PRINTER_INFO_LEVEL *printer, + char *key, char *value, uint32 *type, uint8 **data, + uint32 *needed, uint32 in_size ) +{ + REGISTRY_VALUE *val; + int size, data_len; + + if ( !(val = get_printer_data( printer->info_2, key, value)) ) + return WERR_BADFILE; + + *type = regval_type( val ); + + DEBUG(5,("getprinterdata_printer:allocating %d\n", in_size)); + + size = regval_size( val ); + + /* copy the min(in_size, len) */ + + if ( in_size ) { + data_len = (size > in_size) ? in_size : size*sizeof(uint8); + if ( (*data = (uint8 *)talloc_memdup(ctx, regval_data_p(val), data_len)) == NULL ) + return WERR_NOMEM; + } + else + *data = NULL; + + *needed = size; + + DEBUG(5,("getprinterdata_printer:copy done\n")); + + return WERR_OK; +} + +/**************************************************************************** + Internal routine for storing printerdata + ***************************************************************************/ + +static WERROR set_printer_dataex( NT_PRINTER_INFO_LEVEL *printer, char *key, char *value, + uint32 type, uint8 *data, int real_len ) +{ + delete_printer_data( printer->info_2, key, value ); + + add_printer_data( printer->info_2, key, value, type, data, real_len ); + + return mod_a_printer(*printer, 2); +} + /******************************************************************** GetPrinterData on a printer server Handle. ********************************************************************/ -static BOOL getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint32 *type, uint8 **data, uint32 *needed, uint32 in_size) +static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint32 *type, uint8 **data, uint32 *needed, uint32 in_size) { int i; @@ -1708,50 +1761,50 @@ static BOOL getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint32 if (!strcmp(value, "W3SvcInstalled")) { *type = 0x4; if((*data = (uint8 *)talloc_zero(ctx, 4*sizeof(uint8) )) == NULL) - return False; - *needed = 0x4; - return True; + return WERR_NOMEM; + *needed = 0x4; + return WERR_OK; } if (!strcmp(value, "BeepEnabled")) { *type = 0x4; if((*data = (uint8 *)talloc(ctx, 4*sizeof(uint8) )) == NULL) - return False; + return WERR_NOMEM; SIVAL(*data, 0, 0x00); *needed = 0x4; - return True; + return WERR_OK; } if (!strcmp(value, "EventLog")) { *type = 0x4; if((*data = (uint8 *)talloc(ctx, 4*sizeof(uint8) )) == NULL) - return False; + return WERR_NOMEM; /* formally was 0x1b */ SIVAL(*data, 0, 0x0); *needed = 0x4; - return True; + return WERR_OK; } if (!strcmp(value, "NetPopup")) { *type = 0x4; if((*data = (uint8 *)talloc(ctx, 4*sizeof(uint8) )) == NULL) - return False; + return WERR_NOMEM; SIVAL(*data, 0, 0x00); *needed = 0x4; - return True; + return WERR_OK; } if (!strcmp(value, "MajorVersion")) { *type = 0x4; if((*data = (uint8 *)talloc(ctx, 4*sizeof(uint8) )) == NULL) - return False; + return WERR_NOMEM; #ifndef EMULATE_WIN2K_HACK /* JERRY */ SIVAL(*data, 0, 2); #else SIVAL(*data, 0, 3); #endif *needed = 0x4; - return True; + return WERR_OK; } if (!strcmp(value, "DefaultSpoolDirectory")) { @@ -1761,7 +1814,7 @@ static BOOL getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint32 *type = 0x1; *needed = 2*(strlen(string)+1); if((*data = (uint8 *)talloc(ctx, ((*needed > in_size) ? *needed:in_size) *sizeof(uint8))) == NULL) - return False; + return WERR_NOMEM; memset(*data, 0, (*needed > in_size) ? *needed:in_size); /* it's done by hand ready to go on the wire */ @@ -1769,7 +1822,7 @@ static BOOL getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint32 (*data)[2*i]=string[i]; (*data)[2*i+1]='\0'; } - return True; + return WERR_OK; } if (!strcmp(value, "Architecture")) { @@ -1777,16 +1830,16 @@ static BOOL getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint32 *type = 0x1; *needed = 2*(strlen(string)+1); if((*data = (uint8 *)talloc(ctx, ((*needed > in_size) ? *needed:in_size) *sizeof(uint8))) == NULL) - return False; + return WERR_NOMEM; memset(*data, 0, (*needed > in_size) ? *needed:in_size); for (i=0; ihandle; - UNISTR2 *valuename = &q_u->valuename; - uint32 in_size = q_u->size; - uint32 *type = &r_u->type; - uint32 *out_size = &r_u->size; - uint8 **data = &r_u->data; - uint32 *needed = &r_u->needed; - - fstring value; - BOOL found=False; - Printer_entry *Printer = find_printer_index_by_hnd(p, handle); + POLICY_HND *handle = &q_u->handle; + UNISTR2 *valuename = &q_u->valuename; + uint32 in_size = q_u->size; + uint32 *type = &r_u->type; + uint32 *out_size = &r_u->size; + uint8 **data = &r_u->data; + uint32 *needed = &r_u->needed; + WERROR status; + fstring value; + Printer_entry *Printer = find_printer_index_by_hnd(p, handle); + NT_PRINTER_INFO_LEVEL *printer = NULL; + int snum = 0; /* * Reminder: when it's a string, the length is in BYTES @@ -1885,45 +1939,49 @@ WERROR _spoolss_getprinterdata(pipes_struct *p, SPOOL_Q_GETPRINTERDATA *q_u, SPO DEBUG(4,("_spoolss_getprinterdata\n")); - if (!Printer) { + if ( !Printer ) { if((*data=(uint8 *)talloc_zero(p->mem_ctx, 4*sizeof(uint8))) == NULL) return WERR_NOMEM; DEBUG(2,("_spoolss_getprinterdata: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); return WERR_BADFID; } + if ( !get_printer_snum(p,handle, &snum) ) + return WERR_BADFID; + + status = get_a_printer(&printer, 2, lp_servicename(snum)); + if ( !W_ERROR_IS_OK(status) ) + return status; + unistr2_to_ascii(value, valuename, sizeof(value)-1); - if (Printer->printer_type == PRINTER_HANDLE_IS_PRINTSERVER) - found = getprinterdata_printer_server(p->mem_ctx, value, type, data, needed, *out_size); + if ( Printer->printer_type == PRINTER_HANDLE_IS_PRINTSERVER ) + status = getprinterdata_printer_server( p->mem_ctx, value, type, data, needed, *out_size ); else - found = getprinterdata_printer(p, p->mem_ctx, handle, value, type, data, needed, *out_size); + status = get_printer_dataex( p->mem_ctx, printer, SPOOL_PRINTERDATA_KEY, value, type, data, needed, in_size ); - if ( !found ) + if ( !W_ERROR_IS_OK(status) ) { DEBUG(5, ("value not found, allocating %d\n", *out_size)); /* reply this param doesn't exist */ - if (*out_size) { + if ( *out_size ) { if((*data=(uint8 *)talloc_zero(p->mem_ctx, *out_size*sizeof(uint8))) == NULL) return WERR_NOMEM; - } else { + } + else *data = NULL; - } - - /* error depends on handle type */ - - if (Printer->printer_type == PRINTER_HANDLE_IS_PRINTSERVER) - return WERR_INVALID_PARAM; - else - return WERR_BADFILE; } if (*needed > *out_size) - return WERR_MORE_DATA; - else - return WERR_OK; + status = WERR_MORE_DATA; + + /* cleanup & exit */ + + free_a_printer( &printer, 2 ); + + return status; } /********************************************************* @@ -7112,7 +7170,8 @@ WERROR _spoolss_setprinterdata( pipes_struct *p, SPOOL_Q_SETPRINTERDATA *q_u, SP * when connecting to a printer --jerry */ - if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) { + if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) + { DEBUG(3, ("_spoolss_setprinterdata: change denied by handle access permissions\n")); status = WERR_ACCESS_DENIED; goto done; @@ -7122,15 +7181,12 @@ WERROR _spoolss_setprinterdata( pipes_struct *p, SPOOL_Q_SETPRINTERDATA *q_u, SP if (!W_ERROR_IS_OK(status)) return status; - /* save the registry data */ - unistr2_to_ascii( valuename, value, sizeof(valuename)-1 ); - delete_printer_data( printer->info_2, SPOOL_PRINTERDATA_KEY, valuename ); - add_printer_data( printer->info_2, SPOOL_PRINTERDATA_KEY, valuename, type, data, real_len ); - - /* write the **entire** printer out to disk.... :-( */ - status = mod_a_printer(*printer, 2); + /* save the registry data */ + + status = set_printer_dataex( printer, SPOOL_PRINTERDATA_KEY, valuename, + type, data, real_len ); done: free_a_printer(&printer, 2); @@ -7786,7 +7842,10 @@ WERROR _spoolss_getjob( pipes_struct *p, SPOOL_Q_GETJOB *q_u, SPOOL_R_GETJOB *r_ } /******************************************************************** - * spoolss_getprinterdataex + spoolss_getprinterdataex + + From MSDN documentation of GetPrinterDataEx: pass request + to GetPrinterData if key is "PrinterDriverData". ********************************************************************/ WERROR _spoolss_getprinterdataex(pipes_struct *p, SPOOL_Q_GETPRINTERDATAEX *q_u, SPOOL_R_GETPRINTERDATAEX *r_u) @@ -7797,76 +7856,90 @@ WERROR _spoolss_getprinterdataex(pipes_struct *p, SPOOL_Q_GETPRINTERDATAEX *q_u, uint32 *out_size = &r_u->size; uint8 **data = &r_u->data; uint32 *needed = &r_u->needed; - - fstring key, value; + fstring keyname, valuename; + Printer_entry *Printer = find_printer_index_by_hnd(p, handle); - BOOL found = False; + + NT_PRINTER_INFO_LEVEL *printer = NULL; + int snum = 0; + WERROR status = WERR_OK; DEBUG(4,("_spoolss_getprinterdataex\n")); - unistr2_to_ascii(key, &q_u->keyname, sizeof(key) - 1); - unistr2_to_ascii(value, &q_u->valuename, sizeof(value) - 1); + unistr2_to_ascii(keyname, &q_u->keyname, sizeof(keyname) - 1); + unistr2_to_ascii(valuename, &q_u->valuename, sizeof(valuename) - 1); + + DEBUG(10, ("_spoolss_getprinterdataex: key => [%s], value => [%s]\n", + keyname, valuename)); /* in case of problem, return some default values */ - *needed=0; - *type=0; - *out_size=0; + + *needed = 0; + *type = 0; + *out_size = in_size; - if (!Printer) { if((*data=(uint8 *)talloc_zero(p->mem_ctx, 4*sizeof(uint8))) == NULL) return WERR_NOMEM; - DEBUG(2,("_spoolss_getprinterdata: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); + DEBUG(2,("_spoolss_getprinterdataex: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); return WERR_BADFID; } - /* Is the handle to a printer or to the server? */ - if (Printer->printer_type == PRINTER_HANDLE_IS_PRINTSERVER) + if ( Printer->printer_type == PRINTER_HANDLE_IS_PRINTSERVER ) { DEBUG(10,("_spoolss_getprinterdatex: Not implemented for server handles yet\n")); return WERR_INVALID_PARAM; } - else - { - /* - * From MSDN documentation of GetPrinterDataEx: pass request - * to GetPrinterData if key is "PrinterDriverData". This is - * the only key we really support. Other keys to implement: - * (a) DsDriver - * (b) DsSpooler - * (c) PnPData - * (d) DsUser - */ - - if (strcmp(key, SPOOL_PRINTERDATA_KEY) != 0) - return WERR_BADFILE; + + if ( !get_printer_snum(p,handle, &snum) ) + return WERR_BADFID; - DEBUG(10, ("_spoolss_getprinterdataex: pass me to getprinterdata\n")); - found = getprinterdata_printer(p, p->mem_ctx, handle, value, - type, data, needed, in_size); - + status = get_a_printer(&printer, 2, lp_servicename(snum)); + if ( !W_ERROR_IS_OK(status) ) + return status; + + /* check to see if the keyname is valid */ + if ( !strlen(keyname) ) { + status = WERR_INVALID_PARAM; + goto done; } - - if (!found) { + + if ( lookup_printerkey( &printer->info_2->data, keyname ) == -1 ) { + DEBUG(4,("_spoolss_getprinterdataex: Invalid keyname [%s]\n", keyname )); + status = WERR_BADFILE; + goto done; + } + + /* When given a new keyname, we should just create it */ + + status = get_printer_dataex( p->mem_ctx, printer, keyname, valuename, type, data, needed, in_size ); + + if ( !W_ERROR_IS_OK(status) ) + { DEBUG(5, ("value not found, allocating %d\n", *out_size)); /* reply this param doesn't exist */ - if (*out_size) { - if((*data=(uint8 *)talloc_zero(p->mem_ctx, *out_size*sizeof(uint8))) == NULL) - return WERR_NOMEM; - } else { + + if ( *out_size ) + { + if( (*data=(uint8 *)talloc_zero(p->mem_ctx, *out_size*sizeof(uint8))) == NULL ) { + status = WERR_NOMEM; + goto done; + } + } + else *data = NULL; - } - - return WERR_INVALID_PARAM; } if (*needed > *out_size) - return WERR_MORE_DATA; - else - return WERR_OK; + status = WERR_MORE_DATA; + +done: + free_a_printer( &printer, 2 ); + + return status; } /******************************************************************** @@ -7875,34 +7948,59 @@ WERROR _spoolss_getprinterdataex(pipes_struct *p, SPOOL_Q_GETPRINTERDATAEX *q_u, WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u, SPOOL_R_SETPRINTERDATAEX *r_u) { - SPOOL_Q_SETPRINTERDATA q_u_local; - SPOOL_R_SETPRINTERDATA r_u_local; - fstring key; + POLICY_HND *handle = &q_u->handle; + uint32 type = q_u->type; + uint8 *data = q_u->data; + uint32 real_len = q_u->real_len; + + NT_PRINTER_INFO_LEVEL *printer = NULL; + int snum = 0; + WERROR status = WERR_OK; + Printer_entry *Printer = find_printer_index_by_hnd(p, handle); + fstring valuename; + fstring keyname; DEBUG(4,("_spoolss_setprinterdataex\n")); /* From MSDN documentation of SetPrinterDataEx: pass request to SetPrinterData if key is "PrinterDriverData" */ - unistr2_to_ascii(key, &q_u->key, sizeof(key) - 1); + if (!Printer) { + DEBUG(2,("_spoolss_setprinterdata: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); + return WERR_BADFID; + } - if (strcmp(key, SPOOL_PRINTERDATA_KEY) != 0) - return WERR_INVALID_PARAM; - - ZERO_STRUCT(q_u_local); - ZERO_STRUCT(r_u_local); + if ( !get_printer_snum(p,handle, &snum) ) + return WERR_BADFID; + + /* + * Access check : NT returns "access denied" if you make a + * SetPrinterData call without the necessary privildge. + * we were originally returning OK if nothing changed + * which made Win2k issue **a lot** of SetPrinterData + * when connecting to a printer --jerry + */ + + if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) + { + DEBUG(3, ("_spoolss_setprinterdataex: change denied by handle access permissions\n")); + return WERR_ACCESS_DENIED; + } + + status = get_a_printer(&printer, 2, lp_servicename(snum)); + if (!W_ERROR_IS_OK(status)) + return status; + + unistr2_to_ascii( valuename, &q_u->value, sizeof(valuename) - 1); + unistr2_to_ascii( keyname, &q_u->key, sizeof(keyname) - 1); + + /* save the registry data */ - /* make a copy to call _spoolss_setprinterdata() */ + status = set_printer_dataex( printer, keyname, valuename, type, data, real_len ); - memcpy(&q_u_local.handle, &q_u->handle, sizeof(POLICY_HND)); - copy_unistr2(&q_u_local.value, &q_u->value); - q_u_local.type = q_u->type; - q_u_local.max_len = q_u->max_len; - q_u_local.data = q_u->data; - q_u_local.real_len = q_u->real_len; - q_u_local.numeric_data = q_u->numeric_data; - - return _spoolss_setprinterdata(p, &q_u_local, &r_u_local); + free_a_printer(&printer, 2); + + return status; } -- cgit From 409d7ff3f565b853ac70f92d75a911019c0f254e Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sun, 18 Aug 2002 01:02:32 +0000 Subject: fixed up a few comments removed now unused getprinterdata)printer() function (This used to be commit 2d5e4cdc3a4128c6747350d8f66b783218045ce2) --- source3/rpc_server/srv_spoolss_nt.c | 66 ++----------------------------------- 1 file changed, 2 insertions(+), 64 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 02bd0ef45b..b9224dea27 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1713,7 +1713,7 @@ static WERROR get_printer_dataex( TALLOC_CTX *ctx, NT_PRINTER_INFO_LEVEL *printe *type = regval_type( val ); - DEBUG(5,("getprinterdata_printer:allocating %d\n", in_size)); + DEBUG(5,("get_printer_dataex: allocating %d\n", in_size)); size = regval_size( val ); @@ -1729,7 +1729,7 @@ static WERROR get_printer_dataex( TALLOC_CTX *ctx, NT_PRINTER_INFO_LEVEL *printe *needed = size; - DEBUG(5,("getprinterdata_printer:copy done\n")); + DEBUG(5,("get_printer_dataex: copy done\n")); return WERR_OK; } @@ -1842,68 +1842,6 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint return WERR_INVALID_PARAM; } -/******************************************************************** - GetPrinterData on a printer Handle. -********************************************************************/ - -static BOOL getprinterdata_printer(pipes_struct *p, TALLOC_CTX *ctx, POLICY_HND *handle, - fstring value, uint32 *type, - uint8 **data, uint32 *needed, uint32 in_size ) -{ - NT_PRINTER_INFO_LEVEL *printer = NULL; - int snum=0; - Printer_entry *Printer = find_printer_index_by_hnd(p, handle); - REGISTRY_VALUE *val; - int size = 0; - - DEBUG(5,("getprinterdata_printer\n")); - - if ( !Printer ) { - DEBUG(2,("getprinterdata_printer: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); - return False; - } - - if ( !get_printer_snum(p, handle, &snum) ) - return False; - - if ( !W_ERROR_IS_OK(get_a_printer(&printer, 2, lp_servicename(snum))) ) - return False; - - if ( !(val = get_printer_data( printer->info_2, SPOOL_PRINTERDATA_KEY, value)) ) - { - free_a_printer(&printer, 2); - return False; - } - - *type = regval_type( val ); - - - DEBUG(5,("getprinterdata_printer:allocating %d\n", in_size)); - - if (in_size) - { - if ( (*data = (uint8 *)talloc(ctx, in_size * sizeof(uint8))) == NULL ) - return False; - - memset( *data, 0, in_size *sizeof(uint8) ); - - /* copy the min(in_size, len) */ - - size = regval_size( val ); - memcpy( *data, regval_data_p(val), (size > in_size) ? in_size : size*sizeof(uint8) ); - } - else - *data = NULL; - - *needed = size; - - DEBUG(5,("getprinterdata_printer:copy done\n")); - - - free_a_printer(&printer, 2); - return True; -} - /******************************************************************** * spoolss_getprinterdata ********************************************************************/ -- cgit From caf8f949b6876c6c6ebab135a8403ba550e27d6d Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sun, 18 Aug 2002 02:10:07 +0000 Subject: * small formatting fixes * Fix EnumPrinterKey() to enumerate all printer keys ( this will break if we have more than one level deep of printer keys ) (This used to be commit e72184ce13a5645dc1e1a137468207270ed20ed6) --- source3/rpc_server/srv_spoolss_nt.c | 136 +++++++++++++++++++++--------------- 1 file changed, 79 insertions(+), 57 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index b9224dea27..cbafe982be 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -4380,7 +4380,7 @@ static WERROR construct_printer_driver_info_2(DRIVER_INFO_2 *info, int snum, fst * convert an array of ascii string to a UNICODE string ********************************************************************/ -static void init_unistr_array(uint16 **uni_array, fstring *char_array, char *servername) +static uint32 init_unistr_array(uint16 **uni_array, fstring *char_array, char *servername) { int i=0; int j=0; @@ -4393,23 +4393,31 @@ static void init_unistr_array(uint16 **uni_array, fstring *char_array, char *ser while (True) { - if (char_array == NULL) + if ( !char_array ) v = ""; - else { + else + { v = char_array[i]; - if (!v) v = ""; /* hack to handle null lists */ + if (!v) + v = ""; /* hack to handle null lists */ } if ( !strlen(v) ) break; - - slprintf(line, sizeof(line)-1, "\\\\%s%s", servername, v); + /* hack to allow this to be used in places other than when generating + the list of dependent files */ + + if ( servername ) + slprintf( line, sizeof(line)-1, "\\\\%s%s", servername, v ); + else + pstrcpy( line, v ); + DEBUGADD(6,("%d:%s:%d\n", i, line, strlen(line))); - if((tuary=Realloc(*uni_array, (j+strlen(line)+2)*sizeof(uint16))) == NULL) { + if ( (tuary=Realloc(*uni_array, (j+strlen(line)+2)*sizeof(uint16))) == NULL ) { DEBUG(2,("init_unistr_array: Realloc error\n" )); - return; + return 0; } else *uni_array = tuary; @@ -4422,6 +4430,10 @@ static void init_unistr_array(uint16 **uni_array, fstring *char_array, char *ser } DEBUGADD(6,("last one:done\n")); + + /* return size of array in uint16's */ + + return j+1; } /******************************************************************** @@ -4440,29 +4452,29 @@ static void fill_printer_driver_info_3(DRIVER_INFO_3 *info, NT_PRINTER_DRIVER_IN init_unistr( &info->name, driver.info_3->name ); init_unistr( &info->architecture, driver.info_3->environment ); - if (strlen(driver.info_3->driverpath)) { - slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->driverpath); - init_unistr( &info->driverpath, temp ); - } else - init_unistr( &info->driverpath, "" ); + if (strlen(driver.info_3->driverpath)) { + slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->driverpath); + init_unistr( &info->driverpath, temp ); + } else + init_unistr( &info->driverpath, "" ); - if (strlen(driver.info_3->datafile)) { - slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->datafile); - init_unistr( &info->datafile, temp ); - } else - init_unistr( &info->datafile, "" ); + if (strlen(driver.info_3->datafile)) { + slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->datafile); + init_unistr( &info->datafile, temp ); + } else + init_unistr( &info->datafile, "" ); - if (strlen(driver.info_3->configfile)) { - slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->configfile); - init_unistr( &info->configfile, temp ); - } else - init_unistr( &info->configfile, "" ); + if (strlen(driver.info_3->configfile)) { + slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->configfile); + init_unistr( &info->configfile, temp ); + } else + init_unistr( &info->configfile, "" ); - if (strlen(driver.info_3->helpfile)) { - slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->helpfile); - init_unistr( &info->helpfile, temp ); - } else - init_unistr( &info->helpfile, "" ); + if (strlen(driver.info_3->helpfile)) { + slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->helpfile); + init_unistr( &info->helpfile, temp ); + } else + init_unistr( &info->helpfile, "" ); init_unistr( &info->monitorname, driver.info_3->monitorname ); init_unistr( &info->defaultdatatype, driver.info_3->defaultdatatype ); @@ -7976,46 +7988,56 @@ WERROR _spoolss_deleteprinterdataex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDATAEX WERROR _spoolss_enumprinterkey(pipes_struct *p, SPOOL_Q_ENUMPRINTERKEY *q_u, SPOOL_R_ENUMPRINTERKEY *r_u) { - fstring key; - uint16 *enumkeys = NULL; - char* ptr = NULL; - int i; - int printerkey_len = strlen(SPOOL_PRINTERDATA_KEY)+1; - + fstring key; + fstring *keynames; + uint16 *enumkeys = NULL; + int printerkey_len; + int i; + POLICY_HND *handle = &q_u->handle; + Printer_entry *Printer = find_printer_index_by_hnd(p, handle); + NT_PRINTER_DATA *data; + NT_PRINTER_INFO_LEVEL *printer = NULL; + int snum = 0; + WERROR status; + + DEBUG(4,("_spoolss_enumprinterkey\n")); + if (!Printer) { + DEBUG(2,("_spoolss_enumprinterkey: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); + return WERR_BADFID; + } + + if ( !get_printer_snum(p,handle, &snum) ) + return WERR_BADFID; + + status = get_a_printer(&printer, 2, lp_servicename(snum)); + if (!W_ERROR_IS_OK(status)) + return status; + unistr2_to_ascii( key, &q_u->key, sizeof(key)-1 ); - /* - * we only support enumating all keys (key == "") - * Of course, the only key we support is the "PrinterDriverData" - * key - */ + /* enumerating all keys if (key == "") */ + data = &printer->info_2->data; + if ( !strlen( key ) ) { + keynames = talloc_zero( p->mem_ctx, (data->num_keys+1)*sizeof(fstring) ); + + /* make an array of all the keynames */ + + for ( i=0; inum_keys; i++ ) + fstrcpy( keynames[i], data->keys[i].name ); + fstrcpy( keynames[i], "" ); + + printerkey_len = init_unistr_array( &enumkeys, keynames, NULL ); + r_u->needed = printerkey_len*2; if ( q_u->size < r_u->needed ) return WERR_MORE_DATA; - - if ( !(enumkeys = talloc( p->mem_ctx, printerkey_len*2 )) ) { - DEBUG(0,("_spoolss_enumprinterkey: talloc() failed for [%d] bytes!\n", - printerkey_len)); - return WERR_NOMEM; - } - - ptr = SPOOL_PRINTERDATA_KEY; - for ( i=0; i<(printerkey_len-1); i++ ) - { - enumkeys[i] = (uint16)(*ptr); - ptr++; - } - - /* tag of '\0's */ - - enumkeys[i] = 0x0; - + if (!make_spoolss_buffer5(p->mem_ctx, &r_u->keys, printerkey_len, enumkeys)) return WERR_BADFILE; -- cgit From 50d224a898fa130460bba4009e18fb54b1390168 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sun, 18 Aug 2002 11:11:48 +0000 Subject: fix to allow EnumPrinterKey() to enumerate multiple levels of subkeys. Works on the top level. Needs more testing for levels > 1. (This used to be commit 32a7083843f2bf9a3f32027189dbb0ff92927cd4) --- source3/printing/nt_printing.c | 67 +++++++++++++++++++++++++--- source3/registry/reg_frontend.c | 3 +- source3/rpc_server/srv_spoolss_nt.c | 87 +++++++++++++++---------------------- 3 files changed, 99 insertions(+), 58 deletions(-) diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index 3b85fce020..d51d3bc1bb 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -2407,7 +2407,7 @@ int lookup_printerkey( NT_PRINTER_DATA *data, char *name ) for ( i=0; inum_keys; i++ ) { - if ( strcmp(data->keys[i].name, name) == 0 ) { + if ( strequal(data->keys[i].name, name) ) { DEBUG(12,("lookup_printerkey: Found [%s]!\n", name)); key_index = i; break; @@ -2418,6 +2418,66 @@ int lookup_printerkey( NT_PRINTER_DATA *data, char *name ) return key_index; } +/**************************************************************************** + ***************************************************************************/ + +uint32 get_printer_subkeys( NT_PRINTER_DATA *data, char* key, fstring **subkeys ) +{ + int i; + int key_len; + int num_subkeys = 0; + char *p; + fstring *ptr, *subkeys_ptr = NULL; + + if ( !data ) + return 0; + + for ( i=0; inum_keys; i++ ) + { + if ( StrnCaseCmp(data->keys[i].name, key, strlen(key)) == 0 ) + { + /* match sure it is a subkey and not the key itself */ + + key_len = strlen( key ); + if ( strlen(data->keys[i].name) == key_len ) + continue; + + /* get subkey path */ + + p = data->keys[i].name + key_len; + + /* found a match, so allocate space and copy the name */ + + if ( !(ptr = Realloc( subkeys_ptr, (num_subkeys+2)*sizeof(fstring))) ) { + DEBUG(0,("get_printer_subkeys: Realloc failed for [%d] entries!\n", + num_subkeys+1)); + SAFE_FREE( subkeys ); + return 0; + } + + subkeys_ptr = ptr; + + /* copy the subkey name and trim off any trailing + subkeys below it */ + + fstrcpy( subkeys_ptr[num_subkeys], p ); + p = strchr( subkeys_ptr[num_subkeys], '\\' ); + if ( p ) + *p = '\0'; + num_subkeys++; + } + + } + + /* tag of the end */ + + fstrcpy( subkeys_ptr[num_subkeys], "" ); + + *subkeys = subkeys_ptr; + + return num_subkeys; +} + /**************************************************************************** ***************************************************************************/ @@ -2465,11 +2525,8 @@ WERROR delete_printer_data( NT_PRINTER_INFO_LEVEL_2 *p2, char *key, char *value key_index = lookup_printerkey( &p2->data, key ); if ( key_index == -1 ) - key_index = add_new_printer_key( &p2->data, key ); + return WERR_OK; - if ( key_index == -1 ) - return WERR_NOMEM; - regval_ctr_delvalue( &p2->data.keys[key_index].values, value ); DEBUG(8,("delete_printer_data: Removed key => [%s], value => [%s]\n", diff --git a/source3/registry/reg_frontend.c b/source3/registry/reg_frontend.c index 45c1f24001..994f03cf5a 100644 --- a/source3/registry/reg_frontend.c +++ b/source3/registry/reg_frontend.c @@ -332,9 +332,8 @@ REGISTRY_VALUE* regval_ctr_getvalue( REGVAL_CTR *ctr, char *name ) /* search for the value */ for ( i=0; inum_values; i++ ) { - if ( strcmp( ctr->values[i]->valuename, name ) == 0) + if ( strequal( ctr->values[i]->valuename, name ) == 0) return ctr->values[i]; - } return NULL; diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index cbafe982be..7286fef528 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -4402,9 +4402,6 @@ static uint32 init_unistr_array(uint16 **uni_array, fstring *char_array, char *s v = ""; /* hack to handle null lists */ } - if ( !strlen(v) ) - break; - /* hack to allow this to be used in places other than when generating the list of dependent files */ @@ -4421,6 +4418,9 @@ static uint32 init_unistr_array(uint16 **uni_array, fstring *char_array, char *s } else *uni_array = tuary; + if ( !strlen(v) ) + break; + j += (rpcstr_push((*uni_array+j), line, sizeof(uint16)*strlen(line)+2, STR_TERMINATE) / sizeof(uint16)); i++; } @@ -7989,16 +7989,16 @@ WERROR _spoolss_deleteprinterdataex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDATAEX WERROR _spoolss_enumprinterkey(pipes_struct *p, SPOOL_Q_ENUMPRINTERKEY *q_u, SPOOL_R_ENUMPRINTERKEY *r_u) { fstring key; - fstring *keynames; + fstring *keynames = NULL; uint16 *enumkeys = NULL; + int num_keys; int printerkey_len; - int i; POLICY_HND *handle = &q_u->handle; Printer_entry *Printer = find_printer_index_by_hnd(p, handle); NT_PRINTER_DATA *data; NT_PRINTER_INFO_LEVEL *printer = NULL; int snum = 0; - WERROR status; + WERROR status = WERR_BADFILE; DEBUG(4,("_spoolss_enumprinterkey\n")); @@ -8015,56 +8015,42 @@ WERROR _spoolss_enumprinterkey(pipes_struct *p, SPOOL_Q_ENUMPRINTERKEY *q_u, SPO if (!W_ERROR_IS_OK(status)) return status; + /* get the list of subkey names */ + unistr2_to_ascii( key, &q_u->key, sizeof(key)-1 ); + data = &printer->info_2->data; - /* enumerating all keys if (key == "") */ + num_keys = get_printer_subkeys( data, key, &keynames ); - data = &printer->info_2->data; - - if ( !strlen( key ) ) - { - keynames = talloc_zero( p->mem_ctx, (data->num_keys+1)*sizeof(fstring) ); - - /* make an array of all the keynames */ - - for ( i=0; inum_keys; i++ ) - fstrcpy( keynames[i], data->keys[i].name ); - fstrcpy( keynames[i], "" ); - - printerkey_len = init_unistr_array( &enumkeys, keynames, NULL ); - - r_u->needed = printerkey_len*2; - - if ( q_u->size < r_u->needed ) - return WERR_MORE_DATA; - - if (!make_spoolss_buffer5(p->mem_ctx, &r_u->keys, printerkey_len, enumkeys)) - return WERR_BADFILE; - - return WERR_OK; + if ( num_keys == -1 ) { + status = WERR_BADFILE; + goto done; } - - /* The "PrinterDriverData" key should have no subkeys */ - if ( strcmp(key, SPOOL_PRINTERDATA_KEY) == 0 ) - { - uint16 dummy_key = 0; - - r_u->needed = 2; - - if (q_u->size < r_u->needed) - return WERR_MORE_DATA; - - if ( !make_spoolss_buffer5(p->mem_ctx, &r_u->keys, 1, &dummy_key ) ) - return WERR_BADFILE; - - return WERR_OK; + + printerkey_len = init_unistr_array( &enumkeys, keynames, NULL ); + + r_u->needed = printerkey_len*2; + + if ( q_u->size < r_u->needed ) { + status = WERR_MORE_DATA; + goto done; } - - /* The return value for an unknown key is documented in MSDN - EnumPrinterKey description */ - - return WERR_BADFILE; + if (!make_spoolss_buffer5(p->mem_ctx, &r_u->keys, printerkey_len, enumkeys)) { + status = WERR_NOMEM; + goto done; + } + + status = WERR_OK; + + if ( q_u->size < r_u->needed ) + status = WERR_MORE_DATA; + +done: + free_a_printer( &printer, 2 ); + SAFE_FREE( keynames ); + + return status; } /******************************************************************** @@ -8126,7 +8112,6 @@ WERROR _spoolss_enumprinterdataex(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATAEX *q_ return WERR_BADFID; } - /* first get the printer off of disk */ if (!get_printer_snum(p,handle, &snum)) -- cgit From 11fadbee748a64535de47f7508e5764cc04fec70 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sun, 18 Aug 2002 12:33:41 +0000 Subject: fix GetPrinterDataEx() to work with registry subkeys using a depth > 1 (This used to be commit 8799d4f7ccf3b3767c155d29f15cecd142d0db99) --- source3/printing/nt_printing.c | 2 +- source3/registry/reg_frontend.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index d51d3bc1bb..6cfc9aac5a 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -2626,7 +2626,7 @@ static int unpack_values(NT_PRINTER_DATA *printer_data, char *buf, int buflen) * Should only be one '\' in the string returned. */ - str = strchr( string, '\\'); + str = strrchr( string, '\\'); /* Put in "PrinterDriverData" is no key specified */ diff --git a/source3/registry/reg_frontend.c b/source3/registry/reg_frontend.c index 994f03cf5a..f31f675997 100644 --- a/source3/registry/reg_frontend.c +++ b/source3/registry/reg_frontend.c @@ -332,7 +332,7 @@ REGISTRY_VALUE* regval_ctr_getvalue( REGVAL_CTR *ctr, char *name ) /* search for the value */ for ( i=0; inum_values; i++ ) { - if ( strequal( ctr->values[i]->valuename, name ) == 0) + if ( strequal( ctr->values[i]->valuename, name ) ) return ctr->values[i]; } -- cgit From d86b5fff06bdb899e1a197b534e2037792d09dc4 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 18 Aug 2002 15:46:03 +0000 Subject: be a bit more paranoid about not getting duplicate domain names (can happen when the LDAP call to get the flatname for the primary domain fails) (This used to be commit 8d40f34e2f5188f15f414e807d023bfea7bd8c8e) --- source3/nsswitch/winbindd_util.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source3/nsswitch/winbindd_util.c b/source3/nsswitch/winbindd_util.c index daa3abb340..2016c27881 100644 --- a/source3/nsswitch/winbindd_util.c +++ b/source3/nsswitch/winbindd_util.c @@ -83,10 +83,16 @@ static struct winbindd_domain *add_trusted_domain(const char *domain_name, const /* We can't call domain_list() as this function is called from init_domain_list() and we'll get stuck in a loop. */ for (domain = _domain_list; domain; domain = domain->next) { - if (strcmp(domain_name, domain->name) == 0 || - strcmp(domain_name, domain->alt_name) == 0) { + if (strcasecmp(domain_name, domain->name) == 0 || + strcasecmp(domain_name, domain->alt_name) == 0) { return domain; } + if (alt_name && *alt_name) { + if (strcasecmp(alt_name, domain->name) == 0 || + strcasecmp(alt_name, domain->alt_name) == 0) { + return domain; + } + } } /* Create new domain entry */ -- cgit From a897c3ceda9fc2fad22edc2d884e5ecd87995592 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 18 Aug 2002 15:46:41 +0000 Subject: make the LOCK1 test randomise the time for the blocking lock test (This used to be commit 28d325227c9b7ab48a47df006204319b21f7e7f7) --- source3/torture/torture.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 101f4071cb..f3b816c80f 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -829,7 +829,7 @@ static BOOL run_locktest1(int dummy) printf("Testing lock timeouts\n"); t1 = time(NULL); - if (cli_lock(&cli2, fnum3, 0, 4, 10*1000, WRITE_LOCK)) { + if (cli_lock(&cli2, fnum3, 0, 4, (1 + (random() % 20)) * 1000, WRITE_LOCK)) { printf("lock3 succeeded! This is a locking bug\n"); return False; } else { -- cgit From 12be900eceab860ff32d34cdd0cf8da8543c1082 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sun, 18 Aug 2002 16:52:51 +0000 Subject: * Fix DeletePrinterDataEx() to work with arbitrary registry keys * Fix delete_all_printer_data() to accept a key name for partial tree deletions * Fix EnumPrinterKey() to work with subkeys * Fix DeletePrinterKey() to work with ful or partial registry trees * Fix get_printer_subkeys() to return a list of unique keynames ( some were getting added twice due to subkeys names ) * fix a couple of typos for good measure (This used to be commit b6ceb8c2e50b7fcdc614a3b6782db05b60689a85) --- source3/printing/nt_printing.c | 125 +++++++++++++++++++++++++++++------- source3/rpc_server/srv_spoolss_nt.c | 101 ++++++++++++++++++++--------- 2 files changed, 173 insertions(+), 53 deletions(-) diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index 6cfc9aac5a..1761064584 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -2423,11 +2423,12 @@ int lookup_printerkey( NT_PRINTER_DATA *data, char *name ) uint32 get_printer_subkeys( NT_PRINTER_DATA *data, char* key, fstring **subkeys ) { - int i; + int i, j; int key_len; int num_subkeys = 0; char *p; fstring *ptr, *subkeys_ptr = NULL; + fstring subkeyname; if ( !data ) return 0; @@ -2445,7 +2446,22 @@ uint32 get_printer_subkeys( NT_PRINTER_DATA *data, char* key, fstring **subkeys /* get subkey path */ p = data->keys[i].name + key_len; + if ( *p == '\\' ) + p++; + fstrcpy( subkeyname, p ); + if ( (p = strchr( subkeyname, '\\' )) ) + *p = '\0'; + + /* don't add a key more than once */ + + for ( j=0; jdata; + empty_slot = data->num_keys; + + if ( !key ) + return WERR_INVALID_PARAM; - for ( i=0; inum_keys; i++ ) + /* remove all keys */ + + if ( !strlen(key) ) { - DEBUG(8,("delete_all_printer_data: Removed all Printer Data from key [%s]\n", - data->keys[i].name)); + for ( i=0; inum_keys; i++ ) + { + DEBUG(8,("delete_all_printer_data: Removed all Printer Data from key [%s]\n", + data->keys[i].name)); - SAFE_FREE( data->keys[i].name ); - regval_ctr_destroy( &data->keys[i].values ); - } + SAFE_FREE( data->keys[i].name ); + regval_ctr_destroy( &data->keys[i].values ); + } - SAFE_FREE( data->keys ); + DEBUG(8,("delete_all_printer_data: Removed all Printer Data from printer [%s]\n", + p2->printername )); + + SAFE_FREE( data->keys ); + ZERO_STRUCTP( data ); - DEBUG(8,("delete_all_printer_data: Removed all Printer Data from printer [%s]\n", - p2->printername )); + return WERR_OK; + } + + /* remove a specific key (and all subkeys) */ - ZERO_STRUCTP( data ); + for ( i=0; inum_keys; i++ ) + { + if ( StrnCaseCmp( data->keys[i].name, key, strlen(key)) == 0 ) + { + DEBUG(8,("delete_all_printer_data: Removed all Printer Data from key [%s]\n", + data->keys[i].name)); + + SAFE_FREE( data->keys[i].name ); + regval_ctr_destroy( &data->keys[i].values ); + + /* mark the slot as empty */ + + ZERO_STRUCTP( &data->keys[i] ); + } + } + + /* find the first empty slot */ + + for ( i=0; inum_keys; i++ ) { + if ( !data->keys[i].name ) { + empty_slot = i; + removed_keys++; + break; + } + } + + if ( i == data->num_keys ) + /* nothing was removed */ + return WERR_INVALID_PARAM; + + /* move everything down */ - return result; + for ( i=empty_slot+1; inum_keys; i++ ) { + if ( data->keys[i].name ) { + memcpy( &data->keys[empty_slot], &data->keys[i], sizeof(NT_PRINTER_KEY) ); + ZERO_STRUCTP( &data->keys[i] ); + empty_slot++; + removed_keys++; + } + } + + /* update count */ + + data->num_keys -= removed_keys; + + /* sanity check to see if anything is left */ + + if ( !data->num_keys ) + { + DEBUG(8,("delete_all_printer_data: No keys left for printer [%s]\n", p2->printername )); + + SAFE_FREE( data->keys ); + ZERO_STRUCTP( data ); + } + + return WERR_OK; } /**************************************************************************** @@ -2655,7 +2732,7 @@ static int unpack_values(NT_PRINTER_DATA *printer_data, char *buf, int buflen) regval_ctr_addvalue( &printer_data->keys[key_index].values, valuename, type, data_p, size ); - DEBUG(8,("specific: [%s\\%s], len: %d\n", keyname, valuename, size)); + DEBUG(8,("specific: [%s:%s], len: %d\n", keyname, valuename, size)); } return len; @@ -3103,7 +3180,7 @@ static BOOL set_driver_init_2( NT_PRINTER_INFO_LEVEL_2 *info_ptr ) * should not be any (if there are delete them). */ - delete_all_printer_data( info_ptr ); + delete_all_printer_data( info_ptr, "" ); slprintf(key, sizeof(key)-1, "%s%s", DRIVER_INIT_PREFIX, info_ptr->drivername); diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 7286fef528..2cf73d7118 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1297,7 +1297,7 @@ Can't find printer handle we created for printer %s\n", name )); printer_default->access_required = PRINTER_ACCESS_USE; DEBUG(4,("Setting printer access = %s\n", (printer_default->access_required == PRINTER_ACCESS_ADMINISTER) - ? "PRINTER_ACCESS_ADMINSTER" : "PRINTER_ACCESS_USE" )); + ? "PRINTER_ACCESS_ADMINISTER" : "PRINTER_ACCESS_USE" )); Printer->access_granted = printer_default->access_required; @@ -7211,7 +7211,7 @@ WERROR _spoolss_deleteprinterdata(pipes_struct *p, SPOOL_Q_DELETEPRINTERDATA *q_ unistr2_to_ascii( valuename, value, sizeof(valuename)-1 ); status = delete_printer_data( printer->info_2, SPOOL_PRINTERDATA_KEY, valuename ); - if ( NT_STATUS_IS_OK(status) ) + if ( W_ERROR_IS_OK(status) ) status = mod_a_printer(*printer, 2); free_a_printer(&printer, 2); @@ -7960,26 +7960,46 @@ WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u, WERROR _spoolss_deleteprinterdataex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDATAEX *q_u, SPOOL_R_DELETEPRINTERDATAEX *r_u) { - SPOOL_Q_DELETEPRINTERDATA q_u_local; - SPOOL_R_DELETEPRINTERDATA r_u_local; - fstring key; - - /* From MSDN documentation of SetPrinterDataEx: pass request to - SetPrinterData if key is "PrinterDriverData" */ - - unistr2_to_ascii(key, &q_u->keyname, sizeof(key) - 1); + POLICY_HND *handle = &q_u->handle; + UNISTR2 *value = &q_u->valuename; + UNISTR2 *key = &q_u->keyname; - if (strcmp(key, SPOOL_PRINTERDATA_KEY) != 0) - return WERR_INVALID_PARAM; + NT_PRINTER_INFO_LEVEL *printer = NULL; + int snum=0; + WERROR status = WERR_OK; + Printer_entry *Printer=find_printer_index_by_hnd(p, handle); + pstring valuename, keyname; - memcpy(&q_u_local.handle, &q_u->handle, sizeof(POLICY_HND)); - copy_unistr2(&q_u_local.valuename, &q_u->valuename); + DEBUG(5,("spoolss_deleteprinterdataex\n")); - return _spoolss_deleteprinterdata( p, &q_u_local, &r_u_local ); -} + if (!Printer) { + DEBUG(2,("_spoolss_deleteprinterdata: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); + return WERR_BADFID; + } + if (!get_printer_snum(p, handle, &snum)) + return WERR_BADFID; + + if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) { + DEBUG(3, ("_spoolss_deleteprinterdataex: printer properties change denied by handle\n")); + return WERR_ACCESS_DENIED; + } + status = get_a_printer(&printer, 2, lp_servicename(snum)); + if (!W_ERROR_IS_OK(status)) + return status; + + unistr2_to_ascii( valuename, value, sizeof(valuename)-1 ); + unistr2_to_ascii( keyname, key, sizeof(keyname)-1 ); + + status = delete_printer_data( printer->info_2, keyname, valuename ); + if ( W_ERROR_IS_OK(status) ) + status = mod_a_printer(*printer, 2); + + free_a_printer(&printer, 2); + return status; +} /******************************************************************** * spoolss_enumprinterkey @@ -8059,25 +8079,48 @@ done: WERROR _spoolss_deleteprinterkey(pipes_struct *p, SPOOL_Q_DELETEPRINTERKEY *q_u, SPOOL_R_DELETEPRINTERKEY *r_u) { - Printer_entry *Printer = find_printer_index_by_hnd(p, &q_u->handle); - fstring key; + POLICY_HND *handle = &q_u->handle; + Printer_entry *Printer = find_printer_index_by_hnd(p, &q_u->handle); + fstring key; + NT_PRINTER_INFO_LEVEL *printer = NULL; + int snum=0; + WERROR status; + + DEBUG(5,("spoolss_deleteprinterkey\n")); if (!Printer) { - DEBUG(2,("_spoolss_deleteprinterkey: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(&q_u->handle))); + DEBUG(2,("_spoolss_deleteprinterkey: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); return WERR_BADFID; } - - unistr2_to_ascii(key, &q_u->keyname, sizeof(key) - 1); - if (strcmp(key, SPOOL_PRINTERDATA_KEY) != 0) - return WERR_INVALID_PARAM; + /* if keyname == NULL, return error */ + + if ( !q_u->keyname.buffer ) + return WERR_INVALID_PARAM; - /* - * this is what 2k returns when you try to delete the "PrinterDriverData" - * key - */ - - return WERR_ACCESS_DENIED; + if (!get_printer_snum(p, handle, &snum)) + return WERR_BADFID; + + if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) { + DEBUG(3, ("_spoolss_deleteprinterkey: printer properties change denied by handle\n")); + return WERR_ACCESS_DENIED; + } + + status = get_a_printer(&printer, 2, lp_servicename(snum)); + if (!W_ERROR_IS_OK(status)) + return status; + + /* delete the key and all subneys */ + + unistr2_to_ascii(key, &q_u->keyname, sizeof(key) - 1); + + status = delete_all_printer_data( printer->info_2, key ); + if ( W_ERROR_IS_OK(status) ) + status = mod_a_printer(*printer, 2); + + free_a_printer( &printer, 2 ); + + return status; } -- cgit From 789e6e6b4e2aea9802d67fdb9dfcd7c283ef811d Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 18 Aug 2002 18:04:00 +0000 Subject: A new utility to test VFS system and modules Just now it is acommandline tool like smbclient and rpcclient that is able to perform operations on the file system passing through the vfs layer It is not complete yet, some functions have simply faked up data, but module loading works yet and basic operations too. Thanks to Eric Lorimer for helping out with the initial setup. Simo. (This used to be commit 42ae5eb82657d4905bdaf247286f95599380afbb) --- source3/Makefile.in | 62 ++-- source3/configure | 4 +- source3/configure.in | 2 +- source3/smbd/vfs.c | 2 +- source3/torture/cmd_vfs.c | 872 ++++++++++++++++++++++++++++++++++++++++++++++ source3/torture/vfstest.c | 551 +++++++++++++++++++++++++++++ source3/torture/vfstest.h | 45 +++ 7 files changed, 1508 insertions(+), 30 deletions(-) create mode 100644 source3/torture/cmd_vfs.c create mode 100644 source3/torture/vfstest.c create mode 100644 source3/torture/vfstest.h diff --git a/source3/Makefile.in b/source3/Makefile.in index 2db6d55011..656557dd51 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -106,7 +106,7 @@ LPROGS = $(WINBIND_PAM_PROGS) $(WINBIND_LPROGS) PROGS = $(PROGS1) $(PROGS2) $(MPROGS) bin/nmblookup bin/pdbedit bin/smbgroupedit TORTURE_PROGS = bin/smbtorture bin/msgtest bin/masktest bin/locktest \ - bin/locktest2 bin/nsstest + bin/locktest2 bin/nsstest bin/vfstest SHLIBS = @LIBSMBCLIENT@ SCRIPTS = $(srcdir)/script/smbtar $(srcdir)/script/addtosmbpass $(srcdir)/script/convert_smbpasswd \ @@ -236,21 +236,32 @@ AUTH_OBJ = auth/auth.o auth/auth_sam.o auth/auth_server.o auth/auth_domain.o \ MANGLE_OBJ = smbd/mangle.o smbd/mangle_hash.o smbd/mangle_map.o smbd/mangle_hash2.o -SMBD_OBJ1 = smbd/server.o smbd/files.o smbd/chgpasswd.o smbd/connection.o \ - smbd/utmp.o smbd/session.o \ - smbd/dfree.o smbd/dir.o smbd/password.o smbd/conn.o smbd/fileio.o \ - smbd/ipc.o smbd/lanman.o smbd/negprot.o \ - smbd/message.o smbd/nttrans.o smbd/pipes.o \ - smbd/reply.o smbd/sesssetup.o smbd/trans2.o smbd/uid.o \ - smbd/dosmode.o smbd/filename.o smbd/open.o smbd/close.o \ - smbd/blocking.o smbd/sec_ctx.o \ - smbd/vfs.o smbd/vfs-wrap.o smbd/statcache.o \ - smbd/posix_acls.o lib/sysacls.o \ - smbd/process.o smbd/service.o smbd/error.o \ - printing/printfsp.o lib/util_seaccess.o smbd/srvstr.o \ - smbd/build_options.o \ - smbd/change_trust_pw.o \ - $(MANGLE_OBJ) +SMBD_OBJ_MAIN = smbd/server.o + +SMBD_OBJ_SRV = smbd/files.o smbd/chgpasswd.o smbd/connection.o \ + smbd/utmp.o smbd/session.o \ + smbd/dfree.o smbd/dir.o smbd/password.o smbd/conn.o smbd/fileio.o \ + smbd/ipc.o smbd/lanman.o smbd/negprot.o \ + smbd/message.o smbd/nttrans.o smbd/pipes.o \ + smbd/reply.o smbd/sesssetup.o smbd/trans2.o smbd/uid.o \ + smbd/dosmode.o smbd/filename.o smbd/open.o smbd/close.o \ + smbd/blocking.o smbd/sec_ctx.o \ + smbd/vfs.o smbd/vfs-wrap.o smbd/statcache.o \ + smbd/posix_acls.o lib/sysacls.o \ + smbd/process.o smbd/service.o smbd/error.o \ + printing/printfsp.o lib/util_seaccess.o smbd/srvstr.o \ + smbd/build_options.o \ + smbd/change_trust_pw.o \ + $(MANGLE_OBJ) + +SMBD_OBJ_BASE = $(SMBD_OBJ_SRV) $(MSDFS_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) \ + $(RPC_SERVER_OBJ) $(RPC_PARSE_OBJ) $(SECRETS_OBJ) \ + $(LOCKING_OBJ) $(PASSDB_OBJ) $(PRINTING_OBJ) $(PROFILE_OBJ) \ + $(LIB_OBJ) $(PRINTBACKEND_OBJ) $(QUOTAOBJS) $(OPLOCK_OBJ) \ + $(NOTIFY_OBJ) $(GROUPDB_OBJ) $(AUTH_OBJ) \ + $(LIBMSRPC_OBJ) $(LIBMSRPC_SERVER_OBJ) \ + $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \ + $(LIB_SMBD_OBJ) PRINTING_OBJ = printing/pcap.o printing/print_svid.o \ @@ -261,15 +272,7 @@ PRINTBACKEND_OBJ = printing/printing.o printing/nt_printing.o printing/notify.o MSDFS_OBJ = msdfs/msdfs.o -SMBD_OBJ = $(SMBD_OBJ1) $(MSDFS_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) \ - $(RPC_SERVER_OBJ) $(RPC_PARSE_OBJ) $(SECRETS_OBJ) \ - $(LOCKING_OBJ) $(PASSDB_OBJ) $(PRINTING_OBJ) $(PROFILE_OBJ) \ - $(LIB_OBJ) $(PRINTBACKEND_OBJ) $(QUOTAOBJS) $(OPLOCK_OBJ) \ - $(NOTIFY_OBJ) $(GROUPDB_OBJ) $(AUTH_OBJ) \ - $(LIBMSRPC_OBJ) $(LIBMSRPC_SERVER_OBJ) \ - $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \ - $(LIB_SMBD_OBJ) - +SMBD_OBJ = $(SMBD_OBJ_MAIN) $(SMBD_OBJ_BASE) NMBD_OBJ1 = nmbd/asyncdns.o nmbd/nmbd.o nmbd/nmbd_become_dmb.o \ nmbd/nmbd_become_lmb.o nmbd/nmbd_browserdb.o \ @@ -414,6 +417,8 @@ LOCKTEST_OBJ = torture/locktest.o $(LOCKING_OBJ) $(LIBSMB_OBJ) $(PARAM_OBJ) \ NSSTEST_OBJ = torture/nsstest.o $(LIBSMB_OBJ) $(PARAM_OBJ) \ $(UBIQX_OBJ) $(LIB_OBJ) +VFSTEST_OBJ = torture/cmd_vfs.o torture/vfstest.o $(SMBD_OBJ_BASE) $(READLINE_OBJ) + LOCKTEST2_OBJ = torture/locktest2.o $(LOCKING_OBJ) $(LIBSMB_OBJ) $(PARAM_OBJ) \ $(UBIQX_OBJ) $(LIB_OBJ) @@ -438,7 +443,8 @@ DEBUG2HTML_OBJ = utils/debug2html.o ubiqx/debugparse.o SMBFILTER_OBJ = utils/smbfilter.o $(LIBSMB_OBJ) $(PARAM_OBJ) \ $(UBIQX_OBJ) $(LIB_OBJ) -PROTO_OBJ = $(SMBD_OBJ1) $(NMBD_OBJ1) $(SWAT_OBJ1) $(LIB_OBJ) $(LIBSMB_OBJ) \ +PROTO_OBJ = $(SMBD_OBJ_MAIN) \ + $(SMBD_OBJ_SRV) $(NMBD_OBJ1) $(SWAT_OBJ1) $(LIB_OBJ) $(LIBSMB_OBJ) \ $(SMBWRAPPER_OBJ1) $(SMBTORTURE_OBJ1) $(RPCCLIENT_OBJ1) \ $(LIBMSRPC_OBJ) $(LIBMSRPC_SERVER_OBJ) $(RPC_CLIENT_OBJ) \ $(RPC_SERVER_OBJ) $(RPC_PARSE_OBJ) \ @@ -719,6 +725,10 @@ bin/nsstest: $(NSSTEST_OBJ) bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(NSSTEST_OBJ) $(LDFLAGS) $(LIBS) +bin/vfstest: $(VFSTEST_OBJ) bin/.dummy + @echo Linking $@ + @$(CC) $(FLAGS) -o $@ $(VFSTEST_OBJ) $(LDFLAGS) $(TERMLDFLAGS) $(TERMLIBS) $(DYNEXP) $(LIBS) + bin/locktest2: $(LOCKTEST2_OBJ) bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(LOCKTEST2_OBJ) $(LDFLAGS) $(LIBS) diff --git a/source3/configure b/source3/configure index 06694c8e64..cec3161ccc 100755 --- a/source3/configure +++ b/source3/configure @@ -14082,7 +14082,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff --git a/source3/configure.in b/source3/configure.in index db34c266c5..e907697d25 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2797,7 +2797,7 @@ AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"], builddir=`pwd` AC_SUBST(builddir) -AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile) +AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile) ################################################# # Print very concise instructions on building/use diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index a2291eba08..686499288d 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -138,7 +138,7 @@ static void vfs_init_default(connection_struct *conn) initialise custom vfs hooks ****************************************************************************/ -static BOOL vfs_init_custom(connection_struct *conn, const char *vfs_object) +BOOL vfs_init_custom(connection_struct *conn, const char *vfs_object) { int vfs_version = -1; vfs_op_tuple *ops, *(*init_fptr)(int *, const struct vfs_ops *, struct smb_vfs_handle_struct *); diff --git a/source3/torture/cmd_vfs.c b/source3/torture/cmd_vfs.c new file mode 100644 index 0000000000..3657d3f70d --- /dev/null +++ b/source3/torture/cmd_vfs.c @@ -0,0 +1,872 @@ +/* + Unix SMB/CIFS implementation. + VFS module functions + + Copyright (C) Simo Sorce 2002 + Copyright (C) Eric Lorimer 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 "vfstest.h" + +static char *null_string = ""; + +static NTSTATUS cmd_load_module(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + struct smb_vfs_handle_struct *handle; + + if (argc != 2) { + printf("Usage: load \n"); + return NT_STATUS_OK; + } + vfs->conn->vfs_private = NULL; + handle = (struct smb_vfs_handle_struct *) smb_xmalloc(sizeof(smb_vfs_handle_struct)); + handle->handle = NULL; + DLIST_ADD(vfs->conn->vfs_private, handle) + if (!vfs_init_custom(vfs->conn, argv[1])) { + DEBUG(0, ("load: error=-1 (vfs_init_custom failed for %s)\n", argv[1])); + return NT_STATUS_UNSUCCESSFUL; + } + printf("load: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_populate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char c; + size_t size; + if (argc != 3) { + printf("Usage: populate \n"); + return NT_STATUS_OK; + } + c = argv[1][0]; + size = atoi(argv[2]); + vfs->data = (char *)talloc(mem_ctx, size); + if (vfs->data == NULL) { + printf("read: error=-1 (not enough memory)"); + return NT_STATUS_UNSUCCESSFUL; + } + memset(vfs->data, c, size); + vfs->data_size = size; + return NT_STATUS_OK; +} + +static NTSTATUS cmd_show_data(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + size_t offset; + size_t len; + if (argc != 1 && argc != 3) { + printf("Usage: showdata [ ]\n"); + return NT_STATUS_OK; + } + if (vfs->data == NULL || vfs->data_size == 0) { + printf("show_data: error=-1 (buffer empty)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (argc == 3) { + offset = atoi(argv[1]); + len = atoi(argv[2]); + } else { + offset = 0; + len = vfs->data_size; + } + if ((offset + len) > vfs->data_size) { + printf("show_data: error=-1 (not enough data in buffer)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + dump_data(0, (char *)(vfs->data) + offset, len); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_connect(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + vfs->conn->vfs_ops.connect(vfs->conn, lp_servicename(vfs->conn->service), "vfstest"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_disconnect(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + vfs->conn->vfs_ops.disconnect(vfs->conn); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_disk_free(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + SMB_BIG_UINT diskfree, bsize, dfree, dsize; + if (argc != 2) { + printf("Usage: disk_free \n"); + return NT_STATUS_OK; + } + + diskfree = vfs->conn->vfs_ops.disk_free(vfs->conn, argv[1], False, &bsize, &dfree, &dsize); + printf("disk_free: %ld, bsize = %ld, dfree = %ld, dsize = %ld\n", diskfree, bsize, dfree, dsize); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_opendir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 2) { + printf("Usage: opendir \n"); + return NT_STATUS_OK; + } + + vfs->currentdir = vfs->conn->vfs_ops.opendir(vfs->conn, argv[1]); + if (vfs->currentdir == NULL) { + printf("opendir error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("opendir: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_readdir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + struct dirent *dent; + + if (vfs->currentdir == NULL) { + printf("readdir: error=-1 (no open directory)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + dent = vfs->conn->vfs_ops.readdir(vfs->conn, vfs->currentdir); + if (dent == NULL) { + printf("readdir: NULL\n"); + return NT_STATUS_OK; + } + + printf("readdir: %s\n", dent->d_name); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_mkdir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 2) { + printf("Usage: mkdir \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.mkdir(vfs->conn, argv[1], 00755) == -1) { + printf("mkdir error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("mkdir: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_closedir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret; + + if (vfs->currentdir == NULL) { + printf("closedir: failure (no directory open)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + ret = vfs->conn->vfs_ops.closedir(vfs->conn, vfs->currentdir); + if (ret == -1) { + printf("closedir failure: %s\n", strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("closedir: ok\n"); + vfs->currentdir = NULL; + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int flags, mode, fd; + + flags = O_RDWR | O_CREAT; + mode = 00400; + + if (argc != 2) { + printf("Usage: open \n"); + return NT_STATUS_OK; + } + + fd = vfs->conn->vfs_ops.open(vfs->conn, argv[1], flags, mode); + if (fd == -1) { + printf("open: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + vfs->files[fd] = (struct files_struct *)malloc(sizeof(struct files_struct)); + vfs->files[fd]->fsp_name = strdup(argv[1]); + vfs->files[fd]->fd = fd; + vfs->files[fd]->conn = vfs->conn; + printf("open: fd=%d\n", fd); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_pathfunc(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret = -1; + struct func_entry *fptr; + struct func_entry func_table[] = { + { "rmdir", vfs->conn->vfs_ops.rmdir }, + { "unlink", vfs->conn->vfs_ops.unlink }, + { "chdir", vfs->conn->vfs_ops.chdir }, + { NULL } + }; + + if (argc != 2) { + printf("Usage: %s \n", argv[0]); + return NT_STATUS_OK; + } + + for (fptr=func_table; *fptr->name; fptr++) + if (strcmp(fptr->name, argv[0]) == 0 ) + ret = fptr->fn(vfs->conn, argv[1]); + + if (ret == -1) { + printf("%s: error=%d (%s)\n", argv[0], errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("%s: ok\n", argv[0]); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_close(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd, ret; + + if (argc != 2) { + printf("Usage: close \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + if (vfs->files[fd] == NULL) { + printf("close: error=-1 (invalid file descriptor)\n"); + return NT_STATUS_OK; + } + + ret = vfs->conn->vfs_ops.close(vfs->files[fd], fd); + if (ret == -1 ) + printf("close: error=%d (%s)\n", errno, strerror(errno)); + else + printf("close: ok\n"); + + SAFE_FREE(vfs->files[fd]->fsp_name); + SAFE_FREE(vfs->files[fd]); + vfs->files[fd] = NULL; + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_read(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + size_t size, rsize; + + if (argc != 3) { + printf("Usage: read \n"); + return NT_STATUS_OK; + } + + /* do some error checking on these */ + fd = atoi(argv[1]); + size = atoi(argv[2]); + vfs->data = (char *)talloc(mem_ctx, size); + if (vfs->data == NULL) { + printf("read: error=-1 (not enough memory)"); + return NT_STATUS_UNSUCCESSFUL; + } + vfs->data_size = size; + + rsize = 0; + while (rsize < size) { + int isize; + isize = vfs->conn->vfs_ops.read(vfs->files[fd], fd, vfs->data, size); + if (isize == -1) { + printf("read: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + rsize += isize; + } + + printf("read: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_write(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd, size, wsize; + + if (argc != 3) { + printf("Usage: write \n"); + return NT_STATUS_OK; + } + + /* some error checking should go here */ + fd = atoi(argv[1]); + size = atoi(argv[2]); + if (vfs->data == NULL) { + printf("write: error=-1 (buffer empty, please populate it before writing)"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (vfs->data_size < size) { + printf("write: error=-1 (buffer too small, please put some more data in)"); + return NT_STATUS_UNSUCCESSFUL; + } + + wsize = vfs->conn->vfs_ops.write(vfs->files[fd], fd, vfs->data, size); + + if (wsize == -1) { + printf("write: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("write: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_lseek(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd, offset, whence; + SMB_OFF_T pos; + + if (argc != 4) { + printf("Usage: lseek \n...where whence is 1 => SEEK_SET, 2 => SEEK_CUR, 3 => SEEK_END\n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + offset = atoi(argv[2]); + whence = atoi(argv[3]); + switch (whence) { + case 1: whence = SEEK_SET; break; + case 2: whence = SEEK_CUR; break; + default: whence = SEEK_END; + } + + pos = vfs->conn->vfs_ops.lseek(vfs->files[fd], fd, offset, whence); + if (pos == (SMB_OFF_T)-1) { + printf("lseek: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("lseek: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_rename(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret; + if (argc != 3) { + printf("Usage: rename \n"); + return NT_STATUS_OK; + } + + ret = vfs->conn->vfs_ops.rename(vfs->conn, argv[1], argv[2]); + if (ret == -1) { + printf("rename: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("rename: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fsync(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret, fd; + if (argc != 2) { + printf("Usage: fsync \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + ret = vfs->conn->vfs_ops.fsync(vfs->files[fd], fd); + if (ret == -1) { + printf("fsync: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("fsync: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_stat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret; + char *user; + char *group; + struct passwd *pwd; + struct group *grp; + SMB_STRUCT_STAT st; + + if (argc != 2) { + printf("Usage: stat \n"); + return NT_STATUS_OK; + } + + ret = vfs->conn->vfs_ops.stat(vfs->conn, argv[1], &st); + if (ret == -1) { + printf("stat: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + pwd = sys_getpwuid(st.st_uid); + if (pwd != NULL) user = strdup(pwd->pw_name); + else user = null_string; + grp = sys_getgrgid(st.st_gid); + if (grp != NULL) group = strdup(grp->gr_name); + else group = null_string; + + printf("stat: ok\n"); + printf(" File: %s", argv[1]); + if (S_ISREG(st.st_mode)) printf(" Regular File\n"); + else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); + else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); + else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); + else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); + else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); + else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); + printf(" Size: %10d", st.st_size); + printf(" Blocks: %9d", st.st_blocks); + printf(" IO Block: %d\n", st.st_blksize); + printf(" Device: 0x%.10x", st.st_dev); + printf(" Inode: %10d", st.st_ino); + printf(" Links: %10d\n", st.st_nlink); + printf(" Access: %05d ", (st.st_mode) & 0x7fff); + printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); + printf(" Access: %s", ctime(&(st.st_atime))); + printf(" Modify: %s", ctime(&(st.st_mtime))); + printf(" Change: %s", ctime(&(st.st_ctime))); + if (user != null_string) SAFE_FREE(user); + if (group!= null_string) SAFE_FREE(group); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + char *user; + char *group; + struct passwd *pwd; + struct group *grp; + SMB_STRUCT_STAT st; + + if (argc != 2) { + printf("Usage: fstat \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + if (fd < 0 || fd > 1024) { + printf("fstat: error=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->files[fd] == NULL) { + printf("fstat: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.fstat(vfs->files[fd], fd, &st) == -1) { + printf("fstat: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + pwd = sys_getpwuid(st.st_uid); + if (pwd != NULL) user = strdup(pwd->pw_name); + else user = null_string; + grp = sys_getgrgid(st.st_gid); + if (grp != NULL) group = strdup(grp->gr_name); + else group = null_string; + + printf("fstat: ok\n"); + if (S_ISREG(st.st_mode)) printf(" Regular File\n"); + else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); + else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); + else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); + else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); + else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); + else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); + printf(" Size: %10d", st.st_size); + printf(" Blocks: %9d", st.st_blocks); + printf(" IO Block: %d\n", st.st_blksize); + printf(" Device: 0x%10x", st.st_dev); + printf(" Inode: %10d", st.st_ino); + printf(" Links: %10d\n", st.st_nlink); + printf(" Access: %05d ", (st.st_mode) & 0x7fff); + printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); + printf(" Access: %s", ctime(&(st.st_atime))); + printf(" Modify: %s", ctime(&(st.st_mtime))); + printf(" Change: %s", ctime(&(st.st_ctime))); + if (user != null_string) SAFE_FREE(user); + if (group!= null_string) SAFE_FREE(group); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_lstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char *user; + char *group; + struct passwd *pwd; + struct group *grp; + SMB_STRUCT_STAT st; + + if (argc != 2) { + printf("Usage: lstat \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.lstat(vfs->conn, argv[1], &st) == -1) { + printf("lstat: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + pwd = sys_getpwuid(st.st_uid); + if (pwd != NULL) user = strdup(pwd->pw_name); + else user = null_string; + grp = sys_getgrgid(st.st_gid); + if (grp != NULL) group = strdup(grp->gr_name); + else group = null_string; + + printf("lstat: ok\n"); + if (S_ISREG(st.st_mode)) printf(" Regular File\n"); + else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); + else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); + else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); + else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); + else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); + else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); + printf(" Size: %10d", st.st_size); + printf(" Blocks: %9d", st.st_blocks); + printf(" IO Block: %d\n", st.st_blksize); + printf(" Device: 0x%10x", st.st_dev); + printf(" Inode: %10d", st.st_ino); + printf(" Links: %10d\n", st.st_nlink); + printf(" Access: %05d ", (st.st_mode) & 0x7fff); + printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); + printf(" Access: %s", ctime(&(st.st_atime))); + printf(" Modify: %s", ctime(&(st.st_mtime))); + printf(" Change: %s", ctime(&(st.st_ctime))); + if (user != null_string) SAFE_FREE(user); + if (group!= null_string) SAFE_FREE(group); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_chmod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + mode_t mode; + if (argc != 3) { + printf("Usage: chmod \n"); + return NT_STATUS_OK; + } + + mode = atoi(argv[2]); + if (vfs->conn->vfs_ops.chmod(vfs->conn, argv[1], mode) == -1) { + printf("chmod: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("chmod: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fchmod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + mode_t mode; + if (argc != 3) { + printf("Usage: fchmod \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + mode = atoi(argv[2]); + if (fd < 0 || fd > 1024) { + printf("fchmod: error=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->files[fd] == NULL) { + printf("fchmod: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.fchmod(vfs->files[fd], fd, mode) == -1) { + printf("fchmod: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("fchmod: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_chown(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + uid_t uid; + gid_t gid; + if (argc != 4) { + printf("Usage: chown \n"); + return NT_STATUS_OK; + } + + uid = atoi(argv[2]); + gid = atoi(argv[3]); + if (vfs->conn->vfs_ops.chown(vfs->conn, argv[1], uid, gid) == -1) { + printf("chown: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("chown: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fchown(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + uid_t uid; + gid_t gid; + int fd; + if (argc != 4) { + printf("Usage: fchown \n"); + return NT_STATUS_OK; + } + + uid = atoi(argv[2]); + gid = atoi(argv[3]); + fd = atoi(argv[1]); + if (fd < 0 || fd > 1024) { + printf("fchown: faliure=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->files[fd] == NULL) { + printf("fchown: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->conn->vfs_ops.fchown(vfs->files[fd], fd, uid, gid) == -1) { + printf("fchown error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("fchown: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_getwd(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char buf[PATH_MAX]; + if (vfs->conn->vfs_ops.getwd(vfs->conn, buf) == NULL) { + printf("getwd: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("getwd: %s\n", buf); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_utime(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + struct utimbuf times; + if (argc != 4) { + printf("Usage: utime \n"); + return NT_STATUS_OK; + } + times.actime = atoi(argv[2]); + times.modtime = atoi(argv[3]); + if (vfs->conn->vfs_ops.utime(vfs->conn, argv[1], ×) != 0) { + printf("utime: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("utime: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_ftruncate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + SMB_OFF_T off; + if (argc != 3) { + printf("Usage: ftruncate \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + off = atoi(argv[2]); + if (fd < 0 || fd > 1024) { + printf("ftruncate: error=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->files[fd] == NULL) { + printf("ftruncate: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.ftruncate(vfs->files[fd], fd, off) == -1) { + printf("ftruncate: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("ftruncate: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_lock(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + printf("lock: Not yet implemented!\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_symlink(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 3) { + printf("Usage: symlink \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.symlink(vfs->conn, argv[1], argv[2]) == -1) { + printf("symlink: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("symlink: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_readlink(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char buffer[PATH_MAX]; + int size; + + if (argc != 2) { + printf("Usage: readlink \n"); + return NT_STATUS_OK; + } + + if ((size = vfs->conn->vfs_ops.readlink(vfs->conn, argv[1], buffer, PATH_MAX)) == -1) { + printf("readlink: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + buffer[size] = '\0'; + printf("readlink: %s\n", buffer); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_link(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 3) { + printf("Usage: link \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.link(vfs->conn, argv[1], argv[2]) == -1) { + printf("link: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("link: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_mknod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + printf("lock: Not yet implemented!\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_realpath(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char respath[PATH_MAX]; + + if (argc != 2) { + printf("Usage: realpath \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.realpath(vfs->conn, argv[1], respath) == NULL) { + printf("realpath: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("realpath: ok\n"); + return NT_STATUS_OK; +} + +struct cmd_set vfs_commands[] = { + + { "VFS Commands" }, + + { "load", cmd_load_module, "Load a module", "load " }, + { "populate", cmd_populate, "Populate a data buffer", "populate " }, + { "showdata", cmd_show_data, "Show data currently in data buffer", "show_data [ ]"}, + { "connect", cmd_connect, "VFS connect()", "connect" }, + { "disconnect", cmd_disconnect, "VFS disconnect()", "disconnect" }, + { "disk_free", cmd_disk_free, "VFS disk_free()", "disk_free " }, + { "opendir", cmd_opendir, "VFS opendir()", "opendir " }, + { "readdir", cmd_readdir, "VFS readdir()", "readdir" }, + { "mkdir", cmd_mkdir, "VFS mkdir()", "mkdir " }, + { "rmdir", cmd_pathfunc, "VFS rmdir()", "rmdir " }, + { "closedir", cmd_closedir, "VFS closedir()", "closedir" }, + { "open", cmd_open, "VFS open()", "open " }, + { "close", cmd_close, "VFS close()", "close " }, + { "read", cmd_read, "VFS read()", "read " }, + { "write", cmd_write, "VFS write()", "write " }, + { "lseek", cmd_lseek, "VFS lseek()", "lseek " }, + { "rename", cmd_rename, "VFS rename()", "rename " }, + { "fsync", cmd_fsync, "VFS fsync()", "fsync " }, + { "stat", cmd_stat, "VFS stat()", "stat " }, + { "fstat", cmd_fstat, "VFS fstat()", "fstat " }, + { "lstat", cmd_lstat, "VFS lstat()", "lstat " }, + { "unlink", cmd_pathfunc, "VFS unlink()", "unlink " }, + { "chmod", cmd_chmod, "VFS chmod()", "chmod " }, + { "fchmod", cmd_fchmod, "VFS fchmod()", "fchmod " }, + { "chown", cmd_chown, "VFS chown()", "chown " }, + { "fchown", cmd_fchown, "VFS fchown()", "fchown " }, + { "chdir", cmd_pathfunc, "VFS chdir()", "chdir " }, + { "getwd", cmd_getwd, "VFS getwd()", "getwd" }, + { "utime", cmd_utime, "VFS utime()", "utime " }, + { "ftruncate", cmd_ftruncate, "VFS ftruncate()", "ftruncate " }, + { "lock", cmd_lock, "VFS lock()", "lock: Not yet implemented!" }, + { "symlink", cmd_symlink, "VFS symlink()", "symlink " }, + { "readlink", cmd_readlink, "VFS readlink()", "readlink " }, + { "link", cmd_link, "VFS link()", "link " }, + { "mknod", cmd_mknod, "VFS mknod()", "mknod: Not yet implemented!" }, + { "realpath", cmd_realpath, "VFS realpath()", "realpath " }, + { NULL } +}; diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c new file mode 100644 index 0000000000..18d4514c93 --- /dev/null +++ b/source3/torture/vfstest.c @@ -0,0 +1,551 @@ +/* + Unix SMB/CIFS implementation. + VFS module tester + + Copyright (C) Simo Sorce 2002 + Copyright (C) Eric Lorimer 2002 + + Most of this code was ripped off of rpcclient. + Copyright (C) Tim Potter 2000-2001 + + 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 "vfstest.h" + +/* List to hold groups of commands */ +static struct cmd_list { + struct cmd_list *prev, *next; + struct cmd_set *cmd_set; +} *cmd_list; + +TALLOC_CTX *global_ctx; + +/**************************************************************************** +handle completion of commands for readline +****************************************************************************/ +static char **completion_fn(char *text, int start, int end) +{ +#define MAX_COMPLETIONS 100 + char **matches; + int i, count=0; + struct cmd_list *commands = cmd_list; + +#if 0 /* JERRY */ + /* FIXME!!! -- what to do when completing argument? */ + /* for words not at the start of the line fallback + to filename completion */ + if (start) + return NULL; +#endif + + /* make sure we have a list of valid commands */ + if (!commands) + return NULL; + + matches = (char **)malloc(sizeof(matches[0])*MAX_COMPLETIONS); + if (!matches) return NULL; + + matches[count++] = strdup(text); + if (!matches[0]) return NULL; + + while (commands && count < MAX_COMPLETIONS-1) + { + if (!commands->cmd_set) + break; + + for (i=0; commands->cmd_set[i].name; i++) + { + if ((strncmp(text, commands->cmd_set[i].name, strlen(text)) == 0) && + commands->cmd_set[i].fn) + { + matches[count] = strdup(commands->cmd_set[i].name); + if (!matches[count]) + return NULL; + count++; + } + } + + commands = commands->next; + + } + + if (count == 2) { + SAFE_FREE(matches[0]); + matches[0] = strdup(matches[1]); + } + matches[count] = NULL; + return matches; +} + +static char* next_command (char** cmdstr) +{ + static pstring command; + char *p; + + if (!cmdstr || !(*cmdstr)) + return NULL; + + p = strchr_m(*cmdstr, ';'); + if (p) + *p = '\0'; + pstrcpy(command, *cmdstr); + *cmdstr = p; + + return command; +} + + +/* Display help on commands */ +static NTSTATUS cmd_help(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, + int argc, char **argv) +{ + struct cmd_list *tmp; + struct cmd_set *tmp_set; + + /* Usage */ + if (argc > 2) { + printf("Usage: %s [command]\n", argv[0]); + return NT_STATUS_OK; + } + + /* Help on one command */ + + if (argc == 2) { + for (tmp = cmd_list; tmp; tmp = tmp->next) { + + tmp_set = tmp->cmd_set; + + while(tmp_set->name) { + if (strequal(argv[1], tmp_set->name)) { + if (tmp_set->usage && + tmp_set->usage[0]) + printf("%s\n", tmp_set->usage); + else + printf("No help for %s\n", tmp_set->name); + + return NT_STATUS_OK; + } + + tmp_set++; + } + } + + printf("No such command: %s\n", argv[1]); + return NT_STATUS_OK; + } + + /* List all commands */ + + for (tmp = cmd_list; tmp; tmp = tmp->next) { + + tmp_set = tmp->cmd_set; + + while(tmp_set->name) { + + printf("%15s\t\t%s\n", tmp_set->name, + tmp_set->description ? tmp_set->description: + ""); + + tmp_set++; + } + } + + return NT_STATUS_OK; +} + +/* Change the debug level */ +static NTSTATUS cmd_debuglevel(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc > 2) { + printf("Usage: %s [debuglevel]\n", argv[0]); + return NT_STATUS_OK; + } + + if (argc == 2) { + DEBUGLEVEL = atoi(argv[1]); + } + + printf("debuglevel is %d\n", DEBUGLEVEL); + + return NT_STATUS_OK; +} + +static NTSTATUS cmd_freemem(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + /* Cleanup */ + talloc_destroy(global_ctx); + global_ctx = NULL; + vfs->data = NULL; + vfs->data_size = NULL; +} + +static NTSTATUS cmd_quit(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + /* Cleanup */ + talloc_destroy(global_ctx); + + exit(0); + return NT_STATUS_OK; /* NOTREACHED */ +} + +static struct cmd_set vfstest_commands[] = { + + { "GENERAL OPTIONS" }, + + { "help", cmd_help, "Get help on commands", "[command]" }, + { "?", cmd_help, "Get help on commands", "[command]" }, + { "debuglevel", cmd_debuglevel, "Set debug level", "level" }, + { "freemem", cmd_freemem, "Free currently allocated buffers", "freemem" }, + { "exit", cmd_quit, "Exit program", "" }, + { "quit", cmd_quit, "Exit program", "" }, + + { NULL } +}; + +static struct cmd_set separator_command[] = { + { "---------------", NULL, "----------------------" }, + { NULL } +}; + + +extern struct cmd_set vfs_commands[]; +static struct cmd_set *vfstest_command_list[] = { + vfstest_commands, + vfs_commands, + NULL +}; + +static void add_command_set(struct cmd_set *cmd_set) +{ + struct cmd_list *entry; + + if (!(entry = (struct cmd_list *)malloc(sizeof(struct cmd_list)))) { + DEBUG(0, ("out of memory\n")); + return; + } + + ZERO_STRUCTP(entry); + + entry->cmd_set = cmd_set; + DLIST_ADD(cmd_list, entry); +} + +static NTSTATUS do_cmd(struct vfs_state *vfs, struct cmd_set *cmd_entry, char *cmd) +{ + char *p = cmd, **argv = NULL; + NTSTATUS result = NT_STATUS_UNSUCCESSFUL; + pstring buf; + int argc = 0, i; + + /* Count number of arguments first time through the loop then + allocate memory and strdup them. */ + + again: + while(next_token(&p, buf, " ", sizeof(buf))) { + if (argv) { + argv[argc] = strdup(buf); + } + + argc++; + } + + if (!argv) { + + /* Create argument list */ + + argv = (char **)malloc(sizeof(char *) * argc); + memset(argv, 0, sizeof(char *) * argc); + + if (!argv) { + fprintf(stderr, "out of memory\n"); + result = NT_STATUS_NO_MEMORY; + goto done; + } + + p = cmd; + argc = 0; + + goto again; + } + + /* Call the function */ + + if (cmd_entry->fn) { + + if (global_ctx == NULL) { + /* Create mem_ctx */ + if (!(global_ctx = talloc_init())) { + DEBUG(0, ("talloc_init() failed\n")); + goto done; + } + } + + /* Run command */ + result = cmd_entry->fn(vfs, global_ctx, argc, argv); + + } else { + fprintf (stderr, "Invalid command\n"); + goto done; + } + + done: + + /* Cleanup */ + + if (argv) { + for (i = 0; i < argc; i++) + SAFE_FREE(argv[i]); + + SAFE_FREE(argv); + } + + return result; +} + +/* Process a command entered at the prompt or as part of -c */ +static NTSTATUS process_cmd(struct vfs_state *vfs, char *cmd) +{ + struct cmd_list *temp_list; + BOOL found = False; + pstring buf; + char *p = cmd; + NTSTATUS result = NT_STATUS_OK; + int len = 0; + + if (cmd[strlen(cmd) - 1] == '\n') + cmd[strlen(cmd) - 1] = '\0'; + + if (!next_token(&p, buf, " ", sizeof(buf))) { + return NT_STATUS_OK; + } + + /* strip the trainly \n if it exsists */ + len = strlen(buf); + if (buf[len-1] == '\n') + buf[len-1] = '\0'; + + /* Search for matching commands */ + + for (temp_list = cmd_list; temp_list; temp_list = temp_list->next) { + struct cmd_set *temp_set = temp_list->cmd_set; + + while(temp_set->name) { + if (strequal(buf, temp_set->name)) { + found = True; + result = do_cmd(vfs, temp_set, cmd); + + goto done; + } + temp_set++; + } + } + + done: + if (!found && buf[0]) { + printf("command not found: %s\n", buf); + return NT_STATUS_OK; + } + + if (!NT_STATUS_IS_OK(result)) { + printf("result was %s\n", nt_errstr(result)); + } + + return result; +} + +void exit_server(char *reason) +{ + DEBUG(3,("Server exit (%s)\n", (reason ? reason : ""))); + exit(0); +} + +static int server_fd = -1; +int last_message = -1; + +int smbd_server_fd(void) +{ + return server_fd; +} + +BOOL reload_services(BOOL test) +{ + return True; +} + +/* Print usage information */ +static void usage(void) +{ + printf("Usage: vfstest [options]\n"); + + printf("\t-c or --command \"command string\" execute semicolon separated cmds\n"); + printf("\t-d or --debug debuglevel set the debuglevel\n"); + printf("\t-l or --logfile logfile logfile to use instead of stdout\n"); + printf("\t-h or --help Print this help message.\n"); + printf("\n"); +} + +/* Main function */ + +int main(int argc, char *argv[]) +{ + extern pstring global_myname; + static int got_pass = 0; + BOOL interactive = True; + int opt; + int olddebug; + static char *cmdstr = ""; + const char *server; + struct cli_state *cli; + fstring password="", + username="", + domain=""; + static char *opt_authfile=NULL, + *opt_username=NULL, + *opt_domain=NULL, + *opt_configfile=NULL, + *opt_logfile=NULL; + static int opt_debuglevel; + pstring logfile; + struct cmd_set **cmd_set; + struct in_addr server_ip; + NTSTATUS nt_status; + extern BOOL AllowDebugChange; + static struct vfs_state vfs; + int i; + + + /* make sure the vars that get altered (4th field) are in + a fixed location or certain compilers complain */ + poptContext pc; + struct poptOption long_options[] = { +/* {"conf", 's', POPT_ARG_STRING, &opt_configfile, 's'},*/ + {"debug", 'd', POPT_ARG_INT, &opt_debuglevel, 'd'}, + {"debuglevel", 'd', POPT_ARG_INT, &opt_debuglevel, 'd'}, +/* {"user", 'U', POPT_ARG_STRING, &opt_username, 'U'},*/ + {"command", 'c', POPT_ARG_STRING, &cmdstr}, + {"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l'}, + {"help", 'h', POPT_ARG_NONE, 0, 'h'}, + { 0, 0, 0, 0} + }; + + + setlinebuf(stdout); + + DEBUGLEVEL = 1; + AllowDebugChange = False; + + pc = poptGetContext("vfstest", argc, (const char **) argv, + long_options, 0); + + while((opt = poptGetNextOpt(pc)) != -1) { + switch (opt) { + case 'l': + slprintf(logfile, sizeof(logfile) - 1, "%s.client", + opt_logfile); + lp_set_logfile(logfile); + interactive = False; + break; + + case 'd': + DEBUGLEVEL = opt_debuglevel; + break; + + /* + case 'U': { + char *lp; + + pstrcpy(username,opt_username); + + if ((lp=strchr_m(username,'%'))) { + *lp = 0; + pstrcpy(password,lp+1); + got_pass = 1; + memset(strchr_m(opt_username,'%') + 1, 'X', + strlen(password)); + } + break; + } + */ + + case 'h': + default: + usage(); + exit(1); + } + } + + + poptFreeContext(pc); + + /* the following functions are part of the Samba debugging + facilities. See lib/debug.c */ + setup_logging("vfstest", interactive); + if (!interactive) + reopen_logs(); + + /* Load command lists */ + + cmd_set = vfstest_command_list; + + while(*cmd_set) { + add_command_set(*cmd_set); + add_command_set(separator_command); + cmd_set++; + } + + /* some basic initialization stuff */ + vfs.conn = (struct connection_struct *)malloc(sizeof(struct connection_struct)); + vfs.conn->user = "vfstest"; + for (i=0; i < 1024; i++) + vfs.files[i] = NULL; + + /* Do anything specified with -c */ + if (cmdstr[0]) { + char *cmd; + char *p = cmdstr; + + while((cmd=next_command(&p)) != NULL) { + process_cmd(&vfs, cmd); + } + + return 0; + } + + /* Initialize VFS */ + vfs.conn->vfs_private = NULL; + smbd_vfs_init(vfs.conn); + + /* Loop around accepting commands */ + + while(1) { + pstring prompt; + char *line; + + slprintf(prompt, sizeof(prompt) - 1, "vfstest $> "); + + line = smb_readline(prompt, NULL, completion_fn); + + if (line == NULL) + break; + + if (line[0] != '\n') + process_cmd(&vfs, line); + } + + free(vfs.conn); + return 0; +} diff --git a/source3/torture/vfstest.h b/source3/torture/vfstest.h new file mode 100644 index 0000000000..b086faa402 --- /dev/null +++ b/source3/torture/vfstest.h @@ -0,0 +1,45 @@ +/* + Unix SMB/CIFS implementation. + VFS module tester + + Copyright (C) Simo Sorce 2002 + Copyright (C) Eric Lorimer 2002 + + Most of this code was ripped off of rpcclient. + Copyright (C) Tim Potter 2000-2001 + + 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. +*/ + +struct func_entry { + char *name; + int (*fn)(struct connection_struct *conn, const char *path); +}; + +struct vfs_state { + struct connection_struct *conn; + struct files_struct *files[1024]; + DIR *currentdir; + void *data; + size_t data_size; +}; + +struct cmd_set { + char *name; + NTSTATUS (*fn)(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, + char **argv); + char *description; + char *usage; +}; -- cgit From d433fc4dd3ff753a684b4e07c7f09d11ee704c21 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 18 Aug 2002 19:22:10 +0000 Subject: improvements and bugfix open calls now understands flags and mode bug on read (This used to be commit 751d057713a3fa8a5a141eaed4e8401e7802cfc9) --- source3/torture/cmd_vfs.c | 88 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 17 deletions(-) diff --git a/source3/torture/cmd_vfs.c b/source3/torture/cmd_vfs.c index 3657d3f70d..eb934932ea 100644 --- a/source3/torture/cmd_vfs.c +++ b/source3/torture/cmd_vfs.c @@ -57,7 +57,7 @@ static NTSTATUS cmd_populate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int arg size = atoi(argv[2]); vfs->data = (char *)talloc(mem_ctx, size); if (vfs->data == NULL) { - printf("read: error=-1 (not enough memory)"); + printf("populate: error=-1 (not enough memory)"); return NT_STATUS_UNSUCCESSFUL; } memset(vfs->data, c, size); @@ -198,13 +198,72 @@ static NTSTATUS cmd_closedir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int arg static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) { int flags, mode, fd; + char *flagstr; - flags = O_RDWR | O_CREAT; mode = 00400; - if (argc != 2) { - printf("Usage: open \n"); - return NT_STATUS_OK; + if (argc < 3 || argc > 5) { + printf("Usage: open \n"); + printf(" flags: O = O_RDONLY\n"); + printf(" R = O_RDWR\n"); + printf(" W = O_WRONLY\n"); + printf(" C = O_CREAT\n"); + printf(" E = O_EXCL\n"); + printf(" T = O_TRUNC\n"); + printf(" A = O_APPEND\n"); + printf(" N = O_NONBLOCK/O_NDELAY\n"); + printf(" S = O_SYNC\n"); + printf(" F = O_NOFOLLOW\n"); + printf(" mode: see open.2\n"); + printf(" mode is ignored if C flag not present\n"); + printf(" mode defaults to 00400\n"); + return NT_STATUS_OK; + } + flags = 0; + flagstr = argv[2]; + while (*flagstr) { + switch (*flagstr) { + case 'O': + flags |= O_RDONLY; + break; + case 'R': + flags |= O_RDWR; + break; + case 'W': + flags |= O_WRONLY; + break; + case 'C': + flags |= O_CREAT; + break; + case 'E': + flags |= O_EXCL; + break; + case 'T': + flags |= O_TRUNC; + break; + case 'A': + flags |= O_APPEND; + break; + case 'N': + flags |= O_NONBLOCK; + break; + case 'S': + flags |= O_SYNC; + break; + case 'F': + flags |= O_NOFOLLOW; + break; + default: + printf("open: error=-1 (invalid flag!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + flagstr++; + } + if ((flags & O_CREAT) && argc == 4) { + if (sscanf(argv[3], "%o", &mode) == 0) { + printf("open: error=-1 (invalid mode!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } } fd = vfs->conn->vfs_ops.open(vfs->conn, argv[1], flags, mode); @@ -300,15 +359,10 @@ static NTSTATUS cmd_read(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c } vfs->data_size = size; - rsize = 0; - while (rsize < size) { - int isize; - isize = vfs->conn->vfs_ops.read(vfs->files[fd], fd, vfs->data, size); - if (isize == -1) { - printf("read: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - rsize += isize; + rsize = vfs->conn->vfs_ops.read(vfs->files[fd], fd, vfs->data, size); + if (rsize == -1) { + printf("read: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; } printf("read: ok\n"); @@ -461,7 +515,7 @@ static NTSTATUS cmd_stat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c printf(" Device: 0x%.10x", st.st_dev); printf(" Inode: %10d", st.st_ino); printf(" Links: %10d\n", st.st_nlink); - printf(" Access: %05d ", (st.st_mode) & 0x7fff); + printf(" Access: %05o", (st.st_mode) & 007777); printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); printf(" Access: %s", ctime(&(st.st_atime))); printf(" Modify: %s", ctime(&(st.st_mtime))); @@ -523,7 +577,7 @@ static NTSTATUS cmd_fstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, printf(" Device: 0x%10x", st.st_dev); printf(" Inode: %10d", st.st_ino); printf(" Links: %10d\n", st.st_nlink); - printf(" Access: %05d ", (st.st_mode) & 0x7fff); + printf(" Access: %05o", (st.st_mode) & 007777); printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); printf(" Access: %s", ctime(&(st.st_atime))); printf(" Modify: %s", ctime(&(st.st_mtime))); @@ -573,7 +627,7 @@ static NTSTATUS cmd_lstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, printf(" Device: 0x%10x", st.st_dev); printf(" Inode: %10d", st.st_ino); printf(" Links: %10d\n", st.st_nlink); - printf(" Access: %05d ", (st.st_mode) & 0x7fff); + printf(" Access: %05o", (st.st_mode) & 007777); printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); printf(" Access: %s", ctime(&(st.st_atime))); printf(" Modify: %s", ctime(&(st.st_mtime))); -- cgit From db9a33fd38c1ac445e5edc1c80499ac3300a4824 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 18 Aug 2002 20:06:41 +0000 Subject: nicer locking timeout test (This used to be commit 2307869798c99f75d2624bb3c144e780e358a3c9) --- source3/torture/torture.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source3/torture/torture.c b/source3/torture/torture.c index f3b816c80f..e7a8eb04b6 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -785,6 +785,7 @@ static BOOL run_locktest1(int dummy) char *fname = "\\lockt1.lck"; int fnum1, fnum2, fnum3; time_t t1, t2; + unsigned lock_timeout; if (!torture_open_connection(&cli1) || !torture_open_connection(&cli2)) { return False; @@ -827,9 +828,10 @@ static BOOL run_locktest1(int dummy) } - printf("Testing lock timeouts\n"); + lock_timeout = (1 + (random() % 20)); + printf("Testing lock timeout with timeout=%u\n", lock_timeout); t1 = time(NULL); - if (cli_lock(&cli2, fnum3, 0, 4, (1 + (random() % 20)) * 1000, WRITE_LOCK)) { + if (cli_lock(&cli2, fnum3, 0, 4, lock_timeout * 1000, WRITE_LOCK)) { printf("lock3 succeeded! This is a locking bug\n"); return False; } else { @@ -841,6 +843,8 @@ static BOOL run_locktest1(int dummy) if (t2 - t1 < 5) { printf("error: This server appears not to support timed lock requests\n"); } + printf("server slept for %u seconds for a %u second timeout\n", + t2-t1, lock_timeout); if (!cli_close(&cli1, fnum2)) { printf("close1 failed (%s)\n", cli_errstr(&cli1)); @@ -3863,6 +3867,7 @@ static void usage(void) argc--; argv++; + srandom(time(NULL)); fstrcpy(workgroup, lp_workgroup()); -- cgit From f18c3c757a84734e45b8da8af2bc576c1ded73d2 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 18 Aug 2002 20:09:02 +0000 Subject: added exact timing semantics on blocking locks (This used to be commit aed32eb412cab7f6d0959f9faaaebdb320b2b6a8) --- source3/smbd/blocking.c | 30 +++++++++++++++++++++++++----- source3/smbd/process.c | 9 ++------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/source3/smbd/blocking.c b/source3/smbd/blocking.c index 72cf3e59b6..9d411711cb 100644 --- a/source3/smbd/blocking.c +++ b/source3/smbd/blocking.c @@ -531,13 +531,33 @@ file %s fnum = %d\n", blr->com_type, fsp->fsp_name, fsp->fnum )); } /**************************************************************************** - Return True if the blocking lock queue has entries. + Return the number of seconds to the next blocking locks timeout, or default_timeout *****************************************************************************/ - -BOOL blocking_locks_pending(void) +unsigned blocking_locks_timeout(unsigned default_timeout) { - blocking_lock_record *blr = (blocking_lock_record *)ubi_slFirst( &blocking_lock_queue ); - return (blr == NULL ? False : True); + unsigned timeout = default_timeout; + time_t t; + blocking_lock_record *blr = (blocking_lock_record *)ubi_slFirst(&blocking_lock_queue); + + /* note that we avoid the time() syscall if there are no blocking locks */ + if (!blr) { + return timeout; + } + + t = time(NULL); + + while (blr) { + if (timeout > (blr->expire_time - t)) { + timeout = blr->expire_time - t; + } + blr = (blocking_lock_record *)ubi_slNext(blr); + } + + if (timeout < 1) { + timeout = 1; + } + + return timeout; } /**************************************************************************** diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 55234ec896..13fd4998fe 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -1032,13 +1032,8 @@ static int setup_select_timeout(void) int select_timeout; int t; - /* - * Increase the select timeout back to SMBD_SELECT_TIMEOUT if we - * have removed any blocking locks. JRA. - */ - - select_timeout = blocking_locks_pending() ? SMBD_SELECT_TIMEOUT_WITH_PENDING_LOCKS*1000 : - SMBD_SELECT_TIMEOUT*1000; + select_timeout = blocking_locks_timeout(SMBD_SELECT_TIMEOUT); + select_timeout *= 1000; t = change_notify_timeout(); if (t != -1) select_timeout = MIN(select_timeout, t*1000); -- cgit From ec91716cb79ee0ac059f29cbcc331c114313f1ef Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 18 Aug 2002 20:12:43 +0000 Subject: Add entry about block.so (This used to be commit 6973344fb5207341e98576b1ddbe58a745225e10) --- examples/VFS/README | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/examples/VFS/README b/examples/VFS/README index c2f39f9727..7a2152fc4d 100644 --- a/examples/VFS/README +++ b/examples/VFS/README @@ -17,6 +17,13 @@ construction. The following VFS modules are given: connect/disconnect, directory opens/create/remove, file open/close/rename/unlink/chmod. + block + A simple module to block access to certain mount points or + directories. This module only hides the specified directories + and all directories beneath them. It should NOT be used to secure + directories. If the name of a file in one of those directories is + known, the file can still be opened. + The libtool program, available from your favourite GNU software archive, is required to compile these programs. -- cgit From c0f37b336bcbcab9c88c65ea8c4aabc718690535 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 18 Aug 2002 20:13:09 +0000 Subject: round lock timeouts in lockingX upwards to multiples of 1 second, so a half second timout rounds to 1 not 0 (This used to be commit 282a64b085162a58560175d14e7ceaef3d6cc9cc) --- source3/smbd/reply.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index c6a082d7d8..010f0e47d3 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -3827,7 +3827,7 @@ no oplock granted on this file (%s).\n", fsp->fnum, fsp->fsp_name)); /* Setup the timeout in seconds. */ - lock_timeout = ((lock_timeout == -1) ? -1 : lock_timeout/1000); + lock_timeout = ((lock_timeout == -1) ? -1 : (lock_timeout+999)/1000); /* Now do any requested locks */ data += ((large_file_format ? 20 : 10)*num_ulocks); -- cgit From c9df8aa9cdd7400c346e9ef318a52d7256a015f0 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 18 Aug 2002 20:28:16 +0000 Subject: O_NOFOLLOW does not exist on solaris 8 ?? (This used to be commit 4280300d80d831b78ca50a0a4325b9e239a8bb63) --- source3/torture/cmd_vfs.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source3/torture/cmd_vfs.c b/source3/torture/cmd_vfs.c index eb934932ea..680d5bdfdc 100644 --- a/source3/torture/cmd_vfs.c +++ b/source3/torture/cmd_vfs.c @@ -213,7 +213,9 @@ static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c printf(" A = O_APPEND\n"); printf(" N = O_NONBLOCK/O_NDELAY\n"); printf(" S = O_SYNC\n"); +#ifdef O_NOFOLLOW printf(" F = O_NOFOLLOW\n"); +#endif printf(" mode: see open.2\n"); printf(" mode is ignored if C flag not present\n"); printf(" mode defaults to 00400\n"); @@ -250,9 +252,11 @@ static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c case 'S': flags |= O_SYNC; break; +#ifdef O_NOFOLLOW case 'F': flags |= O_NOFOLLOW; break; +#endif default: printf("open: error=-1 (invalid flag!)\n"); return NT_STATUS_UNSUCCESSFUL; -- cgit From cb2478befbcac990f6b601262a351733657ea497 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 19 Aug 2002 00:19:44 +0000 Subject: Add 'conf' command to load different smb.conf files (This used to be commit 9b4deb1e0f36968bf9b83120b12e6692b20df9d4) --- source3/torture/vfstest.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index 18d4514c93..b8773d5785 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -108,7 +108,24 @@ static char* next_command (char** cmdstr) return command; } +/* Load specified configuration file */ +static NTSTATUS cmd_conf(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, + int argc, char **argv) +{ + if (argc != 2) { + printf("Usage: %s \n", argv[0]); + return NT_STATUS_OK; + } + if (!lp_load(argv[1], False, True, False)) { + printf("Error loading \"%s\"\n", argv[1]); + return NT_STATUS_OK; + } + + printf("\"%s\" successfully loaded\n", argv[1]); + return NT_STATUS_OK; +} + /* Display help on commands */ static NTSTATUS cmd_help(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) @@ -206,10 +223,11 @@ static struct cmd_set vfstest_commands[] = { { "GENERAL OPTIONS" }, - { "help", cmd_help, "Get help on commands", "[command]" }, - { "?", cmd_help, "Get help on commands", "[command]" }, - { "debuglevel", cmd_debuglevel, "Set debug level", "level" }, - { "freemem", cmd_freemem, "Free currently allocated buffers", "freemem" }, + { "conf", cmd_conf, "Load smb configuration file", "conf " }, + { "help", cmd_help, "Get help on commands", "" }, + { "?", cmd_help, "Get help on commands", "" }, + { "debuglevel", cmd_debuglevel, "Set debug level", "" }, + { "freemem", cmd_freemem, "Free currently allocated buffers", "" }, { "exit", cmd_quit, "Exit program", "" }, { "quit", cmd_quit, "Exit program", "" }, -- cgit From f04f9d10f6c9c739aead654acb8f98f3d785d07c Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 19 Aug 2002 01:02:41 +0000 Subject: should make all platforms happy with popt (This used to be commit 778985527ccf0f29f74b53d65c909de0d08a96f6) --- source3/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 656557dd51..69ac925fd7 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -727,7 +727,7 @@ bin/nsstest: $(NSSTEST_OBJ) bin/.dummy bin/vfstest: $(VFSTEST_OBJ) bin/.dummy @echo Linking $@ - @$(CC) $(FLAGS) -o $@ $(VFSTEST_OBJ) $(LDFLAGS) $(TERMLDFLAGS) $(TERMLIBS) $(DYNEXP) $(LIBS) + @$(CC) $(FLAGS) -o $@ $(VFSTEST_OBJ) $(LDFLAGS) $(TERMLDFLAGS) $(TERMLIBS) $(DYNEXP) $(LIBS) @BUILD_POPT@ bin/locktest2: $(LOCKTEST2_OBJ) bin/.dummy @echo Linking $@ -- cgit From 222806dbcdeb4d5d7d954965e8a914664d2671d1 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 19 Aug 2002 01:11:00 +0000 Subject: Add vfstest manpage + fix typo in configure (This used to be commit 477e8bb1a9b1895a4987ef2377b48ecc31999ab5) --- docs/docbook/Makefile.in | 12 ++- docs/docbook/configure.in | 2 +- docs/docbook/manpages/vfstest.1.sgml | 160 +++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+), 3 deletions(-) create mode 100644 docs/docbook/manpages/vfstest.1.sgml diff --git a/docs/docbook/Makefile.in b/docs/docbook/Makefile.in index 0320081876..5056f82a98 100644 --- a/docs/docbook/Makefile.in +++ b/docs/docbook/Makefile.in @@ -37,7 +37,7 @@ MANPAGES=$(MANDIR)/findsmb.1 $(MANDIR)/smbclient.1 \ $(MANDIR)/smb.conf.5 $(MANDIR)/wbinfo.1 $(MANDIR)/pdbedit.8 \ $(MANDIR)/smbcacls.1 $(MANDIR)/smbsh.1 $(MANDIR)/winbindd.8 \ $(MANDIR)/make_unicodemap.1 $(MANDIR)/net.8 \ - $(MANDIR)/smbgroupedit.8 + $(MANDIR)/smbgroupedit.8 $(MANDIR)/vfstest.1 SGMLMANSRC=manpages/findsmb.1.sgml manpages/smbclient.1.sgml \ manpages/smbspool.8.sgml manpages/lmhosts.5.sgml \ @@ -53,7 +53,7 @@ SGMLMANSRC=manpages/findsmb.1.sgml manpages/smbclient.1.sgml \ manpages/wbinfo.1.sgml manpages/smbcacls.1.sgml \ manpages/smbsh.1.sgml manpages/winbindd.8.sgml \ manpages/make_unicodemap.1.sgml manpages/smbgroupedit.8.sgml \ - manpages/net.8.sgml + manpages/net.8.sgml manpages/vfstest.1.sgml HOWTOSRC=projdoc/DOMAIN_MEMBER.sgml projdoc/NT_Security.sgml \ projdoc/msdfs_setup.sgml projdoc/printer_driver2.sgml \ @@ -328,6 +328,14 @@ $(MANDIR)/testprns.1: manpages/testprns.1.sgml @echo "Making HTML version of $@" @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` +$(MANDIR)/vfstest.1: manpages/vfstest.1.sgml + @echo "Making $@" + @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl + @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ + @/bin/rm -f `echo $@ | sed 's,.*/,,'` + @echo "Making HTML version of $@" + @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` + $(MANDIR)/smb.conf.5: manpages/smb.conf.5.sgml @echo "Making $@" @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl diff --git a/docs/docbook/configure.in b/docs/docbook/configure.in index ad0613f2be..f8b4a1618a 100644 --- a/docs/docbook/configure.in +++ b/docs/docbook/configure.in @@ -38,7 +38,7 @@ esac # The Makefile requires docbook2X in the share/sgml directory if [ ! test -f $SGML_SHARE/docbook2X/docbook2man-spec.pl ]; then - AC_MSG_ERROR("Unable to find dockbook2X. Make sure it is installed and that the sgml-share path is correct.") + AC_MSG_ERROR("Unable to find docbook2X. Make sure it is installed and that the sgml-share path is correct.") fi AC_SUBST(SGML_SHARE)dnl diff --git a/docs/docbook/manpages/vfstest.1.sgml b/docs/docbook/manpages/vfstest.1.sgml new file mode 100644 index 0000000000..daa52d5d4b --- /dev/null +++ b/docs/docbook/manpages/vfstest.1.sgml @@ -0,0 +1,160 @@ + + + + + vfstest + 1 + + + + + vfstest + tool for testing samba VFS modules + + + + + vfstest + -d debuglevel + -c "command" + -l "logfile" + -h + + + + + DESCRIPTION + + This tool is part of the + Samba suite. + + vfstest is a small command line + utility that has the ability to test dso samba VFS modules. It gives the + user the ability to call the various VFS functions manually and + supports cascaded VFS modules. + + + + + + OPTIONS + + + + + -c|--command=command + Execute the specified (colon-seperated) commands. + See below for the commands that are available. + + + + + + -d|--debug=debuglevel + set the debuglevel. Debug level 0 is the lowest + and 100 being the highest. This should be set to 100 if you are + planning on submitting a bug report to the Samba team (see BUGS.txt). + + + + + -h|--help + Print a summary of command line options. + + + + + -l|--logfile=logbasename + File name for log/debug files. The extension + '.client' will be appended. The log file is never removed + by the client. + + + + + + + + + COMMANDS + + VFS COMMANDS + + load <module.so> - Load specified VFS module + + populate <char> <size> - Populate a data buffer with the specified data + + + showdata [<offset> <len>] - Show data currently in data buffer + + + connect - VFS connect() + disconnect - VFS disconnect() + disk_free - VFS disk_free() + opendir - VFS opendir() + readdir - VFS readdir() + mkdir - VFS mkdir() + rmdir - VFS rmdir() + closedir - VFS closedir() + open - VFS open() + close - VFS close() + read - VFS read() + write - VFS write() + lseek - VFS lseek() + rename - VFS rename() + fsync - VFS fsync() + stat - VFS stat() + fstat - VFS fstat() + lstat - VFS lstat() + unlink - VFS unlink() + chmod - VFS chmod() + fchmod - VFS fchmod() + chown - VFS chown() + fchown - VFS fchown() + chdir - VFS chdir() + getwd - VFS getwd() + utime - VFS utime() + ftruncate - VFS ftruncate() + lock - VFS lock() + symlink - VFS symlink() + readlink - VFS readlink() + link - VFS link() + mknod - VFS mknod() + realpath - VFS realpath() + + + GENERAL COMMANDS + + conf <smb.conf> - Load a different configuration file + + help [<command>] - Get list of commands or info about specified command + + debuglevel <level> - Set debug level + + freemem - Free memory currently in use + + exit - Exit vfstest + + + + + + + VERSION + + This man page is correct for version 3.0 of the Samba + suite. + + + + AUTHOR + + The original Samba software and related utilities + were created by Andrew Tridgell. Samba is now developed + by the Samba Team as an Open Source project similar + to the way the Linux kernel is developed. + + The vfstest man page was written by Jelmer Vernooij. + + + -- cgit From 0231bb451d16ac8cc2734969542eb46d1b9028c3 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 19 Aug 2002 01:56:15 +0000 Subject: change notify fix left out of merge by APP_HEAD by accident (This used to be commit a413ff8b494e63b42fab213f12b44df6a5f0c34c) --- source3/rpc_server/srv_spoolss_nt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 2cf73d7118..834ad7f61a 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -2432,8 +2432,9 @@ static void spoolss_notify_security_desc(int snum, NT_PRINTER_INFO_LEVEL *printer, TALLOC_CTX *mem_ctx) { - data->notify_data.data.length=0; data->notify_data.data.string = NULL; + data->notify_data.sd.size = printer->info_2->secdesc_buf->len; + data->notify_data.sd.desc = dup_sec_desc( mem_ctx, printer->info_2->secdesc_buf->sec ) ; } /******************************************************************* -- cgit From e612804c15e7be7fa9313054c42c161e1bed38bf Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 19 Aug 2002 02:03:02 +0000 Subject: Update manpage to match to Simo's latest pdbedit changes (This used to be commit ff8a80b873e38db7755f40b409fbc2d73693f40f) --- docs/docbook/manpages/pdbedit.8.sgml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/docbook/manpages/pdbedit.8.sgml b/docs/docbook/manpages/pdbedit.8.sgml index 3f6023d16f..213275b7cc 100644 --- a/docs/docbook/manpages/pdbedit.8.sgml +++ b/docs/docbook/manpages/pdbedit.8.sgml @@ -29,6 +29,7 @@ -x -i passdb-backend -e passdb-backend + -b passdb-backend -D debuglevel @@ -236,12 +237,13 @@ -i passdb-backend - Use a different passdb backend to retrieve users than the one specified in smb.conf. + Use a different passdb backend to retrieve users than the one specified in smb.conf. Can be used to import data into your + local user database. This option will ease migration from one passdb backend to another. - Example: pdbedit -i smbpasswd:/etc/smbpasswd.old -e tdbsam:/etc/samba/passwd.tdb + Example: pdbedit -i smbpasswd:/etc/smbpasswd.old @@ -255,6 +257,14 @@ Example: pdbedit -e smbpasswd:/root/samba-users.backup + + + -b passdb-backend + Use a different default passdb backend. + + Example: pdbedit -b xml:/root/pdb-backup.xml -l + + -- cgit From 2b93ecc90b79d95455b19e46082f1b0039b71e35 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 19 Aug 2002 02:18:48 +0000 Subject: added wrapper for delete_printer_data() that write the printer out to disk. (This used to be commit 113d960d77fc9e3671a448d093237ced25c2e18c) --- source3/rpc_server/srv_spoolss_nt.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 834ad7f61a..ae478d7c68 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1734,6 +1734,17 @@ static WERROR get_printer_dataex( TALLOC_CTX *ctx, NT_PRINTER_INFO_LEVEL *printe return WERR_OK; } +/**************************************************************************** + Internal routine for removing printerdata + ***************************************************************************/ + +static WERROR delete_printer_dataex( NT_PRINTER_INFO_LEVEL *printer, char *key, char *value ) +{ + delete_printer_data( printer->info_2, key, value ); + + return mod_a_printer(*printer, 2); +} + /**************************************************************************** Internal routine for storing printerdata ***************************************************************************/ @@ -7211,9 +7222,7 @@ WERROR _spoolss_deleteprinterdata(pipes_struct *p, SPOOL_Q_DELETEPRINTERDATA *q_ unistr2_to_ascii( valuename, value, sizeof(valuename)-1 ); - status = delete_printer_data( printer->info_2, SPOOL_PRINTERDATA_KEY, valuename ); - if ( W_ERROR_IS_OK(status) ) - status = mod_a_printer(*printer, 2); + status = delete_printer_dataex( printer, SPOOL_PRINTERDATA_KEY, valuename ); free_a_printer(&printer, 2); @@ -7894,7 +7903,7 @@ done: } /******************************************************************** - * spoolss_setprinterdata + * spoolss_setprinterdataex ********************************************************************/ WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u, SPOOL_R_SETPRINTERDATAEX *r_u) @@ -7993,9 +8002,7 @@ WERROR _spoolss_deleteprinterdataex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDATAEX unistr2_to_ascii( valuename, value, sizeof(valuename)-1 ); unistr2_to_ascii( keyname, key, sizeof(keyname)-1 ); - status = delete_printer_data( printer->info_2, keyname, valuename ); - if ( W_ERROR_IS_OK(status) ) - status = mod_a_printer(*printer, 2); + status = delete_printer_dataex( printer, keyname, valuename ); free_a_printer(&printer, 2); @@ -8116,6 +8123,7 @@ WERROR _spoolss_deleteprinterkey(pipes_struct *p, SPOOL_Q_DELETEPRINTERKEY *q_u, unistr2_to_ascii(key, &q_u->keyname, sizeof(key) - 1); status = delete_all_printer_data( printer->info_2, key ); + if ( W_ERROR_IS_OK(status) ) status = mod_a_printer(*printer, 2); -- cgit From 4b1baa5a70964e94ecc4733a9f8cd3f318c758ea Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 19 Aug 2002 03:17:03 +0000 Subject: added a 'net ads lookup' command that does a CLDAP NetLogon query to a win2000 server. It does seem to work, and win200 sends us a valid reply, but we don't parse it yet. Maybe tomorrow :) (This used to be commit 6352508c54cee333ed7c0e3ebc372be7cd60ed62) --- source3/Makefile.in | 2 +- source3/libsmb/asn1.c | 10 +++++ source3/utils/net_ads.c | 26 ++++++++++++ source3/utils/net_ads_cldap.c | 95 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 source3/utils/net_ads_cldap.c diff --git a/source3/Makefile.in b/source3/Makefile.in index 69ac925fd7..734f6ee82a 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -376,7 +376,7 @@ CLIENT_OBJ1 = client/client.o client/clitar.o CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ $(READLINE_OBJ) -NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_help.o \ +NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_ads_cldap.o utils/net_help.o \ utils/net_rap.o utils/net_rpc.o \ utils/net_rpc_join.o utils/net_time.o utils/net_lookup.o diff --git a/source3/libsmb/asn1.c b/source3/libsmb/asn1.c index b4ad3ad0b8..c8f832f3df 100644 --- a/source3/libsmb/asn1.c +++ b/source3/libsmb/asn1.c @@ -174,6 +174,16 @@ BOOL asn1_write_BOOLEAN(ASN1_DATA *data, BOOL v) return !data->has_error; } +/* write a BOOLEAN - hmm, I suspect this one is the correct one, and the + above boolean is bogus. Need to check */ +BOOL asn1_write_BOOLEAN2(ASN1_DATA *data, BOOL v) +{ + asn1_push_tag(data, ASN1_BOOLEAN); + asn1_write_uint8(data, v); + asn1_pop_tag(data); + return !data->has_error; +} + /* check a BOOLEAN */ BOOL asn1_check_BOOLEAN(ASN1_DATA *data, BOOL v) { diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c index ad405fe68c..16450c5b29 100644 --- a/source3/utils/net_ads.c +++ b/source3/utils/net_ads.c @@ -56,6 +56,31 @@ int net_ads_usage(int argc, const char **argv) } +/* + this implements the CLDAP based netlogon lookup requests + for finding the domain controller of a ADS domain +*/ +static int net_ads_lookup(int argc, const char **argv) +{ + ADS_STRUCT *ads; + + ads = ads_init(NULL, NULL, opt_host); + if (ads) { + ads->auth.no_bind = 1; + } + + ads_connect(ads); + + if (!ads || !ads->config.realm) { + d_printf("Didn't find the cldap server!\n"); + return -1; + } + + return ads_cldap_netlogon(ads); +} + + + static int net_ads_info(int argc, const char **argv) { ADS_STRUCT *ads; @@ -1009,6 +1034,7 @@ int net_ads(int argc, const char **argv) {"PRINTER", net_ads_printer}, {"SEARCH", net_ads_search}, {"WORKGROUP", net_ads_workgroup}, + {"LOOKUP", net_ads_lookup}, {"HELP", net_ads_help}, {NULL, NULL} }; diff --git a/source3/utils/net_ads_cldap.c b/source3/utils/net_ads_cldap.c new file mode 100644 index 0000000000..f707f6beac --- /dev/null +++ b/source3/utils/net_ads_cldap.c @@ -0,0 +1,95 @@ +/* + Samba Unix/Linux SMB client library + net ads cldap functions + Copyright (C) 2001 Andrew Tridgell (tridge@samba.org) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "../utils/net.h" + +#ifdef HAVE_ADS + +/* + do a cldap netlogon query +*/ +int ads_cldap_netlogon(ADS_STRUCT *ads) +{ + ASN1_DATA data; + char ntver[4]; + int sock; + + SIVAL(ntver, 0, 6); + + memset(&data, 0, sizeof(data)); + + asn1_push_tag(&data,ASN1_SEQUENCE(0)); + asn1_write_Integer(&data, 4); + asn1_push_tag(&data, ASN1_APPLICATION(3)); + asn1_write_OctetString(&data, NULL, 0); + asn1_write_enumerated(&data, 0); + asn1_write_enumerated(&data, 0); + asn1_write_Integer(&data, 0); + asn1_write_Integer(&data, 0); + asn1_write_BOOLEAN2(&data, False); + asn1_push_tag(&data, ASN1_CONTEXT(0)); + + asn1_push_tag(&data, ASN1_CONTEXT(3)); + asn1_write_OctetString(&data, "DnsDomain", 9); + asn1_write_OctetString(&data, ads->config.realm, strlen(ads->config.realm)); + asn1_pop_tag(&data); + + asn1_push_tag(&data, ASN1_CONTEXT(3)); + asn1_write_OctetString(&data, "Host", 4); + asn1_write_OctetString(&data, "blu", 3); + asn1_pop_tag(&data); + + + asn1_push_tag(&data, ASN1_CONTEXT(3)); + asn1_write_OctetString(&data, "NtVer", 5); + asn1_write_OctetString(&data, ntver, 4); + asn1_pop_tag(&data); + + asn1_pop_tag(&data); + + asn1_push_tag(&data,ASN1_SEQUENCE(0)); + asn1_write_OctetString(&data, "NetLogon", 8); + asn1_pop_tag(&data); + asn1_pop_tag(&data); + asn1_pop_tag(&data); + + if (data.has_error) { + d_printf("Failed to build cldap netlogon at offset %d\n", (int)data.ofs); + asn1_free(&data); + return -1; + } + + sock = open_udp_socket(inet_ntoa(ads->ldap_ip), ads->ldap_port); + if (sock == -1) { + d_printf("Failed to open udp socket to %s:%u\n", + inet_ntoa(ads->ldap_ip), + ads->ldap_port); + return -1; + } + + write(sock, data.data, data.length); + file_save("cldap_query.dat", data.data, data.length); + asn1_free(&data); + return 0; +} + + +#endif -- cgit From 4c8b313a2378b1c1e7f46d7bf79542eedb20ff25 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 19 Aug 2002 14:55:06 +0000 Subject: Add script to find undocumented smb.conf options (This used to be commit 77152b4033f13abcdb86c7835f3112fa422a420d) --- source3/script/find_missing_doc.pl | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100755 source3/script/find_missing_doc.pl diff --git a/source3/script/find_missing_doc.pl b/source3/script/find_missing_doc.pl new file mode 100755 index 0000000000..4d22e20a29 --- /dev/null +++ b/source3/script/find_missing_doc.pl @@ -0,0 +1,43 @@ +#!/usr/bin/perl -w + +#reads in the list of parameters from the source +#compares this list to the list of parms documented in the docbook source +#prints out the names of the parameters that are in need of documentation +# (C) 2002 Bradley W. Langhorst" + +my $doc_file = "./docs/docbook/manpages/smb.conf.5.sgml"; +my $source_file = "./source/param/loadparm.c"; +my $ln; +my %params; + +open(SOURCE, "<$source_file") || + die "Unable to open $source_file for input: $!\n"; +open(DOC, "<$doc_file") || + die "Unable to open $doc_file for input: $!\n"; + +while ($ln= ) { + last if $ln =~ m/^static\ struct\ parm_struct\ parm_table.*/; +} #burn through the preceding lines + +while ($ln = ) { + last if $ln =~ m/^\s*\}\;\s*$/; + #pull in the param names only + next if $ln =~ m/.*P_SEPARATOR.*/; + $ln =~ m/.*\"(.*)\".*/; + $params{lc($1)}='not_found'; #not case sensitive +} +close SOURCE; +#now read in the params list from the docs +@doclines = ; + +foreach $ln (grep (/\\s*(?:\<.*?\>)*\s*(.*?)(?:\s*\(?[S,G]?\)?\s*(\<\/term\>)?){1}\s*$/; + #print "got: $1 from: $ln"; + if (exists $params{lc($1)}) { + $params{$1} = 'found'; + } +} + +foreach (keys %params) { + print "$_\n" if $params{$_} eq 'not_found'; +} -- cgit From 53a4d9a47039a567e0599b0ec3ee9d589d035e30 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 19 Aug 2002 15:29:40 +0000 Subject: Adding documentation for options: add user to group script delete group script ads server delete user from group script disable netbios block size hide unwriteable mangling method (This used to be commit 6cb00e444f3acd7b3339c46813830fbdc3d7d027) --- docs/docbook/manpages/smb.conf.5.sgml | 148 +++++++++++++++++++++++++++++----- 1 file changed, 129 insertions(+), 19 deletions(-) diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index 54e5f3ed73..299379659f 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -594,10 +594,14 @@ abort shutdown script + add group script add printer command add share command add user script + add user to group script add machine script + delete group script + ads server algorithmic rid base allow trusted domains announce as @@ -620,7 +624,9 @@ delete printer command delete share command delete user script + delete user from group script dfree command + disable netbios disable spoolss dns proxy domain admin group @@ -633,6 +639,7 @@ getwd cache hide local users hide unreadable + hide unwriteable homedir map host msdfs hosts equiv @@ -777,6 +784,7 @@ allow hosts available blocking locks + block size browsable browseable case sensitive @@ -835,6 +843,7 @@ mangled map mangled names mangling char + mangling method map archive map hidden map system @@ -920,7 +929,6 @@ - add printer command (G) With the introduction of MS-RPC based printing @@ -1051,6 +1059,18 @@ + + ads server (G) + If this option is specified, samba does + not try to figure out what ads server to use itself, but + uses the specified ads server. Either one DNS name or IP + address can be used. + + Default: ads server = + + Example: ads server = 192.168.1.2 + + add user script (G) @@ -1102,14 +1122,12 @@ %u -add group script (G) -This is the full pathname to a script that will - be run AS ROOT by smbd(8) when a new group is requested. It will expand any %g to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. - - - - - + + add group script (G) + This is the full pathname to a script that will + be run AS ROOT by smbd(8) when a new group is requested. It will expand any %g to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. + + admin users (S) @@ -1126,8 +1144,23 @@ Example: admin users = jason - + + add user to group script (G) + Full path to the script that will be called when + a user is added to a group using the Windows NT domain administration + tools. It will be run by smbd(8) + AS ROOT. Any %g will be + replaced with the group name and any %u will + be replaced with the user name. + + + Default: add user to group script = + + Example: add user to group script = /usr/sbin/adduser %u %g + + + allow hosts (S) @@ -1182,8 +1215,6 @@ - - announce as (G) This specifies what type of server @@ -1353,7 +1384,31 @@ - + + + block size (S) + This parameter controls the behavior of + smbd(8) when reporting disk free + sizes. By default, this reports a disk block size of 1024 bytes. + + + Changing this parameter may have some effect on the + efficiency of client writes, this is not yet confirmed. This + parameter was added to allow advanced administrators to change + it (usually to a higher value) and test the effect it has on + client write performance without re-compiling the code. As this + is an experimental option it may be removed in a future release. + + + Changing this option does not change the disk free reporting + size, just the block size unit reported to the client. + + Default: block size = 1024 + Example: block size = 65536 + + + + @@ -1800,7 +1855,11 @@ - + delete group script (G) + This is the full pathname to a script that will + be run AS ROOT by smbd(8) when a group is requested to be deleted. It will expand any %g to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. + + delete printer command (G) @@ -1927,9 +1986,22 @@ %u + + delete user from group script (G) + Full path to the script that will be called when + a user is removed from a group using the Windows NT domain administration + tools. It will be run by smbd(8) + AS ROOT. Any %g will be + replaced with the group name and any %u will + be replaced with the user name. + + Default: delete user from group script = - + Example: delete user from group script = /usr/sbin/deluser %u %g + + + delete veto files (S) @@ -2122,10 +2194,24 @@ + + disable netbios (G) + Enabling this parameter will disable netbios support + in Samba. Netbios is the only available form of browsing in + all windows versions except for 2000 and XP. + + Note that clients that only support netbios won't be able to + see your samba server when netbios support is disabled. + + + Default: disable netbios = no + Example: disable netbios = yes + + disable spoolss (G) - Enabling this parameter will disables Samba's support + Enabling this parameter will disable Samba's support for the SPOOLSS set of MS-RPC's and will yield identical behavior as Samba 2.0.x. Windows NT/2000 clients will downgrade to using Lanman style printing commands. Windows 9x/ME will be uneffected by @@ -2873,14 +2959,24 @@ - hide unreadable (S) + hide unreadable (G) This parameter prevents clients from seeing the existance of files that cannot be read. Defaults to off. - Default: hide unreadable = no + Default: hide unreadable = no + + + hide unwriteable (G) + This parameter prevents clients from seeing + the existance of files that cannot be written to. Defaults to off. + Note that unwriteable directories are shown as usual. + + Default: hide unwriteable = no + + homedir map (G) @@ -4131,8 +4227,22 @@ + + mangling mathod(G) + controls the algorithm used for the generating + the mangled names. Can take two different values, "hash" and + "hash2". "hash" is the default and is the algorithm that has been + used in Samba for many years. "hash2" is a newer and considered + a better algorithm (generates less collisions) in the names. + However, many Win32 applications store the mangled names and so + changing to the new algorithm must not be done + lightly as these applications may break unless reinstalled. + New installations of Samba may set the default to hash2. + Default: mangling method = hash + Example: mangling method = hash2 + + - mangled stack (G) This parameter controls the number of mangled names -- cgit From e38148f78ca631dcbc8a09616c2c91e5ec64c670 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 19 Aug 2002 15:30:26 +0000 Subject: we now receive and parse the main cldap netlogon reply. we still need to parse the core of the structure (This used to be commit 6780ae25bf7ca291f612682dec7ee7ff44c24bef) --- source3/include/asn_1.h | 1 + source3/libsmb/asn1.c | 7 +--- source3/utils/net_ads_cldap.c | 98 ++++++++++++++++++++++++++++++++++++++----- 3 files changed, 91 insertions(+), 15 deletions(-) diff --git a/source3/include/asn_1.h b/source3/include/asn_1.h index 090c5459d1..7783ab4c2f 100644 --- a/source3/include/asn_1.h +++ b/source3/include/asn_1.h @@ -45,6 +45,7 @@ typedef struct { #define ASN1_BOOLEAN 0x1 #define ASN1_INTEGER 0x2 #define ASN1_ENUMERATED 0xa +#define ASN1_SET 0x31 #define ASN1_MAX_OIDS 20 diff --git a/source3/libsmb/asn1.c b/source3/libsmb/asn1.c index c8f832f3df..358c23c146 100644 --- a/source3/libsmb/asn1.c +++ b/source3/libsmb/asn1.c @@ -254,15 +254,12 @@ BOOL asn1_start_tag(ASN1_DATA *data, uint8 tag) asn1_read_uint8(data, &b); if (b & 0x80) { int n = b & 0x7f; - if (n > 2) { - data->has_error = True; - return False; - } asn1_read_uint8(data, &b); nesting->taglen = b; - if (n == 2) { + while (n > 1) { asn1_read_uint8(data, &b); nesting->taglen = (nesting->taglen << 8) | b; + n--; } } else { nesting->taglen = b; diff --git a/source3/utils/net_ads_cldap.c b/source3/utils/net_ads_cldap.c index f707f6beac..77a51d3b7c 100644 --- a/source3/utils/net_ads_cldap.c +++ b/source3/utils/net_ads_cldap.c @@ -23,16 +23,20 @@ #ifdef HAVE_ADS +struct cldap_netlogon_reply { + uint32 i1; +}; + /* do a cldap netlogon query */ -int ads_cldap_netlogon(ADS_STRUCT *ads) +static int send_cldap_netlogon(int sock, const char *domain, + const char *hostname, unsigned ntversion) { ASN1_DATA data; char ntver[4]; - int sock; - SIVAL(ntver, 0, 6); + SIVAL(ntver, 0, ntversion); memset(&data, 0, sizeof(data)); @@ -49,15 +53,14 @@ int ads_cldap_netlogon(ADS_STRUCT *ads) asn1_push_tag(&data, ASN1_CONTEXT(3)); asn1_write_OctetString(&data, "DnsDomain", 9); - asn1_write_OctetString(&data, ads->config.realm, strlen(ads->config.realm)); + asn1_write_OctetString(&data, domain, strlen(domain)); asn1_pop_tag(&data); asn1_push_tag(&data, ASN1_CONTEXT(3)); asn1_write_OctetString(&data, "Host", 4); - asn1_write_OctetString(&data, "blu", 3); + asn1_write_OctetString(&data, hostname, strlen(hostname)); asn1_pop_tag(&data); - asn1_push_tag(&data, ASN1_CONTEXT(3)); asn1_write_OctetString(&data, "NtVer", 5); asn1_write_OctetString(&data, ntver, 4); @@ -77,6 +80,75 @@ int ads_cldap_netlogon(ADS_STRUCT *ads) return -1; } + if (write(sock, data.data, data.length) != data.length) { + d_printf("failed to send cldap query (%s)\n", strerror(errno)); + } + + file_save("cldap_query.dat", data.data, data.length); + asn1_free(&data); + + return 0; +} + + +/* + receive a cldap netlogon reply +*/ +static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) +{ + int ret; + ASN1_DATA data; + DATA_BLOB blob; + DATA_BLOB os1, os2, os3; + + blob = data_blob(NULL, 8192); + + ret = read(sock, blob.data, blob.length); + if (ret <= 0) { + d_printf("no reply to cldap netlogon\n"); + return -1; + } + blob.length = ret; + + file_save("cldap_reply.dat", blob.data, blob.length); + + asn1_load(&data, blob); + asn1_start_tag(&data, ASN1_SEQUENCE(0)); + asn1_read_Integer(&data, &reply->i1); + asn1_start_tag(&data, ASN1_APPLICATION(4)); + asn1_read_OctetString(&data, &os1); + asn1_start_tag(&data, ASN1_SEQUENCE(0)); + asn1_start_tag(&data, ASN1_SEQUENCE(0)); + asn1_read_OctetString(&data, &os2); + asn1_start_tag(&data, ASN1_SET); + asn1_read_OctetString(&data, &os3); + asn1_end_tag(&data); + asn1_end_tag(&data); + asn1_end_tag(&data); + asn1_end_tag(&data); + asn1_end_tag(&data); + + file_save("cldap_reply_core.dat", os3.data, os3.length); + + data_blob_free(&os1); + data_blob_free(&os2); + data_blob_free(&os3); + data_blob_free(&blob); + + return 0; +} + + +/* + do a cldap netlogon query +*/ +int ads_cldap_netlogon(ADS_STRUCT *ads) +{ + int sock; + int ret; + extern pstring global_myname; + struct cldap_netlogon_reply reply; + sock = open_udp_socket(inet_ntoa(ads->ldap_ip), ads->ldap_port); if (sock == -1) { d_printf("Failed to open udp socket to %s:%u\n", @@ -85,10 +157,16 @@ int ads_cldap_netlogon(ADS_STRUCT *ads) return -1; } - write(sock, data.data, data.length); - file_save("cldap_query.dat", data.data, data.length); - asn1_free(&data); - return 0; + ret = send_cldap_netlogon(sock, ads->config.realm, global_myname, 6); + if (ret != 0) { + return ret; + } + + ret = recv_cldap_netlogon(sock, &reply); + + close(sock); + + return ret; } -- cgit From 10e7ae7e7463879b89abaae37f80253a19df3c4f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 19 Aug 2002 15:33:54 +0000 Subject: remove 'admin log' parameter (discussed with Jeremy) remove 'alternate permissions' parameter (deprecated and not used since 2.0) (discussed with tridge) (This used to be commit 6e34651591d1de3293b239195078778ba1d0e565) --- source3/lib/system.c | 3 --- source3/param/loadparm.c | 7 ------- 2 files changed, 10 deletions(-) diff --git a/source3/lib/system.c b/source3/lib/system.c index edda54a78d..8822d3c414 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -1239,9 +1239,6 @@ void sys_adminlog(int priority, const char *format_str, ...) int ret; char **msgbuf = NULL; - if (!lp_admin_log()) - return; - va_start( ap, format_str ); ret = vasprintf( msgbuf, format_str, ap ); va_end( ap ); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index b16f4483f8..a4ca6429d7 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -231,7 +231,6 @@ typedef struct BOOL bReadPrediction; BOOL bReadbmpx; BOOL bSyslogOnly; - BOOL bAdminLog; BOOL bBrowseList; BOOL bNISHomeMap; BOOL bTimeServer; @@ -335,7 +334,6 @@ typedef struct int iOplockContentionLimit; int iCSCPolicy; int iBlock_size; - BOOL bAlternatePerm; BOOL bPreexecClose; BOOL bRootpreexecClose; BOOL bCaseSensitive; @@ -455,7 +453,6 @@ static service sDefault = { 2, /* iOplockContentionLimit */ 0, /* iCSCPolicy */ 1024, /* iBlock_size */ - False, /* bAlternatePerm */ False, /* bPreexecClose */ False, /* bRootpreexecClose */ False, /* case sensitive */ @@ -693,7 +690,6 @@ static struct parm_struct parm_table[] = { {"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC}, {"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_BASIC}, {"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, 0}, - {"alternate permissions", P_BOOL, P_LOCAL, &sDefault.bAlternatePerm, NULL, NULL, FLAG_GLOBAL | FLAG_DEPRECATED}, {"hosts equiv", P_STRING, P_GLOBAL, &Globals.szHostsEquiv, NULL, NULL, 0}, {"min passwd length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, 0}, {"min password length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, 0}, @@ -768,7 +764,6 @@ static struct parm_struct parm_table[] = { {"Logging Options", P_SEP, P_SEPARATOR}, - {"admin log", P_BOOL, P_GLOBAL, &Globals.bAdminLog, NULL, NULL, 0}, {"log level", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, 0}, {"debuglevel", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, 0}, {"syslog", P_INTEGER, P_GLOBAL, &Globals.syslog, NULL, NULL, 0}, @@ -1279,7 +1274,6 @@ static void init_globals(void) Globals.bStripDot = False; Globals.syslog = 1; Globals.bSyslogOnly = False; - Globals.bAdminLog = False; Globals.bTimestampLogs = True; string_set(&Globals.szLogLevel, "0"); Globals.bDebugHiresTimestamp = False; @@ -1574,7 +1568,6 @@ FN_GLOBAL_BOOL(lp_strip_dot, &Globals.bStripDot) FN_GLOBAL_BOOL(lp_encrypted_passwords, &Globals.bEncryptPasswords) FN_GLOBAL_BOOL(lp_update_encrypted, &Globals.bUpdateEncrypt) FN_GLOBAL_BOOL(lp_syslog_only, &Globals.bSyslogOnly) -FN_GLOBAL_BOOL(lp_admin_log, &Globals.bAdminLog) FN_GLOBAL_BOOL(lp_timestamp_logs, &Globals.bTimestampLogs) FN_GLOBAL_BOOL(lp_debug_hires_timestamp, &Globals.bDebugHiresTimestamp) FN_GLOBAL_BOOL(lp_debug_pid, &Globals.bDebugPid) -- cgit From e6873a8f7f4a0bccb0bf9a9baf1a9933c7ee2eb3 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 19 Aug 2002 15:59:14 +0000 Subject: we now parse the cldap reply and print its contents. There are a couple of unknown fields we still need to work out. (This used to be commit 67b4dbd5c9f2665d5e6157b8cd522ebff4b8a4ea) --- source3/utils/net_ads_cldap.c | 86 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/source3/utils/net_ads_cldap.c b/source3/utils/net_ads_cldap.c index 77a51d3b7c..b84ec0e6b4 100644 --- a/source3/utils/net_ads_cldap.c +++ b/source3/utils/net_ads_cldap.c @@ -24,9 +24,59 @@ #ifdef HAVE_ADS struct cldap_netlogon_reply { - uint32 i1; + uint32 version; + uint32 flags; + uint32 unknown[4]; + char *domain; + char *server_name; + char *flatname; + char *server_name2; + char *dns_name; + uint32 unknown2[2]; }; + +/* + pull a length prefixed string from a packet + return number of bytes consumed +*/ +static unsigned pull_len_string(char **ret, const char *p) +{ + unsigned len = *p; + (*ret) = NULL; + if (len == 0) return 1; + (*ret) = strndup(p+1, len); + return len+1; +} + +/* + pull a dotted string from a packet + return number of bytes consumed +*/ +static unsigned pull_dotted_string(char **ret, const char *p) +{ + char *s; + unsigned len, total_len=0; + + (*ret) = NULL; + + while ((len = pull_len_string(&s, p)) > 1) { + if (total_len) { + char *s2; + asprintf(&s2, "%s.%s", *ret, s); + SAFE_FREE(*ret); + (*ret) = s2; + } else { + (*ret) = s; + } + total_len += len; + p += len; + } + + return total_len + 1; +} + + /* do a cldap netlogon query */ @@ -100,6 +150,9 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) ASN1_DATA data; DATA_BLOB blob; DATA_BLOB os1, os2, os3; + uint32 i1; + char *p; + int i; blob = data_blob(NULL, 8192); @@ -114,7 +167,7 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) asn1_load(&data, blob); asn1_start_tag(&data, ASN1_SEQUENCE(0)); - asn1_read_Integer(&data, &reply->i1); + asn1_read_Integer(&data, &i1); asn1_start_tag(&data, ASN1_APPLICATION(4)); asn1_read_OctetString(&data, &os1); asn1_start_tag(&data, ASN1_SEQUENCE(0)); @@ -129,7 +182,25 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) asn1_end_tag(&data); file_save("cldap_reply_core.dat", os3.data, os3.length); - + + p = os3.data; + + reply->version = IVAL(p, 0); p += 4; + reply->flags = IVAL(p, 0); p += 4; + for (i=0;i<4;i++) { + reply->unknown[i] = IVAL(p, 0); + p += 4; + } + p += pull_dotted_string(&reply->domain, p); + p += 2; /* 0xc018 - whats this? */ + p += pull_len_string(&reply->server_name, p); + p += 2; /* 0xc018 - whats this? */ + p += pull_len_string(&reply->flatname, p); + p += 1; + p += pull_len_string(&reply->server_name2, p); + p += 2; + p += pull_len_string(&reply->dns_name, p); + data_blob_free(&os1); data_blob_free(&os2); data_blob_free(&os3); @@ -163,8 +234,15 @@ int ads_cldap_netlogon(ADS_STRUCT *ads) } ret = recv_cldap_netlogon(sock, &reply); - close(sock); + + d_printf("Version: 0x%x\n", reply.version); + d_printf("Flags: 0x%x\n", reply.flags); + d_printf("Domain: %s\n", reply.domain); + d_printf("Server Name: %s\n", reply.server_name); + d_printf("Flatname: %s\n", reply.flatname); + d_printf("Server Name2: %s\n", reply.server_name2); + d_printf("DNS Name: %s\n", reply.dns_name); return ret; } -- cgit From d94046af25ac288014c92858dc2f9017231ab59a Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 19 Aug 2002 16:10:27 +0000 Subject: IFS kit test - don't allow TEMP attribute on directory open. Jeremy. (This used to be commit 81eacd926bd1f7054522351e1bd24a2192dcbbc1) --- source3/smbd/nttrans.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index cf69dfddb0..1337824595 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -689,6 +689,12 @@ int reply_ntcreate_and_X(connection_struct *conn, if(create_options & FILE_DIRECTORY_FILE) { oplock_request = 0; + /* Can't open a temp directory. IFS kit test. */ + if (file_attributes & FILE_ATTRIBUTE_TEMPORARY) { + END_PROFILE(SMBntcreateX); + return ERROR_NT(NT_STATUS_INVALID_PARAMETER); + } + fsp = open_directory(conn, fname, &sbuf, desired_access, smb_open_mode, smb_ofun, unixmode, &smb_action); restore_case_semantics(file_attributes); @@ -1161,6 +1167,12 @@ static int call_nt_transact_create(connection_struct *conn, if(create_options & FILE_DIRECTORY_FILE) { + /* Can't open a temp directory. IFS kit test. */ + if (file_attributes & FILE_ATTRIBUTE_TEMPORARY) { + END_PROFILE(SMBntcreateX); + return ERROR_NT(NT_STATUS_INVALID_PARAMETER); + } + oplock_request = 0; /* -- cgit From a90c9b2ccdbb8e41c54293b57808a6c61a4be8a7 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 19 Aug 2002 16:54:06 +0000 Subject: make IRIX happy (This used to be commit bac73fa972c24503f12968810059745c81fa57a9) --- source3/torture/cmd_vfs.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/source3/torture/cmd_vfs.c b/source3/torture/cmd_vfs.c index 680d5bdfdc..29af3c9a5f 100644 --- a/source3/torture/cmd_vfs.c +++ b/source3/torture/cmd_vfs.c @@ -212,7 +212,9 @@ static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c printf(" T = O_TRUNC\n"); printf(" A = O_APPEND\n"); printf(" N = O_NONBLOCK/O_NDELAY\n"); +#ifdef O_SYNC printf(" S = O_SYNC\n"); +#endif #ifdef O_NOFOLLOW printf(" F = O_NOFOLLOW\n"); #endif @@ -249,9 +251,11 @@ static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c case 'N': flags |= O_NONBLOCK; break; +#ifdef O_SYNC case 'S': flags |= O_SYNC; break; +#endif #ifdef O_NOFOLLOW case 'F': flags |= O_NOFOLLOW; @@ -288,22 +292,22 @@ static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c static NTSTATUS cmd_pathfunc(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) { int ret = -1; - struct func_entry *fptr; - struct func_entry func_table[] = { - { "rmdir", vfs->conn->vfs_ops.rmdir }, - { "unlink", vfs->conn->vfs_ops.unlink }, - { "chdir", vfs->conn->vfs_ops.chdir }, - { NULL } - }; if (argc != 2) { printf("Usage: %s \n", argv[0]); return NT_STATUS_OK; } - for (fptr=func_table; *fptr->name; fptr++) - if (strcmp(fptr->name, argv[0]) == 0 ) - ret = fptr->fn(vfs->conn, argv[1]); + if (strcmp("rmdir", argv[0]) == 0 ) { + ret = vfs->conn->vfs_ops.rmdir(vfs->conn, argv[1]); + } else if (strcmp("unlink", argv[0]) == 0 ) { + ret = vfs->conn->vfs_ops.unlink(vfs->conn, argv[1]); + } else if (strcmp("chdir", argv[0]) == 0 ) { + ret = vfs->conn->vfs_ops.chdir(vfs->conn, argv[1]); + } else { + printf("%s: error=%d (invalid function name!)\n", argv[0], errno); + return NT_STATUS_UNSUCCESSFUL; + } if (ret == -1) { printf("%s: error=%d (%s)\n", argv[0], errno, strerror(errno)); -- cgit From e6fa31d6cb8056b6a0e60e4068e9828599a5689a Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 19 Aug 2002 16:55:29 +0000 Subject: added a generic print_guid utility, and get the byte order handing right (This used to be commit ec2c17c56f06e122868b2a55bc7c292106ad3911) --- source3/lib/util_sid.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source3/lib/util_sid.c b/source3/lib/util_sid.c index ad09f91234..8bb06e8866 100644 --- a/source3/lib/util_sid.c +++ b/source3/lib/util_sid.c @@ -525,3 +525,18 @@ char *sid_binstring(DOM_SID *sid) return s; } + +/* + print a GUID structure for debugging +*/ +void print_guid(GUID *guid) +{ + int i; + + d_printf("%08x-%04x-%04x", + IVAL(guid->info, 0), SVAL(guid->info, 4), SVAL(guid->info, 6)); + d_printf("-%02x%02x-", guid->info[8], guid->info[9]); + for (i=10;iinfo[i]); + d_printf("\n"); +} -- cgit From 42364e1b241d4babd0201f4ce4512c082d27f621 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 19 Aug 2002 16:55:47 +0000 Subject: make rpcclient use print_guid() (This used to be commit f2c48cadb22256564f2ddaa5169812c7c4383ec5) --- source3/rpcclient/cmd_lsarpc.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/source3/rpcclient/cmd_lsarpc.c b/source3/rpcclient/cmd_lsarpc.c index 194e498122..ed68160658 100644 --- a/source3/rpcclient/cmd_lsarpc.c +++ b/source3/rpcclient/cmd_lsarpc.c @@ -86,15 +86,8 @@ static NTSTATUS cmd_lsa_query_info_policy(struct cli_state *cli, printf("forest name is %s\n", forest_name); if (info_class == 12) { - int i; - uint32 *data1 = (uint32 *) dom_guid.info; - uint16 *data2 = (uint16 *) &dom_guid.info[4]; - uint16 *data3 = (uint16 *) &dom_guid.info[6]; - printf("domain GUID is %08x-%04x-%04x", *data1,*data2,*data3); - printf("-%02x%02x-", dom_guid.info[8], dom_guid.info[9]); - for (i=10;i Date: Mon, 19 Aug 2002 16:56:09 +0000 Subject: print out the GUID in the CLDAP reply (This used to be commit 8aae10bcdc05fca4e0281ac91a7679c60b791534) --- source3/utils/net_ads_cldap.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/source3/utils/net_ads_cldap.c b/source3/utils/net_ads_cldap.c index b84ec0e6b4..1bf96fc5d5 100644 --- a/source3/utils/net_ads_cldap.c +++ b/source3/utils/net_ads_cldap.c @@ -26,11 +26,11 @@ struct cldap_netlogon_reply { uint32 version; uint32 flags; - uint32 unknown[4]; + GUID guid; char *domain; char *server_name; - char *flatname; - char *server_name2; + char *domain_flatname; + char *server_flatname; char *dns_name; uint32 unknown2[2]; }; @@ -152,7 +152,6 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) DATA_BLOB os1, os2, os3; uint32 i1; char *p; - int i; blob = data_blob(NULL, 8192); @@ -187,17 +186,15 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) reply->version = IVAL(p, 0); p += 4; reply->flags = IVAL(p, 0); p += 4; - for (i=0;i<4;i++) { - reply->unknown[i] = IVAL(p, 0); - p += 4; - } + memcpy(&reply->guid.info, p, GUID_SIZE); + p += GUID_SIZE; p += pull_dotted_string(&reply->domain, p); p += 2; /* 0xc018 - whats this? */ p += pull_len_string(&reply->server_name, p); p += 2; /* 0xc018 - whats this? */ - p += pull_len_string(&reply->flatname, p); + p += pull_len_string(&reply->domain_flatname, p); p += 1; - p += pull_len_string(&reply->server_name2, p); + p += pull_len_string(&reply->server_flatname, p); p += 2; p += pull_len_string(&reply->dns_name, p); @@ -237,11 +234,13 @@ int ads_cldap_netlogon(ADS_STRUCT *ads) close(sock); d_printf("Version: 0x%x\n", reply.version); + d_printf("GUID: "); + print_guid(&reply.guid); d_printf("Flags: 0x%x\n", reply.flags); d_printf("Domain: %s\n", reply.domain); d_printf("Server Name: %s\n", reply.server_name); - d_printf("Flatname: %s\n", reply.flatname); - d_printf("Server Name2: %s\n", reply.server_name2); + d_printf("Flatname: %s\n", reply.domain_flatname); + d_printf("Server Name2: %s\n", reply.server_flatname); d_printf("DNS Name: %s\n", reply.dns_name); return ret; -- cgit From 0aef8b2ea64afb96bdf4d65689af775215b9ee37 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 19 Aug 2002 17:26:00 +0000 Subject: the SMBD_SELECT_TIMEOUT_WITH_PENDING_LOCKS macro isn't needed any more (This used to be commit 341bb9fb78a2e750f05a902e020ba352e26ca030) --- source3/include/local.h | 1 - 1 file changed, 1 deletion(-) diff --git a/source3/include/local.h b/source3/include/local.h index 2538715c41..46349cfa6d 100644 --- a/source3/include/local.h +++ b/source3/include/local.h @@ -126,7 +126,6 @@ #define IDLE_CLOSED_TIMEOUT (60) #define DPTR_IDLE_TIMEOUT (120) #define SMBD_SELECT_TIMEOUT (60) -#define SMBD_SELECT_TIMEOUT_WITH_PENDING_LOCKS (10) #define NMBD_SELECT_LOOP (10) #define BROWSE_INTERVAL (60) #define REGISTRATION_INTERVAL (10*60) -- cgit From 1040d27b14032cc609f1bffcb0e1c40622e8b536 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 19 Aug 2002 17:49:37 +0000 Subject: fixed memory corruption in cli_full_connection() (This used to be commit 7c2167182becbf72ba062230e911d55d337a4709) --- source3/libsmb/cliconnect.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 93cf3d95db..73846c4d43 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -1162,8 +1162,7 @@ again: char *p; DEBUG(1,("session request to %s failed (%s)\n", called.name, cli_errstr(cli))); - cli_shutdown(cli); - if ((p=strchr(called.name, '.'))) { + if ((p=strchr(called.name, '.')) && !is_ipaddress(called.name)) { *p = 0; goto again; } -- cgit From 0386a8ac77fcb283f932fa514a16bd3d1aec7ad1 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 19 Aug 2002 18:05:06 +0000 Subject: More smb.conf manpage updates: add printer command -> addprinter command delete printer command -> deleteprinter command display charset dos charset hide unwriteable -> hide unwriteable files hostname lookups name cache timeout ntlm auth paranoid server security realm smb ports unicode unix charset wtmp directory wins partners block size vfspath (This used to be commit 80a25fe365ac83b7331fa95b3287dd275a229fdc) --- docs/docbook/manpages/smb.conf.5.sgml | 217 ++++++++++++++++++++++++++++++---- 1 file changed, 194 insertions(+), 23 deletions(-) diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index 299379659f..9dc3ae3bbf 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -595,7 +595,7 @@ abort shutdown script add group script - add printer command + addprinter command add share command add user script add user to group script @@ -621,27 +621,30 @@ debuglevel default default service - delete printer command + deleteprinter command delete share command delete user script delete user from group script dfree command disable netbios disable spoolss + disable charset dns proxy domain admin group domain guest group domain logons domain master + dos charset encrypt passwords enhanced browsing enumports command getwd cache hide local users hide unreadable - hide unwriteable + hide unwriteable files homedir map host msdfs + hostname lookups hosts equiv interfaces keepalive @@ -689,11 +692,13 @@ min password length min protocol min wins ttl + name cache timeout name resolve order netbios aliases netbios name netbios scope nis homedir + ntlm auth non unix account range nt pipe support nt status support @@ -704,6 +709,7 @@ os2 driver map pam password change panic action + paranoid server security passdb backend passwd chat passwd chat debug @@ -721,6 +727,7 @@ read bmpx read raw read size + realm remote announce remote browse sync restrict anonymous @@ -732,6 +739,7 @@ show add printer wizard shutdown script smb passwd file + smb ports socket address socket options source environment @@ -747,6 +755,8 @@ time server timestamp logs total print jobs + unicode + unix charset unix extensions unix password sync update encrypted @@ -756,6 +766,7 @@ username map utmp utmp directory + wtmp directory winbind cache time winbind enum users winbind enum groups @@ -764,6 +775,7 @@ winbind uid winbind use default domain wins hook + wins partners wins proxy wins server wins support @@ -784,7 +796,7 @@ allow hosts available blocking locks - block size +block size browsable browseable case sensitive @@ -896,6 +908,7 @@ valid users veto files veto oplock files + vfs path vfs object vfs options volume @@ -930,7 +943,7 @@ - add printer command (G) + addprinter command (G) With the introduction of MS-RPC based printing support for Windows NT/2000 clients in Samba 2.2, The MS Add Printer Wizard (APW) icon is now also available in the @@ -947,7 +960,7 @@ shared by smbd(8) . - The add printer command is + The addprinter command is automatically invoked with the following parameter (in order: @@ -967,14 +980,14 @@ only. The remaining fields in the structure are generated from answers to the APW questions. - Once the add printer command has + Once the addprinter command has been executed, smbd will reparse the smb.conf to determine if the share defined by the APW exists. If the sharename is still invalid, then smbd will return an ACCESS_DENIED error to the client. See also - delete printer command, , printing, show add printer wizard @@ -1024,7 +1037,7 @@ This parameter is only used for add file shares. To add printer shares, - see the add printer + see the addprinter command. @@ -1862,7 +1875,7 @@ - delete printer command (G) + deleteprinter command (G) With the introduction of MS-RPC based printer support for Windows NT/2000 clients in Samba 2.2, it is now possible to delete printer at run time by issuing the @@ -1875,19 +1888,19 @@ from the print system and from smb.conf. - The delete printer command is + The deleteprinter command is automatically called with only one parameter: "printer name". - Once the delete printer command has + Once the deleteprinter command has been executed, smbd will reparse the smb.conf to associated printer no longer exists. If the sharename is still valid, then smbd will return an ACCESS_DENIED error to the client. See also - add printer command, , printing, show add printer wizard @@ -1946,7 +1959,7 @@ This parameter is only used to remove file shares. To delete printer shares, - see the delete printer + see the deleteprinter command. @@ -2230,6 +2243,19 @@ + + display charset (G) + Specifies the charset that samba will use + to print messages to stdout and stderr and SWAT will use. + Should generally be the same as the unix charset. + + + Default: display charset = ASCII + + Example: display charset = UTF8 + + + @@ -2374,7 +2400,20 @@ + + dos charset (G) + DOS SMB clients assume the server has + the same charset as they do. This option specifies which + charset Samba should talk to DOS clients. + + The default depends on which charsets you have instaled. + Samba tries to use charset 850 but falls back to ASCII in + case it is not available. Run testparm(1) + to check the default on your system. + + + dos filemode (S) @@ -2661,8 +2700,7 @@ - force directory - security mode (S) + force directory security mode (S) This parameter controls what UNIX permission bits can be modified when a Windows NT client is manipulating the UNIX permission on a directory using the native NT security dialog box. @@ -2733,8 +2771,6 @@ - - force security mode (S) This parameter controls what UNIX permission @@ -2768,6 +2804,8 @@ Example: force security mode = 700 + + @@ -2968,7 +3006,7 @@ - hide unwriteable (G) + hide unwriteable files (G) This parameter prevents clients from seeing the existance of files that cannot be written to. Defaults to off. Note that unwriteable directories are shown as usual. @@ -3028,6 +3066,21 @@ Default: host msdfs = no + + + hostname lookups (G) + Specifies whether samba should use (expensive) + hostname lookups or use the ip addresses instead. An example place + where hostname lookups are currently used is when checking + the hosts deny and hosts allow. + + + Default: hostname lookups = yes + + Example: hostname lookups = no + + + @@ -4228,7 +4281,7 @@ - mangling mathod(G) + mangling method (G) controls the algorithm used for the generating the mangled names. Can take two different values, "hash" and "hash2". "hash" is the default and is the algorithm that has been @@ -4780,6 +4833,18 @@ + + name cache timeout (G) + Specifies the number of seconds it takes before + entries in samba's hostname resolve cache time out. If + the timeout is set to 0. the caching is disabled. + + + + Default: name cache timeout = 660 + Example: name cache timeout = 0 + + name resolve order (G) @@ -5127,7 +5192,19 @@ + + ntlm auth (G) + This parameter determines whether or not smbd will + attempt to authenticate users using the NTLM password hash. + If disabled, only the lanman password hashes will be used. + + Please note that at least this option or lanman auth should be enabled in order to be able to log in. + + + Default : ntlm auth = yes + + os level (G) @@ -5208,6 +5285,18 @@ + + paranoid server security (G) + Some version of NT 4.x allow non-guest + users with a bad passowrd. When this option is enabled, samba will not + use a broken NT 4.x server as password server, but instead complain + to the logs and exit. + + + Default: paranoid server security = no + + + passdb backend (G) @@ -6306,6 +6395,18 @@ + + realm (G) + + This option specifies the kerberos realm to use. The realm is + used as the ADS equivalent of the NT4domain. It + is usually set to the DNS name of the kerberos server. + + + Default: realm = + Example: realm = mysambabox.mycompany.com + + remote announce (G) @@ -6965,7 +7066,16 @@ + + smb ports (G) + Specifies which ports the server should listen on + for SMB traffic. + + Default: smb ports = 445 139 + + + socket address (G) @@ -7342,8 +7452,27 @@ + + unicode (G) + Specifies whether Samba should try + to use unicode on the wire by default. + + + Default: unicode = yes + + + + unix charset (G) + Specifies the charset the unix machine + Samba runs on uses. Samba needs to know this in order to be able to + convert text to the charsets other SMB clients use. + + + Default: unix charset = ASCII + + unix extensions(G) @@ -7709,8 +7838,6 @@ - - utmp directory(G) This parameter is only available if Samba has @@ -7724,11 +7851,30 @@ /var/run/utmp on Linux). Default: no utmp directory + Example: utmp directory = /var/run/utmp + + wtmp directory(G) + This parameter is only available if Samba has + been configured and compiled with the option + --with-utmp. It specifies a directory pathname that is + used to store the wtmp or wtmpx files (depending on the UNIX system) that + record user connections to a Samba server. The difference with + the utmp directory is the fact that user info is kept after a user + has logged out. + + See also the + utmp parameter. By default this is + not set, meaning the system will use whatever utmp file the + native system is set to use (usually + /var/run/wtmp on Linux). - + Default: no wtmp directory + Example: wtmp directory = /var/log/wtmp + + @@ -7832,7 +7978,18 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ + + vfs path (S) + This parameter specifies the directory + to look in for vfs modules. The name of every vfs object + will be prepended by this directory + + Default: vfs path = + Example: vfs path = /usr/lib/samba/vfs + + + vfs object (S) @@ -8203,6 +8360,20 @@ veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ + + wins partners (G) + A space separated list of partners' IP addresses for + WINS replication. WINS partners are always defined as push/pull + partners as defining only one way WINS replication is unreliable. + WINS replication is currently experimental and unreliable between + samba servers. + + + Default: wins partners = + + Example: wins partners = 192.168.0.1 172.16.1.2 + + -- cgit From 64456bf3c037fb640d8a5f97cded2db5ca533bd3 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 19 Aug 2002 18:06:07 +0000 Subject: fix typo auth/auth_server.c remove unused 'max packet' and 'packet size' options (This used to be commit 6a787a695db65688916464a9b0e2a9024b131eee) --- source3/auth/auth_server.c | 2 +- source3/param/loadparm.c | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/source3/auth/auth_server.c b/source3/auth/auth_server.c index 23faedc0ba..f227c9125c 100644 --- a/source3/auth/auth_server.c +++ b/source3/auth/auth_server.c @@ -285,7 +285,7 @@ static NTSTATUS check_smbserver_security(const struct auth_context *auth_context * need to detect this as some versions of NT4.x are broken. JRA. */ - /* I sure as hell hope that there arn't servers out there that take + /* I sure as hell hope that there aren't servers out there that take * NTLMv2 and have this bug, as we don't test for that... * - abartlet@samba.org */ diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index a4ca6429d7..b3d1ac5030 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -171,7 +171,6 @@ typedef struct int max_xmit; int max_mux; int max_open_files; - int max_packet; int pwordlevel; int unamelevel; int deadtime; @@ -799,8 +798,6 @@ static struct parm_struct parm_table[] = { {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, 0}, {"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, 0}, - {"max packet", P_INTEGER, P_GLOBAL, &Globals.max_packet, NULL, NULL, 0}, - {"packet size", P_INTEGER, P_GLOBAL, &Globals.max_packet, NULL, NULL, 0}, {"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, 0}, {"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, 0}, {"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, 0}, @@ -1245,7 +1242,6 @@ static void init_globals(void) Globals.bAlgorithmicRidBase = BASE_RID; Globals.bLoadPrinters = True; - Globals.max_packet = 65535; Globals.mangled_stack = 50; Globals.max_xmit = 65535; Globals.max_mux = 50; /* This is *needed* for profile support. */ -- cgit From c0ac93697ec4c4aa0000c0577ae474a34e686950 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 19 Aug 2002 19:12:26 +0000 Subject: Added comment about our implementation of the trans2 SMB_FILE_INTERNAL_INFORMATION possibly causing the failure of one of the IFSKIT tests. (This used to be commit ca73d24307fcf60e4b7bfe574287b2a84c5d86c8) --- source3/smbd/trans2.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index a66c029286..8da55ba4ec 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -1842,7 +1842,12 @@ static int call_trans2qfilepathinfo(connection_struct *conn, break; case SMB_FILE_INTERNAL_INFORMATION: - /* This should be an index number - looks like dev/ino to me :-) */ + /* This should be an index number - looks like + dev/ino to me :-) + + I think this causes us to fail the IFSKIT + BasicFileInformationTest. -tpot */ + SIVAL(pdata,0,sbuf.st_dev); SIVAL(pdata,4,sbuf.st_ino); data_size = 8; -- cgit From cdf328bd3ca77ec6878d291cf7a4f37b8891133b Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 19 Aug 2002 19:50:54 +0000 Subject: a new icon for the upcoming wizard (This used to be commit 2d1c7797ffd413bf64e469356cd88bf550134f42) --- swat/images/wizard.gif | Bin 0 -> 853 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 swat/images/wizard.gif diff --git a/swat/images/wizard.gif b/swat/images/wizard.gif new file mode 100644 index 0000000000..a2474e0f00 Binary files /dev/null and b/swat/images/wizard.gif differ -- cgit From 11b71419b0bcefc90c1567f31268151aee81098c Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 19 Aug 2002 21:17:22 +0000 Subject: add support for the "value,OID" format described in MSDN. I've not seen this on a real network, but we support it now :-) (This used to be commit 1ed6f68f6f29e1a62b12764ec5e84de8351efbd3) --- source3/rpc_server/srv_spoolss_nt.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index ae478d7c68..ae7cf2d953 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -7919,7 +7919,9 @@ WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u, Printer_entry *Printer = find_printer_index_by_hnd(p, handle); fstring valuename; fstring keyname; - + char *oid_string; + UNISTR2 uni_oid; + DEBUG(4,("_spoolss_setprinterdataex\n")); /* From MSDN documentation of SetPrinterDataEx: pass request to @@ -7953,11 +7955,39 @@ WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u, unistr2_to_ascii( valuename, &q_u->value, sizeof(valuename) - 1); unistr2_to_ascii( keyname, &q_u->key, sizeof(keyname) - 1); + + /* check for OID in valuename */ + + if ( (oid_string = strchr( valuename, ',' )) != NULL ) + { + *oid_string = '\0'; + oid_string++; + } /* save the registry data */ status = set_printer_dataex( printer, keyname, valuename, type, data, real_len ); + + /* save the OID if one was specified and the previous set call succeeded */ + + if ( W_ERROR_IS_OK(status) && oid_string ) + { + fstrcat( keyname, "\\" ); + fstrcat( keyname, SPOOL_OID_KEY ); + + /* + * I'm not checking the status here on purpose. Don't know + * if this is right, but I'm returning the status from the + * previous set_printer_dataex() call. I have no idea if + * this is right. --jerry + */ + + init_unistr2( &uni_oid, oid_string, strlen(oid_string)+1 ); + set_printer_dataex( printer, keyname, valuename, + REG_SZ, (void*)uni_oid.buffer, uni_oid.uni_str_len*sizeof(uint16) ); + } + free_a_printer(&printer, 2); return status; -- cgit From 2c52b62df05642ae25216a47554f6fb7f23639a4 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 19 Aug 2002 23:32:12 +0000 Subject: Fix syntax errors (This used to be commit 2e6aa71c964a94c7b02fd61c14d9078c24ffb66d) --- docs/docbook/manpages/vfstest.1.sgml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/docbook/manpages/vfstest.1.sgml b/docs/docbook/manpages/vfstest.1.sgml index daa52d5d4b..fe1d7560d0 100644 --- a/docs/docbook/manpages/vfstest.1.sgml +++ b/docs/docbook/manpages/vfstest.1.sgml @@ -1,5 +1,5 @@ - + vfstest @@ -45,8 +45,7 @@ -c|--command=command Execute the specified (colon-seperated) commands. See below for the commands that are available. - - + @@ -137,7 +136,6 @@ - VERSION -- cgit From 03615599919f94c5ed56e9824343b02f4f3e0b71 Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Tue, 20 Aug 2002 00:20:23 +0000 Subject: fix irix compiler error (This used to be commit 4df7983487545a432cfa8832eae1afbdf7866060) --- source3/libsmb/namecache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c index fc09d8eac2..e69d462268 100644 --- a/source3/libsmb/namecache.c +++ b/source3/libsmb/namecache.c @@ -29,7 +29,7 @@ static TDB_CONTEXT *namecache_tdb; struct nc_value { time_t expiry; /* When entry expires */ int count; /* Number of addresses */ - struct in_addr ip_list[0]; /* Address list */ + struct in_addr *ip_list; /* Address list */ }; /* Initialise namecache system */ -- cgit From 8674440d81f703cb59979426c92ed54de8e5f2ed Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 20 Aug 2002 01:54:28 +0000 Subject: Based orginally by work by Kai, this patch moves our NT_TOKEN generation into our authenticaion code - removing some of the duplication from the current code. This also gets us *much* closer to supporting a real SAM backend, becouse the SAM can give us the right info then. This also changes our service.c code, so that we do a VUID (rather than uid) cache on the connection struct, and do full NT ACL/NT_TOKEN checks (or cached equivilant) on every packet, for the same r or rw mode the whole share was open for. Andrew Bartlett (This used to be commit d8122cee059fc7098bfa7e42e638a9958b3ac902) --- source3/auth/auth_builtin.c | 9 +- source3/auth/auth_sam.c | 6 +- source3/auth/auth_server.c | 4 +- source3/auth/auth_util.c | 494 ++++++++++++++++++++++++++++++------- source3/auth/auth_winbind.c | 2 +- source3/include/local.h | 2 +- source3/include/smb.h | 7 +- source3/rpc_server/srv_pipe.c | 35 +-- source3/rpc_server/srv_srvsvc_nt.c | 6 +- source3/smbd/conn.c | 24 +- source3/smbd/password.c | 156 +++--------- source3/smbd/service.c | 35 +-- source3/smbd/sesssetup.c | 4 +- source3/smbd/uid.c | 38 +-- 14 files changed, 536 insertions(+), 286 deletions(-) diff --git a/source3/auth/auth_builtin.c b/source3/auth/auth_builtin.c index 5ce7075ab9..bba1ad98bd 100644 --- a/source3/auth/auth_builtin.c +++ b/source3/auth/auth_builtin.c @@ -41,13 +41,8 @@ static NTSTATUS check_guest_security(const struct auth_context *auth_context, NTSTATUS nt_status = NT_STATUS_LOGON_FAILURE; if (!(user_info->internal_username.str - && *user_info->internal_username.str)) { - if (make_server_info_guest(server_info)) { - nt_status = NT_STATUS_OK; - } else { - nt_status = NT_STATUS_NO_SUCH_USER; - } - } + && *user_info->internal_username.str)) + nt_status = make_server_info_guest(server_info); return nt_status; } diff --git a/source3/auth/auth_sam.c b/source3/auth/auth_sam.c index 155370546a..50f1e5dac9 100644 --- a/source3/auth/auth_sam.c +++ b/source3/auth/auth_sam.c @@ -403,9 +403,9 @@ static NTSTATUS check_sam_security(const struct auth_context *auth_context, return nt_status; } - if (!make_server_info_sam(server_info, sampass)) { - DEBUG(0,("failed to malloc memory for server_info\n")); - return NT_STATUS_NO_MEMORY; + if (!NT_STATUS_IS_OK(nt_status = make_server_info_sam(server_info, sampass))) { + DEBUG(0,("failed to malloc memory for server_info ret: %s\n", nt_errstr(nt_status))); + return nt_status; } lm_hash = pdb_get_lanman_passwd((*server_info)->sam_account); diff --git a/source3/auth/auth_server.c b/source3/auth/auth_server.c index f227c9125c..0ed905e79c 100644 --- a/source3/auth/auth_server.c +++ b/source3/auth/auth_server.c @@ -375,9 +375,7 @@ use this machine as the password server.\n")); if NT_STATUS_IS_OK(nt_status) { struct passwd *pass = Get_Pwnam(user_info->internal_username.str); if (pass) { - if (!make_server_info_pw(server_info, pass)) { - nt_status = NT_STATUS_NO_MEMORY; - } + nt_status = make_server_info_pw(server_info, pass); } else { nt_status = NT_STATUS_NO_SUCH_USER; } diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index f914d91871..51b8005634 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -26,6 +26,11 @@ #define DBGC_CLASS DBGC_AUTH extern pstring global_myname; +extern DOM_SID global_sid_World; +extern DOM_SID global_sid_Network; +extern DOM_SID global_sid_Builtin_Guests; +extern DOM_SID global_sid_Authenticated_Users; + /**************************************************************************** Create a UNIX user on demand. @@ -455,37 +460,298 @@ BOOL make_user_info_guest(auth_usersupplied_info **user_info) auth_flags, True); } +/**************************************************************************** + prints a NT_USER_TOKEN to debug output. +****************************************************************************/ + +void debug_nt_user_token(int dbg_class, int dbg_lev, NT_USER_TOKEN *token) +{ + fstring sid_str; + int i; + + DEBUGC(dbg_class, dbg_lev, ("NT user token of user %s\n", + sid_to_string(sid_str, &token->user_sids[0]) )); + DEBUGADDC(dbg_class, dbg_lev, ("contains %i SIDs\n", token->num_sids)); + for (i = 0; i < token->num_sids; i++) + DEBUGADDC(dbg_class, dbg_lev, ("SID[%3i]: %s\n", i, + sid_to_string(sid_str, &token->user_sids[i]))); +} + +/**************************************************************************** + Create the SID list for this user. +****************************************************************************/ + +static NTSTATUS create_nt_user_token(const DOM_SID *user_sid, const DOM_SID *group_sid, + int n_groupSIDs, DOM_SID *groupSIDs, + BOOL is_guest, NT_USER_TOKEN **token) +{ + NTSTATUS nt_status = NT_STATUS_OK; + NT_USER_TOKEN *ptoken; + int i; + int sid_ndx; + + if ((ptoken = malloc( sizeof(NT_USER_TOKEN) ) ) == NULL) { + DEBUG(0, ("create_nt_token: Out of memory allocating token\n")); + nt_status = NT_STATUS_NO_MEMORY; + return nt_status; + } + + ZERO_STRUCTP(ptoken); + + ptoken->num_sids = n_groupSIDs + 5; + + if ((ptoken->user_sids = (DOM_SID *)malloc( sizeof(DOM_SID) * ptoken->num_sids )) == NULL) { + DEBUG(0, ("create_nt_token: Out of memory allocating SIDs\n")); + nt_status = NT_STATUS_NO_MEMORY; + return nt_status; + } + + memset((char*)ptoken->user_sids,0,sizeof(DOM_SID) * ptoken->num_sids); + + /* + * Note - user SID *MUST* be first in token ! + * se_access_check depends on this. + * + * Primary group SID is second in token. Convention. + */ + + sid_copy(&ptoken->user_sids[PRIMARY_USER_SID_INDEX], user_sid); + if (group_sid) + sid_copy(&ptoken->user_sids[PRIMARY_GROUP_SID_INDEX], group_sid); + + /* + * Finally add the "standard" SIDs. + * The only difference between guest and "anonymous" (which we + * don't really support) is the addition of Authenticated_Users. + */ + + sid_copy(&ptoken->user_sids[2], &global_sid_World); + sid_copy(&ptoken->user_sids[3], &global_sid_Network); + + if (is_guest) + sid_copy(&ptoken->user_sids[4], &global_sid_Builtin_Guests); + else + sid_copy(&ptoken->user_sids[4], &global_sid_Authenticated_Users); + + sid_ndx = 5; /* next available spot */ + + for (i = 0; i < n_groupSIDs; i++) { + int check_sid_idx; + for (check_sid_idx = 1; check_sid_idx < ptoken->num_sids; check_sid_idx++) { + if (sid_equal(&ptoken->user_sids[check_sid_idx], + &groupSIDs[i])) { + break; + } + } + + if (check_sid_idx >= ptoken->num_sids) /* Not found already */ { + sid_copy(&ptoken->user_sids[sid_ndx++], &groupSIDs[i]); + } else { + ptoken->num_sids--; + } + } + + debug_nt_user_token(DBGC_AUTH, 10, ptoken); + + *token = ptoken; + + return nt_status; +} + +/**************************************************************************** + Create the SID list for this user. +****************************************************************************/ + +NT_USER_TOKEN *create_nt_token(uid_t uid, gid_t gid, int ngroups, gid_t *groups, BOOL is_guest) +{ + DOM_SID user_sid; + DOM_SID group_sid; + DOM_SID *group_sids; + NT_USER_TOKEN *token; + int i; + + if (!uid_to_sid(&user_sid, uid)) { + return NULL; + } + if (!gid_to_sid(&group_sid, gid)) { + return NULL; + } + + group_sids = malloc(sizeof(DOM_SID) * ngroups); + if (!group_sids) { + DEBUG(0, ("create_nt_token: malloc() failed for DOM_SID list!\n")); + return NULL; + } + + for (i = 0; i < ngroups; i++) { + if (!gid_to_sid(&(group_sids)[i], (groups)[i])) { + DEBUG(1, ("create_nt_token: failed to convert gid %ld to a sid!\n", (long int)groups[i])); + SAFE_FREE(group_sids); + return NULL; + } + } + + if (!NT_STATUS_IS_OK(create_nt_user_token(&user_sid, &group_sid, + ngroups, group_sids, is_guest, &token))) { + SAFE_FREE(group_sids); + return NULL; + } + + SAFE_FREE(group_sids); + + return token; +} + +/****************************************************************************** + * this function returns the groups (SIDs) of the local SAM the user is in. + * If this samba server is a DC of the domain the user belongs to, it returns + * both domain groups and local / builtin groups. If the user is in a trusted + * domain, or samba is a member server of a domain, then this function returns + * local and builtin groups the user is a member of. + * + * currently this is a hack, as there is no sam implementation that is capable + * of groups. + ******************************************************************************/ + +static NTSTATUS get_user_groups_from_local_sam(const DOM_SID *user_sid, + int *n_groups, DOM_SID **groups, gid_t **unix_groups) +{ + uid_t uid; + enum SID_NAME_USE snu; + fstring str; + int n_unix_groups; + int i; + struct passwd *usr; + + *n_groups = 0; + *groups = NULL; + + if (!sid_to_uid(user_sid, &uid, &snu)) { + DEBUG(2, ("get_user_groups_from_local_sam: Failed to convert user SID %s to a uid!\n", sid_to_string(str, user_sid))); + return NT_STATUS_NO_SUCH_USER; + } + + usr = getpwuid_alloc(uid); + + n_unix_groups = groups_max(); + if ((*unix_groups = malloc( sizeof(gid_t) * groups_max() ) ) == NULL) { + DEBUG(0, ("get_user_groups_from_local_sam: Out of memory allocating unix group list\n")); + passwd_free(&usr); + return NT_STATUS_NO_MEMORY; + } + + if (sys_getgrouplist(usr->pw_name, usr->pw_gid, *unix_groups, &n_unix_groups) == -1) { + *unix_groups = realloc(unix_groups, sizeof(gid_t) * n_unix_groups); + if (sys_getgrouplist(usr->pw_name, usr->pw_gid, *unix_groups, &n_unix_groups) == -1) { + DEBUG(0, ("get_user_groups_from_local_sam: failed to get the unix group list\n")); + SAFE_FREE(unix_groups); + passwd_free(&usr); + return NT_STATUS_NO_SUCH_USER; /* what should this return value be? */ + } + } + + passwd_free(&usr); + + DEBUG(5,("get_user_groups_from_local_sam: user is in the unix following groups\n")); + for (i = 0; i < n_unix_groups; i++) + DEBUGADD(5,("supplementary group gid:%ld\n",(long int)(*unix_groups)[i])); + + *groups = malloc(sizeof(DOM_SID) * n_unix_groups); + if (!*groups) { + DEBUG(0, ("get_user_group_from_local_sam: malloc() failed for DOM_SID list!\n")); + SAFE_FREE(unix_groups); + return NT_STATUS_NO_MEMORY; + } + + *n_groups = n_unix_groups; + + for (i = 0; i < *n_groups; i++) { + if (!gid_to_sid(&(*groups)[i], (*unix_groups)[i])) { + DEBUG(1, ("get_user_groups_from_local_sam: failed to convert gid %ld to a sid!\n", (long int)unix_groups[i+1])); + SAFE_FREE(groups); + SAFE_FREE(unix_groups); + return NT_STATUS_NO_SUCH_USER; + } + } + + return NT_STATUS_OK; +} + /*************************************************************************** Make a user_info struct ***************************************************************************/ -static BOOL make_server_info(auth_serversupplied_info **server_info) +static NTSTATUS make_server_info(auth_serversupplied_info **server_info, SAM_ACCOUNT *sampass) { *server_info = malloc(sizeof(**server_info)); if (!*server_info) { DEBUG(0,("make_server_info: malloc failed!\n")); - return False; + return NT_STATUS_NO_MEMORY; } ZERO_STRUCTP(*server_info); - return True; + + (*server_info)->sam_fill_level = SAM_FILL_ALL; + (*server_info)->sam_account = sampass; + + return NT_STATUS_OK; } /*************************************************************************** Make (and fill) a user_info struct from a SAM_ACCOUNT ***************************************************************************/ -BOOL make_server_info_sam(auth_serversupplied_info **server_info, SAM_ACCOUNT *sampass) +NTSTATUS make_server_info_sam(auth_serversupplied_info **server_info, + SAM_ACCOUNT *sampass) { - if (!make_server_info(server_info)) { - return False; + NTSTATUS nt_status = NT_STATUS_OK; + const DOM_SID *user_sid = pdb_get_user_sid(sampass); + const DOM_SID *group_sid = pdb_get_group_sid(sampass); + int n_groupSIDs = 0; + DOM_SID *groupSIDs = NULL; + gid_t *unix_groups = NULL; + NT_USER_TOKEN *token; + BOOL is_guest; + uint32 rid; + + if (!NT_STATUS_IS_OK(nt_status = make_server_info(server_info, sampass))) { + return nt_status; } + + if (!NT_STATUS_IS_OK(nt_status + = get_user_groups_from_local_sam(pdb_get_user_sid(sampass), + &n_groupSIDs, &groupSIDs, &unix_groups))) + { + DEBUG(4,("get_user_groups_from_local_sam failed\n")); + free_server_info(server_info); + return nt_status; + } + + is_guest = (sid_peek_rid(user_sid, &rid) && rid == DOMAIN_USER_RID_GUEST); - (*server_info)->sam_fill_level = SAM_FILL_ALL; - (*server_info)->sam_account = sampass; + if (!NT_STATUS_IS_OK(nt_status = create_nt_user_token(user_sid, group_sid, + n_groupSIDs, groupSIDs, is_guest, + &token))) + { + DEBUG(4,("create_nt_user_token failed\n")); + SAFE_FREE(groupSIDs); + SAFE_FREE(unix_groups); + free_server_info(server_info); + return nt_status; + } + + SAFE_FREE(groupSIDs); + + (*server_info)->n_groups = n_groupSIDs; + (*server_info)->groups = unix_groups; + + (*server_info)->ptok = token; + + debug_nt_user_token(DBGC_AUTH, 5, token); DEBUG(5,("make_server_info_sam: made server info for user %s\n", pdb_get_username((*server_info)->sam_account))); - return True; + + return nt_status; } /*************************************************************************** @@ -493,75 +759,42 @@ BOOL make_server_info_sam(auth_serversupplied_info **server_info, SAM_ACCOUNT *s to a SAM_ACCOUNT ***************************************************************************/ -BOOL make_server_info_pw(auth_serversupplied_info **server_info, const struct passwd *pwd) +NTSTATUS make_server_info_pw(auth_serversupplied_info **server_info, const struct passwd *pwd) { + NTSTATUS nt_status; SAM_ACCOUNT *sampass = NULL; - if (!NT_STATUS_IS_OK(pdb_init_sam_pw(&sampass, pwd))) { - return False; + if (!NT_STATUS_IS_OK(nt_status = pdb_init_sam_pw(&sampass, pwd))) { + return nt_status; } return make_server_info_sam(server_info, sampass); } /*************************************************************************** - Free a user_info struct + Make (and fill) a user_info struct for a guest login. ***************************************************************************/ -void free_user_info(auth_usersupplied_info **user_info) +NTSTATUS make_server_info_guest(auth_serversupplied_info **server_info) { - DEBUG(5,("attempting to free (and zero) a user_info structure\n")); - if (*user_info != NULL) { - if ((*user_info)->smb_name.str) { - DEBUG(10,("structure was created for %s\n", (*user_info)->smb_name.str)); - } - SAFE_FREE((*user_info)->smb_name.str); - SAFE_FREE((*user_info)->internal_username.str); - SAFE_FREE((*user_info)->client_domain.str); - SAFE_FREE((*user_info)->domain.str); - SAFE_FREE((*user_info)->wksta_name.str); - data_blob_free(&(*user_info)->lm_resp); - data_blob_free(&(*user_info)->nt_resp); - SAFE_FREE((*user_info)->interactive_password); - data_blob_clear_free(&(*user_info)->plaintext_password); - ZERO_STRUCT(**user_info); + NTSTATUS nt_status; + SAM_ACCOUNT *sampass = NULL; + DOM_SID guest_sid; + + if (!NT_STATUS_IS_OK(nt_status = pdb_init_sam(&sampass))) { + return nt_status; } - SAFE_FREE(*user_info); -} -/*************************************************************************** - Clear out a server_info struct that has been allocated -***************************************************************************/ + sid_copy(&guest_sid, get_global_sam_sid()); + sid_append_rid(&guest_sid, DOMAIN_USER_RID_GUEST); -void free_server_info(auth_serversupplied_info **server_info) -{ - if (*server_info != NULL) { - pdb_free_sam(&(*server_info)->sam_account); - - /* call pam_end here, unless we know we are keeping it */ - delete_nt_token( &(*server_info)->ptok ); - ZERO_STRUCT(**server_info); + if (!pdb_getsampwsid(sampass, &guest_sid)) { + return NT_STATUS_NO_SUCH_USER; } - SAFE_FREE(*server_info); -} -/*************************************************************************** - Make a server_info struct for a guest user -***************************************************************************/ + nt_status = make_server_info_sam(server_info, sampass); -BOOL make_server_info_guest(auth_serversupplied_info **server_info) -{ - struct passwd *pass = getpwnam_alloc(lp_guestaccount()); - - if (pass) { - if (!make_server_info_pw(server_info, pass)) { - passwd_free(&pass); - return False; - } - (*server_info)->guest = True; - passwd_free(&pass); - return True; - } - DEBUG(0,("make_server_info_guest: getpwnam_alloc() failed on guest account!\n")); - return False; + (*server_info)->guest = True; + + return nt_status; } /*************************************************************************** @@ -589,6 +822,15 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, uid_t uid; gid_t gid; + int n_lgroupSIDs; + DOM_SID *lgroupSIDs = NULL; + + gid_t *unix_groups = NULL; + NT_USER_TOKEN *token; + + DOM_SID *all_group_SIDs; + int i; + /* Here is where we should check the list of trusted domains, and verify that the SID @@ -698,49 +940,115 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, return NT_STATUS_NO_MEMORY; } - if (!make_server_info_sam(server_info, sam_account)) { - DEBUG(0, ("make_server_info_info3: make_server_info_sam failed!\n")); + if (!NT_STATUS_IS_OK(nt_status = make_server_info(server_info, sam_account))) { + DEBUG(4, ("make_server_info failed!\n")); pdb_free_sam(&sam_account); - return NT_STATUS_NO_MEMORY; + return nt_status; } /* Store the user group information in the server_info returned to the caller. */ - if (info3->num_groups2 != 0) { - int i; - NT_USER_TOKEN *ptok; - auth_serversupplied_info *pserver_info = *server_info; - - if ((pserver_info->ptok = malloc( sizeof(NT_USER_TOKEN) ) ) == NULL) { - DEBUG(0, ("domain_client_validate: out of memory allocating rid group membership\n")); - nt_status = NT_STATUS_NO_MEMORY; - free_server_info(server_info); - return nt_status; - } - - ptok = pserver_info->ptok; - ptok->num_sids = (size_t)info3->num_groups2; - - if ((ptok->user_sids = (DOM_SID *)malloc( sizeof(DOM_SID) * ptok->num_sids )) == NULL) { - DEBUG(0, ("domain_client_validate: Out of memory allocating group SIDS\n")); - nt_status = NT_STATUS_NO_MEMORY; - free_server_info(server_info); + if (!NT_STATUS_IS_OK(nt_status + = get_user_groups_from_local_sam(&user_sid, + &n_lgroupSIDs, + &lgroupSIDs, + &unix_groups))) + { + DEBUG(4,("get_user_groups_from_local_sam failed\n")); + return nt_status; + } + + (*server_info)->groups = unix_groups; + (*server_info)->n_groups = n_lgroupSIDs; + + /* Create a 'combined' list of all SIDs we might want in the SD */ + all_group_SIDs = malloc(sizeof(DOM_SID) * (n_lgroupSIDs+info3->num_groups2)); + if (!all_group_SIDs) { + DEBUG(0, ("create_nt_token_info3: malloc() failed for DOM_SID list!\n")); + SAFE_FREE(lgroupSIDs); + return NT_STATUS_NO_MEMORY; + } + + /* Copy the 'local' sids */ + memcpy(all_group_SIDs, lgroupSIDs, sizeof(DOM_SID) * n_lgroupSIDs); + SAFE_FREE(lgroupSIDs); + + /* and create (by appending rids) the 'domain' sids */ + for (i = 0; i < info3->num_groups2; i++) { + sid_copy(&all_group_SIDs[i+n_lgroupSIDs+1], &(info3->dom_sid.sid)); + if (!sid_append_rid(&all_group_SIDs[i+n_lgroupSIDs+1], info3->gids[i].g_rid)) { + nt_status = NT_STATUS_INVALID_PARAMETER; + DEBUG(3,("create_nt_token_info3: could not append additional group rid 0x%x\n", + info3->gids[i].g_rid)); + SAFE_FREE(lgroupSIDs); return nt_status; } - - for (i = 0; i < ptok->num_sids; i++) { - sid_copy(&ptok->user_sids[i], &(info3->dom_sid.sid)); - if (!sid_append_rid(&ptok->user_sids[i], info3->gids[i].g_rid)) { - nt_status = NT_STATUS_INVALID_PARAMETER; - free_server_info(server_info); - return nt_status; - } - } } + + /* Where are the 'global' sids... */ + + /* can the user be guest? if yes, where is it stored? */ + if (!NT_STATUS_IS_OK(nt_status = create_nt_user_token(&user_sid, &group_sid, + n_lgroupSIDs+info3->num_groups2, all_group_SIDs, + False, &token))) { + DEBUG(4,("create_nt_user_token failed\n")); + SAFE_FREE(all_group_SIDs); + return nt_status; + } + + (*server_info)->ptok = token; + + SAFE_FREE(all_group_SIDs); + + debug_nt_user_token(DBGC_AUTH, 5, token); + return NT_STATUS_OK; } +/*************************************************************************** + Free a user_info struct +***************************************************************************/ + +void free_user_info(auth_usersupplied_info **user_info) +{ + DEBUG(5,("attempting to free (and zero) a user_info structure\n")); + if (*user_info != NULL) { + if ((*user_info)->smb_name.str) { + DEBUG(10,("structure was created for %s\n", (*user_info)->smb_name.str)); + } + SAFE_FREE((*user_info)->smb_name.str); + SAFE_FREE((*user_info)->internal_username.str); + SAFE_FREE((*user_info)->client_domain.str); + SAFE_FREE((*user_info)->domain.str); + SAFE_FREE((*user_info)->wksta_name.str); + data_blob_free(&(*user_info)->lm_resp); + data_blob_free(&(*user_info)->nt_resp); + SAFE_FREE((*user_info)->interactive_password); + data_blob_clear_free(&(*user_info)->plaintext_password); + ZERO_STRUCT(**user_info); + } + SAFE_FREE(*user_info); +} + +/*************************************************************************** + Clear out a server_info struct that has been allocated +***************************************************************************/ + +void free_server_info(auth_serversupplied_info **server_info) +{ + DEBUG(5,("attempting to free (and zero) a server_info structure\n")); + if (*server_info != NULL) { + pdb_free_sam(&(*server_info)->sam_account); + + /* call pam_end here, unless we know we are keeping it */ + delete_nt_token( &(*server_info)->ptok ); + SAFE_FREE((*server_info)->groups); + ZERO_STRUCT(**server_info); + } + SAFE_FREE(*server_info); +} + /*************************************************************************** Make an auth_methods struct ***************************************************************************/ diff --git a/source3/auth/auth_winbind.c b/source3/auth/auth_winbind.c index 5bdccd39f3..10788721fd 100644 --- a/source3/auth/auth_winbind.c +++ b/source3/auth/auth_winbind.c @@ -4,7 +4,7 @@ Winbind authentication mechnism Copyright (C) Tim Potter 2000 - Copyright (C) Andrew Bartlett 2001 + Copyright (C) Andrew Bartlett 2001 - 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 diff --git a/source3/include/local.h b/source3/include/local.h index 46349cfa6d..15231e92ee 100644 --- a/source3/include/local.h +++ b/source3/include/local.h @@ -117,7 +117,7 @@ #endif /* the size of the uid cache used to reduce valid user checks */ -#define UID_CACHE_SIZE 4 +#define VUID_CACHE_SIZE 32 /* the following control timings of various actions. Don't change them unless you know what you are doing. These are all in seconds */ diff --git a/source3/include/smb.h b/source3/include/smb.h index 263dd67c54..1ff0f1c328 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -430,9 +430,9 @@ typedef struct time_t status_time; } dir_status_struct; -struct uid_cache { +struct vuid_cache { int entries; - uid_t list[UID_CACHE_SIZE]; + uint16 list[VUID_CACHE_SIZE]; }; typedef struct @@ -461,7 +461,8 @@ typedef struct connection_struct unsigned cnum; /* an index passed over the wire */ int service; BOOL force_user; - struct uid_cache uid_cache; + BOOL force_group; + struct vuid_cache vuid_cache; void *dirptr; BOOL printer; BOOL ipc; diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c index b7be415abc..62e10c9965 100644 --- a/source3/rpc_server/srv_pipe.c +++ b/source3/rpc_server/srv_pipe.c @@ -427,27 +427,30 @@ failed authentication on named pipe %s.\n", domain, user_name, wks, p->name )); memcpy(p->session_key, server_info->session_key, sizeof(p->session_key)); - uid = pdb_get_uid(server_info->sam_account); - gid = pdb_get_gid(server_info->sam_account); - - p->pipe_user.uid = uid; - p->pipe_user.gid = gid; - - /* Set up pipe user group membership. */ - initialise_groups(p->pipe_user_name, p->pipe_user.uid, p->pipe_user.gid); - get_current_groups(p->pipe_user.gid, &p->pipe_user.ngroups, &p->pipe_user.groups); + p->pipe_user.uid = pdb_get_uid(server_info->sam_account); + p->pipe_user.gid = pdb_get_gid(server_info->sam_account); + + p->pipe_user.ngroups = server_info->n_groups; + if (p->pipe_user.ngroups) { + if (!(p->pipe_user.groups = memdup(server_info->groups, sizeof(gid_t) * p->pipe_user.ngroups))) { + DEBUG(0,("failed to memdup group list to p->pipe_user.groups\n")); + free_server_info(&server_info); + return False; + } + } if (server_info->ptok) - add_supplementary_nt_login_groups(&p->pipe_user.ngroups, &p->pipe_user.groups, &server_info->ptok); - - /* Create an NT_USER_TOKEN struct for this user. */ - p->pipe_user.nt_user_token = create_nt_token(p->pipe_user.uid,p->pipe_user.gid, - p->pipe_user.ngroups, p->pipe_user.groups, - server_info->guest, server_info->ptok); + p->pipe_user.nt_user_token = dup_nt_token(server_info->ptok); + else { + DEBUG(1,("Error: Authmodule failed to provide nt_user_token\n")); + p->pipe_user.nt_user_token = NULL; + free_server_info(&server_info); + return False; + } p->ntlmssp_auth_validated = True; - pdb_free_sam(&server_info->sam_account); + free_server_info(&server_info); return True; } diff --git a/source3/rpc_server/srv_srvsvc_nt.c b/source3/rpc_server/srv_srvsvc_nt.c index 5c1038949b..69945b50b8 100644 --- a/source3/rpc_server/srv_srvsvc_nt.c +++ b/source3/rpc_server/srv_srvsvc_nt.c @@ -338,10 +338,10 @@ BOOL share_access_check(connection_struct *conn, int snum, user_struct *vuser, u if (!psd) goto out; - if (vuser) - token = vuser->nt_user_token; - else + if (conn->nt_user_token) token = conn->nt_user_token; + else + token = vuser->nt_user_token; ret = se_access_check(psd, token, desired_access, &granted, &status); diff --git a/source3/smbd/conn.c b/source3/smbd/conn.c index d70e50f899..22407348e8 100644 --- a/source3/smbd/conn.c +++ b/source3/smbd/conn.c @@ -131,7 +131,7 @@ void conn_close_all(void) connection_struct *conn, *next; for (conn=Connections;conn;conn=next) { next=conn->next; - close_cnum(conn, (uint16)-1); + close_cnum(conn, conn->vuid); } } @@ -157,6 +157,27 @@ BOOL conn_idle_all(time_t t, int deadtime) return allidle; } +/**************************************************************************** +clear a vuid out of the validity cache, and as the 'owner' of a connection. +****************************************************************************/ +void conn_clear_vuid_cache(uint16 vuid) +{ + connection_struct *conn; + int i; + + for (conn=Connections;conn;conn=conn->next) { + if (conn->vuid == vuid) { + conn->vuid = UID_FIELD_INVALID; + } + + for (i=0;ivuid_cache.entries && i< VUID_CACHE_SIZE;i++) { + if (conn->vuid_cache.list[i] == vuid) { + conn->vuid_cache.list[i] = UID_FIELD_INVALID; + } + } + } +} + /**************************************************************************** Free a conn structure. ****************************************************************************/ @@ -191,7 +212,6 @@ void conn_free(connection_struct *conn) conn->ngroups = 0; } - delete_nt_token(&conn->nt_user_token); free_namearray(conn->veto_list); free_namearray(conn->hide_list); free_namearray(conn->veto_oplock_list); diff --git a/source3/smbd/password.c b/source3/smbd/password.c index cfac7cf695..f3a09e8c64 100644 --- a/source3/smbd/password.c +++ b/source3/smbd/password.c @@ -69,6 +69,10 @@ void invalidate_vuid(uint16 vuid) DLIST_REMOVE(validated_users, vuser); + /* clear the vuid from the 'cache' on each connection, and + from the vuid 'owner' of connections */ + conn_clear_vuid_cache(vuid); + SAFE_FREE(vuser->groups); delete_nt_token(&vuser->nt_user_token); SAFE_FREE(vuser); @@ -89,95 +93,6 @@ void invalidate_all_vuids(void) } } -/**************************************************************************** - Create the SID list for this user. -****************************************************************************/ - -NT_USER_TOKEN *create_nt_token(uid_t uid, gid_t gid, int ngroups, gid_t *groups, BOOL is_guest, NT_USER_TOKEN *sup_tok) -{ - extern DOM_SID global_sid_World; - extern DOM_SID global_sid_Network; - extern DOM_SID global_sid_Builtin_Guests; - extern DOM_SID global_sid_Authenticated_Users; - NT_USER_TOKEN *token; - DOM_SID *psids; - int i, psid_ndx = 0; - size_t num_sids = 0; - fstring sid_str; - - if ((token = (NT_USER_TOKEN *)malloc( sizeof(NT_USER_TOKEN) ) ) == NULL) - return NULL; - - ZERO_STRUCTP(token); - - /* We always have uid/gid plus World and Network and Authenticated Users or Guest SIDs. */ - num_sids = 5 + ngroups; - - if (sup_tok && sup_tok->num_sids) - num_sids += sup_tok->num_sids; - - if ((token->user_sids = (DOM_SID *)malloc( num_sids*sizeof(DOM_SID))) == NULL) { - SAFE_FREE(token); - return NULL; - } - - psids = token->user_sids; - - /* - * Note - user SID *MUST* be first in token ! - * se_access_check depends on this. - */ - - uid_to_sid( &psids[PRIMARY_USER_SID_INDEX], uid); - psid_ndx++; - - /* - * Primary group SID is second in token. Convention. - */ - - gid_to_sid( &psids[PRIMARY_GROUP_SID_INDEX], gid); - psid_ndx++; - - /* Now add the group SIDs. */ - - for (i = 0; i < ngroups; i++) { - if (groups[i] != gid) { - gid_to_sid( &psids[psid_ndx++], groups[i]); - } - } - - if (sup_tok) { - /* Now add the additional SIDs from the supplimentary token. */ - for (i = 0; i < sup_tok->num_sids; i++) - sid_copy( &psids[psid_ndx++], &sup_tok->user_sids[i] ); - } - - /* - * Finally add the "standard" SIDs. - * The only difference between guest and "anonymous" (which we - * don't really support) is the addition of Authenticated_Users. - */ - - sid_copy( &psids[psid_ndx++], &global_sid_World); - sid_copy( &psids[psid_ndx++], &global_sid_Network); - - if (is_guest) - sid_copy( &psids[psid_ndx++], &global_sid_Builtin_Guests); - else - sid_copy( &psids[psid_ndx++], &global_sid_Authenticated_Users); - - token->num_sids = psid_ndx; - - /* Dump list of sids in token */ - - for (i = 0; i < token->num_sids; i++) { - DEBUG(5, ("user token sid %s\n", - sid_to_string(sid_str, &token->user_sids[i]))); - } - - return token; -} - /**************************************************************************** register a uid/name pair as being valid and that a valid password has been given. vuid is biased by an offset. This allows us to @@ -187,8 +102,6 @@ tell random client vuid's (normally zero) from valid vuids. int register_vuid(auth_serversupplied_info *server_info, const char *smb_name) { user_struct *vuser = NULL; - uid_t uid; - gid_t gid; /* Ensure no vuid gets registered in share level security. */ if(lp_security() == SEC_SHARE) @@ -205,15 +118,6 @@ int register_vuid(auth_serversupplied_info *server_info, const char *smb_name) ZERO_STRUCTP(vuser); - if (!IS_SAM_UNIX_USER(server_info->sam_account)) { - DEBUG(0,("Attempted session setup with invalid user. No uid/gid in SAM_ACCOUNT (flags:%x)\n", pdb_get_init_flag(server_info->sam_account))); - free(vuser); - return UID_FIELD_INVALID; - } - - uid = pdb_get_uid(server_info->sam_account); - gid = pdb_get_gid(server_info->sam_account); - /* Allocate a free vuid. Yes this is a linear search... :-) */ while( get_valid_user_struct(next_vuid) != NULL ) { next_vuid++; @@ -225,18 +129,38 @@ int register_vuid(auth_serversupplied_info *server_info, const char *smb_name) DEBUG(10,("register_vuid: allocated vuid = %u\n", (unsigned int)next_vuid )); vuser->vuid = next_vuid; - vuser->uid = uid; - vuser->gid = gid; + + /* the next functions should be done by a SID mapping system (SMS) as + * the new real sam db won't have reference to unix uids or gids + */ + if (!IS_SAM_UNIX_USER(server_info->sam_account)) { + DEBUG(0,("Attempted session setup with invalid user. No uid/gid in SAM_ACCOUNT (flags:%x)\n", pdb_get_init_flag(server_info->sam_account))); + free(vuser); + return UID_FIELD_INVALID; + } + + vuser->uid = pdb_get_uid(server_info->sam_account); + vuser->gid = pdb_get_gid(server_info->sam_account); + + vuser->n_groups = server_info->n_groups; + if (vuser->n_groups) { + if (!(vuser->groups = memdup(server_info->groups, sizeof(gid_t) * vuser->n_groups))) { + DEBUG(0,("register_vuid: failed to memdup vuser->groups\n")); + free(vuser); + return UID_FIELD_INVALID; + } + } + vuser->guest = server_info->guest; - fstrcpy(vuser->user.unix_name, pdb_get_username(server_info->sam_account)); - fstrcpy(vuser->user.smb_name, smb_name); + fstrcpy(vuser->user.unix_name, pdb_get_username(server_info->sam_account)); + fstrcpy(vuser->user.smb_name, smb_name); fstrcpy(vuser->user.domain, pdb_get_domain(server_info->sam_account)); fstrcpy(vuser->user.full_name, pdb_get_fullname(server_info->sam_account)); { /* Keep the homedir handy */ const char *homedir = pdb_get_homedir(server_info->sam_account); - const char *unix_homedir = pdb_get_unix_homedir(server_info->sam_account); + const char *unix_homedir = pdb_get_unix_homedir(server_info->sam_account); /* should be optained by SMS */ const char *logon_script = pdb_get_logon_script(server_info->sam_account); if (homedir) { vuser->homedir = smb_xstrdup(homedir); @@ -260,19 +184,13 @@ int register_vuid(auth_serversupplied_info *server_info, const char *smb_name) DEBUG(3, ("User name: %s\tReal name: %s\n",vuser->user.unix_name,vuser->user.full_name)); - vuser->n_groups = 0; - vuser->groups = NULL; - - /* Find all the groups this uid is in and store them. - Used by change_to_user() */ - initialise_groups(vuser->user.unix_name, vuser->uid, vuser->gid); - get_current_groups(vuser->gid, &vuser->n_groups, &vuser->groups); - - if (server_info->ptok) - add_supplementary_nt_login_groups(&vuser->n_groups, &vuser->groups, &server_info->ptok); - - /* Create an NT_USER_TOKEN struct for this user. */ - vuser->nt_user_token = create_nt_token(vuser->uid, vuser->gid, vuser->n_groups, vuser->groups, vuser->guest, server_info->ptok); + if (server_info->ptok) { + vuser->nt_user_token = dup_nt_token(server_info->ptok); + } else { + DEBUG(1, ("server_info does not contain a user_token - cannot continue\n")); + free(vuser); + return UID_FIELD_INVALID; + } DEBUG(3,("UNIX uid %d is UNIX user %s, and will be vuid %u\n",(int)vuser->uid,vuser->user.unix_name, vuser->vuid)); @@ -451,7 +369,7 @@ static char *validate_group(char *group, DATA_BLOB password,int snum) Note this is *NOT* used when logging on using sessionsetup_and_X. ****************************************************************************/ -BOOL authorise_login(int snum,char *user, DATA_BLOB password, +BOOL authorise_login(int snum, fstring user, DATA_BLOB password, BOOL *guest) { BOOL ok = False; diff --git a/source3/smbd/service.c b/source3/smbd/service.c index 6f83a2d3b7..7c38cf5793 100644 --- a/source3/smbd/service.c +++ b/source3/smbd/service.c @@ -305,6 +305,7 @@ static void set_admin_user(connection_struct *conn) #endif ) { conn->admin_user = True; + conn->force_user = True; /* Admin users are effectivly 'forced' */ DEBUG(0,("%s logged in as admin user (root privileges)\n",conn->user)); } else { conn->admin_user = False; @@ -329,7 +330,6 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, { struct passwd *pass = NULL; BOOL guest = False; - BOOL force = False; connection_struct *conn; struct stat st; fstring user; @@ -349,7 +349,6 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, if (lp_guest_only(snum)) { const char *guestname = lp_guestaccount(); guest = True; - force = True; pass = getpwnam_alloc(guestname); if (!pass) { DEBUG(0,("authorise_login: Invalid guest account %s??\n",guestname)); @@ -397,7 +396,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, return NULL; } pass = Get_Pwnam(user); - conn->force_user = force; + conn->force_user = True; conn->uid = pass->pw_uid; conn->gid = pass->pw_gid; string_set(&conn->user, pass->pw_name); @@ -434,7 +433,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, /* * If force user is true, then store the - * given userid and also the primary groupid + * given userid and also the groups * of the user we're forcing. */ @@ -492,6 +491,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, gid = nametogid(gname); if (gid != (gid_t)-1) { + /* * If the user has been forced and the forced group starts * with a '+', then we only set the group to be the forced @@ -507,6 +507,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, conn->gid = gid; DEBUG(3,("Forced group %s\n",gname)); } + conn->force_group = True; } else { DEBUG(1,("Couldn't find group %s\n",gname)); conn_free(conn); @@ -524,23 +525,27 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, DEBUG(3,("Connect path is '%s' for service [%s]\n",s, lp_servicename(snum))); } - /* groups stuff added by ih */ - conn->ngroups = 0; - conn->groups = NULL; - - /* Find all the groups this uid is in and - store them. Used by change_to_user() */ - initialise_groups(conn->user, conn->uid, conn->gid); - get_current_groups(conn->gid, &conn->ngroups,&conn->groups); + if (conn->force_user || conn->force_group) { + + /* groups stuff added by ih */ + conn->ngroups = 0; + conn->groups = NULL; + + /* Find all the groups this uid is in and + store them. Used by change_to_user() */ + initialise_groups(conn->user, conn->uid, conn->gid); + get_current_groups(conn->gid, &conn->ngroups,&conn->groups); - conn->nt_user_token = create_nt_token(conn->uid, conn->gid, - conn->ngroups, conn->groups, - guest, NULL); + conn->nt_user_token = create_nt_token(conn->uid, conn->gid, + conn->ngroups, conn->groups, + guest); + } /* * New code to check if there's a share security descripter * added from NT server manager. This is done after the * smb.conf checks are done as we need a uid and token. JRA. + * */ { diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index 77f93812dd..a49982dcfe 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -177,9 +177,9 @@ static int reply_spnego_kerberos(connection_struct *conn, return ERROR_NT(NT_STATUS_NO_SUCH_USER); } - if (!make_server_info_pw(&server_info,pw)) { + if (!NT_STATUS_IS_OK(ret = make_server_info_pw(&server_info,pw))) { DEBUG(1,("make_server_info_from_pw failed!\n")); - return ERROR_NT(NT_STATUS_NO_MEMORY); + return ERROR_NT(ret); } sess_vuid = register_vuid(server_info, user); diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c index c0bacf8f91..6f91065ceb 100644 --- a/source3/smbd/uid.c +++ b/source3/smbd/uid.c @@ -59,18 +59,26 @@ BOOL change_to_guest(void) static BOOL check_user_ok(connection_struct *conn, user_struct *vuser,int snum) { int i; - for (i=0;iuid_cache.entries;i++) - if (conn->uid_cache.list[i] == vuser->uid) + for (i=0;ivuid_cache.entries && i< VUID_CACHE_SIZE;i++) + if (conn->vuid_cache.list[i] == vuser->vuid) return(True); + if ((conn->force_user || conn->force_group) + && (conn->vuid != vuser->vuid)) { + return False; + } + if (!user_ok(vuser->user.unix_name,snum)) return(False); - i = conn->uid_cache.entries % UID_CACHE_SIZE; - conn->uid_cache.list[i] = vuser->uid; + if (!share_access_check(conn, snum, vuser, conn->read_only ? FILE_READ_DATA : FILE_WRITE_DATA)) { + return False; + } + + i = conn->vuid_cache.entries % VUID_CACHE_SIZE; + conn->vuid_cache.list[i] = vuser->vuid; - if (conn->uid_cache.entries < UID_CACHE_SIZE) - conn->uid_cache.entries++; + conn->vuid_cache.entries++; return(True); } @@ -115,27 +123,21 @@ BOOL change_to_user(connection_struct *conn, uint16 vuid) snum = SNUM(conn); - if((vuser != NULL) && !check_user_ok(conn, vuser, snum)) - return False; - - if (conn->force_user || - conn->admin_user || - (lp_security() == SEC_SHARE)) { + if (conn->force_user) /* security = share sets this too */ { uid = conn->uid; gid = conn->gid; current_user.groups = conn->groups; current_user.ngroups = conn->ngroups; token = conn->nt_user_token; - } else { - if (!vuser) { - DEBUG(2,("change_to_user: Invalid vuid used %d\n",vuid)); - return(False); - } + } else if ((vuser) && check_user_ok(conn, vuser, snum)) { uid = vuser->uid; gid = vuser->gid; current_user.ngroups = vuser->n_groups; current_user.groups = vuser->groups; token = vuser->nt_user_token; + } else { + DEBUG(2,("change_to_user: Invalid vuid used %d or vuid not permitted access to share.\n",vuid)); + return False; } /* @@ -175,7 +177,7 @@ BOOL change_to_user(connection_struct *conn, uint16 vuid) if (vuser && vuser->guest) is_guest = True; - token = create_nt_token(uid, gid, current_user.ngroups, current_user.groups, is_guest, NULL); + token = create_nt_token(uid, gid, current_user.ngroups, current_user.groups, is_guest); must_free_token = True; } -- cgit From 42045afda9853351af14a95d711ebbb64e532330 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 20 Aug 2002 03:01:37 +0000 Subject: segfault fixes merged from APP_HEAD (This used to be commit cd9ee27d89a5cd489efac2029c22797ec9c383ca) --- source3/rpc_server/srv_spoolss_nt.c | 74 +++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index ae7cf2d953..5373eeed63 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1889,46 +1889,55 @@ WERROR _spoolss_getprinterdata(pipes_struct *p, SPOOL_Q_GETPRINTERDATA *q_u, SPO DEBUG(4,("_spoolss_getprinterdata\n")); if ( !Printer ) { - if((*data=(uint8 *)talloc_zero(p->mem_ctx, 4*sizeof(uint8))) == NULL) - return WERR_NOMEM; DEBUG(2,("_spoolss_getprinterdata: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); - return WERR_BADFID; + status = WERR_BADFID; + goto done; } - if ( !get_printer_snum(p,handle, &snum) ) - return WERR_BADFID; - - status = get_a_printer(&printer, 2, lp_servicename(snum)); - if ( !W_ERROR_IS_OK(status) ) - return status; - unistr2_to_ascii(value, valuename, sizeof(value)-1); if ( Printer->printer_type == PRINTER_HANDLE_IS_PRINTSERVER ) status = getprinterdata_printer_server( p->mem_ctx, value, type, data, needed, *out_size ); else - status = get_printer_dataex( p->mem_ctx, printer, SPOOL_PRINTERDATA_KEY, value, type, data, needed, in_size ); + { + if ( !get_printer_snum(p,handle, &snum) ) { + status = WERR_BADFID; + goto done; + } + status = get_a_printer(&printer, 2, lp_servicename(snum)); + if ( !W_ERROR_IS_OK(status) ) + goto done; + + status = get_printer_dataex( p->mem_ctx, printer, SPOOL_PRINTERDATA_KEY, value, type, data, needed, *out_size ); + } + + if (*needed > *out_size) + status = WERR_MORE_DATA; + +done: if ( !W_ERROR_IS_OK(status) ) { - DEBUG(5, ("value not found, allocating %d\n", *out_size)); + DEBUG(5, ("error: allocating %d\n", *out_size)); /* reply this param doesn't exist */ if ( *out_size ) { - if((*data=(uint8 *)talloc_zero(p->mem_ctx, *out_size*sizeof(uint8))) == NULL) + if((*data=(uint8 *)talloc_zero(p->mem_ctx, *out_size*sizeof(uint8))) == NULL) { + if ( printer ) + free_a_printer( &printer, 2 ); return WERR_NOMEM; } - else + } + else { *data = NULL; + } } - if (*needed > *out_size) - status = WERR_MORE_DATA; - /* cleanup & exit */ - free_a_printer( &printer, 2 ); + if ( printer ) + free_a_printer( &printer, 2 ); return status; } @@ -2443,7 +2452,6 @@ static void spoolss_notify_security_desc(int snum, NT_PRINTER_INFO_LEVEL *printer, TALLOC_CTX *mem_ctx) { - data->notify_data.data.string = NULL; data->notify_data.sd.size = printer->info_2->secdesc_buf->len; data->notify_data.sd.desc = dup_sec_desc( mem_ctx, printer->info_2->secdesc_buf->sec ) ; } @@ -7839,18 +7847,17 @@ WERROR _spoolss_getprinterdataex(pipes_struct *p, SPOOL_Q_GETPRINTERDATAEX *q_u, *out_size = in_size; if (!Printer) { - if((*data=(uint8 *)talloc_zero(p->mem_ctx, 4*sizeof(uint8))) == NULL) - return WERR_NOMEM; DEBUG(2,("_spoolss_getprinterdataex: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); - return WERR_BADFID; + status = WERR_BADFID; + goto done; } /* Is the handle to a printer or to the server? */ - if ( Printer->printer_type == PRINTER_HANDLE_IS_PRINTSERVER ) - { + if (Printer->printer_type == PRINTER_HANDLE_IS_PRINTSERVER) { DEBUG(10,("_spoolss_getprinterdatex: Not implemented for server handles yet\n")); - return WERR_INVALID_PARAM; + status = WERR_INVALID_PARAM; + goto done; } if ( !get_printer_snum(p,handle, &snum) ) @@ -7858,7 +7865,7 @@ WERROR _spoolss_getprinterdataex(pipes_struct *p, SPOOL_Q_GETPRINTERDATAEX *q_u, status = get_a_printer(&printer, 2, lp_servicename(snum)); if ( !W_ERROR_IS_OK(status) ) - return status; + goto done; /* check to see if the keyname is valid */ if ( !strlen(keyname) ) { @@ -7868,6 +7875,7 @@ WERROR _spoolss_getprinterdataex(pipes_struct *p, SPOOL_Q_GETPRINTERDATAEX *q_u, if ( lookup_printerkey( &printer->info_2->data, keyname ) == -1 ) { DEBUG(4,("_spoolss_getprinterdataex: Invalid keyname [%s]\n", keyname )); + free_a_printer( &printer, 2 ); status = WERR_BADFILE; goto done; } @@ -7876,9 +7884,13 @@ WERROR _spoolss_getprinterdataex(pipes_struct *p, SPOOL_Q_GETPRINTERDATAEX *q_u, status = get_printer_dataex( p->mem_ctx, printer, keyname, valuename, type, data, needed, in_size ); + if (*needed > *out_size) + status = WERR_MORE_DATA; + +done: if ( !W_ERROR_IS_OK(status) ) { - DEBUG(5, ("value not found, allocating %d\n", *out_size)); + DEBUG(5, ("error: allocating %d\n", *out_size)); /* reply this param doesn't exist */ @@ -7889,14 +7901,12 @@ WERROR _spoolss_getprinterdataex(pipes_struct *p, SPOOL_Q_GETPRINTERDATAEX *q_u, goto done; } } - else + else { *data = NULL; } + } - if (*needed > *out_size) - status = WERR_MORE_DATA; - -done: + if ( printer ) free_a_printer( &printer, 2 ); return status; -- cgit From a08427ea6efafd378e8cf207277b00a86ffd4bdd Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Tue, 20 Aug 2002 12:38:43 +0000 Subject: cannot use casts in the DLIST_xxx macros (This used to be commit c9ffc416aeee2610fdc896a9d41dac182039a5f9) --- source3/include/libsmbclient.h | 2 +- source3/libsmb/libsmb_cache.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source3/include/libsmbclient.h b/source3/include/libsmbclient.h index f269563996..2b45709a5e 100644 --- a/source3/include/libsmbclient.h +++ b/source3/include/libsmbclient.h @@ -333,7 +333,7 @@ typedef struct _SMBCCTX { /** Space to store private data of the server cache. */ - void * server_cache; + struct smbc_server_cache * server_cache; /** INTERNAL functions * do _NOT_ touch these from your program ! diff --git a/source3/libsmb/libsmb_cache.c b/source3/libsmb/libsmb_cache.c index 34b818ee74..df02cf3718 100644 --- a/source3/libsmb/libsmb_cache.c +++ b/source3/libsmb/libsmb_cache.c @@ -89,7 +89,7 @@ static int smbc_add_cached_server(SMBCCTX * context, SMBCSRV * new, goto failed; } - DLIST_ADD(((struct smbc_server_cache *)context->server_cache), srvcache); + DLIST_ADD((context->server_cache), srvcache); return 0; failed: @@ -139,7 +139,7 @@ static int smbc_remove_cached_server(SMBCCTX * context, SMBCSRV * server) if (server == srv->server) { /* remove this sucker */ - DLIST_REMOVE(((struct smbc_server_cache *)context->server_cache), srv); + DLIST_REMOVE(context->server_cache, srv); SAFE_FREE(srv->server_name); SAFE_FREE(srv->share_name); SAFE_FREE(srv->workgroup); -- cgit From 2f1da0c3e3e4950006a918352e9908a65198456e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 20 Aug 2002 16:06:40 +0000 Subject: Remove (broken) index don't use underscores in chaptor names (invalid sgml syntax) (This used to be commit 7864aeb9694a72090425f15e1512f56e32b20588) --- docs/docbook/projdoc/Printing.sgml | 2 +- docs/docbook/projdoc/samba-doc.sgml | 4 ---- docs/docbook/projdoc/security_level.sgml | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/docbook/projdoc/Printing.sgml b/docs/docbook/projdoc/Printing.sgml index cb7e5cdfb7..ce9f40e88b 100644 --- a/docs/docbook/projdoc/Printing.sgml +++ b/docs/docbook/projdoc/Printing.sgml @@ -1,4 +1,4 @@ - + PatrickPowell diff --git a/docs/docbook/projdoc/samba-doc.sgml b/docs/docbook/projdoc/samba-doc.sgml index 0ec9efe014..e407b622de 100644 --- a/docs/docbook/projdoc/samba-doc.sgml +++ b/docs/docbook/projdoc/samba-doc.sgml @@ -19,7 +19,6 @@ - ]> @@ -83,7 +82,4 @@ Cheers, jerry &CVS-Access; &BUGS; - -&INDEX-FILE; - diff --git a/docs/docbook/projdoc/security_level.sgml b/docs/docbook/projdoc/security_level.sgml index 46a2ad7fe4..efe2b6eaf3 100644 --- a/docs/docbook/projdoc/security_level.sgml +++ b/docs/docbook/projdoc/security_level.sgml @@ -1,4 +1,4 @@ - + AndrewTridgell -- cgit From 3f82b441ae4cc64a29ce8961bc7a4da34084ad6c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 20 Aug 2002 16:11:58 +0000 Subject: Strip URL stuff, not only ending in .html (This used to be commit 8bb4843f20c58bcf423bade3342beea61f2b35f7) --- docs/docbook/scripts/strip-links.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docbook/scripts/strip-links.pl b/docs/docbook/scripts/strip-links.pl index dbbdceaabc..d89da23abe 100644 --- a/docs/docbook/scripts/strip-links.pl +++ b/docs/docbook/scripts/strip-links.pl @@ -7,7 +7,7 @@ while () { chomp ($_); - $_ =~ s/\s*\s*//g; + $_ =~ s/\s*\s*//g; print "$_\n"; } -- cgit From ba0000db88699d0d31be5f38a62d111e4e6cbd87 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 20 Aug 2002 16:27:37 +0000 Subject: New (simpler) documentation system. (This used to be commit d3b8ad67fc32c097d5aa783744192197cb3b3f26) --- docs/docbook/Makefile.in | 462 +- docs/docbook/configure | 233 +- docs/docbook/configure.in | 45 +- docs/docbook/dbsgml/40chg.txt | 45 - docs/docbook/dbsgml/41chg.txt | 7 - docs/docbook/dbsgml/50issues.txt | 39 - docs/docbook/dbsgml/ChangeLog | 85 - docs/docbook/dbsgml/cals-tbl.dtd | 330 -- docs/docbook/dbsgml/catalog | 63 - docs/docbook/dbsgml/dbcent.mod | 181 - docs/docbook/dbsgml/dbgenent.mod | 39 - docs/docbook/dbsgml/dbhier.mod | 2100 --------- docs/docbook/dbsgml/dbnotn.mod | 97 - docs/docbook/dbsgml/dbpool.mod | 7396 ------------------------------- docs/docbook/dbsgml/docbook.cat | 63 - docs/docbook/dbsgml/docbook.dcl | 106 - docs/docbook/dbsgml/docbook.dtd | 117 - docs/docbook/dbsgml/ent/ISOamsa | 66 - docs/docbook/dbsgml/ent/ISOamsb | 52 - docs/docbook/dbsgml/ent/ISOamsc | 20 - docs/docbook/dbsgml/ent/ISOamsn | 70 - docs/docbook/dbsgml/ent/ISOamso | 29 - docs/docbook/dbsgml/ent/ISOamsr | 94 - docs/docbook/dbsgml/ent/ISObox | 62 - docs/docbook/dbsgml/ent/ISOcyr1 | 77 - docs/docbook/dbsgml/ent/ISOcyr2 | 36 - docs/docbook/dbsgml/ent/ISOdia | 24 - docs/docbook/dbsgml/ent/ISOgrk1 | 59 - docs/docbook/dbsgml/ent/ISOgrk2 | 30 - docs/docbook/dbsgml/ent/ISOgrk3 | 53 - docs/docbook/dbsgml/ent/ISOgrk4 | 53 - docs/docbook/dbsgml/ent/ISOlat1 | 72 - docs/docbook/dbsgml/ent/ISOlat2 | 131 - docs/docbook/dbsgml/ent/ISOnum | 91 - docs/docbook/dbsgml/ent/ISOpub | 100 - docs/docbook/dbsgml/ent/ISOtech | 73 - docs/docbook/dbsgml/readme.txt | 12 - docs/docbook/docbook.txt | 91 +- docs/docbook/scripts/README.ldp_print | 60 - docs/docbook/scripts/collateindex.pl | 595 --- docs/docbook/scripts/fix_print_html.lib | 172 - docs/docbook/scripts/ldp_print | 71 - docs/docbook/scripts/make-article.pl | 25 - 43 files changed, 111 insertions(+), 13515 deletions(-) delete mode 100644 docs/docbook/dbsgml/40chg.txt delete mode 100644 docs/docbook/dbsgml/41chg.txt delete mode 100644 docs/docbook/dbsgml/50issues.txt delete mode 100644 docs/docbook/dbsgml/ChangeLog delete mode 100644 docs/docbook/dbsgml/cals-tbl.dtd delete mode 100644 docs/docbook/dbsgml/catalog delete mode 100755 docs/docbook/dbsgml/dbcent.mod delete mode 100644 docs/docbook/dbsgml/dbgenent.mod delete mode 100755 docs/docbook/dbsgml/dbhier.mod delete mode 100755 docs/docbook/dbsgml/dbnotn.mod delete mode 100755 docs/docbook/dbsgml/dbpool.mod delete mode 100644 docs/docbook/dbsgml/docbook.cat delete mode 100644 docs/docbook/dbsgml/docbook.dcl delete mode 100755 docs/docbook/dbsgml/docbook.dtd delete mode 100644 docs/docbook/dbsgml/ent/ISOamsa delete mode 100644 docs/docbook/dbsgml/ent/ISOamsb delete mode 100644 docs/docbook/dbsgml/ent/ISOamsc delete mode 100644 docs/docbook/dbsgml/ent/ISOamsn delete mode 100644 docs/docbook/dbsgml/ent/ISOamso delete mode 100644 docs/docbook/dbsgml/ent/ISOamsr delete mode 100644 docs/docbook/dbsgml/ent/ISObox delete mode 100644 docs/docbook/dbsgml/ent/ISOcyr1 delete mode 100644 docs/docbook/dbsgml/ent/ISOcyr2 delete mode 100644 docs/docbook/dbsgml/ent/ISOdia delete mode 100644 docs/docbook/dbsgml/ent/ISOgrk1 delete mode 100644 docs/docbook/dbsgml/ent/ISOgrk2 delete mode 100644 docs/docbook/dbsgml/ent/ISOgrk3 delete mode 100644 docs/docbook/dbsgml/ent/ISOgrk4 delete mode 100644 docs/docbook/dbsgml/ent/ISOlat1 delete mode 100644 docs/docbook/dbsgml/ent/ISOlat2 delete mode 100644 docs/docbook/dbsgml/ent/ISOnum delete mode 100644 docs/docbook/dbsgml/ent/ISOpub delete mode 100644 docs/docbook/dbsgml/ent/ISOtech delete mode 100644 docs/docbook/dbsgml/readme.txt delete mode 100644 docs/docbook/scripts/README.ldp_print delete mode 100644 docs/docbook/scripts/collateindex.pl delete mode 100644 docs/docbook/scripts/fix_print_html.lib delete mode 100755 docs/docbook/scripts/ldp_print delete mode 100644 docs/docbook/scripts/make-article.pl diff --git a/docs/docbook/Makefile.in b/docs/docbook/Makefile.in index 5056f82a98..612c495135 100644 --- a/docs/docbook/Makefile.in +++ b/docs/docbook/Makefile.in @@ -1,7 +1,8 @@ ################################################################# # Makefile.in for Samba Documentation # Authors: James Moore -# Gerald Carter +# Gerald Carter +# Jelmer Vernooij # # Please see http://www.samba.org/samba/cvs.html # for information on getting the latest @@ -9,399 +10,82 @@ # # Autoconf Variables + +MANPAGES_NAMES=findsmb.1 smbclient.1 \ + smbspool.8 lmhosts.5 \ + smbcontrol.1 smbstatus.1 \ + make_smbcodepage.1 smbd.8 \ + smbtar.1 nmbd.8 smbmnt.8 \ + smbumount.8 nmblookup.1 \ + smbmount.8 swat.8 rpcclient.1 \ + smbpasswd.5 testparm.1 samba.7 \ + smbpasswd.8 testprns.1 \ + smb.conf.5 wbinfo.1 pdbedit.8 \ + smbcacls.1 smbsh.1 winbindd.8 \ + make_unicodemap.1 net.8 \ + smbgroupedit.8 vfstest.1 + +## This part contains only rules. You shouldn't need to change it +## if you are adding docs + +DOCBOOK2MAN = @JW@ -b man +DOCBOOK2HTML = @JW@ -b html +DOCBOOK2PDF = @JW@ -b pdf +DOCBOOK2PS = @JW@ -b ps +DOCBOOK2TXT = @JW@ -b txt +DOCBOOK2INFO = @JW@ -b texi +HTMLDOC = @HTMLDOC@ SRCDIR = @srcdir@ -JADE = @JADE@ -NSGMLS = @NSGMLS@ -SGMLSPL=@SGMLSPL@ -HTMLDOC=@HTMLDOC@ -PERL=@PERL@ -#CATALOG = @CATALOG@ MANDIR=../manpages HTMLDIR=../htmldocs +MANSGMLDIR = manpages/ +SGMLDIR = projdoc/ +PERL = @PERL@ -#Stylesheets and Dependicies -SGML_SHARE=@SGML_SHARE@ -#SGML_CATALOG_FILES=$(SGML_CATALOG_FILES):./dbsgml/catalog -HTML_STYLESHEET = $(srcdir)/stylesheets/html.dsl -HTML_DEPS = $(srcdir)/stylesheets/html-common.dsl $(srcdir)/stylesheets/common.dsl - -MANPAGES=$(MANDIR)/findsmb.1 $(MANDIR)/smbclient.1 \ - $(MANDIR)/smbspool.8 $(MANDIR)/lmhosts.5 \ - $(MANDIR)/smbcontrol.1 $(MANDIR)/smbstatus.1 \ - $(MANDIR)/make_smbcodepage.1 $(MANDIR)/smbd.8 \ - $(MANDIR)/smbtar.1 $(MANDIR)/nmbd.8 $(MANDIR)/smbmnt.8 \ - $(MANDIR)/smbumount.8 $(MANDIR)/nmblookup.1 \ - $(MANDIR)/smbmount.8 $(MANDIR)/swat.8 $(MANDIR)/rpcclient.1 \ - $(MANDIR)/smbpasswd.5 $(MANDIR)/testparm.1 $(MANDIR)/samba.7 \ - $(MANDIR)/smbpasswd.8 $(MANDIR)/testprns.1 \ - $(MANDIR)/smb.conf.5 $(MANDIR)/wbinfo.1 $(MANDIR)/pdbedit.8 \ - $(MANDIR)/smbcacls.1 $(MANDIR)/smbsh.1 $(MANDIR)/winbindd.8 \ - $(MANDIR)/make_unicodemap.1 $(MANDIR)/net.8 \ - $(MANDIR)/smbgroupedit.8 $(MANDIR)/vfstest.1 - -SGMLMANSRC=manpages/findsmb.1.sgml manpages/smbclient.1.sgml \ - manpages/smbspool.8.sgml manpages/lmhosts.5.sgml \ - manpages/smbcontrol.1.sgml manpages/smbstatus.1.sgml \ - manpages/make_smbcodepage.1.sgml manpages/smbd.8.sgml \ - manpages/smbtar.1.sgml manpages/nmbd.8.sgml manpages/smbmnt.8.sgml \ - manpages/smbumount.8.sgml manpages/nmblookup.1.sgml \ - manpages/smbmount.8.sgml manpages/swat.8.sgml \ - manpages/rpcclient.1.sgml manpages/smbpasswd.5.sgml \ - manpages/testparm.1.sgml manpages/samba.7.sgml \ - manpages/smbpasswd.8.sgml manpages/testprns.1.sgml \ - manpages/smb.conf.5.sgml manpages/pdbedit.8.sgml \ - manpages/wbinfo.1.sgml manpages/smbcacls.1.sgml \ - manpages/smbsh.1.sgml manpages/winbindd.8.sgml \ - manpages/make_unicodemap.1.sgml manpages/smbgroupedit.8.sgml \ - manpages/net.8.sgml manpages/vfstest.1.sgml - -HOWTOSRC=projdoc/DOMAIN_MEMBER.sgml projdoc/NT_Security.sgml \ - projdoc/msdfs_setup.sgml projdoc/printer_driver2.sgml \ - projdoc/UNIX_INSTALL.sgml projdoc/winbind.sgml projdoc/OS2-Client-HOWTO.sgml \ - projdoc/Samba-PDC-HOWTO.sgml projdoc/ENCRYPTION.sgml \ - projdoc/CVS-Access.sgml projdoc/Integrating-with-Windows.sgml \ - projdoc/PAM-Authentication-And-Samba.sgml projdoc/Samba-LDAP-HOWTO.sgml \ - projdoc/Samba-BDC-HOWTO.sgml projdoc/Printing.sgml projdoc/Diagnosis.sgml \ - projdoc/security_level.sgml projdoc/Browsing.sgml projdoc/Bugs.sgml \ - projdoc/Speed.sgml +MANPAGES=$(patsubst %,$(MANDIR)/%,$(MANPAGES_NAMES)) +MANPAGES_HTML=$(patsubst %,$(HTMLDIR)/%.html,$(MANPAGES_NAMES)) - - -###################################################################### -# Make instructions -###################################################################### all: - @echo "Possible options to the Makefile include:" - @echo " all-docs - Force a rebuild of all documentation" - @echo " HOWTO - Build all individual HOWTOs in html format" - @echo " proj-doc - Build the Samba-HOWTO-Collection.[pdf|html] file" - @echo " man - Rebuild html and nroff versions of man pages as necessary" - @echo " syntax - Check the SGML/DocBook syntax of all source files" - -all-docs: HOWTO proj-doc man-all man-html-all - -syntax: $(SGMLMANSRC) projdoc/samba-doc.sgml - @echo Checking syntax of all SGML/DocBook source files... - @(for i in $?; do \ - echo "$$i..."; \ - $(NSGMLS) -sv $$i 2>&1 | grep -v "DTDDECL catalog entries are not supported" ; \ - done) - - - -man: $(MANPAGES) - -HOWTO: $(HOWTOSRC) - @echo Building HOWTO pages... - @(for i in $?; do \ - htmlfile=`echo $$i | sed 's,.*/,,' | sed "s/\.sgml/\.html/g"`; \ - echo "Making $$htmlfile"; \ - cat $$i | $(PERL) scripts/make-article.pl > /tmp/`echo $$i | sed 's,.*/,,'`; \ - $(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl \ - -f /tmp/jade.log /tmp/`echo $$i | sed 's,.*/,,'` > ../htmldocs/$$htmlfile; \ - cat /tmp/jade.log | grep -v DTDDECL; \ - /bin/rm -f /tmp/jade.log /tmp/`echo $$i | sed 's,.*/,,'`; \ - done) - - -## I'm using htmldoc here to produc the PDF output. If you want -## Postscript output, you can run -## -## sgmltools -b ps projdoc/samba-doc.sgml -## -proj-doc: - echo Building Samba-HOWTO-Collections... - @$(PERL) scripts/collateindex.pl -N -o projdoc/index.sgml - @$(JADE) -t sgml -V html-index -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl projdoc/samba-doc.sgml - @$(PERL) scripts/collateindex.pl -o projdoc/index.sgml HTML.index - @/bin/rm HTML.index *.htm - @$(JADE) -t sgml -i html -V nochunks -d stylesheets/ldp.dsl\#html projdoc/samba-doc.sgml > samba-doc.html - @(cd scripts; ./ldp_print ../samba-doc.html) - @mv -f samba-doc.pdf ../Samba-HOWTO-Collection.pdf - @/bin/mv -f samba-doc.html ../htmldocs/Samba-HOWTO-Collection.html - - -## generate all HTML man pages -man-html-all: $(SGMLMANSRC) - @echo Building HTML formatted man pages... - @(for i in $?; do \ - htmlfile=`echo $$i | sed 's,.*/,,' | sed "s/\.sgml/\.html/g"`; \ - echo "Making $$htmlfile"; \ - $(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html -f /tmp/jade.log $$i > ../htmldocs/$$htmlfile; \ - cat /tmp/jade.log | grep -v DTDDECL; \ - /bin/rm -f /tmp/jade.log; \ - done) - -## generate all man pages -man-all: $(SGMLMANSRC) - @echo Building man pages... - @(for i in $?; do \ - manfile=`echo $$i | sed 's,.*/,,' | sed "s/\.sgml//g"`; \ - echo "Making $$manfile"; \ - $(NSGMLS) -f /tmp/docbook2x.log $$i | $(SGMLSPL) \ - $(SGML_SHARE)/docbook2X/docbook2man-spec.pl; \ - cat /tmp/docbook2x.log | grep -v DTDDECL; \ - /bin/rm -f /tmp/docbook2x.log; \ - cat $$manfile | $(PERL) scripts/strip-links.pl > $(MANDIR)/$$manfile; \ - /bin/rm -f $$manfile; \ - done) - - - - -## -## these rules are for building individual files -## -$(MANDIR)/findsmb.1: manpages/findsmb.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbclient.1: manpages/smbclient.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbspool.8: manpages/smbspool.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/lmhosts.5: manpages/lmhosts.5.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbcontrol.1: manpages/smbcontrol.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbstatus.1: manpages/smbstatus.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/make_smbcodepage.1: manpages/make_smbcodepage.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/make_unicodemap.1: manpages/make_unicodemap.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbd.8: manpages/smbd.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbtar.1: manpages/smbtar.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/nmbd.8: manpages/nmbd.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbmnt.8: manpages/smbmnt.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbumount.8: manpages/smbumount.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/nmblookup.1: manpages/nmblookup.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbmount.8: manpages/smbmount.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/swat.8: manpages/swat.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/rpcclient.1: manpages/rpcclient.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbpasswd.5: manpages/smbpasswd.5.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/testparm.1: manpages/testparm.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/samba.7: manpages/samba.7.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbpasswd.8: manpages/smbpasswd.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/testprns.1: manpages/testprns.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/vfstest.1: manpages/vfstest.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smb.conf.5: manpages/smb.conf.5.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/wbinfo.1: manpages/wbinfo.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbcacls.1: manpages/smbcacls.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbsh.1 : manpages/smbsh.1.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/winbindd.8: manpages/winbindd.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - - -$(MANDIR)/pdbedit.8: manpages/pdbedit.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/net.8: manpages/net.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - -$(MANDIR)/smbgroupedit.8: manpages/smbgroupedit.8.sgml - @echo "Making $@" - @$(NSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl - @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@ - @/bin/rm -f `echo $@ | sed 's,.*/,,'` - @echo "Making HTML version of $@" - @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"` - + @echo "Supported make targets:" + @echo "manpages - Build manpages" + @echo "ps - Build PostScript version of HOWTO Collection" + @echo "pdf - Build PDF version of HOWTO Collection" + @echo "html-single - Build single HTML version of HOWTO Collection" + @echo "html - Build HTML version of HOWTO Collection and manpages" + @echo "txt - Build plain text version of HOWTO Collection" + +manpages: $(MANPAGES) +pdf: ../Samba-HOWTO-Collection.pdf +ps: ../Samba-HOWTO-Collection.ps +txt: ../Samba-HOWTO-Collection.txt +html: $(HTMLDIR)/samba-doc.html +html-single: ../Samba-HOWTO-Collection.html $(MANPAGES_HTML) + +../Samba-HOWTO-Collection.txt: $(SGMLDIR)/samba-doc.sgml + $(DOCBOOK2TXT) -o .. $< + mv ../samba-doc.txt $@ + +../Samba-HOWTO-Collection.ps: $(SGMLDIR)/samba-doc.sgml + $(DOCBOOK2PS) -o .. $< + mv ../samba-doc.ps $@ + +../Samba-HOWTO-Collection.pdf: ../Samba-HOWTO-Collection.html + $(HTMLDOC) --book --color --links -f $@ $< + +../Samba-HOWTO-Collection.html: $(SGMLDIR)/samba-doc.sgml + $(DOCBOOK2HTML) -u -o .. $< + mv ../samba-doc.html $@ + +$(HTMLDIR)/samba-doc.html: $(SGMLDIR)/samba-doc.sgml + $(DOCBOOK2HTML) -o $(HTMLDIR) $< + +$(HTMLDIR)/%.html: $(MANSGMLDIR)/%.sgml + $(DOCBOOK2HTML) -o $(HTMLDIR) $< + +$(MANDIR)/%: $(MANSGMLDIR)/%.sgml + $(DOCBOOK2MAN) -o $(MANDIR) $< + $(PERL) scripts/strip-links.pl < $@ > $@.temp + mv $@.temp $@ -## Clean Rule clean: - /bin/rm -f manpage.* + rm -f $(MANPAGES) $(MANPAGES_HTML) ../htmldocs/*.html ../Samba-HOWTO-Collection.pdf ../Samba-HOWTO-Collection.ps diff --git a/docs/docbook/configure b/docs/docbook/configure index 26ea467482..609c17ed87 100755 --- a/docs/docbook/configure +++ b/docs/docbook/configure @@ -11,8 +11,6 @@ ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: -ac_help="$ac_help - --with-sgml-share=DIR change the default location of SGML stylesheets" # Initialize some variables set by options. # The variables have the same names as the options, with @@ -524,22 +522,19 @@ fi -## check for the necesary install tools -## Openjade includes 'onsgmls' while -## the older jade package includes 'nsgmls' -# Extract the first word of "openjade", so it can be a program name with args. -set dummy openjade; ac_word=$2 +# Extract the first word of "jw", so it can be a program name with args. +set dummy jw; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:534: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_JADE'+set}'`\" = set"; then +echo "configure:529: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_JW'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else - case "$JADE" in + case "$JW" in /*) - ac_cv_path_JADE="$JADE" # Let the user override the test with a path. + ac_cv_path_JW="$JW" # Let the user override the test with a path. ;; ?:/*) - ac_cv_path_JADE="$JADE" # Let the user override the test with a dos path. + ac_cv_path_JW="$JW" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" @@ -547,7 +542,7 @@ else for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then - ac_cv_path_JADE="$ac_dir/$ac_word" + ac_cv_path_JW="$ac_dir/$ac_word" break fi done @@ -555,99 +550,26 @@ else ;; esac fi -JADE="$ac_cv_path_JADE" -if test -n "$JADE"; then - echo "$ac_t""$JADE" 1>&6 +JW="$ac_cv_path_JW" +if test -n "$JW"; then + echo "$ac_t""$JW" 1>&6 else echo "$ac_t""no" 1>&6 fi - -if test -z "$JADE"; then - # Extract the first word of "jade", so it can be a program name with args. -set dummy jade; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:571: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_JADE'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$JADE" in - /*) - ac_cv_path_JADE="$JADE" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_JADE="$JADE" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_JADE="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -JADE="$ac_cv_path_JADE" -if test -n "$JADE"; then - echo "$ac_t""$JADE" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - # Extract the first word of "nsgmls", so it can be a program name with args. -set dummy nsgmls; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:606: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_NSGMLS'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$NSGMLS" in - /*) - ac_cv_path_NSGMLS="$NSGMLS" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_NSGMLS="$NSGMLS" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_NSGMLS="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -NSGMLS="$ac_cv_path_NSGMLS" -if test -n "$NSGMLS"; then - echo "$ac_t""$NSGMLS" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -else - # Extract the first word of "onsgmls", so it can be a program name with args. -set dummy onsgmls; ac_word=$2 +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:642: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_NSGMLS'+set}'`\" = set"; then +echo "configure:564: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else - case "$NSGMLS" in + case "$PERL" in /*) - ac_cv_path_NSGMLS="$NSGMLS" # Let the user override the test with a path. + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; ?:/*) - ac_cv_path_NSGMLS="$NSGMLS" # Let the user override the test with a dos path. + ac_cv_path_PERL="$PERL" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" @@ -655,7 +577,7 @@ else for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then - ac_cv_path_NSGMLS="$ac_dir/$ac_word" + ac_cv_path_PERL="$ac_dir/$ac_word" break fi done @@ -663,19 +585,17 @@ else ;; esac fi -NSGMLS="$ac_cv_path_NSGMLS" -if test -n "$NSGMLS"; then - echo "$ac_t""$NSGMLS" 1>&6 +PERL="$ac_cv_path_PERL" +if test -n "$PERL"; then + echo "$ac_t""$PERL" 1>&6 else echo "$ac_t""no" 1>&6 fi -fi - # Extract the first word of "htmldoc", so it can be a program name with args. set dummy htmldoc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:679: checking for $ac_word" >&5 +echo "configure:599: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_HTMLDOC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -707,102 +627,6 @@ else echo "$ac_t""no" 1>&6 fi -# Extract the first word of "sgmlspl", so it can be a program name with args. -set dummy sgmlspl; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:714: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_SGMLSPL'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$SGMLSPL" in - /*) - ac_cv_path_SGMLSPL="$SGMLSPL" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_SGMLSPL="$SGMLSPL" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_SGMLSPL="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -SGMLSPL="$ac_cv_path_SGMLSPL" -if test -n "$SGMLSPL"; then - echo "$ac_t""$SGMLSPL" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -# Extract the first word of "perl", so it can be a program name with args. -set dummy perl; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:749: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$PERL" in - /*) - ac_cv_path_PERL="$PERL" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_PERL="$PERL" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_PERL="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -PERL="$ac_cv_path_PERL" -if test -n "$PERL"; then - echo "$ac_t""$PERL" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - -SGML_SHARE="/usr/local/share/sgml" - -# Check whether --with-sgml-share or --without-sgml-share was given. -if test "${with_sgml_share+set}" = set; then - withval="$with_sgml_share" - case "$withval" in - no) SGML_SHARE="" - ;; - yes) - ;; - /*|\\*) - SGML_SHARE="$withval" - ;; - *) - SGML_SHARE="/$withval" - ;; -esac - -fi - -# The Makefile requires docbook2X in the share/sgml directory -if ! test -f $SGML_SHARE/docbook2X/docbook2man-spec.pl ; then - { echo "configure: error: "Unable to find dockbook2X. Make sure it is installed and that the sgml-share path is correct."" 1>&2; exit 1; } -fi - DOC_BUILD_DATE=`date '+%d-%m-%Y'` @@ -919,7 +743,7 @@ done ac_given_srcdir=$srcdir -trap 'rm -fr `echo "Makefile stylesheets/ldp.dsl " | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "Makefile " | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff --git a/docs/docbook/configure.in b/docs/docbook/configure.in index f8b4a1618a..3a9ed51d16 100644 --- a/docs/docbook/configure.in +++ b/docs/docbook/configure.in @@ -1,49 +1,10 @@ AC_INIT(global.ent) -## check for the necesary install tools -## Openjade includes 'onsgmls' while -## the older jade package includes 'nsgmls' -AC_PATH_PROG(JADE,openjade) - -if test -z "$JADE"; then - AC_PATH_PROG(JADE,jade) - AC_PATH_PROG(NSGMLS, nsgmls) -else - AC_PATH_PROG(NSGMLS, onsgmls) -fi - -AC_PATH_PROG(HTMLDOC, htmldoc) -AC_PATH_PROG(SGMLSPL, sgmlspl) +AC_PATH_PROG(JW, jw) AC_PATH_PROG(PERL, perl) - -dnl ---------------------------------------------------------------- -dnl --with-sgml-share -SGML_SHARE="/usr/local/share/sgml" - -AC_ARG_WITH(sgml-share, -[ --with-sgml-share=DIR change the default location of SGML stylesheets], -[case "$withval" in - no) SGML_SHARE="" - ;; - yes) - ;; - /*|\\*) - SGML_SHARE="$withval" - ;; - *) - SGML_SHARE="/$withval" - ;; -esac -])dnl - -# The Makefile requires docbook2X in the share/sgml directory -if [ ! test -f $SGML_SHARE/docbook2X/docbook2man-spec.pl ]; then - AC_MSG_ERROR("Unable to find docbook2X. Make sure it is installed and that the sgml-share path is correct.") -fi - -AC_SUBST(SGML_SHARE)dnl +AC_PATH_PROG(HTMLDOC, htmldoc) DOC_BUILD_DATE=`date '+%d-%m-%Y'` AC_SUBST(DOC_BUILD_DATE) -AC_OUTPUT( Makefile stylesheets/ldp.dsl ) +AC_OUTPUT( Makefile ) diff --git a/docs/docbook/dbsgml/40chg.txt b/docs/docbook/dbsgml/40chg.txt deleted file mode 100644 index 2d2467d9eb..0000000000 --- a/docs/docbook/dbsgml/40chg.txt +++ /dev/null @@ -1,45 +0,0 @@ -19 June 2000 - -Changes from DocBook V3.1 to DocBook V4.1: - -Markup: - -- RFE 17: Added a common attribute 'Condition' for generic effectivity -- RFE 38: The nav.class elements (ToC|LoT|Index|Glossary|Bibliography) are - now allowed at the beginning and end of components and sections -- RFE 58: The 'optmult' and 'reqmult' attribute values have been - removed from Group -- RFE 65: Added several class attribute values to Filename and SystemItem - at the request of the Linux community -- RFE 73: Removed BookBiblio and SeriesInfo -- RFE 81: Added SidebarInfo to Sidebar -- RFE 87: Added 'xmlpi' and 'emptytag' as class values of SGMLTag -- RFE 92: Added 'CO' to Synopsis and LiteralLayout -- RFE 99: Added SimpleMsgEntry as an alternative to MsgEntry in order - to provide a simpler MsgSet construct -- RFE 103: Added RevDescription as an alternative to RevRemark in - RevHistory; this allows longer descriptive text in a revision -- RFE 104: Added 'Specification' to the list of document classes on Article -- RFE 108: Allow admonitions in Answers -- RFE 110: Allow a RevHistory on QandAEntry -- RFE 115: Allow optional Title on OrderedList and ItemizedList -- RFE 116: Added LineNumbering attribute to linespecific environments for - presentation of line numbers -- Added a common attribute 'Security' for effectivity -- Added synopsis markup for modern programming languages (e.g, object - oriented languages like Java, C++, and IDL) -- Renamed DocInfo to PrefaceInfo, ChapterInfo, AppendixInfo, etc. -- Comment was renamed Remark -- InterfaceDefinition was removed - -Other: - -- RFE 88: Added PEs to include/ignore dbnotn.mod and dbcent.mod -- RFE 102: Fixed some outstanding namecase problems -- RFE 105: Added PNG notation -- RFE 106: Removed some odd *.content PEs that interfered with - customization layers -- RFE 109: Added FPI to content of dbgenent.mod (for consistency) -- RFE 111: Added the Euro symbol -- Fixed bug in cals-tbl.dtd; a model group was used for the element - declaration, but the attlist declaration used "Table" literally. diff --git a/docs/docbook/dbsgml/41chg.txt b/docs/docbook/dbsgml/41chg.txt deleted file mode 100644 index d2a9147887..0000000000 --- a/docs/docbook/dbsgml/41chg.txt +++ /dev/null @@ -1,7 +0,0 @@ -19 June 2000 - -Changes from DocBook V4.0 to DocBook V4.1: - -No user-visible changes; removed some 4.0 future use comments that had -accidentally been left in the DTD and fixed a couple of incorrect FPIs. -See 40chg.txt for a list of the significant changes. diff --git a/docs/docbook/dbsgml/50issues.txt b/docs/docbook/dbsgml/50issues.txt deleted file mode 100644 index 31497420f0..0000000000 --- a/docs/docbook/dbsgml/50issues.txt +++ /dev/null @@ -1,39 +0,0 @@ -19 June 2000 - -Backwards-incompatible changes to DocBook that are planned for V5.0: - -- DocBook V5.0 will be an XML DTD. This will require a wide range of - changes. As a result, DocBook V5.0 will more closely resemble - The XML version of DocBook V4.1 than the SGML version. - -- Parameter entity reorganization may greatly reduce many - content models. The goal of this effort is to remove a large - number of spurious elements that snuck into content models - during the first PE reorg, in practice these changes should have - very little "real world" impact. - -- The Coords attribute will be removed from AreaSet. - -- ArtHeader will be dropped from BiblioEntry - -- Contents attribute will be removed from BookInfo and SetInfo - -- The %indexdivcomponent.mix; will be restricted. Numbered figures - and other elements inappropriate for an Index or SetIndex will be - removed. - -- RevHistory will be removed from GlossTerm - -- Constant Class will be removed from SystemItem - -- Graphic and InlineGraphic will be removed - -- Tables will be restricted from full CALS to the OASIS Exchange model - -- An experimental XML Schema version of DocBook 5.0 will be - produced in parallel with the DTD version. It will be - backwards-incompatible in an unspecified number of ways. The - goal of the effort will be that most DocBook documents that - validate under the DTD will also validate under the Schema, - but the committee does not feel bound to guarantee this - condition. diff --git a/docs/docbook/dbsgml/ChangeLog b/docs/docbook/dbsgml/ChangeLog deleted file mode 100644 index c4673db15a..0000000000 --- a/docs/docbook/dbsgml/ChangeLog +++ /dev/null @@ -1,85 +0,0 @@ -2000-06-19 Norman Walsh - - * 40chg.txt: Added notes about comment and interfacedefinition - - * 41chg.txt: New file. - - * 50issues.txt, dbcent.mod, dbgenent.mod, dbhier.mod, dbnotn.mod, dbpool.mod, docbook.cat, docbook.dcl, readme.txt: - Updated version numbers to 4.1 - - * dbhier.mod, dbpool.mod: Removed 4.0 future use comments - - * docbook.cat: Fixed version number in comment - - * docbook.dtd: DocBook V4.1 released. - -2000-05-18 Norman Walsh - - * 40chg.txt, dbcent.mod, dbgenent.mod, dbhier.mod, dbnotn.mod, dbpool.mod, docbook.cat, docbook.dcl, docbook.dtd, readme.txt: - Removed references to beta6 - - * docbook.dtd: DocBook V4.0 released. - -2000-04-10 Norman Walsh - - * 40chg.txt, dbcent.mod, dbgenent.mod, dbhier.mod, dbnotn.mod, dbpool.mod, docbook.cat, docbook.dcl, docbook.dtd, readme.txt: - Updated release date and version to 4.0beta6 - - * dbpool.mod: Added support for EBNF hook; fixed equation content bug - -2000-04-03 Norman Walsh - - * 40chg.txt: Added note about renaming DocInfo to *Info. - - * 40chg.txt, dbcent.mod, dbgenent.mod, dbhier.mod, dbnotn.mod, dbpool.mod, docbook.cat, docbook.dcl, docbook.dtd, readme.txt: - Updated version numbers - -2000-03-24 Norman Walsh - - * 40chg.txt, dbcent.mod, dbgenent.mod, dbhier.mod, dbnotn.mod, dbpool.mod, docbook.cat, docbook.dcl, docbook.dtd, readme.txt: - Updated version numbers - - * 50issues.txt: Added note about PE reorg - - * dbefsyn.mod: Removed - - * dbpool.mod: Removed ELEMENT from comments to ease text searching of the DTD. - Merged dbefsyn.mod into dbpool.mod - Added Modifier as an optional element at the end of MethodSynopsis - and MethodParam. - -2000-03-07 Norman Walsh - - * 40chg.txt, dbcent.mod, dbgenent.mod, dbhier.mod, dbnotn.mod, dbpool.mod, docbook.cat, docbook.dcl, docbook.dtd, readme.txt: - Updated internal versions to beta3 - -2000-03-03 Norman Walsh - - * dbpool.mod: Removed erroneous comment about inline synopses - -2000-03-02 Norman Walsh - - * 30chg.txt, 31chg.txt, 40issues.txt, 50issues.txt, announce.txt, cals-tbl.dtd, dbcent.mod, dbgenent.mod, dbhier.mod, dbnotn.mod, dbpool.mod, docbook.cat, docbook.dcl, docbook.dtd, readme.txt: - Version 3.1 - - * 30chg.txt, 40issues.txt, announce.txt, cals-tbl.dtd, dbgenent.mod, dbhier.mod, dbpool.mod, docbook.cat, docbook.dcl, docbook.dtd: - branches: 1.1.1; - Initial revision - - * 30chg.txt, 40issues.txt, announce.txt, cals-tbl.dtd, dbgenent.mod, dbhier.mod, dbpool.mod, docbook.cat, docbook.dcl, docbook.dtd: - New file. - - * 31chg.txt, 40chg.txt, 40issues.txt, 50issues.txt, cals-tbl.dtd, dbcent.mod, dbefsyn.mod, dbgenent.mod, dbhier.mod, dbnotn.mod, dbpool.mod, docbook.cat, docbook.dcl, docbook.dtd, readme.txt: - Version 4.0beta2 - - * 50issues.txt: Added warning about exchange table model - - * dbefsyn.mod, dbpool.mod: Added ooclass, oointerface, and ooexception as wrappers for modifiers - and names in classsynopsis. Also allow them inline. - - Fixed SGML PE parsing problem with hook PEs. - - * dbhier.mod, dbpool.mod: Added hook PEs for future module extension - - * dbpool.mod, docbook.dtd: Removed reference to sgml-features PE - diff --git a/docs/docbook/dbsgml/cals-tbl.dtd b/docs/docbook/dbsgml/cals-tbl.dtd deleted file mode 100644 index 78c7d5a3ae..0000000000 --- a/docs/docbook/dbsgml/cals-tbl.dtd +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/catalog b/docs/docbook/dbsgml/catalog deleted file mode 100644 index 521e8201c8..0000000000 --- a/docs/docbook/dbsgml/catalog +++ /dev/null @@ -1,63 +0,0 @@ - -- ...................................................................... -- - -- Catalog data for DocBook V4.1 ........................................ -- - -- File docbook.cat ..................................................... -- - - -- Please direct all questions, bug reports, or suggestions for - changes to the docbook@lists.oasis-open.org mailing list. For more - information, see http://www.oasis-open.org/. - -- - - -- This is the catalog data file for DocBook V4.1. It is provided as - a convenience in building your own catalog files. You need not use - the filenames listed here, and need not use the filename method of - identifying storage objects at all. See the documentation for - detailed information on the files associated with the DocBook DTD. - See SGML Open Technical Resolution 9401 for detailed information - on supplying and using catalog data. - -- - - -- ...................................................................... -- - -- SGML declaration associated with DocBook ............................. -- - -DTDDECL "-//OASIS//DTD DocBook V4.1//EN" "docbook.dcl" - - -- ...................................................................... -- - -- DocBook driver file .................................................. -- - -PUBLIC "-//OASIS//DTD DocBook V4.1//EN" "docbook.dtd" - - -- ...................................................................... -- - -- DocBook modules ...................................................... -- - -PUBLIC "-//USA-DOD//DTD Table Model 951010//EN" "cals-tbl.dtd" -PUBLIC "-//OASIS//ELEMENTS DocBook Information Pool V4.1//EN" "dbpool.mod" -PUBLIC "-//OASIS//ELEMENTS DocBook Document Hierarchy V4.1//EN" "dbhier.mod" -PUBLIC "-//OASIS//ENTITIES DocBook Additional General Entities V4.1//EN" "dbgenent.mod" -PUBLIC "-//OASIS//ENTITIES DocBook Notations V4.1//EN" "dbnotn.mod" -PUBLIC "-//OASIS//ENTITIES DocBook Character Entities V4.1//EN" "dbcent.mod" - - -- ...................................................................... -- - -- ISO entity sets ...................................................... -- - -PUBLIC "ISO 8879:1986//ENTITIES Diacritical Marks//EN" "ent/ISOdia" -PUBLIC "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN" "ent/ISOnum" -PUBLIC "ISO 8879:1986//ENTITIES Publishing//EN" "ent/ISOpub" -PUBLIC "ISO 8879:1986//ENTITIES General Technical//EN" "ent/ISOtech" -PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN" "ent/ISOlat1" -PUBLIC "ISO 8879:1986//ENTITIES Added Latin 2//EN" "ent/ISOlat2" -PUBLIC "ISO 8879:1986//ENTITIES Greek Letters//EN" "ent/ISOgrk1" -PUBLIC "ISO 8879:1986//ENTITIES Monotoniko Greek//EN" "ent/ISOgrk2" -PUBLIC "ISO 8879:1986//ENTITIES Greek Symbols//EN" "ent/ISOgrk3" -PUBLIC "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN" "ent/ISOgrk4" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" "ent/ISOamsa" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" "ent/ISOamsb" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN" "ent/ISOamsc" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN" "ent/ISOamsn" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN" "ent/ISOamso" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN" "ent/ISOamsr" -PUBLIC "ISO 8879:1986//ENTITIES Box and Line Drawing//EN" "ent/ISObox" -PUBLIC "ISO 8879:1986//ENTITIES Russian Cyrillic//EN" "ent/ISOcyr1" -PUBLIC "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN" "ent/ISOcyr2" - - -- End of catalog data for DocBook V4.1 ................................. -- - -- ...................................................................... -- diff --git a/docs/docbook/dbsgml/dbcent.mod b/docs/docbook/dbsgml/dbcent.mod deleted file mode 100755 index 7f05211019..0000000000 --- a/docs/docbook/dbsgml/dbcent.mod +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - - - -%ISOamsa; -]]> - - - -%ISOamsb; -]]> - - - -%ISOamsc; -]]> - - - -%ISOamsn; -]]> - - - -%ISOamso; -]]> - - - -%ISOamsr; -]]> - - - -%ISObox; -]]> - - - -%ISOcyr1; -]]> - - - -%ISOcyr2; -]]> - - - -%ISOdia; -]]> - - - -%ISOgrk1; -]]> - - - -%ISOgrk2; -]]> - - - -%ISOgrk3; -]]> - - - -%ISOgrk4; -]]> - - - -%ISOlat1; -]]> - - - -%ISOlat2; -]]> - - - -%ISOnum; -]]> - - - -%ISOpub; -]]> - - - -%ISOtech; -]]> diff --git a/docs/docbook/dbsgml/dbgenent.mod b/docs/docbook/dbsgml/dbgenent.mod deleted file mode 100644 index b60c5b2714..0000000000 --- a/docs/docbook/dbsgml/dbgenent.mod +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/dbhier.mod b/docs/docbook/dbsgml/dbhier.mod deleted file mode 100755 index 10e1f3f33f..0000000000 --- a/docs/docbook/dbsgml/dbhier.mod +++ /dev/null @@ -1,2100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - - -]]> -]]> -]]> - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - - -]]> -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> - -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - - - -]]> - - - -]]> -]]> - - - diff --git a/docs/docbook/dbsgml/dbnotn.mod b/docs/docbook/dbsgml/dbnotn.mod deleted file mode 100755 index b980630bba..0000000000 --- a/docs/docbook/dbsgml/dbnotn.mod +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/dbpool.mod b/docs/docbook/dbsgml/dbpool.mod deleted file mode 100755 index 3867d070e8..0000000000 --- a/docs/docbook/dbsgml/dbpool.mod +++ /dev/null @@ -1,7396 +0,0 @@ - - - - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]]> - - - - - - - - - - - - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - - -]]> -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - -]]> - - - - - - - -]]> - - - -]]> - - -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - - -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -%calstbls; -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - - - -]]> - - - -]]> - - -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - - - -]]> - - - -]]> - ]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - - - -]]> - - - -]]> - ]]> - - -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> - -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - ]]> - - - - -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - - - -]]> - - - -]]> - ]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> - -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> - -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> - ]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - ]]> - - -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> - ]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - -]]> - - - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> - - - - - - - - - - -]]> - - - -]]> -]]> - - - - - - - -]]> - - - - -]]> -]]> -]]> - - - - - - - -]]> - - - -]]> -]]> -]]> - - - diff --git a/docs/docbook/dbsgml/docbook.cat b/docs/docbook/dbsgml/docbook.cat deleted file mode 100644 index 0f285d0d75..0000000000 --- a/docs/docbook/dbsgml/docbook.cat +++ /dev/null @@ -1,63 +0,0 @@ - -- ...................................................................... -- - -- Catalog data for DocBook V4.1 ........................................ -- - -- File docbook.cat ..................................................... -- - - -- Please direct all questions, bug reports, or suggestions for - changes to the docbook@lists.oasis-open.org mailing list. For more - information, see http://www.oasis-open.org/. - -- - - -- This is the catalog data file for DocBook V4.1. It is provided as - a convenience in building your own catalog files. You need not use - the filenames listed here, and need not use the filename method of - identifying storage objects at all. See the documentation for - detailed information on the files associated with the DocBook DTD. - See SGML Open Technical Resolution 9401 for detailed information - on supplying and using catalog data. - -- - - -- ...................................................................... -- - -- SGML declaration associated with DocBook ............................. -- - -DTDDECL "-//OASIS//DTD DocBook V4.1//EN" "docbook.dcl" - - -- ...................................................................... -- - -- DocBook driver file .................................................. -- - -PUBLIC "-//OASIS//DTD DocBook V4.1//EN" "docbook.dtd" - - -- ...................................................................... -- - -- DocBook modules ...................................................... -- - -PUBLIC "-//USA-DOD//DTD Table Model 951010//EN" "cals-tbl.dtd" -PUBLIC "-//OASIS//ELEMENTS DocBook Information Pool V4.1//EN" "dbpool.mod" -PUBLIC "-//OASIS//ELEMENTS DocBook Document Hierarchy V4.1//EN" "dbhier.mod" -PUBLIC "-//OASIS//ENTITIES DocBook Additional General Entities V4.1//EN" "dbgenent.mod" -PUBLIC "-//OASIS//ENTITIES DocBook Notations V4.1//EN" "dbnotn.mod" -PUBLIC "-//OASIS//ENTITIES DocBook Character Entities V4.1//EN" "dbcent.mod" - - -- ...................................................................... -- - -- ISO entity sets ...................................................... -- - -PUBLIC "ISO 8879:1986//ENTITIES Diacritical Marks//EN" "ISOdia" -PUBLIC "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN" "ISOnum" -PUBLIC "ISO 8879:1986//ENTITIES Publishing//EN" "ISOpub" -PUBLIC "ISO 8879:1986//ENTITIES General Technical//EN" "ISOtech" -PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN" "ISOlat1" -PUBLIC "ISO 8879:1986//ENTITIES Added Latin 2//EN" "ISOlat2" -PUBLIC "ISO 8879:1986//ENTITIES Greek Letters//EN" "ISOgrk1" -PUBLIC "ISO 8879:1986//ENTITIES Monotoniko Greek//EN" "ISOgrk2" -PUBLIC "ISO 8879:1986//ENTITIES Greek Symbols//EN" "ISOgrk3" -PUBLIC "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN" "ISOgrk4" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" "ISOamsa" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" "ISOamsb" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN" "ISOamsc" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN" "ISOamsn" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN" "ISOamso" -PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN" "ISOamsr" -PUBLIC "ISO 8879:1986//ENTITIES Box and Line Drawing//EN" "ISObox" -PUBLIC "ISO 8879:1986//ENTITIES Russian Cyrillic//EN" "ISOcyr1" -PUBLIC "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN" "ISOcyr2" - - -- End of catalog data for DocBook V4.1 ................................. -- - -- ...................................................................... -- diff --git a/docs/docbook/dbsgml/docbook.dcl b/docs/docbook/dbsgml/docbook.dcl deleted file mode 100644 index c76de206cf..0000000000 --- a/docs/docbook/dbsgml/docbook.dcl +++ /dev/null @@ -1,106 +0,0 @@ - diff --git a/docs/docbook/dbsgml/docbook.dtd b/docs/docbook/dbsgml/docbook.dtd deleted file mode 100755 index 4d784cc43f..0000000000 --- a/docs/docbook/dbsgml/docbook.dtd +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - -%dbnotn; -]]> - - - - - - - -%dbcent; -]]> - - - - - - - - -%dbpool; -]]> - - - - -]]> - - - - - -%dbhier; -]]> - - - - - - -%dbgenent; -]]> - - - diff --git a/docs/docbook/dbsgml/ent/ISOamsa b/docs/docbook/dbsgml/ent/ISOamsa deleted file mode 100644 index b77154cb02..0000000000 --- a/docs/docbook/dbsgml/ent/ISOamsa +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOamsb b/docs/docbook/dbsgml/ent/ISOamsb deleted file mode 100644 index 43944a732f..0000000000 --- a/docs/docbook/dbsgml/ent/ISOamsb +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOamsc b/docs/docbook/dbsgml/ent/ISOamsc deleted file mode 100644 index 06222d58cf..0000000000 --- a/docs/docbook/dbsgml/ent/ISOamsc +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOamsn b/docs/docbook/dbsgml/ent/ISOamsn deleted file mode 100644 index 0c8327a326..0000000000 --- a/docs/docbook/dbsgml/ent/ISOamsn +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOamso b/docs/docbook/dbsgml/ent/ISOamso deleted file mode 100644 index ad9b329e54..0000000000 --- a/docs/docbook/dbsgml/ent/ISOamso +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOamsr b/docs/docbook/dbsgml/ent/ISOamsr deleted file mode 100644 index 3f26c345c0..0000000000 --- a/docs/docbook/dbsgml/ent/ISOamsr +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISObox b/docs/docbook/dbsgml/ent/ISObox deleted file mode 100644 index 643e926eda..0000000000 --- a/docs/docbook/dbsgml/ent/ISObox +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOcyr1 b/docs/docbook/dbsgml/ent/ISOcyr1 deleted file mode 100644 index 97b961b1f0..0000000000 --- a/docs/docbook/dbsgml/ent/ISOcyr1 +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOcyr2 b/docs/docbook/dbsgml/ent/ISOcyr2 deleted file mode 100644 index 480b01c1df..0000000000 --- a/docs/docbook/dbsgml/ent/ISOcyr2 +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOdia b/docs/docbook/dbsgml/ent/ISOdia deleted file mode 100644 index 3b6f98d6ba..0000000000 --- a/docs/docbook/dbsgml/ent/ISOdia +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOgrk1 b/docs/docbook/dbsgml/ent/ISOgrk1 deleted file mode 100644 index dea16bf8ef..0000000000 --- a/docs/docbook/dbsgml/ent/ISOgrk1 +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOgrk2 b/docs/docbook/dbsgml/ent/ISOgrk2 deleted file mode 100644 index 657bb99935..0000000000 --- a/docs/docbook/dbsgml/ent/ISOgrk2 +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOgrk3 b/docs/docbook/dbsgml/ent/ISOgrk3 deleted file mode 100644 index f76c3a084f..0000000000 --- a/docs/docbook/dbsgml/ent/ISOgrk3 +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOgrk4 b/docs/docbook/dbsgml/ent/ISOgrk4 deleted file mode 100644 index e4427a0cb5..0000000000 --- a/docs/docbook/dbsgml/ent/ISOgrk4 +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOlat1 b/docs/docbook/dbsgml/ent/ISOlat1 deleted file mode 100644 index 0d7d0a7d93..0000000000 --- a/docs/docbook/dbsgml/ent/ISOlat1 +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOlat2 b/docs/docbook/dbsgml/ent/ISOlat2 deleted file mode 100644 index 4bcb337832..0000000000 --- a/docs/docbook/dbsgml/ent/ISOlat2 +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOnum b/docs/docbook/dbsgml/ent/ISOnum deleted file mode 100644 index d7b41c33ae..0000000000 --- a/docs/docbook/dbsgml/ent/ISOnum +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOpub b/docs/docbook/dbsgml/ent/ISOpub deleted file mode 100644 index c184973cfd..0000000000 --- a/docs/docbook/dbsgml/ent/ISOpub +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/ent/ISOtech b/docs/docbook/dbsgml/ent/ISOtech deleted file mode 100644 index cbda344869..0000000000 --- a/docs/docbook/dbsgml/ent/ISOtech +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docbook/dbsgml/readme.txt b/docs/docbook/dbsgml/readme.txt deleted file mode 100644 index 52d3f9f4aa..0000000000 --- a/docs/docbook/dbsgml/readme.txt +++ /dev/null @@ -1,12 +0,0 @@ -README for DocBook V4.1 - -This is DocBook V4.1, released 19 June 2000. - -See 40chg.txt for information about what has changed since DocBook 3.1. - -For more information about DocBook, please see - - http://www.oasis-open.org/docbook/ - -Please send all questions, comments, concerns, and bug reports to the -DocBook mailing list: docbook@lists.oasis-open.org diff --git a/docs/docbook/docbook.txt b/docs/docbook/docbook.txt index 388cd5cf9b..019b073b51 100644 --- a/docs/docbook/docbook.txt +++ b/docs/docbook/docbook.txt @@ -1,8 +1,9 @@ !== -!== docbook.txt for Samba 2.2.0 release +!== docbook.txt for Samba HEAD !== !== Author: David Bannon, D.Bannon@latrobe.edu.au November, 2000 !== Updates: Gerald (Jerry) Carter, jerry@samba.org, Feb. 2001 +!== Updates: Jelmer Vernooij, jelmer@samba.org, Aug, 2002 What are DocBook documents doing in the Samba Distribution ? ----------------------------------------------------------- @@ -44,93 +45,17 @@ as the following autogenerated formats * man pages * HTML * ASCII text (where appropriate) + * PDF The Tools --------- -[ - addendum: For a good general overview of installing the tools - needed for generating files from SGML/DocBook source, refer - to the DocBook-Install mini HOWTO at - http://www.ibiblio.org/pub/Linux/docs/HOWTO/mini/DocBook-Install +To generate the docs, you need to have the following packages installed: - While the above link is to a Linux HOWTO, the tools can be installed - on almost any UNIX platform. - - David's original notes follow below: -] - -Any sgml document needs to be referred to a suitable style sheet -(describing syntax) and other sheets that tell the translating programmes -how to do the translations. The list of necessary 'included files is a -bit messy but once installed is pretty easy. - -On one of my RedHat 6.2 systems I installed the following: -* sgml-common (as an rpm) -* docbook (as an rpm) -* stylesheets (as an rpm) -* jade (as an rpm) -* Docbook 4.1 from http://docbook.org -* DSSSL 157 from http://nwalsh.com/docbook/dsssl/ - -There are several downloadable descriptions of the DocBook syntax at the -web sites mentioned above. Note that a lot of the docs only talk about -version 3.1 with 4.1 as an add-on. - -In either case you will need to include in the html/docbook.dsl and most -likely a couple of defines to achieve a suitable output. I made a -local dsl file that I called html.dsl that looks like this : - - -]> - - - - - -(define nochunks #t) ;; Dont make multiple pages -(define rootchunk #t) ;; Do make a 'root' page -(define %use-id-as-filename% #t) ;; Use book id as filename -(define %html-ext% ".html") ;; give it a proper html extension - - - - - - -Note the top block that refers to where the dsssl-157 style sheets are -installed, if you don’t put them there make sure you edit the file. - -To use this stylesheet, have it in your working directory along with your -sgml files. Jade does the actual conversion to html, call it like this : - -jade -t sgml -d html.dsl stuff.sgml - -To create the text version run the html through lynx : - -Lynx -dump -nolist stuff.html > stuff.txt - -These instructions are crude by might help someone get going. Please feel -free to contact me if you have any questions or if you can correct any one -of the many mistakes I must have made above. - -David - -========================================================================== +* docbook-utils +* htmldoc This directory now contains a ./configure script and Makefile to -support the automated building of man pages (including HTML versions). -The DocBook V4.1 DTD and ISO entity files have also been included in CVS -to make sure we are all working from the same plate. - -The SGML_CATALOG_FILES environment variable should be set as follows -(this assumes you have a working local installation of jade and -Norman's Walsh's DSSSL stylesheets): - - export SGML_CATALOG_FILES=$SGML_CATALOG_FILES:./dbsgml/catalog - - ---jerry +support the automated building of man pages (including HTML versions), and +the building of the Samba-HOWTO-Collection (HTML,PDF,PS,Text versions). diff --git a/docs/docbook/scripts/README.ldp_print b/docs/docbook/scripts/README.ldp_print deleted file mode 100644 index 8d61a85534..0000000000 --- a/docs/docbook/scripts/README.ldp_print +++ /dev/null @@ -1,60 +0,0 @@ - -###################################################################### - ldp_print - print tool/script for DocBook SGML/XML documents -###################################################################### - -This process/script is used in the production environment for the -LDP. It relies on the HTMLDOC software package (GPL'ed) which can be -obtained from the Easy Software Products (c) web site: - - http://www.easysw.com/htmldoc/ - -This process creates a PDF variant from the single-file HTML -representation of a DocBook SGML (or XML) instance. The simple -wrapper script (ldp_print) assumes that the file was created using -{open}jade in a manner similar to: - - jade -t sgml -i html -V nochunks -d $style $fname > $fname.html - -Give the script the filename as an argument. It will then parse the -file into 'title.html' and 'body.html' and send each to htmldoc (as -the corresponding title page and body of the document). - - -CAVEATS -======= - -o Assumes perl is in /usr/bin; adjust if necessary - -o You may need to specify where the htmldoc executable resides. - The script assumes it's within your $PATH. - -o If you want Postscript as an output variant, uncomment the - appropriate lines (see below). - -o Relies on output from a DocBook instance created via DSSSL/{open}jade! - -o Cleans up (removes) the intermediate files it creates (but not the - PDF or Postscript files, obviously!) - -o Works silently; PDF (PostScript) will be created in the same directory - as was specified for the input (single-file HTML) file. - -o Provided without warranty or support! - -o I ran into a problem with htmldoc v1.8.8 which required a source - code change (I was getting a core dump from the htmldoc process). - Here is the change required: - - htmldoc/ps-pdf.cxx : - 3662,3665d3661 - < /* gjf = 11Oct2000 */ - < if( temprow == NULL ) - < break; - < - - -==== -gferg (at) sgi.com / Ferg -11 Jan 2000 - diff --git a/docs/docbook/scripts/collateindex.pl b/docs/docbook/scripts/collateindex.pl deleted file mode 100644 index fd757edb32..0000000000 --- a/docs/docbook/scripts/collateindex.pl +++ /dev/null @@ -1,595 +0,0 @@ -# -*- Perl -*- -# - -use Getopt::Std; - -$usage = "Usage: $0 file -Where are: - -p Link to points in the document. The default is to link - to the closest containing section. - -g Group terms with IndexDiv based on the first letter - of the term (or its sortas attribute). - (This probably doesn't handle i10n particularly well) - -s name Name the IndexDiv that contains symbols. The default - is 'Symbols'. Meaningless if -g is not used. - -t name Title for the index. - -P file Read a preamble from file. The content of file will - be inserted before the tag. - -i id The ID for the tag. - -o file Output to file. Defaults to stdout. - -S scope Scope of the index, must be 'all', 'local', or 'global'. - If unspecified, 'all' is assumed. - -I scope The implied scope, must be 'all', 'local', or 'global'. - IndexTerms which do not specify a scope will have the - implied scope. If unspecified, 'all' is assumed. - -x Make a SetIndex. - -f Force the output file to be written, even if it appears - to have been edited by hand. - -N New index (generates an empty index file). - file The file containing index data generated by Jade - with the DocBook HTML Stylesheet.\n"; - -die $usage if ! getopts('Dfgi:NpP:s:o:S:I:t:x'); - -$linkpoints = $opt_p; -$lettergroups = $opt_g; -$symbolsname = $opt_s || "Symbols"; -$title = $opt_t; -$preamble = $opt_P; -$outfile = $opt_o || '-'; -$indexid = $opt_i; -$scope = uc($opt_S) || 'ALL'; -$impliedscope = uc($opt_I) || 'ALL'; -$setindex = $opt_x; -$forceoutput = $opt_f; -$newindex = $opt_N; -$debug = $opt_D; - -$indextag = $setindex ? 'setindex' : 'index'; - -if ($newindex) { - safe_open(*OUT, $outfile); - if ($indexid) { - print OUT "<$indextag id='$indexid'>\n\n"; - } else { - print OUT "<$indextag>\n\n"; - } - - print OUT "\n"; - print OUT "\n"; - - print OUT "\n"; - exit 0; -} - -$dat = shift @ARGV || die $usage; -die "$0: cannot find $dat.\n" if ! -f $dat; - -%legal_scopes = ('ALL' => 1, 'LOCAL' => 1, 'GLOBAL' => 1); -if ($scope && !$legal_scopes{$scope}) { - die "Invalid scope.\n$usage\n"; -} -if ($impliedscope && !$legal_scopes{$impliedscope}) { - die "Invalid implied scope.\n$usage\n"; -} - -@term = (); -%id = (); - -$termcount = 0; - -print STDERR "Processing $dat...\n"; - -# Read the index file, creating an array of objects. Each object -# represents and indexterm and has fields for the content of the -# indexterm - -open (F, $dat); -while () { - chop; - - if (/^\/indexterm/i) { - push (@term, $idx); - next; - } - - if (/^indexterm (.*)$/i) { - $termcount++; - $idx = {}; - $idx->{'zone'} = {}; - $idx->{'href'} = $1; - $idx->{'count'} = $termcount; - $idx->{'scope'} = $impliedscope; - next; - } - - if (/^indexpoint (.*)$/i) { - $idx->{'hrefpoint'} = $1; - next; - } - - if (/^title (.*)$/i) { - $idx->{'title'} = $1; - next; - } - - if (/^primary[\[ ](.*)$/i) { - if (/^primary\[(.*?)\] (.*)$/i) { - $idx->{'psortas'} = $1; - $idx->{'primary'} = $2; - } else { - $idx->{'psortas'} = $1; - $idx->{'primary'} = $1; - } - next; - } - - if (/^secondary[\[ ](.*)$/i) { - if (/^secondary\[(.*?)\] (.*)$/i) { - $idx->{'ssortas'} = $1; - $idx->{'secondary'} = $2; - } else { - $idx->{'ssortas'} = $1; - $idx->{'secondary'} = $1; - } - next; - } - - if (/^tertiary[\[ ](.*)$/i) { - if (/^tertiary\[(.*?)\] (.*)$/i) { - $idx->{'tsortas'} = $1; - $idx->{'tertiary'} = $2; - } else { - $idx->{'tsortas'} = $1; - $idx->{'tertiary'} = $1; - } - next; - } - - if (/^see (.*)$/i) { - $idx->{'see'} = $1; - next; - } - - if (/^seealso (.*)$/i) { - $idx->{'seealso'} = $1; - next; - } - - if (/^significance (.*)$/i) { - $idx->{'significance'} = $1; - next; - } - - if (/^class (.*)$/i) { - $idx->{'class'} = $1; - next; - } - - if (/^scope (.*)$/i) { - $idx->{'scope'} = uc($1); - next; - } - - if (/^startref (.*)$/i) { - $idx->{'startref'} = $1; - next; - } - - if (/^id (.*)$/i) { - $idx->{'id'} = $1; - $id{$1} = $idx; - next; - } - - if (/^zone (.*)$/i) { - my($href) = $1; - $_ = scalar(); - chop; - die "Bad zone: $_\n" if !/^title (.*)$/i; - $idx->{'zone'}->{$href} = $1; - next; - } - - die "Unrecognized: $_\n"; -} -close (F); - -print STDERR "$termcount entries loaded...\n"; - -# Fixup the startrefs... -# In DocBook, STARTREF is a #CONREF attribute; support this by copying -# all of the fields from the indexterm with the id specified by STARTREF -# to the indexterm that has the STARTREF. -foreach $idx (@term) { - my($ididx, $field); - if ($idx->{'startref'}) { - $ididx = $id{$idx->{'startref'}}; - foreach $field ('primary', 'secondary', 'tertiary', 'see', 'seealso', - 'psortas', 'ssortas', 'tsortas', 'significance', - 'class', 'scope') { - $idx->{$field} = $ididx->{$field}; - } - } -} - -# Sort the index terms -@term = sort termsort @term; - -# Move all of the non-alphabetic entries to the front of the index. -@term = sortsymbols(@term); - -safe_open(*OUT, $outfile); - -# Write the index... -if ($indexid) { - print OUT "<$indextag id='$indexid'>\n\n"; -} else { - print OUT "<$indextag>\n\n"; -} - -print OUT "\n"; -print OUT "\n"; - -print OUT "\n\n"; - -print OUT "$title\n\n" if $title; - -$last = {}; # the last indexterm we processed -$first = 1; # this is the first one -$group = ""; # we're not in a group yet -$lastout = ""; # we've not put anything out yet - -foreach $idx (@term) { - next if $idx->{'startref'}; # no way to represent spans... - next if ($idx->{'scope'} eq 'LOCAL') && ($scope eq 'GLOBAL'); - next if ($idx->{'scope'} eq 'GLOBAL') && ($scope eq 'LOCAL'); - next if &same($idx, $last); # suppress duplicates - - $termcount--; - - # If primary changes, output a whole new index term, otherwise just - # output another secondary or tertiary, as appropriate. We know from - # sorting that the terms will always be in the right order. - if (!&tsame($last, $idx, 'primary')) { - print "DIFF PRIM\n" if $debug; - &end_entry() if not $first; - - if ($lettergroups) { - # If we're grouping, make the right indexdivs - $letter = $idx->{'psortas'}; - $letter = $idx->{'primary'} if !$letter; - $letter = uc(substr($letter, 0, 1)); - - # symbols are a special case - if (($letter lt 'A') || ($letter gt 'Z')) { - if (($group eq '') - || (($group ge 'A') && ($group le 'Z'))) { - print OUT "\n" if !$first; - print OUT "$symbolsname\n\n"; - $group = $letter; - } - } elsif (($group eq '') || ($group ne $letter)) { - print OUT "\n" if !$first; - print OUT "$letter\n\n"; - $group = $letter; - } - } - - $first = 0; # there can only be on first ;-) - - print OUT "\n"; - print OUT " ", $idx->{'primary'}; - $lastout = "primaryie"; - - if ($idx->{'secondary'}) { - print OUT "\n \n"; - print OUT " ", $idx->{'secondary'}; - $lastout = "secondaryie"; - }; - - if ($idx->{'tertiary'}) { - print OUT "\n \n"; - print OUT " ", $idx->{'tertiary'}; - $lastout = "tertiaryie"; - } - } elsif (!&tsame($last, $idx, 'secondary')) { - print "DIFF SEC\n" if $debug; - - print OUT "\n \n" if $lastout; - - print OUT " ", $idx->{'secondary'}; - $lastout = "secondaryie"; - if ($idx->{'tertiary'}) { - print OUT "\n \n"; - print OUT " ", $idx->{'tertiary'}; - $lastout = "tertiaryie"; - } - } elsif (!&tsame($last, $idx, 'tertiary')) { - print "DIFF TERT\n" if $debug; - - print OUT "\n \n" if $lastout; - - if ($idx->{'tertiary'}) { - print OUT " ", $idx->{'tertiary'}; - $lastout = "tertiaryie"; - } - } - - &print_term($idx); - - $last = $idx; -} - -# Termcount is > 0 iff some entries were skipped. -print STDERR "$termcount entries ignored...\n"; - -&end_entry(); - -print OUT "\n" if $lettergroups; -print OUT "\n"; - -close (OUT); - -print STDERR "Done.\n"; - -sub same { - my($a) = shift; - my($b) = shift; - - my($aP) = $a->{'psortas'} || $a->{'primary'}; - my($aS) = $a->{'ssortas'} || $a->{'secondary'}; - my($aT) = $a->{'tsortas'} || $a->{'tertiary'}; - - my($bP) = $b->{'psortas'} || $b->{'primary'}; - my($bS) = $b->{'ssortas'} || $b->{'secondary'}; - my($bT) = $b->{'tsortas'} || $b->{'tertiary'}; - - my($same); - - $aP =~ s/^\s*//; $aP =~ s/\s*$//; $aP = uc($aP); - $aS =~ s/^\s*//; $aS =~ s/\s*$//; $aS = uc($aS); - $aT =~ s/^\s*//; $aT =~ s/\s*$//; $aT = uc($aT); - $bP =~ s/^\s*//; $bP =~ s/\s*$//; $bP = uc($bP); - $bS =~ s/^\s*//; $bS =~ s/\s*$//; $bS = uc($bS); - $bT =~ s/^\s*//; $bT =~ s/\s*$//; $bT = uc($bT); - -# print "[$aP]=[$bP]\n"; -# print "[$aS]=[$bS]\n"; -# print "[$aT]=[$bT]\n"; - - # Two index terms are the same if: - # 1. the primary, secondary, and tertiary entries are the same - # (or have the same SORTAS) - # AND - # 2. They occur in the same titled section - # AND - # 3. They point to the same place - # - # Notes: Scope is used to suppress some entries, but can't be used - # for comparing duplicates. - # Interpretation of "the same place" depends on whether or - # not $linkpoints is true. - - $same = (($aP eq $bP) - && ($aS eq $bS) - && ($aT eq $bT) - && ($a->{'title'} eq $b->{'title'}) - && ($a->{'href'} eq $b->{'href'})); - - # If we're linking to points, they're only the same if they link - # to exactly the same spot. (surely this is redundant?) - $same = $same && ($a->{'hrefpoint'} eq $b->{'hrefpoint'}) - if $linkpoints; - - $same; -} - -sub tsame { - # Unlike same(), tsame only compares a single term - my($a) = shift; - my($b) = shift; - my($term) = shift; - my($sterm) = substr($term, 0, 1) . "sortas"; - my($A, $B); - - $A = $a->{$sterm} || $a->{$term}; - $B = $b->{$sterm} || $b->{$term}; - - $A =~ s/^\s*//; $A =~ s/\s*$//; $A = uc($A); - $B =~ s/^\s*//; $B =~ s/\s*$//; $B = uc($B); - - return $A eq $B; -} - -sub end_entry { - # End any open elements... - print OUT "\n \n" if $lastout; - print OUT "\n\n"; - $lastout = ""; -} - -sub print_term { - # Print out the links for an indexterm. There can be more than - # one if the term has a ZONE that points to more than one place. - # (do we do the right thing in that case?) - my($idx) = shift; - my($key, $indent, @hrefs); - my(%href) = (); - my(%phref) = (); - - $indent = " "; - - if ($idx->{'see'}) { - # it'd be nice to make this a link... - if ($lastout) { - print OUT "\n \n"; - $lastout = ""; - } - print OUT $indent, "", $idx->{'see'}, "\n"; - return; - } - - if ($idx->{'seealso'}) { - # it'd be nice to make this a link... - if ($lastout) { - print OUT "\n \n"; - $lastout = ""; - } - print OUT $indent, "", $idx->{'seealso'}, "\n"; - return; - } - - if (keys %{$idx->{'zone'}}) { - foreach $key (keys %{$idx->{'zone'}}) { - $href{$key} = $idx->{'zone'}->{$key}; - $phref{$key} = $idx->{'zone'}->{$key}; - } - } else { - $href{$idx->{'href'}} = $idx->{'title'}; - $phref{$idx->{'href'}} = $idx->{'hrefpoint'}; - } - - # We can't use because we don't know the ID of the term in the - # original source (and, in fact, it might not have one). - print OUT ",\n"; - @hrefs = keys %href; - while (@hrefs) { - my($linkend) = ""; - my($role) = ""; - $key = shift @hrefs; - if ($linkpoints) { - $linkend = $phref{$key}; - } else { - $linkend = $key; - } - - $role = $linkend; - $role = $1 if $role =~ /\#(.*)$/; - - print OUT $indent; - print OUT ""; - print OUT "" if ($idx->{'significance'} eq 'PREFERRED'); - print OUT $href{$key}; - print OUT "" if ($idx->{'significance'} eq 'PREFERRED'); - print OUT ""; - } -} - -sub termsort { - my($aP) = $a->{'psortas'} || $a->{'primary'}; - my($aS) = $a->{'ssortas'} || $a->{'secondary'}; - my($aT) = $a->{'tsortas'} || $a->{'tertiary'}; - my($ap) = $a->{'count'}; - - my($bP) = $b->{'psortas'} || $b->{'primary'}; - my($bS) = $b->{'ssortas'} || $b->{'secondary'}; - my($bT) = $b->{'tsortas'} || $b->{'tertiary'}; - my($bp) = $b->{'count'}; - - $aP =~ s/^\s*//; $aP =~ s/\s*$//; $aP = uc($aP); - $aS =~ s/^\s*//; $aS =~ s/\s*$//; $aS = uc($aS); - $aT =~ s/^\s*//; $aT =~ s/\s*$//; $aT = uc($aT); - $bP =~ s/^\s*//; $bP =~ s/\s*$//; $bP = uc($bP); - $bS =~ s/^\s*//; $bS =~ s/\s*$//; $bS = uc($bS); - $bT =~ s/^\s*//; $bT =~ s/\s*$//; $bT = uc($bT); - - if ($aP eq $bP) { - if ($aS eq $bS) { - if ($aT eq $bT) { - # make sure seealso's always sort to the bottom - return 1 if ($a->{'seealso'}); - return -1 if ($b->{'seealso'}); - # if everything else is the same, keep these elements - # in document order (so the index links are in the right - # order) - return $ap <=> $bp; - } else { - return $aT cmp $bT; - } - } else { - return $aS cmp $bS; - } - } else { - return $aP cmp $bP; - } -} - -sub sortsymbols { - my(@term) = @_; - my(@new) = (); - my(@sym) = (); - my($letter); - my($idx); - - # Move the non-letter things to the front. Should digits be thier - # own group? Maybe... - foreach $idx (@term) { - $letter = $idx->{'psortas'}; - $letter = $idx->{'primary'} if !$letter; - $letter = uc(substr($letter, 0, 1)); - - if (($letter lt 'A') || ($letter gt 'Z')) { - push (@sym, $idx); - } else { - push (@new, $idx); - } - } - - return (@sym, @new); -} - -sub safe_open { - local(*OUT) = shift; - local(*F, $_); - - if (($outfile ne '-') && (!$forceoutput)) { - my($handedit) = 1; - if (open (OUT, $outfile)) { - while () { - if (//){ - $handedit = 0; - last; - } - } - close (OUT); - } else { - $handedit = 0; - } - - if ($handedit) { - print "\n$outfile appears to have been edited by hand; use -f or\n"; - print " change the output file.\n"; - exit 1; - } - } - - open (OUT, ">$outfile") || die "$usage\nCannot write to $outfile.\n"; - - if ($preamble) { - # Copy the preamble - if (open(F, $preamble)) { - while () { - print OUT $_; - } - close(F); - } else { - warn "$0: cannot open preamble $preamble.\n"; - } - } -} diff --git a/docs/docbook/scripts/fix_print_html.lib b/docs/docbook/scripts/fix_print_html.lib deleted file mode 100644 index e8a9aaa4c7..0000000000 --- a/docs/docbook/scripts/fix_print_html.lib +++ /dev/null @@ -1,172 +0,0 @@ -# -# fix_print_html.lib -# -# Dan Scott / -# Ferg / -# -# Used to prepare single-file HTML variant for PDF/Postscript creation -# thru htmldoc. -# -# log: -# 16Oct2000 - initial entry -# 03Apr2001 - fix for -# -# - -sub fix_print_html { - - my($in,$out,$ttl) = @_; - - open(IN_FILE, "< $in") || do { - print "fix_print_html: cannot open $in: $!\n"; - return 0; - }; - - my($buf,$ttl_buf) = ''; - my($indx) = -1; - my($is_article) = 0; - while() { - - if( $indx == 1 ) { - - # ignore everything until we see the chapter or sect - # - if( $_ =~ /CLASS="CHAP/i || $_ =~ /CLASS="PREF/i ) { - - $buf .= $_; - $indx++; - - } elsif( $_ =~ /CLASS="SECT/ || $_ =~ /CLASS="sect/ ) { - - $buf .= $_; - $indx++; - $is_article = 1; - - } else { - next; - } - - } elsif( $indx == 0 ) { - - # write out the title page file - # - if( $_ =~ /CLASS="TOC"/ ) { - - $ttl_buf .= ">\n\n\n"; - $ttl_buf =~ s/<\/H1\n/<\/H1\n>


$ttl") || do { - print "fix_print_html: cannot open $ttl: $!\n"; - close(IN_FILE); - return 0; - }; - print TOC_FILE $ttl_buf; - close(TOC_FILE); - $ttl_buf = ''; - $indx++; - - } else { - $ttl_buf .= $_; - } - - } elsif( $indx < 0 ) { - - # up to this point, both buffers get the line - # - if( $_ =~ /CLASS="TITLEPAGE"/ ) { - - $ttl_buf .= $_ . ">\n

\n



\n<\/P\n"; - $indx++; - - } else { - $buf .= $_; - $ttl_buf .= $_; - } - - } else { - - $buf .= $_; - } - } - close(IN_FILE); - - open(OUT_FILE, "> $out") || do { - print "fix_print_html: cannot open $out: $!\n"; - return 0; - }; - - - # make these corrections and write out the file - # - - $buf =~ s/(\n>/$1$2\n/gms; - $buf =~ s/(\n>/$1$2\n/gms; - $buf =~ s/(\n>/$1$2\n/gms; - if( $is_article == 0 ) { - $buf =~ s/(\nCLASS="SECT[TION\d]+"\n>)


) -1 ) { - $buf = substr($buf, 0, $indx); - $buf .= "\n<\/BODY>\n<\/HTML>\n\n"; - } elsif( ($indx = rindex($buf, " -1 ) { - $buf = substr($buf, 0, $indx); - $buf .= "\n<\/BODY>\n<\/HTML>\n\n"; - } - $buf =~ s/\&\#13;//g; - $buf =~ s/\&\#60;/\</g; - $buf =~ s/\&\#62;/\>/g; - $buf =~ s/\&\#8211;/\-/g; - $buf =~ s/WIDTH=\"\d\"//g; - $buf =~ s/><[\/]*TBODY//g; - $buf =~ s/><[\/]*THEAD//g; - $buf =~ s/TYPE=\"1\"\n//gim; - - if( $is_article == 0 ) { - - # for books...decrement the headers by 1 and then re-set the - # chapter level only to H1... - # - my($cnt,$j) = 0; - for($cnt=5; $cnt > 0; $cnt--) { - $j = $cnt + 1; - $buf =~ s/<\/DIV\n//gms; - $buf =~ s/(>(<\/LI\n)/$1$2$3/gms; - - print OUT_FILE $buf; - close(OUT_FILE); - - return 1; -} - -# Return true from package include -# -1; - diff --git a/docs/docbook/scripts/ldp_print b/docs/docbook/scripts/ldp_print deleted file mode 100755 index 70bb801def..0000000000 --- a/docs/docbook/scripts/ldp_print +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/perl -w -# -# usage: ldp_print -# -# Creates a PDF variant of a single-file HTML representation of a -# DocBook SGML (or XML) instance. This simple wrapper assumes that -# the file was created using {open}jade in a manner similar to: -# -# jade -t sgml -i html -V nochunks -d $style $fname > $fname.html -# -# Give this script the filename as an argument. It will then parse -# the file into 'title.html' and 'body.html' and send each to -# htmldoc (as the corresponding title page and body of the document). -# -# -# CAVEATS: -# -# Assumes perl is in /usr/bin; adjust if necessary -# -# You may need to specify where the htmldoc executable resides. -# The script assumes it's within your $PATH. -# -# If you want Postscript as an output variant, uncomment the -# appropriate lines (see below). -# -# Relies on output from a DocBook instance created via DSSSL/{open}jade! -# -# Cleans up (removes) the intermediate files it creates (but not the -# PDF or Postscript files, obviously!) -# -# Works silently; PDF (PostScript) will be created in the same directory -# as was specified for the input (single-file HTML) file. -# -# Provided without warranty or support! -# -# gferg@sgi.com / Ferg (used as part of the LDP production env) -# - -use strict; -push(@INC, "./"); -require 'fix_print_html.lib'; - -if( $ARGV[0] eq '' || !(-r $ARGV[0]) ) { - die "\nusage: ldp_print \n\n"; -} - -my($fname_wo_ext) = $ARGV[0]; -$fname_wo_ext =~ s/\.[\w]+$//; - - -# create new files from single HTML file to use for print -# -&fix_print_html($ARGV[0], 'body.html', 'title.html'); - -my($cmd) = "htmldoc --size universal -t pdf -f ${fname_wo_ext}.pdf " . - "--firstpage p1 --titlefile title.html body.html"; - -# For postscript output; append onto the above cmd string: -# -# "; htmldoc --size universal -t ps -f -f ${fname_wo_ext}.ps " . -# "--firstpage p1 --titlefile title.html body.html"; -# -system($cmd); -die "\nldp_print: could not create ${fname_wo_ext}.pdf ($!)\n" if ($?); - -# cleanup -# -system("rm -f body.html title.html"); - -exit(0); - diff --git a/docs/docbook/scripts/make-article.pl b/docs/docbook/scripts/make-article.pl deleted file mode 100644 index d1f8c66832..0000000000 --- a/docs/docbook/scripts/make-article.pl +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/perl - -$ignore = 0; - -print "\n"; - -while () { - - $_ =~ s/') { - $ignore = 1; - } - - if ( $_ =~ '') { - $ignore = 0; - $_ = ""; - } - - - if (! $ignore) { print "$_"; } - - -} -- cgit From 0f0f18e996db17fcf252a38f8d5bfb1978a4d7c5 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 20 Aug 2002 17:13:57 +0000 Subject: Update generated version of manpages (This used to be commit 724f368bbac97b7d47d5986408d8937f3e7ee15c) --- docs/manpages/pdbedit.8 | 39 +- docs/manpages/smb.conf.5 | 1693 ++++++++++++++++++++++++++-------------------- docs/manpages/vfstest.1 | 178 +++++ 3 files changed, 1160 insertions(+), 750 deletions(-) create mode 100644 docs/manpages/vfstest.1 diff --git a/docs/manpages/pdbedit.8 b/docs/manpages/pdbedit.8 index e2f5531d5d..523751712d 100644 --- a/docs/manpages/pdbedit.8 +++ b/docs/manpages/pdbedit.8 @@ -1,14 +1,15 @@ -.\" This manpage has been automatically generated by docbook2man-spec -.\" from a DocBook document. docbook2man-spec can be found at: -.\" +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "PDBEDIT" "8" "24 April 2002" "" "" +.TH "PDBEDIT" "8" "20 August 2002" "" "" .SH NAME pdbedit \- manage the SAM database .SH SYNOPSIS -.sp -\fBpdbedit\fR [ \fB-l\fR ] [ \fB-v\fR ] [ \fB-w\fR ] [ \fB-u username\fR ] [ \fB-f fullname\fR ] [ \fB-h homedir\fR ] [ \fB-d drive\fR ] [ \fB-s script\fR ] [ \fB-p profile\fR ] [ \fB-a\fR ] [ \fB-m\fR ] [ \fB-x\fR ] [ \fB-i passdb-backend\fR ] [ \fB-e passdb-backend\fR ] [ \fB-D debuglevel\fR ] + +\fBpdbedit\fR [ \fB-l\fR ] [ \fB-v\fR ] [ \fB-w\fR ] [ \fB-u username\fR ] [ \fB-f fullname\fR ] [ \fB-h homedir\fR ] [ \fB-d drive\fR ] [ \fB-s script\fR ] [ \fB-p profile\fR ] [ \fB-a\fR ] [ \fB-m\fR ] [ \fB-x\fR ] [ \fB-i passdb-backend\fR ] [ \fB-e passdb-backend\fR ] [ \fB-b passdb-backend\fR ] [ \fB-D debuglevel\fR ] + .SH "DESCRIPTION" .PP This tool is part of the Sambasuite. @@ -34,12 +35,11 @@ the ':' character. Example: \fBpdbedit -l\fR -.sp + .nf sorce:500:Simo Sorce samba:45:Test User -.sp .fi .TP \fB-v\fR @@ -49,7 +49,7 @@ out the account fields in a descriptive format. Example: \fBpdbedit -l -v\fR -.sp + .nf --------------- username: sorce @@ -70,7 +70,6 @@ Example: \fBpdbedit -l -v\fR Logon Script: Profile Path: \\\\BERSERKER\\profile -.sp .fi .TP \fB-w\fR @@ -81,12 +80,11 @@ out the account fields in a format compatible with the Example: \fBpdbedit -l -w\fR -.sp + .nf sorce:500:508818B733CE64BEAAD3B435B51404EE:D2A2418EFC466A8A0F6B1DBB5C3DB80C:[UX ]:LCT-00000000: samba:45:0F2B255F7B67A7A9AAD3B435B51404EE:BC281CE3F53B6A5146629CD4751D3490:[UX ]:LCT-3BFA1E8D: -.sp .fi .TP \fB-u username\fR @@ -138,11 +136,10 @@ the -u switch. When adding a new user pdbedit will also ask for the password to be used Example: \fBpdbedit -a -u sorce\fR -.sp + .nf new password: retype new password -.sp .fi .TP \fB-m\fR @@ -161,11 +158,12 @@ from the database. It need the username be specified with the Example: \fBpdbedit -x -u bob\fR .TP \fB-i passdb-backend\fR -Use a different passdb backend to retrieve users than the one specified in smb.conf. +Use a different passdb backend to retrieve users than the one specified in smb.conf. Can be used to import data into your +local user database. This option will ease migration from one passdb backend to another. -Example: \fBpdbedit -i smbpasswd:/etc/smbpasswd.old -e tdbsam:/etc/samba/passwd.tdb\fR +Example: \fBpdbedit -i smbpasswd:/etc/smbpasswd.old\fR .TP \fB-e passdb-backend\fR Export all currently available users to the specified password database backend. @@ -173,6 +171,11 @@ Export all currently available users to the specified password database backend. This option will ease migration from one passdb backend to another and will ease backupping Example: \fBpdbedit -e smbpasswd:/root/samba-users.backup\fR +.TP +\fB-b passdb-backend\fR +Use a different default passdb backend. + +Example: \fBpdbedit -b xml:/root/pdb-backup.xml -l\fR .SH "NOTES" .PP This command may be used only by root. @@ -194,6 +197,6 @@ to the way the Linux kernel is developed. The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another excellent piece of Open Source software, available at -ftp://ftp.icce.rug.nl/pub/unix/ ) and updated for the Samba 2.0 -release by Jeremy Allison. The conversion to DocBook for +ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 +release by Jeremy Allison. The conversion to DocBook for Samba 2.2 was done by Gerald Carter diff --git a/docs/manpages/smb.conf.5 b/docs/manpages/smb.conf.5 index caa27103db..8918325428 100644 --- a/docs/manpages/smb.conf.5 +++ b/docs/manpages/smb.conf.5 @@ -1,9 +1,9 @@ -.\" This manpage has been automatically generated by docbook2man-spec -.\" from a DocBook document. docbook2man-spec can be found at: -.\" +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "SMB.CONF" "5" "15 August 2002" "" "" +.TH "SMB.CONF" "5" "20 August 2002" "" "" .SH NAME smb.conf \- The configuration file for the Samba suite .SH "SYNOPSIS" @@ -23,7 +23,8 @@ until the next section begins. Sections contain parameters of the form .PP \fIname\fR = \fIvalue -\fR.PP +\fR +.PP The file is line-based - that is, each newline-terminated line represents either a comment, a section name or a parameter. .PP @@ -90,14 +91,13 @@ access than the host system grants. The following sample section defines a file space share. The user has write access to the path \fI/home/bar\fR. The share is accessed via the share name "foo": -.sp + .nf [foo] path = /home/bar writeable = true -.sp .fi .PP The following sample section defines a printable share. @@ -106,7 +106,7 @@ access permitted is via calls to open, write to and close a spool file. The \fBguest ok\fR parameter means access will be permitted as the default guest user (specified elsewhere): -.sp + .nf [aprinter] path = /usr/spool/public @@ -115,16 +115,15 @@ elsewhere): guest ok = true -.sp .fi .SH "SPECIAL SECTIONS" -.SS "THE GLOBAL SECTION" +.SS "THE [GLOBAL] SECTION" .PP parameters in this section apply to the server as a whole, or are defaults for sections which do not specifically define certain items. See the notes under PARAMETERS for more information. -.SS "THE HOMES SECTION" +.SS "THE [HOMES] SECTION" .PP If a section called homes is included in the configuration file, services connecting clients to their @@ -152,38 +151,31 @@ If you decide to use a \fBpath =\fR line in your [homes] section then you may find it useful to use the %S macro. For example : .PP -.PP \fBpath = /data/pchome/%S\fR .PP -.PP would be useful if you have different home directories for your PCs than for UNIX access. .PP -.PP This is a fast and simple way to give a large number of clients access to their home directories with a minimum of fuss. .PP -.PP A similar process occurs if the requested section name is "homes", except that the share name is not changed to that of the requesting user. This method of using the [homes] section works well if different users share a client PC. .PP -.PP The [homes] section can specify all the parameters a normal service section can specify, though some make more sense than others. The following is a typical and suitable [homes] section: -.PP -.sp + .nf [homes] writeable = yes -.sp .fi .PP An important point is that if guest access is specified @@ -193,15 +185,13 @@ In the very unlikely event that this is actually desirable, it would be wise to also specify \fBread only access\fR. .PP -.PP Note that the \fBbrowseable\fR flag for auto home directories will be inherited from the global browseable flag, not the [homes] browseable flag. This is useful as it means setting \fBbrowseable = no\fR in the [homes] section will hide the [homes] share but make any auto home directories visible. -.PP -.SS "THE PRINTERS SECTION" +.SS "THE [PRINTERS] SECTION" .PP This section works like [homes], but for printers. @@ -239,20 +229,17 @@ Note that the [printers] service MUST be printable - if you specify otherwise, the server will refuse to load the configuration file. .PP -.PP Typically the path specified would be that of a world-writeable spool directory with the sticky bit set on it. A typical [printers] entry would look like this: -.PP -.sp + .nf [printers] path = /usr/spool/public guest ok = yes printable = yes -.sp .fi .PP All aliases given for a printer in the printcap file @@ -260,45 +247,40 @@ are legitimate printer names as far as the server is concerned. If your printing subsystem doesn't work like that, you will have to set up a pseudo-printcap. This is a file consisting of one or more lines like this: -.PP -.sp + .nf alias|alias|alias|alias... -.sp .fi .PP Each alias should be an acceptable printer name for your printing subsystem. In the [global] section, specify -the new file as your printcap. The server will then only recognize +the new file as your printcap. The server will then only recognize names found in your pseudo-printcap, which of course can contain whatever aliases you like. The same technique could be used simply to limit access to a subset of your local printers. .PP -.PP An alias, by the way, is defined as any component of the first entry of a printcap record. Records are separated by newlines, components (if there are more than one) are separated by vertical bar symbols ('|'). .PP -.PP NOTE: On SYSV systems which use lpstat to determine what printers are defined on the system you may be able to use "printcap name = lpstat" to automatically obtain a list of printers. See the "printcap name" option for more details. -.PP .SH "PARAMETERS" .PP parameters define the specific attributes of sections. .PP Some parameters are specific to the [global] section -(e.g., \fBsecurity\fR). Some parameters are usable +(e.g., \fBsecurity\fR). Some parameters are usable in all sections (e.g., \fBcreate mode\fR). All others are permissible only in normal sections. For the purposes of the following descriptions the [homes] and [printers] -sections will be considered normal. The letter \fBG\fR +sections will be considered normal. The letter \fBG\fR in parentheses indicates that a parameter is specific to the [global] section. The letter \fBS\fR indicates that a parameter can be specified in a service specific @@ -361,15 +343,15 @@ the NetBIOS name of the server. This allows you to change your config based on what the client calls you. Your server can have a "dual personality". -Note that this paramater is not available when Samba listens +Note that this parameter is not available when Samba listens on port 445, as clients no longer send this information .TP \fB%M\fR the Internet name of the client machine. .TP \fB%N\fR -the name of your NIS home directory server. -This is obtained from your NIS auto.map entry. If you have +the name of your NIS home directory server. +This is obtained from your NIS auto.map entry. If you have not compiled Samba with the \fB--with-automount\fR option then this value will be the same as %L. .TP @@ -394,7 +376,7 @@ machine. Only some are recognized, and those may not be WinNT and Win2k. Anything else will be known as "UNKNOWN". If it gets it wrong then sending a level 3 log to samba@samba.org - should allow it to be fixed. +should allow it to be fixed. .TP \fB%I\fR The IP address of the client machine. @@ -408,7 +390,6 @@ The value of the environment variable .PP There are some quite creative things that can be done with these substitutions and other smb.conf options. -.PP .SH "NAME MANGLING" .PP Samba supports "name mangling" so that DOS and @@ -454,39 +435,43 @@ are lowercased. Default \fByes\fR. .PP By default, Samba 2.2 has the same semantics as a Windows NT server, in that it is case insensitive but case preserving. -.PP .SH "NOTE ABOUT USERNAME/PASSWORD VALIDATION" .PP There are a number of ways in which a user can connect to a service. The server uses the following steps in determining if it will allow a connection to a specified service. If all the -steps fail, then the connection request is rejected. However, if one of the +steps fail, then the connection request is rejected. However, if one of the steps succeeds, then the following steps are not checked. .PP If the service is marked "guest only = yes" and the server is running with share-level security ("security = share") then steps 1 to 5 are skipped. -.IP 1. +.TP 3 +1. If the client has passed a username/password pair and that username/password pair is validated by the UNIX system's password programs then the connection is made as that username. Note that this includes the \\\\server\\service%\fIusername\fR method of passing a username. -.IP 2. +.TP 3 +2. If the client has previously registered a username with the system and now supplies a correct password for that username then the connection is allowed. -.IP 3. +.TP 3 +3. The client's NetBIOS name and any previously used user names are checked against the supplied password, if they match then the connection is allowed as the corresponding user. -.IP 4. +.TP 3 +4. If the client has previously validated a username/password pair with the server and the client has passed the validation token then that username is used. -.IP 5. +.TP 3 +5. If a "user = " field is given in the \fIsmb.conf\fR file for the service and the client has supplied a password, and that password matches (according to @@ -496,7 +481,8 @@ the username in the "user =" line. If one of the username in the "user =" list begins with a \&'@' then that name expands to a list of names in the group of the same name. -.IP 6. +.TP 3 +6. If the service is a guest service then a connection is made as the username given in the "guest account =" for the service, irrespective of the @@ -504,13 +490,16 @@ supplied password. .SH "COMPLETE LIST OF GLOBAL PARAMETERS" .PP Here is a list of all global parameters. See the section of -each parameter for details. Note that some are synonyms. +each parameter for details. Note that some are synonyms. .TP 0.2i \(bu \fIabort shutdown script\fR .TP 0.2i \(bu -\fIadd printer command\fR +\fIadd group script\fR +.TP 0.2i +\(bu +\fIaddprinter command\fR .TP 0.2i \(bu \fIadd share command\fR @@ -519,9 +508,18 @@ each parameter for details. Note that some are synonyms. \fIadd user script\fR .TP 0.2i \(bu +\fIadd user to group script\fR +.TP 0.2i +\(bu \fIadd machine script\fR .TP 0.2i \(bu +\fIdelete group script\fR +.TP 0.2i +\(bu +\fIads server\fR +.TP 0.2i +\(bu \fIalgorithmic rid base\fR .TP 0.2i \(bu @@ -579,7 +577,7 @@ each parameter for details. Note that some are synonyms. \fIdefault service\fR .TP 0.2i \(bu -\fIdelete printer command\fR +\fIdeleteprinter command\fR .TP 0.2i \(bu \fIdelete share command\fR @@ -588,12 +586,21 @@ each parameter for details. Note that some are synonyms. \fIdelete user script\fR .TP 0.2i \(bu +\fIdelete user from group script\fR +.TP 0.2i +\(bu \fIdfree command\fR .TP 0.2i \(bu +\fIdisable netbios\fR +.TP 0.2i +\(bu \fIdisable spoolss\fR .TP 0.2i \(bu +\fIdisable charset\fR +.TP 0.2i +\(bu \fIdns proxy\fR .TP 0.2i \(bu @@ -609,6 +616,9 @@ each parameter for details. Note that some are synonyms. \fIdomain master\fR .TP 0.2i \(bu +\fIdos charset\fR +.TP 0.2i +\(bu \fIencrypt passwords\fR .TP 0.2i \(bu @@ -627,12 +637,18 @@ each parameter for details. Note that some are synonyms. \fIhide unreadable\fR .TP 0.2i \(bu +\fIhide unwriteable files\fR +.TP 0.2i +\(bu \fIhomedir map\fR .TP 0.2i \(bu \fIhost msdfs\fR .TP 0.2i \(bu +\fIhostname lookups\fR +.TP 0.2i +\(bu \fIhosts equiv\fR .TP 0.2i \(bu @@ -768,6 +784,9 @@ each parameter for details. Note that some are synonyms. \fImin wins ttl\fR .TP 0.2i \(bu +\fIname cache timeout\fR +.TP 0.2i +\(bu \fIname resolve order\fR .TP 0.2i \(bu @@ -783,6 +802,9 @@ each parameter for details. Note that some are synonyms. \fInis homedir\fR .TP 0.2i \(bu +\fIntlm auth\fR +.TP 0.2i +\(bu \fInon unix account range\fR .TP 0.2i \(bu @@ -813,6 +835,9 @@ each parameter for details. Note that some are synonyms. \fIpanic action\fR .TP 0.2i \(bu +\fIparanoid server security\fR +.TP 0.2i +\(bu \fIpassdb backend\fR .TP 0.2i \(bu @@ -864,6 +889,9 @@ each parameter for details. Note that some are synonyms. \fIread size\fR .TP 0.2i \(bu +\fIrealm\fR +.TP 0.2i +\(bu \fIremote announce\fR .TP 0.2i \(bu @@ -897,6 +925,9 @@ each parameter for details. Note that some are synonyms. \fIsmb passwd file\fR .TP 0.2i \(bu +\fIsmb ports\fR +.TP 0.2i +\(bu \fIsocket address\fR .TP 0.2i \(bu @@ -942,6 +973,12 @@ each parameter for details. Note that some are synonyms. \fItotal print jobs\fR .TP 0.2i \(bu +\fIunicode\fR +.TP 0.2i +\(bu +\fIunix charset\fR +.TP 0.2i +\(bu \fIunix extensions\fR .TP 0.2i \(bu @@ -969,6 +1006,9 @@ each parameter for details. Note that some are synonyms. \fIutmp directory\fR .TP 0.2i \(bu +\fIwtmp directory\fR +.TP 0.2i +\(bu \fIwinbind cache time\fR .TP 0.2i \(bu @@ -993,6 +1033,9 @@ each parameter for details. Note that some are synonyms. \fIwins hook\fR .TP 0.2i \(bu +\fIwins partners\fR +.TP 0.2i +\(bu \fIwins proxy\fR .TP 0.2i \(bu @@ -1024,6 +1067,9 @@ each parameter for details. Note that some are synonyms. \fIblocking locks\fR .TP 0.2i \(bu +\fIblock size\fR +.TP 0.2i +\(bu \fIbrowsable\fR .TP 0.2i \(bu @@ -1195,6 +1241,9 @@ each parameter for details. Note that some are synonyms. \fImangling char\fR .TP 0.2i \(bu +\fImangling method\fR +.TP 0.2i +\(bu \fImap archive\fR .TP 0.2i \(bu @@ -1351,6 +1400,9 @@ each parameter for details. Note that some are synonyms. \fIveto oplock files\fR .TP 0.2i \(bu +\fIvfs path\fR +.TP 0.2i +\(bu \fIvfs object\fR .TP 0.2i \(bu @@ -1390,24 +1442,24 @@ Default: \fBNone\fR. Example: \fBabort shutdown script = /sbin/shutdown -c\fR .TP -\fBadd printer command (G)\fR +\fBaddprinter command (G)\fR With the introduction of MS-RPC based printing support for Windows NT/2000 clients in Samba 2.2, The MS Add Printer Wizard (APW) icon is now also available in the -"Printers..." folder displayed a share listing. The APW +"Printers..." folder displayed a share listing. The APW allows for printers to be add remotely to a Samba or Windows NT/2000 print server. For a Samba host this means that the printer must be -physically added to the underlying printing system. The \fIadd +physically added to the underlying printing system. The \fIadd printer command\fR defines a script to be run which will perform the necessary operations for adding the printer to the print system and to add the appropriate service definition -to the \fIsmb.conf\fR file in order that it can be +to the \fIsmb.conf\fR file in order that it can be shared by \fBsmbd(8)\fR . -The \fIadd printer command\fR is +The \fIaddprinter command\fR is automatically invoked with the following parameter (in order: .RS @@ -1430,37 +1482,33 @@ order: \(bu \fIWindows 9x driver location\fR .RE -.PP + All parameters are filled in from the PRINTER_INFO_2 structure sent -by the Windows NT/2000 client with one exception. The "Windows 9x +by the Windows NT/2000 client with one exception. The "Windows 9x driver location" parameter is included for backwards compatibility -only. The remaining fields in the structure are generated from answers +only. The remaining fields in the structure are generated from answers to the APW questions. -.PP -.PP -Once the \fIadd printer command\fR has -been executed, \fBsmbd\fR will reparse the \fI smb.conf\fR to determine if the share defined by the APW -exists. If the sharename is still invalid, then \fBsmbd -\fRwill return an ACCESS_DENIED error to the client. -.PP -.PP -See also \fI delete printer command\fR, \fIprinting\fR, + +Once the \fIaddprinter command\fR has +been executed, \fBsmbd\fR will reparse the \fI smb.conf\fR to determine if the share defined by the APW +exists. If the sharename is still invalid, then \fBsmbd +\fR will return an ACCESS_DENIED error to the client. + +See also \fI deleteprinter command\fR, \fIprinting\fR, \fIshow add printer wizard\fR -.PP -.PP + Default: \fBnone\fR -.PP -.PP + Example: \fBaddprinter command = /usr/bin/addprinter -\fR.PP +\fR .TP \fBadd share command (G)\fR Samba 2.2.0 introduced the ability to dynamically -add and delete shares via the Windows NT 4.0 Server Manager. The +add and delete shares via the Windows NT 4.0 Server Manager. The \fIadd share command\fR is used to define an external program or script which will add a new service definition -to \fIsmb.conf\fR. In order to successfully +to \fIsmb.conf\fR. In order to successfully execute the \fIadd share command\fR, \fBsmbd\fR requires that the administrator be connected using a root account (i.e. uid == 0). @@ -1485,22 +1533,18 @@ directory on disk. \fIcomment\fR - comment string to associate with the new share. .RE -.PP -This parameter is only used for add file shares. To add printer shares, -see the \fIadd printer + +This parameter is only used for add file shares. To add printer shares, +see the \fIaddprinter command\fR. -.PP -.PP + See also \fIchange share command\fR, \fIdelete share command\fR. -.PP -.PP + Default: \fBnone\fR -.PP -.PP + Example: \fBadd share command = /usr/local/bin/addshare\fR -.PP .TP \fBadd machine script (G)\fR This is the full pathname to a script that will @@ -1508,13 +1552,25 @@ be run by smbd(8)when a machine is added to it's domain using the administrator username and password method. This option is only required when using sam back-ends tied to the -Unix uid method of RID calculation such as smbpasswd. This option is only +Unix uid method of RID calculation such as smbpasswd. This option is only available in Samba 3.0. Default: \fBadd machine script = \fR + Example: \fBadd machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u -\fR.TP +\fR +.TP +\fBads server (G)\fR +If this option is specified, samba does +not try to figure out what ads server to use itself, but +uses the specified ads server. Either one DNS name or IP +address can be used. + +Default: \fBads server = \fR + +Example: \fBads server = 192.168.1.2\fR +.TP \fBadd user script (G)\fR This is the full pathname to a script that will be run \fBAS ROOT\fR by smbd(8) @@ -1535,33 +1591,33 @@ user given one argument of \fI%u\fR, which expands into the UNIX user name to create. When the Windows user attempts to access the Samba server, -at login (session setup in the SMB protocol) time, smbdcontacts the \fIpassword server\fR and +at login (session setup in the SMB protocol) time, smbdcontacts the \fIpassword server\fR and attempts to authenticate the given user with the given password. If the authentication succeeds then \fBsmbd\fR attempts to find a UNIX user in the UNIX password database to map the Windows user into. If this lookup fails, and \fIadd user script -\fRis set then \fBsmbd\fR will +\fR is set then \fBsmbd\fR will call the specified script \fBAS ROOT\fR, expanding any \fI%u\fR argument to be the user name to create. If this script successfully creates the user then \fBsmbd -\fRwill continue on as though the UNIX user +\fR will continue on as though the UNIX user already existed. In this way, UNIX users are dynamically created to match existing Windows NT accounts. -See also \fI security\fR, \fIpassword server\fR, +See also \fI security\fR, \fIpassword server\fR, \fIdelete user script\fR. Default: \fBadd user script = \fR + Example: \fBadd user script = /usr/local/samba/bin/add_user %u\fR .TP \fBadd group script (G)\fR This is the full pathname to a script that will -be run \fBAS ROOT\fR by smbd(8) when a new group is requested. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. - +be run \fBAS ROOT\fR by smbd(8)when a new group is requested. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. .TP \fBadmin users (S)\fR This is a list of users who will be granted @@ -1576,8 +1632,20 @@ Default: \fBno admin users\fR Example: \fBadmin users = jason\fR .TP +\fBadd user to group script (G)\fR +Full path to the script that will be called when +a user is added to a group using the Windows NT domain administration +tools. It will be run by smbd(8) +\fBAS ROOT\fR. Any \fI%g\fR will be +replaced with the group name and any \fI%u\fR will +be replaced with the user name. + +Default: \fBadd user to group script = \fR + +Example: \fBadd user to group script = /usr/sbin/adduser %u %g\fR +.TP \fBallow hosts (S)\fR -Synonym for \fIhosts allow\fR. +Synonym for \fIhosts allow\fR. .TP \fBalgorithmic rid base (G)\fR This determines how Samba will use its @@ -1588,10 +1656,10 @@ Setting this option to a larger value could be useful to sites transitioning from WinNT and Win2k, as existing user and group rids would otherwise clash with sytem users etc. -All UIDs and GIDs must be able to be resolved into SIDs for -the correct operation of ACLs on the server. As such the algorithmic +All UIDs and GIDs must be able to be resolved into SIDs for +the correct operation of ACLs on the server. As such the algorithmic mapping can't be 'turned off', but pushing it 'out of the way' should -resolve the issues. Users and groups can then be assigned 'low' RIDs +resolve the issues. Users and groups can then be assigned 'low' RIDs in arbitary-rid supporting backends. Default: \fBalgorithmic rid base = 1000\fR @@ -1600,7 +1668,7 @@ Example: \fBalgorithmic rid base = 100000\fR .TP \fBallow trusted domains (G)\fR This option only takes effect when the \fIsecurity\fR option is set to -server or domain. +server or domain. If it is set to no, then attempts to connect to a resource from a domain or workgroup other than the one which smbdis running in will fail, even if that domain is trusted by the remote server @@ -1608,11 +1676,11 @@ doing the authentication. This is useful if you only want your Samba server to serve resources to users in the domain it is a member of. As -an example, suppose that there are two domains DOMA and DOMB. DOMB -is trusted by DOMA, which contains the Samba server. Under normal +an example, suppose that there are two domains DOMA and DOMB. DOMB +is trusted by DOMA, which contains the Samba server. Under normal circumstances, a user with an account in DOMB can then access the resources of a UNIX account with the same account name on the -Samba server even if they do not have an account in DOMA. This +Samba server even if they do not have an account in DOMA. This can make implementing a security boundary difficult. Default: \fBallow trusted domains = yes\fR @@ -1637,7 +1705,7 @@ Example: \fBannounce as = Win95\fR \fBannounce version (G)\fR This specifies the major and minor version numbers that nmbd will use when announcing itself as a server. The default -is 4.2. Do not change this parameter unless you have a specific +is 4.2. Do not change this parameter unless you have a specific need to set a Samba server to be a downlevel server. Default: \fBannounce version = 4.5\fR @@ -1645,14 +1713,14 @@ Default: \fBannounce version = 4.5\fR Example: \fBannounce version = 2.0\fR .TP \fBauto services (G)\fR -This is a synonym for the \fIpreload\fR. +This is a synonym for the \fIpreload\fR. .TP \fBauth methods (G)\fR This option allows the administrator to chose what authentication methods \fBsmbd\fR will use when authenticating -a user. This option defaults to sensible values based on \fI security\fR. +a user. This option defaults to sensible values based on \fI security\fR. Each entry in the list attempts to authenticate the user in turn, until -the user authenticates. In practice only one method will ever actually +the user authenticates. In practice only one method will ever actually be able to complete the authentication. Default: \fBauth methods = \fR @@ -1676,7 +1744,7 @@ different ways. For name service it causes \fBnmbd\fR to bind to ports 137 and 138 on the interfaces listed in the interfaces parameter. \fBnmbd -\fRalso binds to the "all addresses" interface (0.0.0.0) +\fR also binds to the "all addresses" interface (0.0.0.0) on ports 137 and 138 for the purposes of reading broadcast messages. If this option is not set then \fBnmbd\fR will service name requests on all of these sockets. If \fIbind interfaces @@ -1687,14 +1755,14 @@ interfaces in the \fIinterfaces\fR parameter list. As unicast packets are received on the other sockets it allows \fBnmbd\fR to refuse to serve names to machines that send packets that arrive through any interfaces not listed in the -\fIinterfaces\fR list. IP Source address spoofing +\fIinterfaces\fR list. IP Source address spoofing does defeat this simple check, however so it must not be used seriously as a security feature for \fBnmbd\fR. For file service it causes smbd(8) -to bind only to the interface list given in the interfaces parameter. This restricts the networks that +to bind only to the interface list given in the interfaces parameter. This restricts the networks that \fBsmbd\fR will serve to packets coming in those -interfaces. Note that you should not use this parameter for machines +interfaces. Note that you should not use this parameter for machines that are serving PPP or other intermittent or non-broadcast network interfaces as it will not cope with non-permanent interfaces. @@ -1709,17 +1777,17 @@ by default connects to the \fBlocalhost - 127.0.0.1\fR address as an SMB client to issue the password change request. If \fIbind interfaces only\fR is set then unless the network address \fB127.0.0.1\fR is added to the -\fIinterfaces\fR parameter list then \fB smbpasswd\fR will fail to connect in it's default mode. +\fIinterfaces\fR parameter list then \fB smbpasswd\fR will fail to connect in it's default mode. \fBsmbpasswd\fR can be forced to use the primary IP interface -of the local host by using its \fI-r remote machine\fR +of the local host by using its \fI-r remote machine\fR parameter, with \fIremote machine\fR set to the IP name of the primary interface of the local host. The \fBswat\fR status page tries to connect with \fBsmbd\fR and \fBnmbd\fR at the address -\fB127.0.0.1\fR to determine if they are running. -Not adding \fB127.0.0.1\fR will cause \fB smbd\fR and \fBnmbd\fR to always show -"not running" even if they really are. This can prevent \fB swat\fR from starting/stopping/restarting \fBsmbd\fR +\fB127.0.0.1\fR to determine if they are running. +Not adding \fB127.0.0.1\fR will cause \fB smbd\fR and \fBnmbd\fR to always show +"not running" even if they really are. This can prevent \fB swat\fR from starting/stopping/restarting \fBsmbd\fR and \fBnmbd\fR. Default: \fBbind interfaces only = no\fR @@ -1741,11 +1809,30 @@ cannot be obtained. Default: \fBblocking locks = yes\fR .TP +\fBblock size (S)\fR +This parameter controls the behavior of +smbd(8)when reporting disk free +sizes. By default, this reports a disk block size of 1024 bytes. + +Changing this parameter may have some effect on the +efficiency of client writes, this is not yet confirmed. This +parameter was added to allow advanced administrators to change +it (usually to a higher value) and test the effect it has on +client write performance without re-compiling the code. As this +is an experimental option it may be removed in a future release. + +Changing this option does not change the disk free reporting +size, just the block size unit reported to the client. + +Default: \fBblock size = 1024\fR + +Example: \fBblock size = 65536\fR +.TP \fBbrowsable (S)\fR -See the \fI browseable\fR. +See the \fI browseable\fR. .TP \fBbrowse list (G)\fR -This controls whether \fBsmbd(8)\fRwill serve a browse list to +This controls whether \fBsmbd(8)\fRwill serve a browse list to a client doing a \fBNetServerEnum\fR call. Normally set to true. You should never need to change this. @@ -1771,7 +1858,7 @@ sensitive. This SMB allows a client to tell a server to "watch" a particular directory for any changes and only reply to the SMB request when a change has occurred. Such constant scanning of -a directory is expensive under UNIX, hence an \fBsmbd(8)\fRdaemon only performs such a scan +a directory is expensive under UNIX, hence an \fBsmbd(8)\fRdaemon only performs such a scan on each requested directory once every \fIchange notify timeout\fR seconds. @@ -1783,10 +1870,10 @@ Would change the scan time to every 5 minutes. .TP \fBchange share command (G)\fR Samba 2.2.0 introduced the ability to dynamically -add and delete shares via the Windows NT 4.0 Server Manager. The +add and delete shares via the Windows NT 4.0 Server Manager. The \fIchange share command\fR is used to define an external program or script which will modify an existing service definition -in \fIsmb.conf\fR. In order to successfully +in \fIsmb.conf\fR. In order to successfully execute the \fIchange share command\fR, \fBsmbd\fR requires that the administrator be connected using a root account (i.e. uid == 0). @@ -1811,21 +1898,17 @@ directory on disk. \fIcomment\fR - comment string to associate with the new share. .RE -.PP -This parameter is only used modify existing file shares definitions. To modify + +This parameter is only used modify existing file shares definitions. To modify printer shares, use the "Printers..." folder as seen when browsing the Samba host. -.PP -.PP + See also \fIadd share command\fR, \fIdelete share command\fR. -.PP -.PP + Default: \fBnone\fR -.PP -.PP + Example: \fBchange share command = /usr/local/bin/addshare\fR -.PP .TP \fBcomment (S)\fR This is a text field that is seen next to a share @@ -1834,7 +1917,7 @@ neighborhood or via \fBnet view\fR to list what shares are available. If you want to set the string that is displayed next to the -machine name then see the \fI server string\fR parameter. +machine name then see the \fI server string\fR parameter. Default: \fBNo comment string\fR @@ -1858,7 +1941,8 @@ If the config file doesn't exist then it won't be loaded clients). Example: \fBconfig file = /usr/local/samba/lib/smb.conf.%m -\fR.TP +\fR +.TP \fBcopy (S)\fR This parameter allows you to "clone" service entries. The specified service is simply duplicated under the @@ -1896,12 +1980,12 @@ parameter which is set to 000 by default. This parameter does not affect directory modes. See the parameter \fIdirectory mode -\fRfor details. +\fR for details. See also the \fIforce create mode\fR parameter for forcing particular mode -bits to be set on created files. See also the \fIdirectory mode\fR parameter for masking -mode bits on created directories. See also the \fIinherit permissions\fR parameter. +bits to be set on created files. See also the \fIdirectory mode\fR parameter for masking +mode bits on created directories. See also the \fIinherit permissions\fR parameter. Note that this parameter does not apply to permissions set by Windows NT/2000 ACL editors. If the administrator wishes to enforce @@ -1912,7 +1996,7 @@ Default: \fBcreate mask = 0744\fR Example: \fBcreate mask = 0775\fR .TP \fBcreate mode (S)\fR -This is a synonym for \fI create mask\fR. +This is a synonym for \fI create mask\fR. .TP \fBcsc policy (S)\fR This stands for \fBclient-side caching @@ -1925,7 +2009,7 @@ servers. For example, shares containing roaming profiles can have offline caching disabled using \fBcsc policy = disable -\fR\&. +\fR. Default: \fBcsc policy = manual\fR @@ -1960,7 +2044,7 @@ are needed with a resolution of higher that seconds, this boolean parameter adds microsecond resolution to the timestamp message header when turned on. -Note that the parameter \fI debug timestamp\fR must be on for this to have an +Note that the parameter \fI debug timestamp\fR must be on for this to have an effect. Default: \fBdebug hires timestamp = no\fR @@ -1971,14 +2055,14 @@ forked smbd-process there may be hard to follow which process outputs which message. This boolean parameter is adds the process-id to the timestamp message headers in the logfile when turned on. -Note that the parameter \fI debug timestamp\fR must be on for this to have an +Note that the parameter \fI debug timestamp\fR must be on for this to have an effect. Default: \fBdebug pid = no\fR .TP \fBdebug timestamp (G)\fR Samba 2.2 debug log messages are timestamped -by default. If you are running at a high \fIdebug level\fR these timestamps +by default. If you are running at a high \fIdebug level\fR these timestamps can be distracting. This boolean parameter allows timestamping to be turned off. @@ -1990,47 +2074,47 @@ run as the connected user, this boolean parameter inserts the current euid, egid, uid and gid to the timestamp message headers in the log file if turned on. -Note that the parameter \fI debug timestamp\fR must be on for this to have an +Note that the parameter \fI debug timestamp\fR must be on for this to have an effect. Default: \fBdebug uid = no\fR .TP \fBdebuglevel (G)\fR -Synonym for \fI log level\fR. +Synonym for \fI log level\fR. .TP \fBdefault (G)\fR -A synonym for \fI default service\fR. +A synonym for \fI default service\fR. .TP \fBdefault case (S)\fR -See the section on NAME MANGLING. Also note the \fIshort preserve case\fR parameter. +See the section on NAME MANGLING. Also note the \fIshort preserve case\fR parameter. Default: \fBdefault case = lower\fR .TP \fBdefault devmode (S)\fR -This parameter is only applicable to printable services. When smbd is serving +This parameter is only applicable to printable services. When smbd is serving Printer Drivers to Windows NT/2k/XP clients, each printer on the Samba server has a Device Mode which defines things such as paper size and -orientation and duplex settings. The device mode can only correctly be +orientation and duplex settings. The device mode can only correctly be generated by the printer driver itself (which can only be executed on a -Win32 platform). Because smbd is unable to execute the driver code +Win32 platform). Because smbd is unable to execute the driver code to generate the device mode, the default behavior is to set this field to NULL. Most problems with serving printer drivers to Windows NT/2k/XP clients -can be traced to a problem with the generated device mode. Certain drivers +can be traced to a problem with the generated device mode. Certain drivers will do things such as crashing the client's Explorer.exe with a NULL devmode. However, other printer drivers can cause the client's spooler service (spoolsv.exe) to die if the devmode was not created by the driver itself (i.e. smbd generates a default devmode). This parameter should be used with care and tested with the printer -driver in question. It is better to leave the device mode to NULL -and let the Windows client set the correct values. Because drivers do not +driver in question. It is better to leave the device mode to NULL +and let the Windows client set the correct values. Because drivers do not do this all the time, setting \fBdefault devmode = yes\fR will instruct smbd to generate a default one. For more information on Windows NT/2k printing and Device Modes, -see the MSDN documentation . +see the MSDN documentation. Default: \fBdefault devmode = no\fR .TP @@ -2044,7 +2128,7 @@ There is no default value for this parameter. If this parameter is not given, attempting to connect to a nonexistent service results in an error. -Typically the default service would be a \fIguest ok\fR, \fIread-only\fR service. +Typically the default service would be a \fIguest ok\fR, \fIread-only\fR service. Also note that the apparent service name will be changed to equal that of the requested service, this is very useful as it @@ -2057,7 +2141,7 @@ interesting things. Example: -.sp + .nf [global] default service = pub @@ -2065,38 +2149,42 @@ Example: [pub] path = /%S -.sp .fi .TP -\fBdelete printer command (G)\fR +\fBdelete group script (G)\fR +This is the full pathname to a script that will +be run \fBAS ROOT\fR by smbd(8)when a group is requested to be deleted. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. +.TP +\fBdeleteprinter command (G)\fR With the introduction of MS-RPC based printer support for Windows NT/2000 clients in Samba 2.2, it is now possible to delete printer at run time by issuing the DeletePrinter() RPC call. For a Samba host this means that the printer must be -physically deleted from underlying printing system. The \fI deleteprinter command\fR defines a script to be run which +physically deleted from underlying printing system. The \fI deleteprinter command\fR defines a script to be run which will perform the necessary operations for removing the printer from the print system and from \fIsmb.conf\fR. -The \fIdelete printer command\fR is -automatically called with only one parameter: \fI "printer name"\fR. +The \fIdeleteprinter command\fR is +automatically called with only one parameter: \fI "printer name"\fR. -Once the \fIdelete printer command\fR has -been executed, \fBsmbd\fR will reparse the \fI smb.conf\fR to associated printer no longer exists. +Once the \fIdeleteprinter command\fR has +been executed, \fBsmbd\fR will reparse the \fI smb.conf\fR to associated printer no longer exists. If the sharename is still valid, then \fBsmbd -\fRwill return an ACCESS_DENIED error to the client. +\fR will return an ACCESS_DENIED error to the client. -See also \fI add printer command\fR, \fIprinting\fR, +See also \fI addprinter command\fR, \fIprinting\fR, \fIshow add printer wizard\fR Default: \fBnone\fR Example: \fBdeleteprinter command = /usr/bin/removeprinter -\fR.TP +\fR +.TP \fBdelete readonly (S)\fR -This parameter allows readonly files to be deleted. +This parameter allows readonly files to be deleted. This is not normal DOS semantics, but is allowed by UNIX. This option may be useful for running applications such @@ -2107,10 +2195,10 @@ Default: \fBdelete readonly = no\fR .TP \fBdelete share command (G)\fR Samba 2.2.0 introduced the ability to dynamically -add and delete shares via the Windows NT 4.0 Server Manager. The +add and delete shares via the Windows NT 4.0 Server Manager. The \fIdelete share command\fR is used to define an external program or script which will remove an existing service -definition from \fIsmb.conf\fR. In order to successfully +definition from \fIsmb.conf\fR. In order to successfully execute the \fIdelete share command\fR, \fBsmbd\fR requires that the administrator be connected using a root account (i.e. uid == 0). @@ -2127,22 +2215,18 @@ of the global \fIsmb.conf\fR file. \fIshareName\fR - the name of the existing service. .RE -.PP -This parameter is only used to remove file shares. To delete printer shares, -see the \fIdelete printer + +This parameter is only used to remove file shares. To delete printer shares, +see the \fIdeleteprinter command\fR. -.PP -.PP + See also \fIadd share command\fR, \fIchange share command\fR. -.PP -.PP + Default: \fBnone\fR -.PP -.PP + Example: \fBdelete share command = /usr/local/bin/delshare\fR -.PP .TP \fBdelete user script (G)\fR This is the full pathname to a script that will @@ -2157,14 +2241,27 @@ This script should delete the given UNIX username. Default: \fBdelete user script = \fR + Example: \fBdelete user script = /usr/local/samba/bin/del_user %u\fR .TP +\fBdelete user from group script (G)\fR +Full path to the script that will be called when +a user is removed from a group using the Windows NT domain administration +tools. It will be run by smbd(8) +\fBAS ROOT\fR. Any \fI%g\fR will be +replaced with the group name and any \fI%u\fR will +be replaced with the user name. + +Default: \fBdelete user from group script = \fR + +Example: \fBdelete user from group script = /usr/sbin/deluser %u %g\fR +.TP \fBdelete veto files (S)\fR This option is used when Samba is attempting to delete a directory that contains one or more vetoed directories (see the \fIveto files\fR -option). If this option is set to false (the default) then if a vetoed +option). If this option is set to false (the default) then if a vetoed directory contains any non-vetoed files or directories then the directory delete will fail. This is usually what you want. @@ -2176,7 +2273,7 @@ directories you might normally veto DOS/Windows users from seeing (e.g. \fI.AppleDouble\fR) Setting \fBdelete veto files = yes\fR allows these -directories to be transparently deleted when the parent directory +directories to be transparently deleted when the parent directory is deleted (so long as the user has permissions to do so). See also the \fIveto @@ -2215,28 +2312,28 @@ setgid and should be owned by (and writeable only by) root! Default: \fBBy default internal routines for determining the disk capacity and remaining space will be used. \fR + Example: \fBdfree command = /usr/local/samba/bin/dfree \fR + Where the script dfree (which must be made executable) could be: -.sp + .nf #!/bin/sh df $1 | tail -1 | awk '{print $2" "$4}' -.sp .fi or perhaps (on Sys V based systems): -.sp + .nf #!/bin/sh /usr/bin/df -k $1 | tail -1 | awk '{print $3" "$5}' -.sp .fi Note that you may have to replace the command names @@ -2244,7 +2341,7 @@ with full path names on some systems. .TP \fBdirectory (S)\fR Synonym for \fIpath -\fR\&. +\fR. .TP \fBdirectory mask (S)\fR This parameter is the octal modes which are @@ -2265,7 +2362,7 @@ user who owns the directory to modify it. Following this Samba will bit-wise 'OR' the UNIX mode created from this parameter with the value of the \fIforce directory mode -\fRparameter. This parameter is set to 000 by +\fR parameter. This parameter is set to 000 by default (i.e. no extra mode bits are added). Note that this parameter does not apply to permissions @@ -2277,18 +2374,18 @@ directory mode\fR parameter to cause particular mode bits to always be set on created directories. See also the \fIcreate mode -\fRparameter for masking mode bits on created files, +\fR parameter for masking mode bits on created files, and the \fIdirectory security mask\fR parameter. -Also refer to the \fI inherit permissions\fR parameter. +Also refer to the \fI inherit permissions\fR parameter. Default: \fBdirectory mask = 0755\fR Example: \fBdirectory mask = 0775\fR .TP \fBdirectory mode (S)\fR -Synonym for \fI directory mask\fR +Synonym for \fI directory mask\fR .TP \fBdirectory security mask (S)\fR This parameter controls what UNIX permission bits @@ -2308,26 +2405,38 @@ permissions on a directory. \fBNote\fR that users who can access the Samba server through other means can easily bypass this restriction, -so it is primarily useful for standalone "appliance" systems. +so it is primarily useful for standalone "appliance" systems. Administrators of most normal systems will probably want to leave it as the default of 0777. -See also the \fI force directory security mode\fR, \fIsecurity mask\fR, +See also the \fI force directory security mode\fR, \fIsecurity mask\fR, \fIforce security mode -\fRparameters. +\fR parameters. Default: \fBdirectory security mask = 0777\fR Example: \fBdirectory security mask = 0700\fR .TP +\fBdisable netbios (G)\fR +Enabling this parameter will disable netbios support +in Samba. Netbios is the only available form of browsing in +all windows versions except for 2000 and XP. + +Note that clients that only support netbios won't be able to +see your samba server when netbios support is disabled. + +Default: \fBdisable netbios = no\fR + +Example: \fBdisable netbios = yes\fR +.TP \fBdisable spoolss (G)\fR -Enabling this parameter will disables Samba's support +Enabling this parameter will disable Samba's support for the SPOOLSS set of MS-RPC's and will yield identical behavior -as Samba 2.0.x. Windows NT/2000 clients will downgrade to using +as Samba 2.0.x. Windows NT/2000 clients will downgrade to using Lanman style printing commands. Windows 9x/ME will be uneffected by the parameter. However, this will also disable the ability to upload printer drivers to a Samba server via the Windows NT Add Printer -Wizard or by using the NT printer properties dialog window. It will +Wizard or by using the NT printer properties dialog window. It will also disable the capability of Windows NT/2000 clients to download print drivers from the Samba host upon demand. \fBBe very careful about enabling this parameter.\fR @@ -2336,6 +2445,15 @@ See also use client driver Default : \fBdisable spoolss = no\fR .TP +\fBdisplay charset (G)\fR +Specifies the charset that samba will use +to print messages to stdout and stderr and SWAT will use. +Should generally be the same as the \fBunix charset\fR. + +Default: \fBdisplay charset = ASCII\fR + +Example: \fBdisplay charset = UTF8\fR +.TP \fBdns proxy (G)\fR Specifies that nmbd(8) when acting as a WINS server and finding that a NetBIOS name has not @@ -2351,16 +2469,16 @@ characters, so the DNS name (or DNS alias) can likewise only be DNS name lookup requests, as doing a name lookup is a blocking action. -See also the parameter \fI wins support\fR. +See also the parameter \fI wins support\fR. Default: \fBdns proxy = yes\fR .TP \fBdomain admin group (G)\fR This parameter is intended as a temporary solution to enable users to be a member of the "Domain Admins" group when -a Samba host is acting as a PDC. A complete solution will be provided +a Samba host is acting as a PDC. A complete solution will be provided by a system for mapping Windows NT/2000 groups onto UNIX groups. -Please note that this parameter has a somewhat confusing name. It +Please note that this parameter has a somewhat confusing name. It accepts a list of usernames and of group names in standard \fIsmb.conf\fR notation. @@ -2375,9 +2493,9 @@ Example: \fBdomain admin group = root @wheel\fR \fBdomain guest group (G)\fR This parameter is intended as a temporary solution to enable users to be a member of the "Domain Guests" group when -a Samba host is acting as a PDC. A complete solution will be provided +a Samba host is acting as a PDC. A complete solution will be provided by a system for mapping Windows NT/2000 groups onto UNIX groups. -Please note that this parameter has a somewhat confusing name. It +Please note that this parameter has a somewhat confusing name. It accepts a list of usernames and of group names in standard \fIsmb.conf\fR notation. @@ -2391,24 +2509,24 @@ Example: \fBdomain guest group = nobody @guest\fR .TP \fBdomain logons (G)\fR If set to true, the Samba server will serve -Windows 95/98 Domain logons for the \fIworkgroup\fR it is in. Samba 2.2 also +Windows 95/98 Domain logons for the \fIworkgroup\fR it is in. Samba 2.2 also has limited capability to act as a domain controller for Windows -NT 4 Domains. For more details on setting up this feature see +NT 4 Domains. For more details on setting up this feature see the Samba-PDC-HOWTO included in the \fIhtmldocs/\fR directory shipped with the source code. Default: \fBdomain logons = no\fR .TP \fBdomain master (G)\fR -Tell \fB nmbd(8)\fRto enable WAN-wide browse list +Tell \fB nmbd(8)\fRto enable WAN-wide browse list collation. Setting this option causes \fBnmbd\fR to claim a special domain specific NetBIOS name that identifies -it as a domain master browser for its given \fIworkgroup\fR. Local master browsers +it as a domain master browser for its given \fIworkgroup\fR. Local master browsers in the same \fIworkgroup\fR on broadcast-isolated subnets will give this \fBnmbd\fR their local browse lists, and then ask \fBsmbd(8)\fR for a complete copy of the browse list for the whole wide area -network. Browser clients will then contact their local master browser, +network. Browser clients will then contact their local master browser, and will receive the domain-wide browse list, instead of just the list for their broadcast-isolated subnet. @@ -2424,7 +2542,7 @@ strangely and may fail. If \fBdomain logons = yes\fR , then the default behavior is to enable the \fIdomain -master\fR parameter. If \fIdomain logons\fR is +master\fR parameter. If \fIdomain logons\fR is not enabled (the default setting), then neither will \fIdomain master\fR be enabled by default. @@ -2438,21 +2556,31 @@ parameter allows you to specify a comma-delimited list of directories that the server should always show as empty. Note that Samba can be very fussy about the exact format -of the "dont descend" entries. For example you may need \fI ./proc\fR instead of just \fI/proc\fR. -Experimentation is the best policy :-) +of the "dont descend" entries. For example you may need \fI ./proc\fR instead of just \fI/proc\fR. +Experimentation is the best policy :-) Default: \fBnone (i.e., all directories are OK to descend)\fR Example: \fBdont descend = /proc,/dev\fR .TP +\fBdos charset (G)\fR +DOS SMB clients assume the server has +the same charset as they do. This option specifies which +charset Samba should talk to DOS clients. + +The default depends on which charsets you have instaled. +Samba tries to use charset 850 but falls back to ASCII in +case it is not available. Run testparm(1) +to check the default on your system. +.TP \fBdos filemode (S)\fR The default behavior in Samba is to provide UNIX-like behavior where only the owner of a file/directory is -able to change the permissions on it. However, this behavior -is often confusing to DOS/Windows users. Enabling this parameter +able to change the permissions on it. However, this behavior +is often confusing to DOS/Windows users. Enabling this parameter allows a user who has write access to the file (by whatever -means) to modify the permissions on it. Note that a user +means) to modify the permissions on it. Note that a user belonging to the group owning the file will not be allowed to change permissions if the group is only granted read access. Ownership of the file/directory is not changed, only the permissions @@ -2487,7 +2615,7 @@ file they can change the timestamp on it. Under POSIX semantics, only the owner of the file or root may change the timestamp. By default, Samba runs with POSIX semantics and refuses to change the timestamp on a file if the user \fBsmbd\fR is acting -on behalf of is not the file owner. Setting this option to true allows DOS semantics and smbdwill change the file +on behalf of is not the file owner. Setting this option to true allows DOS semantics and smbdwill change the file timestamp as DOS requires. Default: \fBdos filetimes = no\fR @@ -2513,7 +2641,7 @@ Default: \fBencrypt passwords = yes\fR \fBenhanced browsing (G)\fR This option enables a couple of enhancements to cross-subnet browse propagation that have been added in Samba -but which are not standard in Microsoft implementations. +but which are not standard in Microsoft implementations. The first enhancement to browse propagation consists of a regular wildcard query to a Samba WINS server for all Domain Master Browsers, @@ -2533,26 +2661,27 @@ Default: \fBenhanced browsing = yes\fR .TP \fBenumports command (G)\fR The concept of a "port" is fairly foreign -to UNIX hosts. Under Windows NT/2000 print servers, a port +to UNIX hosts. Under Windows NT/2000 print servers, a port is associated with a port monitor and generally takes the form of a local port (i.e. LPT1:, COM1:, FILE:) or a remote port -(i.e. LPD Port Monitor, etc...). By default, Samba has only one -port defined--"Samba Printer Port". Under -Windows NT/2000, all printers must have a valid port name. +(i.e. LPD Port Monitor, etc...). By default, Samba has only one +port defined--"Samba Printer Port". Under +Windows NT/2000, all printers must have a valid port name. If you wish to have a list of ports displayed (\fBsmbd -\fRdoes not use a port name for anything) other than +\fR does not use a port name for anything) other than the default "Samba Printer Port", you can define \fIenumports command\fR to point to a program which should generate a list of ports, one per line, -to standard output. This listing will then be used in response +to standard output. This listing will then be used in response to the level 1 and 2 EnumPorts() RPC. Default: \fBno enumports command\fR Example: \fBenumports command = /usr/bin/listports -\fR.TP +\fR +.TP \fBexec (S)\fR -This is a synonym for \fIpreexec\fR. +This is a synonym for \fIpreexec\fR. .TP \fBfake directory create times (S)\fR NTFS and Windows VFAT file systems keep a create @@ -2573,11 +2702,11 @@ timestamp than the object files it contains. However, Unix time semantics mean that the create time reported by Samba will be updated whenever a file is created or -or deleted in the directory. NMAKE finds all object files in -the object directory. The timestamp of the last one built is then -compared to the timestamp of the object directory. If the +or deleted in the directory. NMAKE finds all object files in +the object directory. The timestamp of the last one built is then +compared to the timestamp of the object directory. If the directory's timestamp if newer, then all object files -will be rebuilt. Enabling this option +will be rebuilt. Enabling this option ensures directories always predate their contents and an NMAKE build will proceed as expected. @@ -2614,9 +2743,9 @@ to stop \fBsmbd(8)\fR from following symbolic links in a particular share. Setting this parameter to no prevents any file or directory that is a symbolic link from being followed (the user will get an -error). This option is very useful to stop users from adding a +error). This option is very useful to stop users from adding a symbolic link to \fI/etc/passwd\fR in their home -directory for instance. However it will slow filename lookups +directory for instance. However it will slow filename lookups down slightly. This option is enabled (i.e. \fBsmbd\fR will @@ -2658,10 +2787,10 @@ bits to a created directory. This operation is done after the mode mask in the parameter \fIdirectory mask\fR is applied. -See also the parameter \fI directory mask\fR for details on masking mode bits +See also the parameter \fI directory mask\fR for details on masking mode bits on created directories. -See also the \fI inherit permissions\fR parameter. +See also the \fI inherit permissions\fR parameter. Default: \fBforce directory mode = 000\fR @@ -2671,7 +2800,7 @@ would force all created directories to have read and execute permissions set for 'group' and 'other' as well as the read/write/execute bits set for the 'user'. .TP -\fBforce directory\fR +\fBforce directory security mode (S)\fR This parameter controls what UNIX permission bits can be modified when a Windows NT client is manipulating the UNIX permission on a directory using the native NT security dialog box. @@ -2688,13 +2817,13 @@ directory without restrictions. \fBNote\fR that users who can access the Samba server through other means can easily bypass this restriction, -so it is primarily useful for standalone "appliance" systems. +so it is primarily useful for standalone "appliance" systems. Administrators of most normal systems will probably want to leave it set as 0000. -See also the \fI directory security mask\fR, \fIsecurity mask\fR, +See also the \fI directory security mask\fR, \fIsecurity mask\fR, \fIforce security mode -\fRparameters. +\fR parameters. Default: \fBforce directory security mode = 0\fR @@ -2723,7 +2852,7 @@ primary group assigned to sys when accessing this Samba share. All other users will retain their ordinary primary group. If the \fIforce user -\fRparameter is also set the group specified in +\fR parameter is also set the group specified in \fIforce group\fR will override the primary group set in \fIforce user\fR. @@ -2752,13 +2881,13 @@ with no restrictions. \fBNote\fR that users who can access the Samba server through other means can easily bypass this restriction, -so it is primarily useful for standalone "appliance" systems. +so it is primarily useful for standalone "appliance" systems. Administrators of most normal systems will probably want to leave this set to 0000. -See also the \fI force directory security mode\fR, +See also the \fI force directory security mode\fR, \fIdirectory security -mask\fR, \fI security mask\fR parameters. +mask\fR, \fI security mask\fR parameters. Default: \fBforce security mode = 0\fR @@ -2774,7 +2903,7 @@ This user name only gets used once a connection is established. Thus clients still need to connect as a valid user and supply a valid password. Once connected, all file operations will be performed as the "forced user", no matter what username the client connected -as. This can be very useful. +as. This can be very useful. In Samba 2.0.5 and above this parameter also causes the primary group of the forced user to be used as the primary group @@ -2783,6 +2912,7 @@ as the primary group of the connecting user (this was a bug). See also \fIforce group \fR + Default: \fBno forced user\fR Example: \fBforce user = auser\fR @@ -2816,7 +2946,7 @@ group\fR. .TP \fBguest account (S)\fR This is a username which will be used for access -to services which are specified as \fI guest ok\fR (see below). Whatever privileges this +to services which are specified as \fI guest ok\fR (see below). Whatever privileges this user has will be available to any client connecting to the guest service. Typically this user will exist in the password file, but will not have a valid login. The user account "ftp" is often a good choice @@ -2827,7 +2957,11 @@ One some systems the default guest account "nobody" may not be able to print. Use another account in this case. You should test this by trying to log in as your guest user (perhaps by using the \fBsu -\fR command) and trying to print using the -system print command such as \fBlpr(1)\fR or \fB lp(1)\fR. +system print command such as \fBlpr(1)\fR or \fB lp(1)\fR. + +This paramater does not accept % marcos, becouse +many parts of the system require this value to be +constant for correct operation Default: \fBspecified at compile time, usually "nobody"\fR @@ -2837,18 +2971,18 @@ Example: \fBguest account = ftp\fR \fBguest ok (S)\fR If this parameter is yes for a service, then no password is required to connect to the service. -Privileges will be those of the \fI guest account\fR. +Privileges will be those of the \fI guest account\fR. -See the section below on \fI security\fR for more information about this option. +See the section below on \fI security\fR for more information about this option. Default: \fBguest ok = no\fR .TP \fBguest only (S)\fR If this parameter is yes for a service, then only guest connections to the service are permitted. -This parameter will have no effect if \fIguest ok\fR is not set for the service. +This parameter will have no effect if \fIguest ok\fR is not set for the service. -See the section below on \fI security\fR for more information about this option. +See the section below on \fI security\fR for more information about this option. Default: \fBguest only = no\fR .TP @@ -2860,11 +2994,11 @@ Default: \fBhide dot files = yes\fR .TP \fBhide files(S)\fR This is a list of files or directories that are not -visible but are accessible. The DOS 'hidden' attribute is applied +visible but are accessible. The DOS 'hidden' attribute is applied to any files or directories that match. Each entry in the list must be separated by a '/', -which allows spaces to be included in the entry. '*' +which allows spaces to be included in the entry. '*' and '?' can be used to specify multiple files or directories as in DOS wildcards. @@ -2879,7 +3013,7 @@ as it will be forced to check all files and directories for a match as they are scanned. See also \fIhide -dot files\fR, \fI veto files\fR and \fIcase sensitive\fR. +dot files\fR, \fI veto files\fR and \fIcase sensitive\fR. Default: \fBno file are hidden\fR @@ -2888,7 +3022,7 @@ Example: \fBhide files = The above example is based on files that the Macintosh SMB client (DAVE) available from -Thursby creates for internal use, and also still hides +Thursbycreates for internal use, and also still hides all files beginning with a dot. .TP \fBhide local users(G)\fR @@ -2897,24 +3031,31 @@ users (root, wheel, floppy, etc) from remote clients. Default: \fBhide local users = no\fR .TP -\fBhide unreadable (S)\fR +\fBhide unreadable (G)\fR This parameter prevents clients from seeing the existance of files that cannot be read. Defaults to off. Default: \fBhide unreadable = no\fR .TP +\fBhide unwriteable files (G)\fR +This parameter prevents clients from seeing +the existance of files that cannot be written to. Defaults to off. +Note that unwriteable directories are shown as usual. + +Default: \fBhide unwriteable = no\fR +.TP \fBhomedir map (G)\fR If\fInis homedir -\fRis true, and \fBsmbd(8)\fRis also acting +\fR is true, and \fBsmbd(8)\fRis also acting as a Win95/98 \fIlogon server\fR then this parameter specifies the NIS (or YP) map from which the server for the user's -home directory should be extracted. At present, only the Sun +home directory should be extracted. At present, only the Sun auto.home map format is understood. The form of the map is: \fBusername server:/some/file/system\fR and the program will extract the servername from before -the first ':'. There should probably be a better parsing system +the first ':'. There should probably be a better parsing system that copes with different map formats and also Amd (another automounter) maps. @@ -2931,16 +3072,26 @@ Example: \fBhomedir map = amd.homedir\fR .TP \fBhost msdfs (G)\fR This boolean parameter is only available -if Samba has been configured and compiled with the \fB --with-msdfs\fR option. If set to yes, -Samba will act as a Dfs server, and allow Dfs-aware clients +if Samba has been configured and compiled with the \fB --with-msdfs\fR option. If set to yes, +Samba will act as a Dfs server, and allow Dfs-aware clients to browse Dfs trees hosted on the server. -See also the \fI msdfs root\fR share level parameter. For -more information on setting up a Dfs tree on Samba, +See also the \fI msdfs root\fR share level parameter. For +more information on setting up a Dfs tree on Samba, refer to msdfs_setup.html. Default: \fBhost msdfs = no\fR .TP +\fBhostname lookups (G)\fR +Specifies whether samba should use (expensive) +hostname lookups or use the ip addresses instead. An example place +where hostname lookups are currently used is when checking +the \fBhosts deny\fR and \fBhosts allow\fR. + +Default: \fBhostname lookups = yes\fR + +Example: \fBhostname lookups = no\fR +.TP \fBhosts allow (S)\fR A synonym for this parameter is \fIallow hosts\fR. @@ -2955,7 +3106,7 @@ service has a different setting. You can specify the hosts by name or IP number. For example, you could restrict access to only the hosts on a Class C subnet with something like \fBallow hosts = 150.203.5. -\fR\&. The full syntax of the list is described in the man +\fR. The full syntax of the list is described in the man page \fIhosts_access(5)\fR. Note that this man page may not be present on your system, so a brief description will be given here also. @@ -2995,8 +3146,10 @@ what you expect. Default: \fBnone (i.e., all hosts permitted access) \fR + Example: \fBallow hosts = 150.203.5. myhost.mynet.edu.au -\fR.TP +\fR +.TP \fBhosts deny (S)\fR The opposite of \fIhosts allow\fR - hosts listed here are \fBNOT\fR permitted access to @@ -3006,19 +3159,21 @@ list takes precedence. Default: \fBnone (i.e., no hosts specifically excluded) \fR + Example: \fBhosts deny = 150.203.4. badhost.mynet.edu.au -\fR.TP +\fR +.TP \fBhosts equiv (G)\fR If this global parameter is a non-null string, it specifies the name of a file to read for the names of hosts and users who will be allowed access without specifying a password. -This is not be confused with \fIhosts allow\fR which is about hosts -access to services and is more useful for guest services. \fI hosts equiv\fR may be useful for NT clients which will +This is not be confused with \fIhosts allow\fR which is about hosts +access to services and is more useful for guest services. \fI hosts equiv\fR may be useful for NT clients which will not supply passwords to Samba. \fBNOTE :\fR The use of \fIhosts equiv -\fRcan be a major security hole. This is because you are +\fR can be a major security hole. This is because you are trusting the PC to supply the correct username. It is very easy to get a PC to supply a false username. I recommend that the \fIhosts equiv\fR option be only used if you really @@ -3032,7 +3187,7 @@ Example: \fBhosts equiv = /etc/hosts.equiv\fR .TP \fBinclude (G)\fR This allows you to include one config file -inside another. The file is included literally, as though typed +inside another. The file is included literally, as though typed in place. It takes the standard substitutions, except \fI%u @@ -3041,13 +3196,14 @@ It takes the standard substitutions, except \fI%u Default: \fBno file included\fR Example: \fBinclude = /usr/local/samba/lib/admin_smb.conf -\fR.TP +\fR +.TP \fBinherit acls (S)\fR This parameter can be used to ensure that if default acls exist on parent directories, they are always honored when creating a subdirectory. The default behavior is to use the mode specified -when creating the directory. Enabling this option +when creating the directory. Enabling this option sets the mode to 0777, thus guaranteeing that default directory acls are propagated. @@ -3055,7 +3211,7 @@ Default: \fBinherit acls = no\fR .TP \fBinherit permissions (S)\fR The permissions on new files and directories -are normally governed by \fI create mask\fR, \fIdirectory mask\fR, \fIforce create mode\fR +are normally governed by \fI create mask\fR, \fIdirectory mask\fR, \fIforce create mode\fR and \fIforce directory mode\fR but the boolean inherit permissions parameter overrides this. @@ -3064,7 +3220,7 @@ New directories inherit the mode of the parent directory, including bits such as setgid. New files inherit their read/write bits from the parent -directory. Their execute bits continue to be determined by +directory. Their execute bits continue to be determined by \fImap archive\fR , \fImap hidden\fR and \fImap system\fR @@ -3078,7 +3234,7 @@ many users, perhaps several thousand, to allow a single [homes] share to be used flexibly by each user. See also \fIcreate mask -\fR, \fI directory mask\fR, \fIforce create mode\fR and \fIforce directory mode\fR +\fR, \fI directory mask\fR, \fIforce create mode\fR and \fIforce directory mode\fR \&. Default: \fBinherit permissions = no\fR @@ -3110,35 +3266,29 @@ an IP/mask pair. \(bu a broadcast/mask pair. .RE -.PP + The "mask" parameters can either be a bit length (such as 24 for a C class network) or a full netmask in dotted decimal form. -.PP -.PP + The "IP" parameters above can either be a full dotted decimal IP address or a hostname which will be looked up via the OS's normal hostname resolution mechanisms. -.PP -.PP + For example, the following line: -.PP -.PP + \fBinterfaces = eth0 192.168.2.10/24 192.168.3.10/255.255.255.0 -\fR.PP -.PP +\fR + would configure three network interfaces corresponding to the eth0 device and IP addresses 192.168.2.10 and 192.168.3.10. The netmasks of the latter two interfaces would be set to 255.255.255.0. -.PP -.PP + See also \fIbind interfaces only\fR. -.PP -.PP + Default: \fBall active interfaces except 127.0.0.1 that are broadcast capable\fR -.PP .TP \fBinvalid users (S)\fR This is a list of users that should not be allowed @@ -3165,12 +3315,13 @@ The current servicename is substituted for \fI%S\fR. This is useful in the [homes] section. See also \fIvalid users -\fR\&. +\fR. Default: \fBno invalid users\fR Example: \fBinvalid users = root fred admin @wheel -\fR.TP +\fR +.TP \fBkeepalive (G)\fR The value of the parameter (an integer) represents the number of seconds between \fIkeepalive\fR @@ -3192,7 +3343,7 @@ For UNIXes that support kernel based \fIoplocks\fR allows the use of them to be turned on or off. Kernel oplocks support allows Samba \fIoplocks -\fRto be broken whenever a local UNIX process or NFS operation +\fR to be broken whenever a local UNIX process or NFS operation accesses a file that \fBsmbd(8)\fR has oplocked. This allows complete data consistency between SMB/CIFS, NFS and local file access (and is a \fBvery\fR @@ -3204,7 +3355,7 @@ You should never need to touch this parameter. See also the \fIoplocks\fR and \fIlevel2 oplocks -\fRparameters. +\fR parameters. Default: \fBkernel oplocks = yes\fR .TP @@ -3233,7 +3384,7 @@ The \fIldap admin dn\fR defines the Distinguished Name (DN) name used by Samba to contact the ldap server when retreiving user account information. The \fIldap admin dn\fR is used in conjunction with the admin dn password -stored in the \fIprivate/secrets.tdb\fR file. See the +stored in the \fIprivate/secrets.tdb\fR file. See the \fBsmbpasswd(8)\fRman page for more information on how to accmplish this. @@ -3242,8 +3393,8 @@ Default : \fBnone\fR \fBldap filter (G)\fR This parameter specifies the RFC 2254 compliant LDAP search filter. The default is to match the login name with the uid -attribute for all entries matching the sambaAccount -objectclass. Note that this filter should only return one entry. +attribute for all entries matching the sambaAccount +objectclass. Note that this filter should only return one entry. Default : \fBldap filter = (&(uid=%u)(objectclass=sambaAccount))\fR .TP @@ -3316,11 +3467,11 @@ parameters. Default: \fBlevel2 oplocks = yes\fR .TP \fBlm announce (G)\fR -This parameter determines if \fBnmbd(8)\fRwill produce Lanman announce +This parameter determines if \fBnmbd(8)\fRwill produce Lanman announce broadcasts that are needed by OS/2 clients in order for them to see the Samba server in their browse list. This parameter can have three values, true, false, or -auto. The default is auto. +auto. The default is auto. If set to false Samba will never produce these broadcasts. If set to true Samba will produce Lanman announce broadcasts at a frequency set by the parameter @@ -3331,7 +3482,7 @@ then start sending them at a frequency set by the parameter \fIlm interval\fR. See also \fIlm interval -\fR\&. +\fR. Default: \fBlm announce = auto\fR @@ -3339,9 +3490,9 @@ Example: \fBlm announce = yes\fR .TP \fBlm interval (G)\fR If Samba is set to produce Lanman announce -broadcasts needed by OS/2 clients (see the \fIlm announce\fR parameter) then this +broadcasts needed by OS/2 clients (see the \fIlm announce\fR parameter) then this parameter defines the frequency in seconds with which they will be -made. If this is set to zero then no Lanman announcements will be +made. If this is set to zero then no Lanman announcements will be made despite the setting of the \fIlm announce\fR parameter. @@ -3361,12 +3512,12 @@ more details. Default: \fBload printers = yes\fR .TP \fBlocal master (G)\fR -This option allows \fB nmbd(8)\fRto try and become a local master browser -on a subnet. If set to false then \fB nmbd\fR will not attempt to become a local master browser +This option allows \fB nmbd(8)\fRto try and become a local master browser +on a subnet. If set to false then \fB nmbd\fR will not attempt to become a local master browser on a subnet and will also lose in all browsing elections. By default this value is set to true. Setting this value to true doesn't mean that Samba will \fBbecome\fR the local master -browser on a subnet, just that \fBnmbd\fR will \fB participate\fR in elections for local master browser. +browser on a subnet, just that \fBnmbd\fR will \fB participate\fR in elections for local master browser. Setting this value to false will cause \fBnmbd\fR \fBnever\fR to become a local master browser. @@ -3374,11 +3525,11 @@ Setting this value to false will cause \fBnmbd\fR Default: \fBlocal master = yes\fR .TP \fBlock dir (G)\fR -Synonym for \fI lock directory\fR. +Synonym for \fI lock directory\fR. .TP \fBlock directory (G)\fR This option specifies the directory where lock -files will be placed. The lock files are used to implement the +files will be placed. The lock files are used to implement the \fImax connections\fR option. @@ -3389,10 +3540,10 @@ Example: \fBlock directory = /var/run/samba/locks\fR \fBlock spin count (G)\fR This parameter controls the number of times that smbd should attempt to gain a byte range lock on the -behalf of a client request. Experiments have shown that +behalf of a client request. Experiments have shown that Windows 2k servers do not reply with a failure if the lock could not be immediately granted, but try a few more times -in case the lock could later be aquired. This behavior +in case the lock could later be aquired. This behavior is used to support PC database formats such as MS Access and FoxPro. @@ -3400,7 +3551,7 @@ Default: \fBlock spin count = 2\fR .TP \fBlock spin time (G)\fR The time in microseconds that smbd should -pause before attempting to gain a failed lock. See +pause before attempting to gain a failed lock. See \fIlock spin count\fR for more details. @@ -3437,7 +3588,8 @@ This option takes the standard substitutions, allowing you to have separate log files for each user or machine. Example: \fBlog file = /usr/local/samba/var/log.%m -\fR.TP +\fR +.TP \fBlog level (G)\fR The value of the parameter (a astring) allows the debug level (logging level) to be specified in the @@ -3450,7 +3602,8 @@ The default will be the log level specified on the command line or level zero if none was specified. Example: \fBlog level = 3 passdb:5 auth:10 winbind:2 -\fR.TP +\fR +.TP \fBlogon drive (G)\fR This parameter specifies the local path to which the home directory will be connected (see \fIlogon home\fR) @@ -3465,7 +3618,7 @@ Example: \fBlogon drive = h:\fR .TP \fBlogon home (G)\fR This parameter specifies the home directory -location when a Win95/98 or NT Workstation logs into a Samba PDC. +location when a Win95/98 or NT Workstation logs into a Samba PDC. It allows you to do C:\\> \fBNET USE H: /HOME\fR @@ -3477,19 +3630,19 @@ you to have separate logon scripts for each user or machine. This parameter can be used with Win9X workstations to ensure that roaming profiles are stored in a subdirectory of the user's -home directory. This is done in the following way: +home directory. This is done in the following way: \fBlogon home = \\\\%N\\%U\\profile\fR This tells Samba to return the above string, with substitutions made when a client requests the info, generally -in a NetUserGetInfo request. Win9X clients truncate the info to +in a NetUserGetInfo request. Win9X clients truncate the info to \\\\server\\share when a user does \fBnet use /home\fR but use the whole string when dealing with profiles. -Note that in prior versions of Samba, the \fIlogon path\fR was returned rather than -\fIlogon home\fR. This broke \fBnet use -/home\fR but allowed profiles outside the home directory. +Note that in prior versions of Samba, the \fIlogon path\fR was returned rather than +\fIlogon home\fR. This broke \fBnet use +/home\fR but allowed profiles outside the home directory. The current implementation is correct, and can be used for profiles if you use the above trick. @@ -3503,12 +3656,12 @@ Example: \fBlogon home = "\\\\remote_smb_server\\%U"\fR \fBlogon path (G)\fR This parameter specifies the home directory where roaming profiles (NTuser.dat etc files for Windows NT) are -stored. Contrary to previous versions of these manual pages, it has -nothing to do with Win 9X roaming profiles. To find out how to -handle roaming profiles for Win 9X system, see the \fIlogon home\fR parameter. +stored. Contrary to previous versions of these manual pages, it has +nothing to do with Win 9X roaming profiles. To find out how to +handle roaming profiles for Win 9X system, see the \fIlogon home\fR parameter. This option takes the standard substitutions, allowing you -to have separate logon scripts for each user or machine. It also +to have separate logon scripts for each user or machine. It also specifies the directory from which the "Application Data", (\fIdesktop\fR, \fIstart menu\fR, \fInetwork neighborhood\fR, \fIprograms\fR @@ -3517,18 +3670,18 @@ your Windows NT client. The share and the path must be readable by the user for the preferences and directories to be loaded onto the Windows NT -client. The share must be writeable when the user logs in for the first +client. The share must be writeable when the user logs in for the first time, in order that the Windows NT client can create the NTuser.dat and other directories. Thereafter, the directories and any of the contents can, -if required, be made read-only. It is not advisable that the +if required, be made read-only. It is not advisable that the NTuser.dat file be made read-only - rename it to NTuser.man to achieve the desired effect (a \fBMAN\fRdatory profile). Windows clients can sometimes maintain a connection to -the [homes] share, even though there is no user logged in. +the [homes] share, even though there is no user logged in. Therefore, it is vital that the logon path does not include a reference to the homes share (i.e. setting this parameter to \\%N\\%U\\profile_path will cause problems). @@ -3546,22 +3699,22 @@ Example: \fBlogon path = \\\\PROFILESERVER\\PROFILE\\%U\fR \fBlogon script (G)\fR This parameter specifies the batch file (.bat) or NT command file (.cmd) to be downloaded and run on a machine when -a user successfully logs in. The file must contain the DOS +a user successfully logs in. The file must contain the DOS style CR/LF line endings. Using a DOS-style editor to create the file is recommended. The script must be a relative path to the [netlogon] -service. If the [netlogon] service specifies a \fIpath\fR of \fI/usr/local/samba/netlogon +service. If the [netlogon] service specifies a \fIpath\fR of \fI/usr/local/samba/netlogon \fR, and \fBlogon script = STARTUP.BAT\fR, then the file that will be downloaded is: \fI/usr/local/samba/netlogon/STARTUP.BAT\fR -The contents of the batch file are entirely your choice. A +The contents of the batch file are entirely your choice. A suggested command would be to add \fBNET TIME \\\\SERVER /SET /YES\fR, to force every machine to synchronize clocks with -the same time server. Another use would be to add \fBNET USE -U: \\\\SERVER\\UTILS\fR for commonly used utilities, or \fB NET USE Q: \\\\SERVER\\ISO9001_QA\fR for example. +the same time server. Another use would be to add \fBNET USE +U: \\\\SERVER\\UTILS\fR for commonly used utilities, or \fB NET USE Q: \\\\SERVER\\ISO9001_QA\fR for example. Note that it is particularly important not to allow write access to the [netlogon] share, or to grant users write permission @@ -3591,18 +3744,18 @@ having a too low priority won't be sent to the printer. If a \fI%p\fR is given then the printer name is put in its place. A \fI%j\fR is replaced with -the job number (an integer). On HPUX (see \fIprinting=hpux +the job number (an integer). On HPUX (see \fIprinting=hpux \fR), if the \fI-p%p\fR option is added to the lpq command, the job will show up with the correct status, i.e. if the job priority is lower than the set fence priority it will -have the PAUSED status, whereas if the priority is equal or higher it +have the PAUSED status, whereas if the priority is equal or higher it will have the SPOOLED or PRINTING status. Note that it is good practice to include the absolute path in the lppause command as the PATH may not be available to the server. See also the \fIprinting -\fRparameter. +\fR parameter. Default: Currently no default value is given to this string, unless the value of the \fIprinting\fR @@ -3615,13 +3768,13 @@ is SOFTQ, then the default is: \fBqstat -s -j%j -h\fR -Example for HPUX: \fBlppause command = /usr/bin/lpalt +Example for HPUX: \fBlppause command = /usr/bin/lpalt %p-%j -p0\fR .TP \fBlpq cache time (G)\fR This controls how long lpq info will be cached for to prevent the \fBlpq\fR command being called too -often. A separate cache is kept for each variation of the \fB lpq\fR command used by the system, so if you use different +often. A separate cache is kept for each variation of the \fB lpq\fR command used by the system, so if you use different \fBlpq\fR commands for different users then they won't share cache information. @@ -3636,7 +3789,7 @@ be advisable if your \fBlpq\fR command is very slow. A value of 0 will disable caching completely. See also the \fIprinting -\fRparameter. +\fR parameter. Default: \fBlpq cache time = 10\fR @@ -3668,15 +3821,15 @@ command. Note that it is good practice to include the absolute path in the \fIlpq command\fR as the \fB$PATH -\fRmay not be available to the server. When compiled with +\fR may not be available to the server. When compiled with the CUPS libraries, no \fIlpq command\fR is needed because smbd will make a library call to obtain the print queue listing. See also the \fIprinting -\fRparameter. +\fR parameter. -Default: \fBdepends on the setting of \fI printing\fB\fR +Default: \fBdepends on the setting of \fI printing\fB\fR Example: \fBlpq command = /usr/bin/lpq -P%p\fR .TP @@ -3688,7 +3841,7 @@ printing or spooling a specific print job. This command should be a program or script which takes a printer name and job number to resume the print job. See also the \fIlppause command -\fRparameter. +\fR parameter. If a \fI%p\fR is given then the printer name is put in its place. A \fI%j\fR is replaced with @@ -3699,7 +3852,7 @@ in the \fIlpresume command\fR as the PATH may not be available to the server. See also the \fIprinting -\fRparameter. +\fR parameter. Default: Currently no default value is given to this string, unless the value of the \fIprinting\fR @@ -3731,25 +3884,28 @@ path in the \fIlprm command\fR as the PATH may not be available to the server. See also the \fIprinting -\fRparameter. +\fR parameter. Default: \fBdepends on the setting of \fIprinting \fB\fR + Example 1: \fBlprm command = /usr/bin/lprm -P%p %j \fR + Example 2: \fBlprm command = /usr/bin/cancel %p-%j -\fR.TP +\fR +.TP \fBmachine password timeout (G)\fR If a Samba server is a member of a Windows NT Domain (see the security = domain) -parameter) then periodically a running smbd(8)process will try and change the MACHINE ACCOUNT +parameter) then periodically a running smbd(8)process will try and change the MACHINE ACCOUNT PASSWORD stored in the TDB called \fIprivate/secrets.tdb -\fR\&. This parameter specifies how often this password +\fR. This parameter specifies how often this password will be changed, in seconds. The default is one week (expressed in seconds), the same as a Windows NT Domain member server. See also \fBsmbpasswd(8) -\fR, and the security = domain) parameter. +\fR, and the security = domain) parameter. Default: \fBmachine password timeout = 604800\fR .TP @@ -3760,11 +3916,12 @@ which will contain output created by a magic script (see the parameter below). Warning: If two clients use the same \fImagic script -\fRin the same directory the output file content +\fR in the same directory the output file content is undefined. Default: \fBmagic output = .out \fR + Example: \fBmagic output = myfile.txt\fR .TP \fBmagic script (S)\fR @@ -3778,7 +3935,7 @@ completion assuming that the user has the appropriate level of privilege and the file permissions allow the deletion. If the script generates output, output will be sent to -the file specified by the \fI magic output\fR parameter (see above). +the file specified by the \fI magic output\fR parameter (see above). Note that some shells are unable to interpret scripts containing CR/LF instead of CR as @@ -3794,14 +3951,14 @@ Default: \fBNone. Magic scripts disabled.\fR Example: \fBmagic script = user.csh\fR .TP \fBmangle case (S)\fR -See the section on NAME MANGLING +See the section on NAME MANGLING Default: \fBmangle case = no\fR .TP \fBmangled map (S)\fR This is for those who want to directly map UNIX -file names which cannot be represented on Windows/DOS. The mangling -of names is not always what is needed. In particular you may have +file names which cannot be represented on Windows/DOS. The mangling +of names is not always what is needed. In particular you may have documents with file extensions that differ between DOS and UNIX. For example, under UNIX it is common to use \fI.html\fR for HTML files, whereas under Windows/DOS \fI.htm\fR @@ -3813,7 +3970,7 @@ you would use: \fBmangled map = (*.html *.htm)\fR One very useful case is to remove the annoying \fI;1 -\fRoff the ends of filenames on some CDROMs (only visible +\fR off the ends of filenames on some CDROMs (only visible under some UNIXes). To do this use a map of (*;1 *;). Default: \fBno mangled map\fR @@ -3825,7 +3982,7 @@ This controls whether non-DOS names under UNIX should be mapped to DOS-compatible names ("mangled") and made visible, or whether non-DOS names should simply be ignored. -See the section on NAME MANGLING for details on how to control the mangling process. +See the section on NAME MANGLING for details on how to control the mangling process. If mangling is used then the mangling algorithm is as follows: .RS @@ -3863,29 +4020,40 @@ for other filenames, but with the leading dot removed and "___" as its extension regardless of actual original extension (that's three underscores). .RE -.PP + The two-digit hash value consists of upper case alphanumeric characters. -.PP -.PP + This algorithm can cause name collisions only if files in a directory share the same first five alphanumeric characters. The probability of such a clash is 1/1300. -.PP -.PP + The name mangling (if enabled) allows a file to be copied between UNIX directories from Windows/DOS while retaining the long UNIX filename. UNIX files can be renamed to a new extension from Windows/DOS and will retain the same basename. Mangled names do not change between sessions. -.PP -.PP + Default: \fBmangled names = yes\fR -.PP +.TP +\fBmangling method (G)\fR +controls the algorithm used for the generating +the mangled names. Can take two different values, "hash" and +"hash2". "hash" is the default and is the algorithm that has been +used in Samba for many years. "hash2" is a newer and considered +a better algorithm (generates less collisions) in the names. +However, many Win32 applications store the mangled names and so +changing to the new algorithm must not be done +lightly as these applications may break unless reinstalled. +New installations of Samba may set the default to hash2. + +Default: \fBmangling method = hash\fR + +Example: \fBmangling method = hash2\fR .TP \fBmangled stack (G)\fR This parameter controls the number of mangled names -that should be cached in the Samba server smbd(8). +that should be cached in the Samba server smbd(8). This stack is a list of recently mangled base names (extensions are only maintained if they are longer than 3 characters @@ -3915,15 +4083,15 @@ Example: \fBmangling char = ^\fR .TP \fBmap archive (S)\fR This controls whether the DOS archive attribute -should be mapped to the UNIX owner execute bit. The DOS archive bit -is set when a file has been modified since its last backup. One +should be mapped to the UNIX owner execute bit. The DOS archive bit +is set when a file has been modified since its last backup. One motivation for this option it to keep Samba/your PC from making -any file it touches from becoming executable under UNIX. This can +any file it touches from becoming executable under UNIX. This can be quite annoying for shared source code, documents, etc... Note that this requires the \fIcreate mask\fR parameter to be set such that owner execute bit is not masked out -(i.e. it must include 100). See the parameter \fIcreate mask\fR for details. +(i.e. it must include 100). See the parameter \fIcreate mask\fR for details. Default: \fBmap archive = yes\fR .TP @@ -3933,7 +4101,7 @@ should be mapped to the UNIX world execute bit. Note that this requires the \fIcreate mask\fR to be set such that the world execute bit is not masked out (i.e. -it must include 001). See the parameter \fIcreate mask\fR for details. +it must include 001). See the parameter \fIcreate mask\fR for details. Default: \fBmap hidden = no\fR .TP @@ -3943,12 +4111,12 @@ should be mapped to the UNIX group execute bit. Note that this requires the \fIcreate mask\fR to be set such that the group execute bit is not masked out (i.e. -it must include 010). See the parameter \fIcreate mask\fR for details. +it must include 010). See the parameter \fIcreate mask\fR for details. Default: \fBmap system = no\fR .TP \fBmap to guest (G)\fR -This parameter is only useful in security modes other than \fIsecurity = share\fR +This parameter is only useful in security modes other than \fIsecurity = share\fR - i.e. user, server, and domain. @@ -3968,7 +4136,7 @@ default. Bad User - Means user logins with an invalid password are rejected, unless the username does not exist, in which case it is treated as a guest login and -mapped into the \fI guest account\fR. +mapped into the \fI guest account\fR. .TP 0.2i \(bu Bad Password - Means user logins @@ -3982,7 +4150,7 @@ that they got their password wrong. Helpdesk services will \fBhate\fR you if you set the \fImap to guest\fR parameter this way :-). .RE -.PP + Note that this parameter is needed to set up "Guest" share services when using \fIsecurity\fR modes other than share. This is because in these modes the name of the resource being @@ -3990,22 +4158,18 @@ requested is \fBnot\fR sent to the server until after the server has successfully authenticated the client so the server cannot make authentication decisions at the correct time (connection to the share) for "Guest" shares. -.PP -.PP + For people familiar with the older Samba releases, this -parameter maps to the old compile-time setting of the GUEST_SESSSETUP value in local.h. -.PP -.PP +parameter maps to the old compile-time setting of the GUEST_SESSSETUP value in local.h. + Default: \fBmap to guest = Never\fR -.PP -.PP + Example: \fBmap to guest = Bad User\fR -.PP .TP \fBmax connections (S)\fR This option allows the number of simultaneous connections to a service to be limited. If \fImax connections -\fRis greater than 0 then connections will be refused if +\fR is greater than 0 then connections will be refused if this number of connections to the service are already open. A value of zero mean an unlimited number of connections may be made. @@ -4075,7 +4239,7 @@ Default: \fBmax open files = 10000\fR \fBmax print jobs (S)\fR This parameter limits the maximum number of jobs allowable in a Samba printer queue at any given moment. -If this number is exceeded, \fB smbd(8)\fRwill remote "Out of Space" to the client. +If this number is exceeded, \fB smbd(8)\fRwill remote "Out of Space" to the client. See all \fItotal print jobs\fR. @@ -4099,7 +4263,7 @@ COREPLUS: Slight improvements on CORE for efficiency. .TP 0.2i \(bu -LANMAN1: First \fB modern\fR version of the protocol. Long filename +LANMAN1: First \fB modern\fR version of the protocol. Long filename support. .TP 0.2i \(bu @@ -4109,21 +4273,17 @@ LANMAN2: Updates to Lanman1 protocol. NT1: Current up to date version of the protocol. Used by Windows NT. Known as CIFS. .RE -.PP + Normally this option should not be set as the automatic negotiation phase in the SMB protocol takes care of choosing the appropriate protocol. -.PP -.PP + See also \fImin protocol\fR -.PP -.PP + Default: \fBmax protocol = NT1\fR -.PP -.PP + Example: \fBmax protocol = LANMAN1\fR -.PP .TP \fBmax smbd processes (G)\fR This parameter limits the maximum number of @@ -4131,11 +4291,11 @@ This parameter limits the maximum number of processes concurrently running on a system and is intended as a stopgap to prevent degrading service to clients in the event that the server has insufficient resources to handle more than this -number of connections. Remember that under normal operating +number of connections. Remember that under normal operating conditions, each user will have an smbdassociated with him or her to handle connections to all shares from a given host. -Default: \fBmax smbd processes = 0\fR ## no limit +Default: \fBmax smbd processes = 0\fR ## no limit Example: \fBmax smbd processes = 1000\fR .TP @@ -4150,10 +4310,10 @@ Default: \fBmax ttl = 259200\fR .TP \fBmax wins ttl (G)\fR This option tells nmbd(8) -when acting as a WINS server ( \fIwins support = yes\fR) what the maximum +when acting as a WINS server ( \fIwins support = yes\fR) what the maximum \&'time to live' of NetBIOS names that \fBnmbd\fR will grant will be (in seconds). You should never need to change this -parameter. The default is 6 days (518400 seconds). +parameter. The default is 6 days (518400 seconds). See also the \fImin wins ttl\fR parameter. @@ -4190,7 +4350,7 @@ your PCs may freeze when sending messages (they should recover after 30 seconds, hopefully). All messages are delivered as the global guest user. -The command takes the standard substitutions, although \fI %u\fR won't work (\fI%U\fR may be better +The command takes the standard substitutions, although \fI %u\fR won't work (\fI%U\fR may be better in this case). Apart from the standard substitutions, some additional @@ -4209,40 +4369,32 @@ the message was sent to (probably the server name). \fI%f\fR = who the message is from. .RE -.PP + You could make this command send mail, or whatever else takes your fancy. Please let us know of any really interesting ideas you have. -.PP -.PP + Here's a way of sending the messages as mail to root: -.PP -.PP + \fBmessage command = /bin/mail -s 'message from %f on %m' root < %s; rm %s\fR -.PP -.PP + If you don't have a message command then the message won't be delivered and Samba will tell the sender there was an error. Unfortunately WfWg totally ignores the error code and carries on regardless, saying that the message was delivered. -.PP -.PP + If you want to silently delete it then try: -.PP -.PP + \fBmessage command = rm %s\fR -.PP -.PP + Default: \fBno message command\fR -.PP -.PP + Example: \fBmessage command = csh -c 'xedit %s; rm %s' &\fR -.PP .TP \fBmin passwd length (G)\fR -Synonym for \fImin password length\fR. +Synonym for \fImin password length\fR. .TP \fBmin password length (G)\fR This option sets the minimum length in characters @@ -4250,7 +4402,7 @@ of a plaintext password that \fBsmbd\fR will accept when performing UNIX password changing. See also \fIunix -password sync\fR, \fIpasswd program\fR and \fIpasswd chat debug\fR +password sync\fR, \fIpasswd program\fR and \fIpasswd chat debug\fR \&. Default: \fBmin password length = 5\fR @@ -4262,7 +4414,7 @@ a print job. It is specified in kilobytes. The default is 0, which means a user can always spool a print job. See also the \fIprinting -\fRparameter. +\fR parameter. Default: \fBmin print space = 0\fR @@ -4270,47 +4422,57 @@ Example: \fBmin print space = 2000\fR .TP \fBmin protocol (G)\fR The value of the parameter (a string) is the -lowest SMB protocol dialect than Samba will support. Please refer +lowest SMB protocol dialect than Samba will support. Please refer to the \fImax protocol\fR parameter for a list of valid protocol names and a brief description -of each. You may also wish to refer to the C source code in +of each. You may also wish to refer to the C source code in \fIsource/smbd/negprot.c\fR for a listing of known protocol dialects supported by clients. If you are viewing this parameter as a security measure, you should also refer to the \fIlanman -auth\fR parameter. Otherwise, you should never need +auth\fR parameter. Otherwise, you should never need to change this parameter. Default : \fBmin protocol = CORE\fR -Example : \fBmin protocol = NT1\fR # disable DOS +Example : \fBmin protocol = NT1\fR # disable DOS clients .TP \fBmin wins ttl (G)\fR This option tells nmbd(8) -when acting as a WINS server (\fI wins support = yes\fR) what the minimum 'time to live' +when acting as a WINS server (\fI wins support = yes\fR) what the minimum 'time to live' of NetBIOS names that \fBnmbd\fR will grant will be (in -seconds). You should never need to change this parameter. The default +seconds). You should never need to change this parameter. The default is 6 hours (21600 seconds). Default: \fBmin wins ttl = 21600\fR .TP \fBmsdfs root (S)\fR This boolean parameter is only available if -Samba is configured and compiled with the \fB --with-msdfs\fR option. If set to yes, -Samba treats the share as a Dfs root and allows clients to browse +Samba is configured and compiled with the \fB --with-msdfs\fR option. If set to yes, +Samba treats the share as a Dfs root and allows clients to browse the distributed file system tree rooted at the share directory. -Dfs links are specified in the share directory by symbolic +Dfs links are specified in the share directory by symbolic links of the form \fImsdfs:serverA\\shareA,serverB\\shareB -\fRand so on. For more information on setting up a Dfs tree -on Samba, refer to msdfs_setup.html +\fR and so on. For more information on setting up a Dfs tree +on Samba, refer to msdfs_setup.html . See also \fIhost msdfs \fR + Default: \fBmsdfs root = no\fR .TP +\fBname cache timeout (G)\fR +Specifies the number of seconds it takes before +entries in samba's hostname resolve cache time out. If +the timeout is set to 0. the caching is disabled. + +Default: \fBname cache timeout = 660\fR + +Example: \fBname cache timeout = 0\fR +.TP \fBname resolve order (G)\fR This option is used by the programs in the Samba suite to determine what naming services to use and in what order @@ -4333,13 +4495,13 @@ name to IP address resolution, using the system \fI/etc/hosts \fR, NIS, or DNS lookups. This method of name resolution is operating system depended for instance on IRIX or Solaris this may be controlled by the \fI/etc/nsswitch.conf\fR -file. Note that this method is only used if the NetBIOS name +file. Note that this method is only used if the NetBIOS name type being queried is the 0x20 (server) name type, otherwise it is ignored. .TP 0.2i \(bu wins : Query a name with -the IP address listed in the \fI wins server\fR parameter. If no WINS server has +the IP address listed in the \fI wins server\fR parameter. If no WINS server has been specified this method will be ignored. .TP 0.2i \(bu @@ -4349,17 +4511,16 @@ parameter. This is the least reliable of the name resolution methods as it depends on the target host being on a locally connected subnet. .RE -.PP + Default: \fBname resolve order = lmhosts host wins bcast -\fR.PP -.PP +\fR + Example: \fBname resolve order = lmhosts bcast host -\fR.PP -.PP +\fR + This will cause the local lmhosts file to be examined first, followed by a broadcast attempt, followed by a normal system hostname lookup. -.PP .TP \fBnetbios aliases (G)\fR This is a list of NetBIOS names that nmbd(8)will advertise as additional @@ -4415,7 +4576,7 @@ being on a different server to the logon server and as long as a Samba daemon is running on the home directory server, it will be mounted on the Samba client directly from the directory server. When Samba is returning the home share to the client, it -will consult the NIS map specified in \fIhomedir map\fR and return the server +will consult the NIS map specified in \fIhomedir map\fR and return the server listed there. Note that for this option to work there must be a working @@ -4427,8 +4588,8 @@ Default: \fBnis homedir = no\fR \fBnon unix account range (G)\fR The non unix account range parameter specifies the range of 'user ids' that are allocated by the various 'non unix -account' passdb backends. These backends allow -the storage of passwords for users who don't exist in /etc/passwd. +account' passdb backends. These backends allow +the storage of passwords for users who don't exist in /etc/passwd. This is most often used for machine account creation. This range of ids should have no existing local or NIS users within it as strange conflicts can occur otherwise. @@ -4439,6 +4600,7 @@ RID mapping does not conflict with normal users. Default: \fBnon unix account range = \fR + Example: \fBnon unix account range = 10000-20000\fR .TP \fBnt acl support (S)\fR @@ -4482,11 +4644,11 @@ Default: \fBnull passwords = no\fR \fBobey pam restrictions (G)\fR When Samba 2.2 is configured to enable PAM support (i.e. --with-pam), this parameter will control whether or not Samba -should obey PAM's account and session management directives. The +should obey PAM's account and session management directives. The default behavior is to use PAM for clear text authentication only -and to ignore any account or session management. Note that Samba +and to ignore any account or session management. Note that Samba always ignores PAM for authentication in the case of \fIencrypt passwords = yes\fR -\&. The reason is that PAM modules cannot support the challenge/response +\&. The reason is that PAM modules cannot support the challenge/response authentication mechanism needed in the presence of SMB password encryption. Default: \fBobey pam restrictions = no\fR @@ -4495,7 +4657,7 @@ Default: \fBobey pam restrictions = no\fR This is a boolean option that controls whether connections with usernames not in the \fIuser\fR list will be allowed. By default this option is disabled so that a -client can supply a username to be used by the server. Enabling +client can supply a username to be used by the server. Enabling this parameter will force the server to only user the login names from the \fIuser\fR list and is only really useful in shave level @@ -4514,7 +4676,7 @@ parameter. Default: \fBonly user = no\fR .TP \fBonly guest (S)\fR -A synonym for \fI guest only\fR. +A synonym for \fI guest only\fR. .TP \fBoplock break wait time (G)\fR This is a tuning parameter added due to bugs in @@ -4554,34 +4716,43 @@ share. The oplock code can dramatically (approx. 30% or more) improve the speed of access to files on Samba servers. It allows the clients to aggressively cache files locally and you may want to disable this option for unreliable network environments (it is turned on by -default in Windows NT Servers). For more information see the file +default in Windows NT Servers). For more information see the file \fISpeed.txt\fR in the Samba \fIdocs/\fR directory. Oplocks may be selectively turned off on certain files with a -share. See the \fI veto oplock files\fR parameter. On some systems +share. See the \fI veto oplock files\fR parameter. On some systems oplocks are recognized by the underlying operating system. This allows data synchronization between all access to oplocked files, whether it be via Samba or NFS or a local UNIX process. See the \fIkernel oplocks\fR parameter for details. See also the \fIkernel -oplocks\fR and \fI level2 oplocks\fR parameters. +oplocks\fR and \fI level2 oplocks\fR parameters. Default: \fBoplocks = yes\fR .TP +\fBntlm auth (G)\fR +This parameter determines whether or not smbdwill +attempt to authenticate users using the NTLM password hash. +If disabled, only the lanman password hashes will be used. + +Please note that at least this option or \fBlanman auth\fR should be enabled in order to be able to log in. + +Default : \fBntlm auth = yes\fR +.TP \fBos level (G)\fR This integer value controls what level Samba advertises itself as for browse elections. The value of this parameter determines whether nmbd(8) -has a chance of becoming a local master browser for the \fI WORKGROUP\fR in the local broadcast area. +has a chance of becoming a local master browser for the \fI WORKGROUP\fR in the local broadcast area. \fBNote :\fRBy default, Samba will win a local master browsing election over all Microsoft operating -systems except a Windows NT 4.0/2000 Domain Controller. This +systems except a Windows NT 4.0/2000 Domain Controller. This means that a misconfigured Samba host can effectively isolate -a subnet for browsing purposes. See \fIBROWSING.txt -\fRin the Samba \fIdocs/\fR directory +a subnet for browsing purposes. See \fIBROWSING.txt +\fR in the Samba \fIdocs/\fR directory for details. Default: \fBos level = 20\fR @@ -4591,7 +4762,7 @@ Example: \fBos level = 65 \fR \fBos2 driver map (G)\fR The parameter is used to define the absolute path to a file containing a mapping of Windows NT printer driver -names to OS/2 printer driver names. The format is: +names to OS/2 printer driver names. The format is: = . @@ -4602,16 +4773,17 @@ LaserJet 5L\fR. The need for the file is due to the printer driver namespace problem described in the Samba -Printing HOWTO. For more details on OS/2 clients, please +Printing HOWTO. For more details on OS/2 clients, please refer to the OS2-Client-HOWTO containing in the Samba documentation. Default: \fBos2 driver map = -\fR.TP +\fR +.TP \fBpam password change (G)\fR With the addition of better PAM support in Samba 2.2, this parameter, it is possible to use PAM's password change control -flag for Samba. If enabled, then PAM will be used for password +flag for Samba. If enabled, then PAM will be used for password changes when requested by an SMB client instead of the program listed in \fIpasswd program\fR. It should be possible to enable this without changing your @@ -4622,7 +4794,7 @@ Default: \fBpam password change = no\fR .TP \fBpanic action (G)\fR This is a Samba developer option that allows a -system command to be called when either smbd(8) +system command to be called when either smbd(8) crashes. This is usually used to draw attention to the fact that a problem occurred. @@ -4630,6 +4802,14 @@ Default: \fBpanic action = \fR Example: \fBpanic action = "/bin/sleep 90000"\fR .TP +\fBparanoid server security (G)\fR +Some version of NT 4.x allow non-guest +users with a bad passowrd. When this option is enabled, samba will not +use a broken NT 4.x server as password server, but instead complain +to the logs and exit. + +Default: \fBparanoid server security = no\fR +.TP \fBpassdb backend (G)\fR This option allows the administrator to chose which backends to retrieve and store passwords with. This allows (for example) both smbpasswd and tdbsam to be used without a recompile. @@ -4637,8 +4817,8 @@ Multiple backends can be specified, seperated by spaces. The backends will be se Experimental backends must still be selected (eg --with-tdbsam) at configure time. -This paramater is in two parts, the backend's name, and a 'location' -string that has meaning only to that particular backed. These are separated +This parameter is in two parts, the backend's name, and a 'location' +string that has meaning only to that particular backed. These are separated by a : character. Available backends can include: @@ -4646,38 +4826,38 @@ Available backends can include: .TP 0.2i \(bu \fBsmbpasswd\fR - The default smbpasswd -backend. Takes a path to the smbpasswd file as an optional argument. +backend. Takes a path to the smbpasswd file as an optional argument. .TP 0.2i \(bu \fBsmbpasswd_nua\fR - The smbpasswd -backend, but with support for 'not unix accounts'. +backend, but with support for 'not unix accounts'. Takes a path to the smbpasswd file as an optional argument. -See also \fInon unix account range\fR +See also \fInon unix account range\fR .TP 0.2i \(bu \fBtdbsam\fR - The TDB based password storage -backend. Takes a path to the TDB as an optional argument (defaults to passdb.tdb -in the \fIprivate dir\fR directory. +backend. Takes a path to the TDB as an optional argument (defaults to passdb.tdb +in the \fIprivate dir\fR directory. .TP 0.2i \(bu \fBtdbsam_nua\fR - The TDB based password storage -backend, with non unix account support. Takes a path to the TDB as an optional argument (defaults to passdb.tdb -in the \fIprivate dir\fR directory. +backend, with non unix account support. Takes a path to the TDB as an optional argument (defaults to passdb.tdb +in the \fIprivate dir\fR directory. -See also \fInon unix account range\fR +See also \fInon unix account range\fR .TP 0.2i \(bu \fBldapsam\fR - The LDAP based passdb -backend. Takes an LDAP URL as an optional argument (defaults to +backend. Takes an LDAP URL as an optional argument (defaults to \fBldap://localhost\fR) .TP 0.2i \(bu \fBldapsam_nua\fR - The LDAP based passdb -backend, with non unix account support. Takes an LDAP URL as an optional argument (defaults to +backend, with non unix account support. Takes an LDAP URL as an optional argument (defaults to \fBldap://localhost\fR) -See also \fInon unix account range\fR +See also \fInon unix account range\fR .TP 0.2i \(bu \fBplugin\fR - Allows Samba to load an @@ -4699,7 +4879,6 @@ This backend should always be the last backend listed, since it contains all use the unix passdb and might 'override' mappings if specified earlier. It's meant to only return accounts for users that aren't covered by the previous backends. .RE -.PP Default: \fBpassdb backend = smbpasswd unixsam\fR @@ -4713,7 +4892,7 @@ Example: \fBpassdb backend = plugin:/usr/local/samba/lib/my_passdb.so:my_plugin_ This string controls the \fB"chat"\fR conversation that takes places between smbdand the local password changing program to change the user's password. The string describes a -sequence of response-receive pairs that smbd(8)uses to determine what to send to the +sequence of response-receive pairs that smbd(8)uses to determine what to send to the \fIpasswd program\fR and what to expect back. If the expected output is not received then the password is not changed. @@ -4732,15 +4911,15 @@ this means that the passwd program must be executed on the NIS master. The string can contain the macro \fI%n\fR which is substituted -for the new password. The chat sequence can also contain the standard -macros \\n, \\r, \\t and \\s to give line-feed, -carriage-return, tab and space. The chat sequence string can also contain +for the new password. The chat sequence can also contain the standard +macros \\n, \\r, \\t and \\s to give line-feed, +carriage-return, tab and space. The chat sequence string can also contain a '*' which matches any sequence of characters. Double quotes can be used to collect strings with spaces in them into a single string. If the send string in any part of the chat sequence -is a full stop ".", then no string is sent. Similarly, +is a full stop ".", then no string is sent. Similarly, if the expect string is a full stop then no string is expected. If the \fIpam @@ -4749,7 +4928,7 @@ may be matched in any order, and success is determined by the PAM result, not any particular output. The \\n macro is ignored for PAM conversions. See also \fIunix password -sync\fR, \fI passwd program\fR , \fIpasswd chat debug\fR and \fIpam password change\fR. +sync\fR, \fI passwd program\fR , \fIpasswd chat debug\fR and \fIpam password change\fR. Default: \fBpasswd chat = *new*password* %n\\n *new*password* %n\\n *changed*\fR @@ -4781,12 +4960,12 @@ Default: \fBpasswd chat debug = no\fR .TP \fBpasswd program (G)\fR The name of a program that can be used to set -UNIX user passwords. Any occurrences of \fI%u\fR +UNIX user passwords. Any occurrences of \fI%u\fR will be replaced with the user name. The user name is checked for existence before calling the password changing program. Also note that many passwd programs insist in \fBreasonable -\fRpasswords, such as a minimum length, or the inclusion +\fR passwords, such as a minimum length, or the inclusion of mixed case chars and digits. This can pose a problem as some clients (such as Windows for Workgroups) uppercase the password before sending it. @@ -4814,18 +4993,18 @@ Example: \fBpasswd program = /sbin/npasswd %u\fR .TP \fBpassword level (G)\fR Some client/server combinations have difficulty -with mixed-case passwords. One offending client is Windows for +with mixed-case passwords. One offending client is Windows for Workgroups, which for some reason forces passwords to upper case when using the LANMAN1 protocol, but leaves them alone when -using COREPLUS! Another problem child is the Windows 95/98 -family of operating systems. These clients upper case clear +using COREPLUS! Another problem child is the Windows 95/98 +family of operating systems. These clients upper case clear text passwords even when NT LM 0.12 selected by the protocol negotiation request/response. This parameter defines the maximum number of characters that may be upper case in passwords. -For example, say the password given was "FRED". If \fI password level\fR is set to 1, the following combinations +For example, say the password given was "FRED". If \fI password level\fR is set to 1, the following combinations would be tried if "FRED" failed: "Fred", "fred", "fRed", "frEd","freD" @@ -4853,13 +5032,13 @@ Example: \fBpassword level = 4\fR \fBpassword server (G)\fR By specifying the name of another SMB server (such as a WinNT box) with this option, and using \fBsecurity = domain -\fRor \fBsecurity = server\fR you can get Samba +\fR or \fBsecurity = server\fR you can get Samba to do all its username/password validation via a remote server. This option sets the name of the password server to use. It must be a NetBIOS name, so if the machine's NetBIOS name is different from its Internet name then you may have to add its NetBIOS -name to the lmhosts file which is stored in the same directory +name to the lmhosts file which is stored in the same directory as the \fIsmb.conf\fR file. The name of the password server is looked up using the @@ -4891,9 +5070,9 @@ domain, then the list of machines in this option must be a list of Primary or Backup Domain controllers for the Domain or the character '*', as the Samba server is effectively in that domain, and will use cryptographically authenticated RPC calls -to authenticate the user logging on. The advantage of using \fB security = domain\fR is that if you list several hosts in the +to authenticate the user logging on. The advantage of using \fB security = domain\fR is that if you list several hosts in the \fIpassword server\fR option then \fBsmbd -\fRwill try each in turn till it finds one that responds. This +\fR will try each in turn till it finds one that responds. This is useful in case your primary server goes down. If the \fIpassword server\fR option is set @@ -4914,29 +5093,26 @@ You may list several password servers in the \fIpassword server\fR parameter, however if an \fBsmbd\fR makes a connection to a password server, and then the password server fails, no more users will be able -to be authenticated from this \fBsmbd\fR. This is a +to be authenticated from this \fBsmbd\fR. This is a restriction of the SMB/CIFS protocol when in \fBsecurity = server -\fRmode and cannot be fixed in Samba. +\fR mode and cannot be fixed in Samba. .TP 0.2i \(bu If you are using a Windows NT server as your password server then you will have to ensure that your users -are able to login from the Samba server, as when in \fB security = server\fR mode the network logon will appear to +are able to login from the Samba server, as when in \fB security = server\fR mode the network logon will appear to come from there rather than from the users workstation. .RE -.PP + See also the \fIsecurity -\fRparameter. -.PP -.PP +\fR parameter. + Default: \fBpassword server = \fR -.PP -.PP + Example: \fBpassword server = NT-PDC, NT-BDC1, NT-BDC2 -\fR.PP -.PP +\fR + Example: \fBpassword server = *\fR -.PP .TP \fBpath (S)\fR This parameter specifies a directory to which @@ -4957,7 +5133,7 @@ will be replaced by the NetBIOS name of the machine they are connecting from. These replacements are very useful for setting up pseudo home directories for users. -Note that this path will be based on \fIroot dir\fR if one was specified. +Note that this path will be based on \fIroot dir\fR if one was specified. Default: \fBnone\fR @@ -4965,7 +5141,7 @@ Example: \fBpath = /home/fred\fR .TP \fBpid directory (G)\fR This option specifies the directory where pid -files will be placed. +files will be placed. Default: \fBpid directory = ${prefix}/var/locks\fR @@ -4975,9 +5151,9 @@ Example: \fBpid directory = /var/run/\fR The \fBsmbd(8)\fR daemon maintains an database of file locks obtained by SMB clients. The default behavior is to map this internal database to POSIX -locks. This means that file locks obtained by SMB clients are +locks. This means that file locks obtained by SMB clients are consistent with those seen by POSIX compliant applications accessing -the files via a non-SMB method (e.g. NFS or local file access). +the files via a non-SMB method (e.g. NFS or local file access). You should never need to disable this parameter. Default: \fBposix locking = yes\fR @@ -5026,8 +5202,8 @@ is an example: Of course, this could get annoying after a while :-) See also \fIpreexec close -\fRand \fIpostexec -\fR\&. +\fR and \fIpostexec +\fR. Default: \fBnone (no command executed)\fR @@ -5037,7 +5213,7 @@ Example: \fBpreexec = echo \\"%u connected to %S from %m \fBpreexec close (S)\fR This boolean option controls whether a non-zero return code from \fIpreexec -\fRshould close the service being connected to. +\fR should close the service being connected to. Default: \fBpreexec close = no\fR .TP @@ -5047,13 +5223,13 @@ for its workgroup. If this is set to true, on startup, \fBnmbd\fR will force an election, and it will have a slight advantage in -winning the election. It is recommended that this parameter is -used in conjunction with \fB\fI domain master\fB = yes\fR, so that \fB nmbd\fR can guarantee becoming a domain master. +winning the election. It is recommended that this parameter is +used in conjunction with \fB\fI domain master\fB = yes\fR, so that \fB nmbd\fR can guarantee becoming a domain master. Use this option with caution, because if there are several hosts (whether Samba servers, Windows 95 or NT) that are preferred master browsers on the same subnet, they will each periodically -and continuously attempt to become the local master browser. +and continuously attempt to become the local master browser. This will result in unnecessary broadcast traffic and reduced browsing capabilities. @@ -5063,7 +5239,7 @@ See also \fIos level\fR Default: \fBpreferred master = auto\fR .TP \fBprefered master (G)\fR -Synonym for \fI preferred master\fR for people who cannot spell :-). +Synonym for \fI preferred master\fR for people who cannot spell :-). .TP \fBpreload\fR This is a list of services that you want to be @@ -5072,7 +5248,7 @@ for homes and printers services that would otherwise not be visible. Note that if you just want all printers in your -printcap file loaded then the \fIload printers\fR option is easier. +printcap file loaded then the \fIload printers\fR option is easier. Default: \fBno preloaded services\fR @@ -5082,7 +5258,7 @@ Example: \fBpreload = fred lp colorlp\fR This controls if new filenames are created with the case that the client passes, or if they are forced to be the \fIdefault case -\fR\&. +\fR. Default: \fBpreserve case = yes\fR @@ -5119,9 +5295,9 @@ print job (in bytes) The print command \fBMUST\fR contain at least one occurrence of \fI%s\fR or \fI%f -\fR- the \fI%p\fR is optional. At the time +\fR - the \fI%p\fR is optional. At the time a job is submitted, if no printer name is supplied the \fI%p -\fRwill be silently removed from the printer command. +\fR will be silently removed from the printer command. If specified in the [global] section, the print command given will be used for any printable service that does not have its own @@ -5146,7 +5322,7 @@ will log a print job, print the file, then remove it. Note that You may have to vary this command considerably depending on how you normally print files on your system. The default for -the parameter varies depending on the setting of the \fIprinting\fR parameter. +the parameter varies depending on the setting of the \fIprinting\fR parameter. Default: For \fBprinting = BSD, AIX, QNX, LPRNG or PLP :\fR @@ -5161,12 +5337,12 @@ For \fBprinting = SOFTQ :\fR \fBprint command = lp -d%p -s %s; rm %s\fR -For printing = CUPS : If SAMBA is compiled against +For printing = CUPS : If SAMBA is compiled against libcups, then printcap = cups uses the CUPS API to -submit jobs, etc. Otherwise it maps to the System V +submit jobs, etc. Otherwise it maps to the System V commands with the -oraw option for printing, i.e. it -uses \fBlp -c -d%p -oraw; rm %s\fR. +uses \fBlp -c -d%p -oraw; rm %s\fR. With \fBprinting = cups\fR, and if SAMBA is compiled against libcups, any manually set print command will be ignored. @@ -5175,7 +5351,7 @@ Example: \fBprint command = /usr/local/samba/bin/myprintscript %p %s\fR .TP \fBprint ok (S)\fR -Synonym for \fIprintable\fR. +Synonym for \fIprintable\fR. .TP \fBprintable (S)\fR If this parameter is yes, then @@ -5185,37 +5361,37 @@ specified for the service. Note that a printable service will ALWAYS allow writing to the service path (user privileges permitting) via the spooling of print data. The \fIwriteable -\fRparameter controls only non-printing access to +\fR parameter controls only non-printing access to the resource. Default: \fBprintable = no\fR .TP \fBprintcap (G)\fR -Synonym for \fI printcap name\fR. +Synonym for \fI printcap name\fR. .TP \fBprintcap name (G)\fR This parameter may be used to override the -compiled-in default printcap name used by the server (usually \fI /etc/printcap\fR). See the discussion of the [printers] section above for reasons +compiled-in default printcap name used by the server (usually \fI /etc/printcap\fR). See the discussion of the [printers] section above for reasons why you might want to do this. To use the CUPS printing interface set \fBprintcap name = cups -\fR\&. This should be supplemented by an addtional setting +\fR. This should be supplemented by an addtional setting printing = cups in the [global] -section. \fBprintcap name = cups\fR will use the +section. \fBprintcap name = cups\fR will use the "dummy" printcap created by CUPS, as specified in your CUPS configuration file. On System V systems that use \fBlpstat\fR to list available printers you can use \fBprintcap name = lpstat -\fRto automatically obtain lists of available printers. This +\fR to automatically obtain lists of available printers. This is the default for systems that define SYSV at configure time in -Samba (this includes most System V based systems). If \fI printcap name\fR is set to \fBlpstat\fR on +Samba (this includes most System V based systems). If \fI printcap name\fR is set to \fBlpstat\fR on these systems then Samba will launch \fBlpstat -v\fR and attempt to parse the output to obtain a printer list. A minimal printcap file would look something like this: -.sp + .nf print1|My Printer 1 print2|My Printer 2 @@ -5223,7 +5399,6 @@ A minimal printcap file would look something like this: print4|My Printer 4 print5|My Printer 5 -.sp .fi where the '|' separates aliases of a printer. The fact @@ -5252,7 +5427,7 @@ Example: \fBprinter admin = admin, @staff\fR \fBprinter driver (S)\fR \fBNote :\fRThis is a deprecated parameter and will be removed in the next major release -following version 2.2. Please see the instructions in +following version 2.2. Please see the instructions in the Samba 2.2. Printing HOWTOfor more information on the new method of loading printer drivers onto a Samba server. @@ -5266,7 +5441,7 @@ system. You need to set this parameter to the exact string (case sensitive) that describes the appropriate printer driver for your system. If you don't know the exact string to use then you should -first try with no \fI printer driver\fR option set and the client will +first try with no \fI printer driver\fR option set and the client will give you a list of printer drivers. The appropriate strings are shown in a scroll box after you have chosen the printer manufacturer. @@ -5278,7 +5453,7 @@ Example: \fBprinter driver = HP LaserJet 4L\fR \fBprinter driver file (G)\fR \fBNote :\fRThis is a deprecated parameter and will be removed in the next major release -following version 2.2. Please see the instructions in +following version 2.2. Please see the instructions in the Samba 2.2. Printing HOWTOfor more information on the new method of loading printer drivers onto a Samba server. @@ -5291,12 +5466,12 @@ to be found. If this is not set, the default is : /lib/printers.def\fR This file is created from Windows 95 \fImsprint.inf -\fRfiles found on the Windows 95 client system. For more +\fR files found on the Windows 95 client system. For more details on setting up serving of printer drivers to Windows 95 clients, see the outdated documentation file in the \fIdocs/\fR directory, \fIPRINTER_DRIVER.txt\fR. -See also \fI printer driver location\fR. +See also \fI printer driver location\fR. Default: \fBNone (set in compile).\fR @@ -5306,7 +5481,7 @@ Example: \fBprinter driver file = \fBprinter driver location (S)\fR \fBNote :\fRThis is a deprecated parameter and will be removed in the next major release -following version 2.2. Please see the instructions in +following version 2.2. Please see the instructions in the Samba 2.2. Printing HOWTOfor more information on the new method of loading printer drivers onto a Samba server. @@ -5321,14 +5496,15 @@ to serve printer drivers to Windows 95 machines, this should be set to Where MACHINE is the NetBIOS name of your Samba server, and PRINTER$ is a share you set up for serving printer driver files. For more details on setting this up see the outdated documentation -file in the \fIdocs/\fR directory, \fI PRINTER_DRIVER.txt\fR. +file in the \fIdocs/\fR directory, \fI PRINTER_DRIVER.txt\fR. -See also \fI printer driver file\fR. +See also \fI printer driver file\fR. Default: \fBnone\fR Example: \fBprinter driver location = \\\\MACHINE\\PRINTER$ -\fR.TP +\fR +.TP \fBprinter name (S)\fR This parameter specifies the name of the printer to which print jobs spooled through a printable service will be sent. @@ -5343,7 +5519,7 @@ on many systems)\fR Example: \fBprinter name = laserwriter\fR .TP \fBprinter (S)\fR -Synonym for \fI printer name\fR. +Synonym for \fI printer name\fR. .TP \fBprinting (S)\fR This parameters controls how printer status @@ -5366,7 +5542,7 @@ commands when using the various options use the testparm(1)program. This option can be set on a per printer basis -See also the discussion in the [printers] section. +See also the discussion in the [printers] section. .TP \fBprivate dir (G)\fR This parameters defines the directory @@ -5376,7 +5552,7 @@ and \fIsecrets.tdb\fR. Default :\fBprivate dir = ${prefix}/private\fR .TP \fBprotocol (G)\fR -Synonym for \fImax protocol\fR. +Synonym for \fImax protocol\fR. .TP \fBpublic (S)\fR Synonym for \fIguest @@ -5403,13 +5579,14 @@ server. Default: \fBdepends on the setting of \fIprinting \fB\fR + Example: \fBqueuepause command = disable %p\fR .TP \fBqueueresume command (S)\fR This parameter specifies the command to be executed on the server host in order to resume the printer queue. It is the command to undo the behavior that is caused by the -previous parameter (\fI queuepause command\fR). +previous parameter (\fI queuepause command\fR). This command should be a program or script which takes a printer name as its only parameter and resumes the printer queue, @@ -5430,7 +5607,8 @@ server. Default: \fBdepends on the setting of \fIprinting\fB\fR Example: \fBqueuepause command = enable %p -\fR.TP +\fR +.TP \fBread bmpx (G)\fR This boolean parameter controls whether smbd(8)will support the "Read Block Multiplex" SMB. This is now rarely used and defaults to @@ -5444,9 +5622,9 @@ This is a list of users that are given read-only access to a service. If the connecting user is in this list then they will not be given write access, no matter what the \fIwriteable\fR option is set to. The list can include group names using the -syntax described in the \fI invalid users\fR parameter. +syntax described in the \fI invalid users\fR parameter. -See also the \fI write list\fR parameter and the \fIinvalid users\fR +See also the \fI write list\fR parameter and the \fIinvalid users\fR parameter. Default: \fBread list = \fR @@ -5469,7 +5647,7 @@ block size incorrectly or are incapable of supporting larger block sizes, and for these clients you may need to disable raw reads. In general this parameter should be viewed as a system tuning -tool and left severely alone. See also \fIwrite raw\fR. +tool and left severely alone. See also \fIwrite raw\fR. Default: \fBread raw = yes\fR .TP @@ -5497,6 +5675,15 @@ Default: \fBread size = 16384\fR Example: \fBread size = 8192\fR .TP +\fBrealm (G)\fR +This option specifies the kerberos realm to use. The realm is +used as the ADS equivalent of the NT4\fBdomain\fR. It +is usually set to the DNS name of the kerberos server. + +Default: \fBrealm = \fR + +Example: \fBrealm = mysambabox.mycompany.com\fR +.TP \fBremote announce (G)\fR This option allows you to setup nmbd(8)to periodically announce itself to arbitrary IP addresses with an arbitrary workgroup name. @@ -5525,7 +5712,8 @@ See the documentation file \fIBROWSING.txt\fR in the \fIdocs/\fR directory. Default: \fBremote announce = -\fR.TP +\fR +.TP \fBremote browse sync (G)\fR This option allows you to setup nmbd(8)to periodically request synchronization of browse lists with the master browser of a Samba @@ -5542,6 +5730,7 @@ For example: \fBremote browse sync = 192.168.2.255 192.168.4.255 \fR + the above line would cause \fBnmbd\fR to request the master browser on the specified subnets or addresses to synchronize their browse lists with the local server. @@ -5554,38 +5743,39 @@ that the remote machine is available, is listening, nor that it is in fact the browse master on its segment. Default: \fBremote browse sync = -\fR.TP +\fR +.TP \fBrestrict anonymous (G)\fR -This is a boolean parameter. If it is true, then +This is a boolean parameter. If it is true, then anonymous access to the server will be restricted, namely in the case where the server is expecting the client to send a username, -but it doesn't. Setting it to true will force these anonymous +but it doesn't. Setting it to true will force these anonymous connections to be denied, and the client will be required to always supply a username and password when connecting. Use of this parameter is only recommended for homogeneous NT client environments. This parameter makes the use of macro expansions that rely -on the username (%U, %G, etc) consistent. NT 4.0 +on the username (%U, %G, etc) consistent. NT 4.0 likes to use anonymous connections when refreshing the share list, and this is a way to work around that. When restrict anonymous is true, all anonymous connections -are denied no matter what they are for. This can effect the ability +are denied no matter what they are for. This can effect the ability of a machine to access the Samba Primary Domain Controller to revalidate its machine account after someone else has logged on the client -interactively. The NT client will display a message saying that -the machine's account in the domain doesn't exist or the password is -bad. The best way to deal with this is to reboot NT client machines -between interactive logons, using "Shutdown and Restart", rather +interactively. The NT client will display a message saying that +the machine's account in the domain doesn't exist or the password is +bad. The best way to deal with this is to reboot NT client machines +between interactive logons, using "Shutdown and Restart", rather than "Close all programs and logon as a different user". Default: \fBrestrict anonymous = no\fR .TP \fBroot (G)\fR -Synonym for \fIroot directory"\fR. +Synonym for \fIroot directory"\fR. .TP \fBroot dir (G)\fR -Synonym for \fIroot directory"\fR. +Synonym for \fIroot directory"\fR. .TP \fBroot directory (G)\fR The server will \fBchroot()\fR (i.e. @@ -5620,31 +5810,33 @@ parameter except that the command is run as root. This is useful for unmounting filesystems (such as CDROMs) after a connection is closed. -See also \fI postexec\fR. +See also \fI postexec\fR. Default: \fBroot postexec = -\fR.TP +\fR +.TP \fBroot preexec (S)\fR This is the same as the \fIpreexec\fR parameter except that the command is run as root. This is useful for mounting filesystems (such as CDROMs) when a connection is opened. -See also \fI preexec\fR and \fIpreexec close\fR. +See also \fI preexec\fR and \fIpreexec close\fR. Default: \fBroot preexec = -\fR.TP +\fR +.TP \fBroot preexec close (S)\fR This is the same as the \fIpreexec close -\fRparameter except that the command is run as root. +\fR parameter except that the command is run as root. -See also \fI preexec\fR and \fIpreexec close\fR. +See also \fI preexec\fR and \fIpreexec close\fR. Default: \fBroot preexec close = no\fR .TP \fBsecurity (G)\fR This option affects how clients respond to -Samba and is one of the most important settings in the \fI smb.conf\fR file. +Samba and is one of the most important settings in the \fI smb.conf\fR file. The option sets the "security mode bit" in replies to protocol negotiations with smbd(8) @@ -5658,7 +5850,7 @@ Windows NT. The alternatives are \fBsecurity = share\fR, \fBsecurity = server\fR or \fBsecurity = domain -\fR\&. +\fR. In versions of Samba prior to 2.0.0, the default was \fBsecurity = share\fR mainly because that was @@ -5684,19 +5876,20 @@ to setup guest shares with \fBsecurity = user\fR, see the \fImap to guest\fR parameter for details. -It is possible to use \fBsmbd\fR in a \fB hybrid mode\fR where it is offers both user and share -level security under different \fINetBIOS aliases\fR. +It is possible to use \fBsmbd\fR in a \fB hybrid mode\fR where it is offers both user and share +level security under different \fINetBIOS aliases\fR. The different settings will now be explained. \fBSECURITY = SHARE \fR + When clients connect to a share level security server they need not log onto the server with a valid username and password before attempting to connect to a shared resource (although modern clients such as Windows 95/98 and Windows NT will send a logon request with a username but no password when talking to a \fBsecurity = share -\fRserver). Instead, the clients send authentication information +\fR server). Instead, the clients send authentication information (passwords) on a per-share basis, at the time they attempt to connect to that share. @@ -5716,7 +5909,7 @@ client password is constructed using the following methods : \(bu If the \fIguest only\fR parameter is set, then all the other -stages are missed and only the \fIguest account\fR username is checked. +stages are missed and only the \fIguest account\fR username is checked. .TP 0.2i \(bu Is a username is sent with the share connection @@ -5725,7 +5918,7 @@ is added as a potential username. .TP 0.2i \(bu If the client did a previous \fBlogon -\fRrequest (the SessionSetup SMB call) then the +\fR request (the SessionSetup SMB call) then the username sent in this SMB will be added as a potential username. .TP 0.2i \(bu @@ -5737,41 +5930,36 @@ The NetBIOS name of the client is added to the list as a potential username. .TP 0.2i \(bu -Any users on the \fI user\fR list are added as potential usernames. +Any users on the \fI user\fR list are added as potential usernames. .RE -.PP + If the \fIguest only\fR parameter is not set, then this list is then tried with the supplied password. The first user for whom the password matches will be used as the UNIX user. -.PP -.PP + If the \fIguest only\fR parameter is set, or no username can be determined then if the share is marked as available to the \fIguest account\fR, then this guest user will be used, otherwise access is denied. -.PP -.PP + Note that it can be \fBvery\fR confusing in share-level security as to which UNIX username will eventually be used in granting access. -.PP -.PP -See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. -.PP -.PP + +See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. + \fBSECURITY = USER -\fR.PP -.PP +\fR + This is the default security setting in Samba 2.2. With user-level security a client must first "log-on" with a valid username and password (which can be mapped using the \fIusername map\fR -parameter). Encrypted passwords (see the \fIencrypted passwords\fR parameter) can also -be used in this security mode. Parameters such as \fIuser\fR and \fIguest only\fR if set are then applied and +parameter). Encrypted passwords (see the \fIencrypted passwords\fR parameter) can also +be used in this security mode. Parameters such as \fIuser\fR and \fIguest only\fR if set are then applied and may change the UNIX user to use on this connection, but only after the user has been successfully authenticated. -.PP -.PP + \fBNote\fR that the name of the resource being requested is \fBnot\fR sent to the server until after the server has successfully authenticated the client. This is why @@ -5779,14 +5967,12 @@ guest shares don't work in user level security without allowing the server to automatically map unknown users into the \fIguest account\fR. See the \fImap to guest\fR parameter for details on doing this. -.PP -.PP -See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. -.PP -.PP + +See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. + \fBSECURITY = SERVER -\fR.PP -.PP +\fR + In this mode Samba will try to validate the username/password by passing it to another SMB server, such as an NT box. If this fails it will revert to \fBsecurity = user\fR, but note @@ -5796,14 +5982,12 @@ revert back to checking the UNIX password file, it must have a valid documentation file in the \fIdocs/\fR directory \fIENCRYPTION.txt\fR for details on how to set this up. -.PP -.PP + \fBNote\fR that from the client's point of -view \fBsecurity = server\fR is the same as \fB security = user\fR. It only affects how the server deals +view \fBsecurity = server\fR is the same as \fB security = user\fR. It only affects how the server deals with the authentication, it does not in any way affect what the client sees. -.PP -.PP + \fBNote\fR that the name of the resource being requested is \fBnot\fR sent to the server until after the server has successfully authenticated the client. This is why @@ -5811,38 +5995,32 @@ guest shares don't work in user level security without allowing the server to automatically map unknown users into the \fIguest account\fR. See the \fImap to guest\fR parameter for details on doing this. -.PP -.PP -See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. -.PP -.PP + +See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. + See also the \fIpassword server\fR parameter and the \fIencrypted passwords\fR parameter. -.PP -.PP + \fBSECURITY = DOMAIN -\fR.PP -.PP +\fR + This mode will only work correctly if smbpasswd(8)has been used to add this machine into a Windows NT Domain. It expects the \fIencrypted passwords\fR parameter to be set to true. In this mode Samba will try to validate the username/password by passing it to a Windows NT Primary or Backup Domain Controller, in exactly the same way that a Windows NT Server would do. -.PP -.PP + \fBNote\fR that a valid UNIX user must still exist as well as the account on the Domain Controller to allow Samba to have a valid UNIX account to map file access to. -.PP -.PP + \fBNote\fR that from the client's point of view \fBsecurity = domain\fR is the same as \fBsecurity = user -\fR\&. It only affects how the server deals with the authentication, +\fR. It only affects how the server deals with the authentication, it does not in any way affect what the client sees. -.PP -.PP + \fBNote\fR that the name of the resource being requested is \fBnot\fR sent to the server until after the server has successfully authenticated the client. This is why @@ -5850,8 +6028,7 @@ guest shares don't work in user level security without allowing the server to automatically map unknown users into the \fIguest account\fR. See the \fImap to guest\fR parameter for details on doing this. -.PP -.PP + \fBBUG:\fR There is currently a bug in the implementation of \fBsecurity = domain\fR with respect to multi-byte character set usernames. The communication with a @@ -5859,21 +6036,16 @@ Domain Controller must be done in UNICODE and Samba currently does not widen multi-byte user names to UNICODE correctly, thus a multi-byte username will not be recognized correctly at the Domain Controller. This issue will be addressed in a future release. -.PP -.PP -See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. -.PP -.PP + +See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION. + See also the \fIpassword server\fR parameter and the \fIencrypted passwords\fR parameter. -.PP -.PP + Default: \fBsecurity = USER\fR -.PP -.PP + Example: \fBsecurity = DOMAIN\fR -.PP .TP \fBsecurity mask (S)\fR This parameter controls what UNIX permission @@ -5893,12 +6065,12 @@ a user to modify all the user/group/world permissions on a file. \fBNote\fR that users who can access the Samba server through other means can easily bypass this restriction, so it is primarily useful for standalone -"appliance" systems. Administrators of most normal systems will +"appliance" systems. Administrators of most normal systems will probably want to leave it set to 0777. -See also the \fIforce directory security mode\fR, +See also the \fIforce directory security mode\fR, \fIdirectory -security mask\fR, \fIforce security mode\fR parameters. +security mask\fR, \fIforce security mode\fR parameters. Default: \fBsecurity mask = 0777\fR @@ -5963,38 +6135,38 @@ This boolean parameter controls if new files which conform to 8.3 syntax, that is all in upper case and of suitable length, are created upper case, or if they are forced to be the \fIdefault case -\fR\&. This option can be use with \fBpreserve case = yes\fR +\fR. This option can be use with \fBpreserve case = yes\fR to permit long filenames to retain their case, while short names are lowered. -See the section on NAME MANGLING. +See the section on NAME MANGLING. Default: \fBshort preserve case = yes\fR .TP \fBshow add printer wizard (G)\fR With the introduction of MS-RPC based printing support for Windows NT/2000 client in Samba 2.2, a "Printers..." folder will -appear on Samba hosts in the share listing. Normally this folder will -contain an icon for the MS Add Printer Wizard (APW). However, it is +appear on Samba hosts in the share listing. Normally this folder will +contain an icon for the MS Add Printer Wizard (APW). However, it is possible to disable this feature regardless of the level of privilege of the connected user. Under normal circumstances, the Windows NT/2000 client will open a handle on the printer server with OpenPrinterEx() asking for -Administrator privileges. If the user does not have administrative +Administrator privileges. If the user does not have administrative access on the print server (i.e is not root or a member of the \fIprinter admin\fR group), the OpenPrinterEx() call fails and the client makes another open call with a request for -a lower privilege level. This should succeed, however the APW +a lower privilege level. This should succeed, however the APW icon will not be displayed. Disabling the \fIshow add printer wizard\fR parameter will always cause the OpenPrinterEx() on the server -to fail. Thus the APW icon will never be displayed. \fB Note :\fRThis does not prevent the same user from having +to fail. Thus the APW icon will never be displayed. \fB Note :\fRThis does not prevent the same user from having administrative privilege on an individual printer. See also \fIaddprinter -command\fR, \fIdeleteprinter command\fR, \fIprinter admin\fR +command\fR, \fIdeleteprinter command\fR, \fIprinter admin\fR Default :\fBshow add printer wizard = yes\fR .TP @@ -6029,7 +6201,7 @@ Default: \fBNone\fR. Example: \fBabort shutdown script = /usr/local/samba/sbin/shutdown %m %t %r %f\fR Shutdown script example: -.sp + .nf #!/bin/bash @@ -6039,7 +6211,6 @@ Shutdown script example: /sbin/shutdown $3 $4 +$time $1 & -.sp .fi Shutdown does not return so we need to launch it in background. @@ -6047,13 +6218,21 @@ See also \fIabort shutdown script\fR. .TP \fBsmb passwd file (G)\fR This option sets the path to the encrypted -smbpasswd file. By default the path to the smbpasswd file +smbpasswd file. By default the path to the smbpasswd file is compiled into Samba. Default: \fBsmb passwd file = ${prefix}/private/smbpasswd \fR + Example: \fBsmb passwd file = /etc/samba/smbpasswd -\fR.TP +\fR +.TP +\fBsmb ports (G)\fR +Specifies which ports the server should listen on +for SMB traffic. + +Default: \fBsmb ports = 445 139\fR +.TP \fBsocket address (G)\fR This option allows you to control what address Samba will listen for connections on. This is used to @@ -6083,9 +6262,9 @@ will help). You may find that on some systems Samba will say "Unknown socket option" when you supply an option. This means you -either incorrectly typed it or you need to add an include file -to includes.h for your OS. If the latter is the case please -send the patch to samba@samba.org . +either incorrectly typed it or you need to add an include file +to includes.h for your OS. If the latter is the case please +send the patch to samba@samba.org. Any of the supported socket options may be combined in any way you like, as long as your OS allows it. @@ -6124,44 +6303,34 @@ SO_SNDLOWAT * \(bu SO_RCVLOWAT * .RE -.PP + Those marked with a \fB'*'\fR take an integer argument. The others can optionally take a 1 or 0 argument to enable or disable the option, by default they will be enabled if you don't specify 1 or 0. -.PP -.PP + To specify an argument use the syntax SOME_OPTION = VALUE for example \fBSO_SNDBUF = 8192\fR. Note that you must not have any spaces before or after the = sign. -.PP -.PP + If you are on a local network then a sensible option might be -.PP -.PP + \fBsocket options = IPTOS_LOWDELAY\fR -.PP -.PP + If you have a local network then you could try: -.PP -.PP + \fBsocket options = IPTOS_LOWDELAY TCP_NODELAY\fR -.PP -.PP + If you are on a wide area network then perhaps try setting IPTOS_THROUGHPUT. -.PP -.PP + Note that several of the options may cause your Samba server to fail completely. Use these options with caution! -.PP -.PP + Default: \fBsocket options = TCP_NODELAY\fR -.PP -.PP + Example: \fBsocket options = IPTOS_LOWDELAY\fR -.PP .TP \fBsource environment (G)\fR This parameter causes Samba to set environment @@ -6173,7 +6342,7 @@ will set the environment variables from the output of the pipe. The contents of the file or the output of the pipe should be formatted as the output of the standard Unix \fBenv(1) -\fRcommand. This is of the form : +\fR command. This is of the form : Example environment entry: @@ -6183,13 +6352,14 @@ Default: \fBNo default value\fR Examples: \fBsource environment = |/etc/smb.conf.sh \fR + Example: \fBsource environment = /usr/local/smb_env_vars\fR .TP \fBuse spnego (G)\fR -This variable controls controls whether samba will try to use Simple and Protected NEGOciation (as specified by rfc2478) with WindowsXP and Windows2000sp2 clients to agree upon an authentication mechanism. As of samba 3.0alpha it must be set to "no" for these clients to join a samba domain controller. It can be set to "yes" to allow samba to participate in an AD domain controlled by a Windows2000 domain controller. +This variable controls controls whether samba will try to use Simple and Protected NEGOciation (as specified by rfc2478) with WindowsXP and Windows2000sp2 clients to agree upon an authentication mechanism. As of samba 3.0alpha it must be set to "no" for these clients to join a samba domain controller. It can be set to "yes" to allow samba to participate in an AD domain controlled by a Windows2000 domain controller. -Default: \fBuse spnego = yes\fR +Default: \fBuse spnego = yes\fR .TP \fBstat cache (G)\fR This parameter determines if smbd(8)will use a cache in order to @@ -6200,7 +6370,7 @@ Default: \fBstat cache = yes\fR .TP \fBstat cache size (G)\fR This parameter determines the number of -entries in the \fIstat cache\fR. You should +entries in the \fIstat cache\fR. You should never need to change this parameter. Default: \fBstat cache size = 50\fR @@ -6284,7 +6454,7 @@ the write call returns. If this is false then the server will be guided by the client's request in each write call (clients can set a bit indicating that a particular write should be synchronous). If this is true then every write will be followed by a \fBfsync() -\fRcall to ensure the data is written to disk. Note that +\fR call to ensure the data is written to disk. Note that the \fIstrict sync\fR parameter must be set to yes in order for this parameter to have any affect. @@ -6300,10 +6470,10 @@ are logged onto the system syslog logging levels. Samba debug level zero maps onto syslog LOG_ERR, debug level one maps onto LOG_WARNING, debug level two maps onto LOG_NOTICE, debug level three -maps onto LOG_INFO. All higher levels are mapped to LOG_DEBUG. +maps onto LOG_INFO. All higher levels are mapped to LOG_DEBUG. This parameter sets the threshold for sending messages -to syslog. Only messages with debug level less than this value +to syslog. Only messages with debug level less than this value will be sent to syslog. Default: \fBsyslog = 1\fR @@ -6318,10 +6488,10 @@ Default: \fBsyslog only = no\fR \fBtemplate homedir (G)\fR When filling out the user information for a Windows NT user, the winbindd(8)daemon -uses this parameter to fill in the home directory for that user. +uses this parameter to fill in the home directory for that user. If the string \fI%D\fR is present it is substituted -with the user's Windows NT domain name. If the string \fI%U -\fRis present it is substituted with the user's Windows +with the user's Windows NT domain name. If the string \fI%U +\fR is present it is substituted with the user's Windows NT user name. Default: \fBtemplate homedir = /home/%D/%U\fR @@ -6344,30 +6514,43 @@ Default: \fBtime offset = 0\fR Example: \fBtime offset = 60\fR .TP \fBtime server (G)\fR -This parameter determines if +This parameter determines if nmbd(8)advertises itself as a time server to Windows clients. Default: \fBtime server = no\fR .TP \fBtimestamp logs (G)\fR -Synonym for \fI debug timestamp\fR. +Synonym for \fI debug timestamp\fR. .TP \fBtotal print jobs (G)\fR This parameter accepts an integer value which defines a limit on the maximum number of print jobs that will be accepted -system wide at any given time. If a print job is submitted +system wide at any given time. If a print job is submitted by a client which will exceed this number, then smbdwill return an -error indicating that no space is available on the server. The -default value of 0 means that no such limit exists. This parameter +error indicating that no space is available on the server. The +default value of 0 means that no such limit exists. This parameter can be used to prevent a server from exceeding its capacity and is -designed as a printing throttle. See also +designed as a printing throttle. See also \fImax print jobs\fR. Default: \fBtotal print jobs = 0\fR Example: \fBtotal print jobs = 5000\fR .TP +\fBunicode (G)\fR +Specifies whether Samba should try +to use unicode on the wire by default. + +Default: \fBunicode = yes\fR +.TP +\fBunix charset (G)\fR +Specifies the charset the unix machine +Samba runs on uses. Samba needs to know this in order to be able to +convert text to the charsets other SMB clients use. + +Default: \fBunix charset = ASCII\fR +.TP \fBunix extensions(G)\fR This boolean parameter controls whether Samba implments the CIFS UNIX extensions, as defined by HP. @@ -6389,7 +6572,7 @@ old UNIX password (as the SMB password change code has no access to the old password cleartext, only the new). See also \fIpasswd -program\fR, \fI passwd chat\fR. +program\fR, \fI passwd chat\fR. Default: \fBunix password sync = no\fR .TP @@ -6421,29 +6604,29 @@ Default: \fBupdate encrypted = no\fR .TP \fBuse client driver (S)\fR This parameter applies only to Windows NT/2000 -clients. It has no affect on Windows 95/98/ME clients. When +clients. It has no affect on Windows 95/98/ME clients. When serving a printer to Windows NT/2000 clients without first installing a valid printer driver on the Samba host, the client will be required -to install a local printer driver. From this point on, the client +to install a local printer driver. From this point on, the client will treat the print as a local printer and not a network printer -connection. This is much the same behavior that will occur -when \fBdisable spoolss = yes\fR. +connection. This is much the same behavior that will occur +when \fBdisable spoolss = yes\fR. The differentiating factor is that under normal circumstances, the NT/2000 client will -attempt to open the network printer using MS-RPC. The problem is that +attempt to open the network printer using MS-RPC. The problem is that because the client considers the printer to be local, it will attempt to issue the OpenPrinterEx() call requesting access rights associated with the logged on user. If the user possesses local administator rights but not root privilegde on the Samba host (often the case), the OpenPrinterEx() -call will fail. The result is that the client will now display an "Access +call will fail. The result is that the client will now display an "Access Denied; Unable to connect" message in the printer queue window (even though -jobs may successfully be printed). +jobs may successfully be printed). If this parameter is enabled for a printer, then any attempt to open the printer with the PRINTER_ACCESS_ADMINISTER right is mapped -to PRINTER_ACCESS_USE instead. Thus allowing the OpenPrinterEx() -call to succeed. \fBThis parameter MUST not be able enabled +to PRINTER_ACCESS_USE instead. Thus allowing the OpenPrinterEx() +call to succeed. \fBThis parameter MUST not be able enabled on a print share which has valid print driver installed on the Samba server.\fR @@ -6469,18 +6652,18 @@ will be read to find the names of hosts and users who will be allowed access without specifying a password. \fBNOTE:\fR The use of \fIuse rhosts -\fRcan be a major security hole. This is because you are +\fR can be a major security hole. This is because you are trusting the PC to supply the correct username. It is very easy to -get a PC to supply a false username. I recommend that the \fI use rhosts\fR option be only used if you really know what +get a PC to supply a false username. I recommend that the \fI use rhosts\fR option be only used if you really know what you are doing. Default: \fBuse rhosts = no\fR .TP \fBuser (S)\fR -Synonym for \fI username\fR. +Synonym for \fI username\fR. .TP \fBusers (S)\fR -Synonym for \fI username\fR. +Synonym for \fI username\fR. .TP \fBusername (S)\fR Multiple users may be specified in a comma-delimited @@ -6511,7 +6694,7 @@ so they cannot do anything that user cannot do. To restrict a service to a particular set of users you can use the \fIvalid users -\fRparameter. +\fR parameter. If any of the usernames begin with a '@' then the name will be looked up first in the NIS netgroups list (if Samba @@ -6593,7 +6776,7 @@ Using '!' is most useful when you have a wildcard mapping line later in the file. For example to map from the name admin -or administrator to the UNIX name root you would use: +or administrator to the UNIX name root you would use: \fBroot = admin administrator\fR @@ -6607,7 +6790,7 @@ map file. If your system supports the NIS NETGROUP option then the netgroup database is checked before the \fI/etc/group -\fRdatabase for matching groups. +\fR database for matching groups. You can map Windows usernames that have spaces in them by using double quotes around the name. For example: @@ -6622,20 +6805,19 @@ unix user sys, and map the rest to guest. Note the use of the \&'!' to tell Samba to stop processing if it gets a match on that line. -.sp + .nf !sys = mary fred guest = * -.sp .fi Note that the remapping is applied to all occurrences -of usernames. Thus if you connect to \\\\server\\fred and fred is remapped to mary then you +of usernames. Thus if you connect to \\\\server\\fred and fred is remapped to mary then you will actually be connecting to \\\\server\\mary and will need to supply a password suitable for mary not fred. The only exception to this is the -username passed to the \fI password server\fR (if you have one). The password +username passed to the \fI password server\fR (if you have one). The password server will receive whatever username the client supplies without modification. @@ -6647,38 +6829,57 @@ they don't own the print job. Default: \fBno username map\fR Example: \fBusername map = /usr/local/samba/lib/users.map -\fR.TP +\fR +.TP \fButmp (G)\fR This boolean parameter is only available if -Samba has been configured and compiled with the option \fB --with-utmp\fR. If set to true then Samba will attempt +Samba has been configured and compiled with the option \fB --with-utmp\fR. If set to true then Samba will attempt to add utmp or utmpx records (depending on the UNIX system) whenever a connection is made to a Samba server. Sites may use this to record the user connecting to a Samba share. Due to the requirements of the utmp record, we are required to create a unique identifier for the -incoming user. Enabling this option creates an n^2 -algorithm to find this number. This may impede +incoming user. Enabling this option creates an n^2 +algorithm to find this number. This may impede performance on large installations. -See also the \fI utmp directory\fR parameter. +See also the \fI utmp directory\fR parameter. Default: \fButmp = no\fR .TP \fButmp directory(G)\fR This parameter is only available if Samba has -been configured and compiled with the option \fB --with-utmp\fR. It specifies a directory pathname that is +been configured and compiled with the option \fB --with-utmp\fR. It specifies a directory pathname that is used to store the utmp or utmpx files (depending on the UNIX system) that -record user connections to a Samba server. See also the \fIutmp\fR parameter. By default this is +record user connections to a Samba server. See also the \fIutmp\fR parameter. By default this is not set, meaning the system will use whatever utmp file the native system is set to use (usually \fI/var/run/utmp\fR on Linux). Default: \fBno utmp directory\fR + +Example: \fButmp directory = /var/run/utmp\fR +.TP +\fBwtmp directory(G)\fR +This parameter is only available if Samba has +been configured and compiled with the option \fB --with-utmp\fR. It specifies a directory pathname that is +used to store the wtmp or wtmpx files (depending on the UNIX system) that +record user connections to a Samba server. The difference with +the utmp directory is the fact that user info is kept after a user +has logged out. +See also the \fIutmp\fR parameter. By default this is +not set, meaning the system will use whatever utmp file the +native system is set to use (usually +\fI/var/run/wtmp\fR on Linux). + +Default: \fBno wtmp directory\fR + +Example: \fBwtmp directory = /var/log/wtmp\fR .TP \fBvalid users (S)\fR This is a list of users that should be allowed -to login to this service. Names starting with '@', '+' and '&' +to login to this service. Names starting with '@', '+' and '&' are interpreted using the same rules as described in the \fIinvalid users\fR parameter. @@ -6687,23 +6888,25 @@ If a username is in both this list and the \fIinvalid users\fR list then access is denied for that user. The current servicename is substituted for \fI%S -\fR\&. This is useful in the [homes] section. +\fR. This is useful in the [homes] section. See also \fIinvalid users \fR + Default: \fBNo valid users list (anyone can login) \fR + Example: \fBvalid users = greg, @pcusers\fR .TP \fBveto files(S)\fR This is a list of files and directories that -are neither visible nor accessible. Each entry in the list must +are neither visible nor accessible. Each entry in the list must be separated by a '/', which allows spaces to be included in the entry. '*' and '?' can be used to specify multiple files or directories as in DOS wildcards. Each entry must be a unix path, not a DOS path and -must \fBnot\fR include the unix directory +must \fBnot\fR include the unix directory separator '/'. Note that the \fIcase sensitive\fR option @@ -6722,12 +6925,13 @@ of Samba, as it will be forced to check all files and directories for a match as they are scanned. See also \fIhide files -\fRand \fI case sensitive\fR. +\fR and \fI case sensitive\fR. Default: \fBNo files or directories are vetoed. \fR + Examples: -.sp + .nf ; Veto any files containing the word Security, ; any ending in .tmp, and any directory containing the @@ -6737,7 +6941,6 @@ veto files = /*Security*/*.tmp/*root*/ ; Veto the Apple specific files that a NetAtalk server ; creates. veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/ -.sp .fi .TP \fBveto oplock files (S)\fR @@ -6760,21 +6963,31 @@ the line (either in the [global] section or in the section for the particular NetBench share : Example: \fBveto oplock files = /*.SEM/ -\fR.TP +\fR +.TP +\fBvfs path (S)\fR +This parameter specifies the directory +to look in for vfs modules. The name of every \fBvfs object +\fR will be prepended by this directory + +Default: \fBvfs path = \fR + +Example: \fBvfs path = /usr/lib/samba/vfs\fR +.TP \fBvfs object (S)\fR This parameter specifies a shared object file that -is used for Samba VFS I/O operations. By default, normal +is used for Samba VFS I/O operations. By default, normal disk I/O operations are used but these can be overloaded -with a VFS object. The Samba VFS layer is new to Samba 2.2 and +with a VFS object. The Samba VFS layer is new to Samba 2.2 and must be enabled at compile time with --with-vfs. Default : \fBno value\fR .TP \fBvfs options (S)\fR This parameter allows parameters to be passed -to the vfs layer at initialization time. The Samba VFS layer +to the vfs layer at initialization time. The Samba VFS layer is new to Samba 2.2 and must be enabled at compile time -with --with-vfs. See also \fI vfs object\fR. +with --with-vfs. See also \fI vfs object\fR. Default : \fBno value\fR .TP @@ -6794,7 +7007,7 @@ to areas that are outside the directory tree being exported. Note that setting this parameter can have a negative effect on your server performance due to the extra system calls -that Samba has to do in order to perform the link checks. +that Samba has to do in order to perform the link checks. Default: \fBwide links = yes\fR .TP @@ -6810,15 +7023,15 @@ Default: \fBwinbind cache type = 15\fR On large installations using winbindd(8)it may be necessary to suppress the enumeration of users through the -\fBsetpwent()\fR, +\fB setpwent()\fR, \fBgetpwent()\fR and -\fBendpwent()\fR group of system calls. If +\fBendpwent()\fR group of system calls. If the \fIwinbind enum users\fR parameter is false, calls to the \fBgetpwent\fR system call will not return any data. \fBWarning:\fR Turning off user -enumeration may cause some programs to behave oddly. For +enumeration may cause some programs to behave oddly. For example, the finger program relies on having access to the full user list when searching for matching usernames. @@ -6829,9 +7042,9 @@ Default: \fBwinbind enum users = yes \fR On large installations using winbindd(8)it may be necessary to suppress the enumeration of groups through the -\fBsetgrent()\fR, +\fB setgrent()\fR, \fBgetgrent()\fR and -\fBendgrent()\fR group of system calls. If +\fBendgrent()\fR group of system calls. If the \fIwinbind enum groups\fR parameter is false, calls to the \fBgetgrent()\fR system call will not return any data. @@ -6843,18 +7056,19 @@ Default: \fBwinbind enum groups = yes \fR .TP \fBwinbind gid (G)\fR The winbind gid parameter specifies the range of group -ids that are allocated by the winbindd(8)daemon. This range of group ids should have no +ids that are allocated by the winbindd(8)daemon. This range of group ids should have no existing local or NIS groups within it as strange conflicts can occur otherwise. Default: \fBwinbind gid = \fR + Example: \fBwinbind gid = 10000-20000\fR .TP \fBwinbind separator (G)\fR This parameter allows an admin to define the character used when listing a username of the form of \fIDOMAIN -\fR\\\fIuser\fR. This parameter +\fR\\\fIuser\fR. This parameter is only applicable when using the \fIpam_winbind.so\fR and \fInss_winbind.so\fR modules for UNIX services. @@ -6868,25 +7082,27 @@ Example: \fBwinbind separator = +\fR .TP \fBwinbind uid (G)\fR The winbind gid parameter specifies the range of group -ids that are allocated by the winbindd(8)daemon. This range of ids should have no +ids that are allocated by the winbindd(8)daemon. This range of ids should have no existing local or NIS users within it as strange conflicts can occur otherwise. Default: \fBwinbind uid = \fR + Example: \fBwinbind uid = 10000-20000\fR .TP \fBwinbind use default domain\fR .TP \fBwinbind use default domain\fR -This parameter specifies whether the winbindd(8) -daemon should operate on users without domain component in their username. +This parameter specifies whether the winbindd(8) +daemon should operate on users without domain component in their username. Users without a domain component are treated as is part of the winbindd server's -own domain. While this does not benifit Windows users, it makes SSH, FTP and e-mail +own domain. While this does not benifit Windows users, it makes SSH, FTP and e-mail function in a way much closer to the way they would in a native unix system. Default: \fBwinbind use default domain = \fR + Example: \fBwinbind use default domain = true\fR .TP \fBwins hook (G)\fR @@ -6900,7 +7116,8 @@ The wins hook parameter specifies the name of a script or executable that will be called as follows: \fBwins_hook operation name nametype ttl IP_list -\fR.RS +\fR +.RS .TP 0.2i \(bu The first argument is the operation and is one @@ -6913,7 +7130,7 @@ as an add. \(bu The second argument is the NetBIOS name. If the name is not a legal name then the wins hook is not called. -Legal names contain only letters, digits, hyphens, underscores +Legal names contain only letters, digits, hyphens, underscores and periods. .TP 0.2i \(bu @@ -6929,22 +7146,21 @@ The fifth and subsequent arguments are the IP addresses currently registered for that name. If this list is empty then the name should be deleted. .RE -.PP + An example script that calls the BIND dynamic DNS update program \fBnsupdate\fR is provided in the examples directory of the Samba source code. -.PP .TP \fBwins proxy (G)\fR This is a boolean that controls if nmbd(8)will respond to broadcast name -queries on behalf of other hosts. You may need to set this +queries on behalf of other hosts. You may need to set this to yes for some older clients. Default: \fBwins proxy = no\fR .TP \fBwins server (G)\fR This specifies the IP address (or DNS name: IP -address for preference) of the WINS server that nmbd(8)should register with. If you have a WINS server on +address for preference) of the WINS server that nmbd(8)should register with. If you have a WINS server on your network then you should set this to the WINS server's IP. You should point this at your WINS server if you have a @@ -6962,7 +7178,7 @@ Default: \fBnot enabled\fR Example: \fBwins server = 192.9.200.1\fR .TP \fBwins support (G)\fR -This boolean controls if the +This boolean controls if the nmbd(8)process in Samba will act as a WINS server. You should not set this to true unless you have a multi-subnetted network and you wish a particular \fBnmbd\fR to be your WINS server. @@ -6982,7 +7198,7 @@ Default: \fBset at compile time to WORKGROUP\fR Example: \fBworkgroup = MYGROUP\fR .TP \fBwritable (S)\fR -Synonym for \fI writeable\fR for people who can't spell :-). +Synonym for \fI writeable\fR for people who can't spell :-). .TP \fBwrite cache size (S)\fR If this integer parameter is set to non-zero value, @@ -7021,14 +7237,27 @@ Note that if a user is in both the read list and the write list then they will be given write access. See also the \fIread list -\fRoption. +\fR option. Default: \fBwrite list = \fR + Example: \fBwrite list = admin, root, @staff -\fR.TP +\fR +.TP +\fBwins partners (G)\fR +A space separated list of partners' IP addresses for +WINS replication. WINS partners are always defined as push/pull +partners as defining only one way WINS replication is unreliable. +WINS replication is currently experimental and unreliable between +samba servers. + +Default: \fBwins partners = \fR + +Example: \fBwins partners = 192.168.0.1 172.16.1.2\fR +.TP \fBwrite ok (S)\fR -Synonym for \fI writeable\fR. +Synonym for \fI writeable\fR. .TP \fBwrite raw (G)\fR This parameter controls whether or not the server @@ -7038,7 +7267,7 @@ You should never need to change this parameter. Default: \fBwrite raw = yes\fR .TP \fBwriteable (S)\fR -An inverted synonym is \fIread only\fR. +An inverted synonym is \fIread only\fR. If this parameter is no, then users of a service may not create or modify files in the service's @@ -7059,7 +7288,7 @@ problem - but be aware of the possibility. On a similar note, many clients - especially DOS clients - limit service names to eight characters. smbd(8) has no such limitation, but attempts to connect from such -clients will fail if they truncate the service names. For this reason +clients will fail if they truncate the service names. For this reason you should probably keep your service names down to eight characters in length. .PP @@ -7093,6 +7322,6 @@ to the way the Linux kernel is developed. The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another excellent piece of Open Source software, available at -ftp://ftp.icce.rug.nl/pub/unix/ ) and updated for the Samba 2.0 -release by Jeremy Allison. The conversion to DocBook for +ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 +release by Jeremy Allison. The conversion to DocBook for Samba 2.2 was done by Gerald Carter diff --git a/docs/manpages/vfstest.1 b/docs/manpages/vfstest.1 new file mode 100644 index 0000000000..78e6e6c35a --- /dev/null +++ b/docs/manpages/vfstest.1 @@ -0,0 +1,178 @@ +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" +.\" Please send any bug reports, improvements, comments, patches, +.\" etc. to Steve Cheng . +.TH "VFSTEST" "1" "20 August 2002" "" "" +.SH NAME +vfstest \- tool for testing samba VFS modules +.SH SYNOPSIS + +\fBvfstest\fR [ \fB-d debuglevel\fR ] [ \fB-c command\fR ] [ \fB-l logfile\fR ] [ \fB-h\fR ] + +.SH "DESCRIPTION" +.PP +This tool is part of the Sambasuite. +.PP +\fBvfstest\fR is a small command line +utility that has the ability to test dso samba VFS modules. It gives the +user the ability to call the various VFS functions manually and +supports cascaded VFS modules. +.SH "OPTIONS" +.TP +\fB-c|--command=command\fR +Execute the specified (colon-seperated) commands. +See below for the commands that are available. +.TP +\fB-d|--debug=debuglevel\fR +set the debuglevel. Debug level 0 is the lowest +and 100 being the highest. This should be set to 100 if you are +planning on submitting a bug report to the Samba team (see \fIBUGS.txt\fR). +.TP +\fB-h|--help\fR +Print a summary of command line options. +.TP +\fB-l|--logfile=logbasename\fR +File name for log/debug files. The extension +\&'.client' will be appended. The log file is never removed +by the client. +.SH "COMMANDS" +.PP +\fBVFS COMMANDS\fR +.TP 0.2i +\(bu +\fBload \fR - Load specified VFS module +.TP 0.2i +\(bu +\fBpopulate \fR - Populate a data buffer with the specified data +.TP 0.2i +\(bu +\fBshowdata [ ]\fR - Show data currently in data buffer +.TP 0.2i +\(bu +\fBconnect\fR - VFS connect() +.TP 0.2i +\(bu +\fBdisconnect\fR - VFS disconnect() +.TP 0.2i +\(bu +\fBdisk_free\fR - VFS disk_free() +.TP 0.2i +\(bu +\fBopendir\fR - VFS opendir() +.TP 0.2i +\(bu +\fBreaddir\fR - VFS readdir() +.TP 0.2i +\(bu +\fBmkdir\fR - VFS mkdir() +.TP 0.2i +\(bu +\fBrmdir\fR - VFS rmdir() +.TP 0.2i +\(bu +\fBclosedir\fR - VFS closedir() +.TP 0.2i +\(bu +\fBopen\fR - VFS open() +.TP 0.2i +\(bu +\fBclose\fR - VFS close() +.TP 0.2i +\(bu +\fBread\fR - VFS read() +.TP 0.2i +\(bu +\fBwrite\fR - VFS write() +.TP 0.2i +\(bu +\fBlseek\fR - VFS lseek() +.TP 0.2i +\(bu +\fBrename\fR - VFS rename() +.TP 0.2i +\(bu +\fBfsync\fR - VFS fsync() +.TP 0.2i +\(bu +\fBstat\fR - VFS stat() +.TP 0.2i +\(bu +\fBfstat\fR - VFS fstat() +.TP 0.2i +\(bu +\fBlstat\fR - VFS lstat() +.TP 0.2i +\(bu +\fBunlink\fR - VFS unlink() +.TP 0.2i +\(bu +\fBchmod\fR - VFS chmod() +.TP 0.2i +\(bu +\fBfchmod\fR - VFS fchmod() +.TP 0.2i +\(bu +\fBchown\fR - VFS chown() +.TP 0.2i +\(bu +\fBfchown\fR - VFS fchown() +.TP 0.2i +\(bu +\fBchdir\fR - VFS chdir() +.TP 0.2i +\(bu +\fBgetwd\fR - VFS getwd() +.TP 0.2i +\(bu +\fButime\fR - VFS utime() +.TP 0.2i +\(bu +\fBftruncate\fR - VFS ftruncate() +.TP 0.2i +\(bu +\fBlock\fR - VFS lock() +.TP 0.2i +\(bu +\fBsymlink\fR - VFS symlink() +.TP 0.2i +\(bu +\fBreadlink\fR - VFS readlink() +.TP 0.2i +\(bu +\fBlink\fR - VFS link() +.TP 0.2i +\(bu +\fBmknod\fR - VFS mknod() +.TP 0.2i +\(bu +\fBrealpath\fR - VFS realpath() +.PP +\fBGENERAL COMMANDS\fR +.TP 0.2i +\(bu +\fBconf \fR - Load a different configuration file +.TP 0.2i +\(bu +\fBhelp []\fR - Get list of commands or info about specified command +.TP 0.2i +\(bu +\fBdebuglevel \fR - Set debug level +.TP 0.2i +\(bu +\fBfreemem\fR - Free memory currently in use +.TP 0.2i +\(bu +\fBexit\fR - Exit vfstest +.SH "VERSION" +.PP +This man page is correct for version 3.0 of the Samba +suite. +.SH "AUTHOR" +.PP +The original Samba software and related utilities +were created by Andrew Tridgell. Samba is now developed +by the Samba Team as an Open Source project similar +to the way the Linux kernel is developed. +.PP +The vfstest man page was written by Jelmer Vernooij. -- cgit From d19e6edc0199562563f5548d0144a80cc5c8368e Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Tue, 20 Aug 2002 17:38:54 +0000 Subject: fix generating protos for smbwrapper (This used to be commit 92408c822033c9d0e604d9696cf629d4665aa9ee) --- source3/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 734f6ee82a..bfdb8c9d22 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -445,7 +445,7 @@ SMBFILTER_OBJ = utils/smbfilter.o $(LIBSMB_OBJ) $(PARAM_OBJ) \ PROTO_OBJ = $(SMBD_OBJ_MAIN) \ $(SMBD_OBJ_SRV) $(NMBD_OBJ1) $(SWAT_OBJ1) $(LIB_OBJ) $(LIBSMB_OBJ) \ - $(SMBWRAPPER_OBJ1) $(SMBTORTURE_OBJ1) $(RPCCLIENT_OBJ1) \ + $(SMBW_OBJ1) $(SMBWRAPPER_OBJ1) $(SMBTORTURE_OBJ1) $(RPCCLIENT_OBJ1) \ $(LIBMSRPC_OBJ) $(LIBMSRPC_SERVER_OBJ) $(RPC_CLIENT_OBJ) \ $(RPC_SERVER_OBJ) $(RPC_PARSE_OBJ) \ $(AUTH_OBJ) $(PARAM_OBJ) $(LOCKING_OBJ) $(SECRETS_OBJ) \ -- cgit From 1ceb135b6c70272518f3d3ee54a651e204085e4c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 20 Aug 2002 17:57:07 +0000 Subject: Don't report missing "-valid" (This used to be commit f9018f4560c205033d25e6294534be4b7a79f6c1) --- source3/script/find_missing_doc.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/script/find_missing_doc.pl b/source3/script/find_missing_doc.pl index 4d22e20a29..89385baaa2 100755 --- a/source3/script/find_missing_doc.pl +++ b/source3/script/find_missing_doc.pl @@ -39,5 +39,5 @@ foreach $ln (grep (/\ Date: Tue, 20 Aug 2002 17:58:09 +0000 Subject: Remove unused variables (This used to be commit 20f1765c32b2dd048e1572cd1b1e490459f7d5dc) --- source3/torture/vfstest.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index b8773d5785..0cdff84ed4 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -207,7 +207,8 @@ static NTSTATUS cmd_freemem(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc talloc_destroy(global_ctx); global_ctx = NULL; vfs->data = NULL; - vfs->data_size = NULL; + vfs->data_size = 0; + return NT_STATUS_OK; } static NTSTATUS cmd_quit(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) @@ -420,27 +421,13 @@ static void usage(void) int main(int argc, char *argv[]) { - extern pstring global_myname; - static int got_pass = 0; BOOL interactive = True; int opt; - int olddebug; static char *cmdstr = ""; - const char *server; - struct cli_state *cli; - fstring password="", - username="", - domain=""; - static char *opt_authfile=NULL, - *opt_username=NULL, - *opt_domain=NULL, - *opt_configfile=NULL, - *opt_logfile=NULL; + static char *opt_logfile=NULL; static int opt_debuglevel; pstring logfile; struct cmd_set **cmd_set; - struct in_addr server_ip; - NTSTATUS nt_status; extern BOOL AllowDebugChange; static struct vfs_state vfs; int i; -- cgit From 2d05704d0e4b553d881f4e2563b2e71a9e1457da Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Tue, 20 Aug 2002 18:43:59 +0000 Subject: fix irix compile errors - cannot initialize array in declaration statement with non-const values - strsep not defined (This used to be commit a5c59b2cd10016ecbd931531602ad1cb3660bbf9) --- source3/libads/ldap.c | 11 +++++++++-- source3/nmbd/nmbd_processlogon.c | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index 2672489482..f0c4ad9040 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -826,7 +826,11 @@ static ADS_STATUS ads_modlist_add(TALLOC_CTX *ctx, ADS_MODLIST *mods, ADS_STATUS ads_mod_str(TALLOC_CTX *ctx, ADS_MODLIST *mods, const char *name, const char *val) { - const char *values[2] = {val, NULL}; + const char *values[2]; + + values[0] = val; + values[1] = NULL; + if (!val) return ads_modlist_add(ctx, mods, LDAP_MOD_DELETE, name, NULL); return ads_modlist_add(ctx, mods, LDAP_MOD_REPLACE, name, @@ -861,7 +865,10 @@ ADS_STATUS ads_mod_strlist(TALLOC_CTX *ctx, ADS_MODLIST *mods, static ADS_STATUS ads_mod_ber(TALLOC_CTX *ctx, ADS_MODLIST *mods, const char *name, const struct berval *val) { - const struct berval *values[2] = {val, NULL}; + const struct berval *values[2]; + + values[0] = val; + values[1] = NULL; if (!val) return ads_modlist_add(ctx, mods, LDAP_MOD_DELETE, name, NULL); return ads_modlist_add(ctx, mods, LDAP_MOD_REPLACE|LDAP_MOD_BVALUES, diff --git a/source3/nmbd/nmbd_processlogon.c b/source3/nmbd/nmbd_processlogon.c index d6605d08f5..49de2e4a50 100644 --- a/source3/nmbd/nmbd_processlogon.c +++ b/source3/nmbd/nmbd_processlogon.c @@ -334,7 +334,7 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n", /* Push domain components */ dc = domain; q1 = q; - while ((component = strsep(&dc, "."))) { + while ((component = strtok(dc, "."))) { size = push_ascii(&q[1], component, -1, 0); SCVAL(q, 0, size); q += (size + 1); -- cgit From adbd28b6823487f07a479fe01ddb64399aebd43a Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 20 Aug 2002 19:16:28 +0000 Subject: fix typo (This used to be commit 71e2b41c77cc3128c6cb6e68b7ddbe2213274805) --- source3/param/loadparm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index b3d1ac5030..9178136141 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -3544,7 +3544,7 @@ BOOL lp_load(const char *pszFname, BOOL global_only, BOOL save_defaults, bRetval = False; - DEBUG(3, ("lp_load: refreshing parmaters\n")); + DEBUG(3, ("lp_load: refreshing parameters\n")); bInGlobalSection = True; bGlobalOnly = global_only; -- cgit From dcaceb410d62bc6667b44692eab9506275f3f139 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 20 Aug 2002 19:35:13 +0000 Subject: some fixes (This used to be commit e0c61b31050a3e3fdec2c47c80ef34de3ec73e04) --- source3/torture/vfstest.c | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index 0cdff84ed4..9deb309352 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -4,6 +4,7 @@ Copyright (C) Simo Sorce 2002 Copyright (C) Eric Lorimer 2002 + Copyright (C) Jelmer Vernooij 2002 Most of this code was ripped off of rpcclient. Copyright (C) Tim Potter 2000-2001 @@ -44,13 +45,8 @@ static char **completion_fn(char *text, int start, int end) int i, count=0; struct cmd_list *commands = cmd_list; -#if 0 /* JERRY */ - /* FIXME!!! -- what to do when completing argument? */ - /* for words not at the start of the line fallback - to filename completion */ if (start) return NULL; -#endif /* make sure we have a list of valid commands */ if (!commands) @@ -437,10 +433,8 @@ int main(int argc, char *argv[]) a fixed location or certain compilers complain */ poptContext pc; struct poptOption long_options[] = { -/* {"conf", 's', POPT_ARG_STRING, &opt_configfile, 's'},*/ {"debug", 'd', POPT_ARG_INT, &opt_debuglevel, 'd'}, {"debuglevel", 'd', POPT_ARG_INT, &opt_debuglevel, 'd'}, -/* {"user", 'U', POPT_ARG_STRING, &opt_username, 'U'},*/ {"command", 'c', POPT_ARG_STRING, &cmdstr}, {"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l'}, {"help", 'h', POPT_ARG_NONE, 0, 'h'}, @@ -469,23 +463,6 @@ int main(int argc, char *argv[]) DEBUGLEVEL = opt_debuglevel; break; - /* - case 'U': { - char *lp; - - pstrcpy(username,opt_username); - - if ((lp=strchr_m(username,'%'))) { - *lp = 0; - pstrcpy(password,lp+1); - got_pass = 1; - memset(strchr_m(opt_username,'%') + 1, 'X', - strlen(password)); - } - break; - } - */ - case 'h': default: usage(); -- cgit From d9a4055174862c87c737685eb554429e2cd985d2 Mon Sep 17 00:00:00 2001 From: Shirish Kalele Date: Tue, 20 Aug 2002 19:58:23 +0000 Subject: The "max data count" value in SMB transacts indicates how much the other end can send us. As it stands, we incorrectly set it to the number of bytes we are sending. Correcting this by setting a static value of 1024 (This could even be something larger). Improves RPC client performance. (This used to be commit b0bd42c9466f41dc87a11fd6065620f93c8ebc40) --- source3/rpc_client/cli_pipe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c index eae6be5128..0416ed3b9b 100644 --- a/source3/rpc_client/cli_pipe.c +++ b/source3/rpc_client/cli_pipe.c @@ -354,7 +354,7 @@ static BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, prs_struct *data, pr if (!cli_api_pipe(cli, "\\PIPE\\", setup, 2, 0, /* Setup, length, max */ NULL, 0, 0, /* Params, length, max */ - pdata, data_len, data_len, /* data, length, max */ + pdata, data_len, 1024, /* data, length, max */ &rparam, &rparam_len, /* return params, len */ &prdata, &rdata_len)) /* return data, len */ { -- cgit From f744db7a5dee0764bb41c43336b1b1a933a79682 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 20 Aug 2002 20:54:32 +0000 Subject: IFSTEST fixes for open fid, nametoolong. Jeremy. (This used to be commit e53a81261ed189881c0f07e1b46f97aa6770cab7) --- source3/include/smb.h | 23 ++++++++++++----------- source3/lib/error.c | 3 +++ source3/smbd/nttrans.c | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/source3/include/smb.h b/source3/include/smb.h index 1ff0f1c328..091ef780ad 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -1148,17 +1148,17 @@ struct bitmap { #define FILE_SHARE_DELETE 4 /* FileAttributesField */ -#define FILE_ATTRIBUTE_READONLY aRONLY -#define FILE_ATTRIBUTE_HIDDEN aHIDDEN -#define FILE_ATTRIBUTE_SYSTEM aSYSTEM -#define FILE_ATTRIBUTE_DIRECTORY aDIR -#define FILE_ATTRIBUTE_ARCHIVE aARCH -#define FILE_ATTRIBUTE_NORMAL 0x80L -#define FILE_ATTRIBUTE_TEMPORARY 0x100L -#define FILE_ATTRIBUTE_SPARSE 0x200L -#define FILE_ATTRIBUTE_COMPRESSED 0x800L -#define FILE_ATTRIBUTE_NONINDEXED 0x2000L -#define SAMBA_ATTRIBUTES_MASK 0x7F +#define FILE_ATTRIBUTE_READONLY 0x001L +#define FILE_ATTRIBUTE_HIDDEN 0x002L +#define FILE_ATTRIBUTE_SYSTEM 0x004L +#define FILE_ATTRIBUTE_DIRECTORY 0x010L +#define FILE_ATTRIBUTE_ARCHIVE 0x020L +#define FILE_ATTRIBUTE_NORMAL 0x080L +#define FILE_ATTRIBUTE_TEMPORARY 0x100L +#define FILE_ATTRIBUTE_SPARSE 0x200L +#define FILE_ATTRIBUTE_COMPRESSED 0x800L +#define FILE_ATTRIBUTE_NONINDEXED 0x2000L +#define SAMBA_ATTRIBUTES_MASK 0x7F /* Flags - combined with attributes. */ #define FILE_FLAG_WRITE_THROUGH 0x80000000L @@ -1186,6 +1186,7 @@ struct bitmap { #define FILE_EIGHT_DOT_THREE_ONLY 0x0400 #define FILE_RANDOM_ACCESS 0x0800 #define FILE_DELETE_ON_CLOSE 0x1000 +#define FILE_OPEN_BY_FILE_ID 0x2000 /* Responses when opening a file. */ #define FILE_WAS_OPENED 1 diff --git a/source3/lib/error.c b/source3/lib/error.c index 608d2b89ba..af8cf960e8 100644 --- a/source3/lib/error.c +++ b/source3/lib/error.c @@ -45,6 +45,9 @@ const struct unix_error_map unix_dos_nt_errmap[] = { #endif #ifdef EROFS { EROFS, ERRHRD, ERRnowrite, NT_STATUS_ACCESS_DENIED }, +#endif +#ifdef ENAMETOOLONG + { ENAMETOOLONG, ERRDOS, 206, NT_STATUS_OBJECT_NAME_INVALID }, #endif { 0, 0, 0, NT_STATUS_OK } }; diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index 1337824595..4e02ecce6e 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -565,6 +565,12 @@ int reply_ntcreate_and_X(connection_struct *conn, time_t c_time; START_PROFILE(SMBntcreateX); + DEBUG(10,("reply_ntcreateX: flags = 0x%x, desired_access = 0x%x \ +file_attributes = 0x%x, share_access = 0x%x, create_disposition = 0x%x \ +create_options = 0x%x root_dir_fid = 0x%x\n", flags, desired_access, file_attributes, + share_access, create_disposition, + root_dir_fid, create_options )); + /* If it's an IPC, use the pipe handler. */ if (IS_IPC(conn)) { @@ -577,6 +583,10 @@ int reply_ntcreate_and_X(connection_struct *conn, } } + if (create_options & FILE_OPEN_BY_FILE_ID) { + END_PROFILE(SMBntcreateX); + return ERROR_NT(NT_STATUS_NOT_SUPPORTED); + } /* * We need to construct the open_and_X ofun value from the @@ -1071,6 +1081,11 @@ static int call_nt_transact_create(connection_struct *conn, root_dir_fid = (uint16)IVAL(params,4); smb_attr = (file_attributes & SAMBA_ATTRIBUTES_MASK); + if (create_options & FILE_OPEN_BY_FILE_ID) { + END_PROFILE(SMBntcreateX); + return ERROR_NT(NT_STATUS_NOT_SUPPORTED); + } + /* * We need to construct the open_and_X ofun value from the * NT values, as that's what our code is structured to accept. -- cgit From 2e01bef42db414b61e696829603c5e1c8a36aac5 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 20 Aug 2002 20:56:10 +0000 Subject: pdb_nisplus converted to the new passdb system API's (This used to be commit 72e9a5cd340d6a912e274dc0d6f2a22a922d4b03) --- source3/passdb/pdb_interface.c | 1 + source3/passdb/pdb_nisplus.c | 2326 ++++++++++++++++++++-------------------- 2 files changed, 1177 insertions(+), 1150 deletions(-) diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c index f311223d77..f5926e54f1 100644 --- a/source3/passdb/pdb_interface.c +++ b/source3/passdb/pdb_interface.c @@ -34,6 +34,7 @@ const struct pdb_init_function_entry builtin_pdb_init_functions[] = { { "ldapsam", pdb_init_ldapsam }, { "ldapsam_nua", pdb_init_ldapsam_nua }, { "unixsam", pdb_init_unixsam }, + { "nisplussam", pdb_init_nisplussam }, { "plugin", pdb_init_plugin }, { NULL, NULL} }; diff --git a/source3/passdb/pdb_nisplus.c b/source3/passdb/pdb_nisplus.c index 2d37c3b8fb..c302691bec 100644 --- a/source3/passdb/pdb_nisplus.c +++ b/source3/passdb/pdb_nisplus.c @@ -1,10 +1,10 @@ /* - * Unix SMB/CIFS implementation. - * SMB parameters and setup + * Test password backend for samba * Copyright (C) Andrew Tridgell 1992-1998 Modified by Jeremy Allison 1995. * Copyright (C) Benny Holmgren 1998 * Copyright (C) Luke Kenneth Casson Leighton 1996-1998. * Copyright (C) Toomas Soome 2001 + * Copyright (C) Jelmer Vernooij 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 @@ -35,6 +35,7 @@ * an enum in /usr/include/rpcsvc/nis.h. */ + #if defined(GROUP) #undef GROUP #endif @@ -47,17 +48,6 @@ #include -extern int DEBUGLEVEL; - -struct nisp_enum_info -{ - nis_result *result; - int enum_entry; -}; - -static struct nisp_enum_info global_nisp_ent; -static SIG_ATOMIC_T gotalarm; - /*************************************************************** the fields for the NIS+ table, generated from mknissmbpwtbl.sh, are: @@ -114,1325 +104,1361 @@ static SIG_ATOMIC_T gotalarm; #define NPF_WORKSTATIONS 20 #define NPF_HOURS 21 +struct nisp_enum_info +{ + nis_result *result; + int enum_entry; +}; -/******************************************************************* - Converts NT user RID to a UNIX uid. - ********************************************************************/ +static char *make_nisname_from_user_rid(uint32 rid, char *pfile); +static char *make_nisname_from_name(const char *user_name, char *pfile); +static void get_single_attribute(const nis_object *new_obj, int col, + char *val, int len);; +static BOOL make_sam_from_nisp_object(SAM_ACCOUNT *pw_buf, const nis_object *obj); +static BOOL make_sam_from_nisresult(SAM_ACCOUNT *pw_buf, const nis_result *result);; +static void set_single_attribute(nis_object *new_obj, int col, + const char *val, int len, int flags); +static BOOL init_nisp_from_sam(nis_object *obj, const SAM_ACCOUNT *sampass, + nis_object *old); +static nis_result *nisp_get_nis_list(const char *nisname, unsigned int flags); + +/*************************************************************** + Start enumeration of the passwd list. +****************************************************************/ -static uid_t pdb_user_rid_to_uid(uint32 user_rid) +static BOOL nisplussam_setsampwent(struct pdb_methods *methods, BOOL update) { - return (uid_t)(((user_rid & (~USER_RID_TYPE))- 1000)/RID_MULTIPLIER); -} + struct nisp_enum_info *global_nisp_ent = (struct nisp_enum_info *)methods->private_data; -/******************************************************************* - converts UNIX uid to an NT User RID. - ********************************************************************/ + char *sp, * p = lp_smb_passwd_file(); + pstring pfiletmp; -static uint32 pdb_uid_to_user_rid(uid_t uid) -{ - return (((((uint32)uid)*RID_MULTIPLIER) + 1000) | USER_RID_TYPE); + if( (sp = strrchr( p, '/' )) ) + safe_strcpy(pfiletmp, sp+1, sizeof(pfiletmp)-1); + else + safe_strcpy(pfiletmp, p, sizeof(pfiletmp)-1); + safe_strcat(pfiletmp, ".org_dir", sizeof(pfiletmp)-strlen(pfiletmp)-1); + + pdb_endsampwent(); /* just in case */ + global_nisp_ent->result = nisp_get_nis_list( pfiletmp, 0 ); + global_nisp_ent->enum_entry = 0; + return global_nisp_ent->result != NULL ? True : False; } /*************************************************************** - Signal function to tell us we timed out. + End enumeration of the passwd list. ****************************************************************/ -static void gotalarm_sig(void) + +static void nisplussam_endsampwent(struct pdb_methods *methods) { - gotalarm = 1; + struct nisp_enum_info *global_nisp_ent = (struct nisp_enum_info *)methods->private_data; + if( global_nisp_ent->result ) + nis_freeresult(global_nisp_ent->result); + global_nisp_ent->result = NULL; + global_nisp_ent->enum_entry = 0; } -/*************************************************************** - make_nisname_from_user_rid - ****************************************************************/ -static char *make_nisname_from_user_rid(uint32 rid, char *pfile) +/***************************************************************** + Get one SAM_ACCOUNT from the list (next in line) +*****************************************************************/ + +static BOOL nisplussam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT *user) { - static pstring nisname; - safe_strcpy(nisname, "[user_rid=", sizeof(nisname)-1); - slprintf(nisname, sizeof(nisname)-1, "%s%d", nisname, rid); - safe_strcat(nisname, "],", sizeof(nisname)-strlen(nisname)-1); - safe_strcat(nisname, pfile, sizeof(nisname)-strlen(nisname)-1); + struct nisp_enum_info *global_nisp_ent = (struct nisp_enum_info *)methods->private_data; + int enum_entry = (int)(global_nisp_ent->enum_entry); + nis_result *result = global_nisp_ent->result; + + if (user==NULL) { + DEBUG(0,("SAM_ACCOUNT is NULL.\n")); + return False; + } - return nisname; + if (result == NULL || + enum_entry < 0 || enum_entry >= (NIS_RES_NUMOBJ(result) - 1)) + { + return False; + } + + if(!make_sam_from_nisp_object(user, &NIS_RES_OBJECT(result)[enum_entry]) ) + { + DEBUG(0,("Bad SAM_ACCOUNT entry returned from NIS+!\n")); + return False; + } + (int)(global_nisp_ent->enum_entry)++; + return True; + DEBUG(10, ("nisplussam_getsampwent called\n")); + return False; } -/*************************************************************** - make_nisname_from_uid - ****************************************************************/ -static char *make_nisname_from_uid(int uid, char *pfile) +/****************************************************************** + Lookup a name in the SAM database +******************************************************************/ + +static BOOL nisplussam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT *user, const char *sname) { - static pstring nisname; + /* Static buffers we will return. */ + nis_result *result = NULL; + pstring nisname; + BOOL ret; + char *pfile = lp_smb_passwd_file(); - safe_strcpy(nisname, "[uid=", sizeof(nisname)-1); - slprintf(nisname, sizeof(nisname)-1, "%s%d", nisname, uid); - safe_strcat(nisname, "],", sizeof(nisname)-strlen(nisname)-1); - safe_strcat(nisname, pfile, sizeof(nisname)-strlen(nisname)-1); + if (!*pfile) + { + DEBUG(0, ("No SMB password file set\n")); + return False; + } + if( strrchr( pfile, '/') ) + pfile = strrchr( pfile, '/') + 1; - return nisname; -} + slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.org_dir", sname, pfile); + DEBUG(10, ("search by nisname: %s\n", nisname)); -/*************************************************************** - make_nisname_from_name - ****************************************************************/ -static char *make_nisname_from_name(const char *user_name, char *pfile) -{ - static pstring nisname; + /* Search the table. */ - safe_strcpy(nisname, "[name=", sizeof(nisname)-1); - safe_strcat(nisname, user_name, sizeof(nisname) - strlen(nisname) - 1); - safe_strcat(nisname, "],", sizeof(nisname)-strlen(nisname)-1); - safe_strcat(nisname, pfile, sizeof(nisname)-strlen(nisname)-1); + if(!(result = nisp_get_nis_list(nisname, 0))) + { + return False; + } - return nisname; + ret = make_sam_from_nisresult(user, result); + nis_freeresult(result); + + return ret; + + DEBUG(10, ("nisplussam_getsampwnam called\n")); + return False; } -/************************************************************************* - gets a NIS+ attribute - *************************************************************************/ -static void get_single_attribute(const nis_object *new_obj, int col, - char *val, int len) +/*************************************************************************** + Search by sid + **************************************************************************/ + +static BOOL nisplussam_getsampwrid (struct pdb_methods *methods, SAM_ACCOUNT *user, uint32 rid) { - int entry_len; + nis_result *result; + char *nisname; + BOOL ret; + char *sp, *p = lp_smb_passwd_file(); + pstring pfiletmp; - if (new_obj == NULL || val == NULL) return; - - entry_len = ENTRY_LEN(new_obj, col); - if (len > entry_len) + if (!*p) { - len = entry_len; + DEBUG(0, ("no SMB password file set\n")); + return False; } - safe_strcpy(val, ENTRY_VAL(new_obj, col), len-1); + if( (sp = strrchr( p, '/' )) ) + safe_strcpy(pfiletmp, sp+1, sizeof(pfiletmp)-1); + else + safe_strcpy(pfiletmp, p, sizeof(pfiletmp)-1); + safe_strcat(pfiletmp, ".org_dir", sizeof(pfiletmp)-strlen(pfiletmp)-1); + + nisname = make_nisname_from_user_rid(rid, pfiletmp); + + DEBUG(10, ("search by rid: %s\n", nisname)); + + /* Search the table. */ + + if(!(result = nisp_get_nis_list(nisname, 0))) + { + return False; + } + + ret = make_sam_from_nisresult(user, result); + nis_freeresult(result); + + return ret; + + DEBUG(10, ("nisplussam_getsampwsid called\n")); + return False; } -/************************************************************************ - makes a struct sam_passwd from a NIS+ object. - ************************************************************************/ -static BOOL make_sam_from_nisp_object(SAM_ACCOUNT *pw_buf, const nis_object *obj) +static BOOL nisplussam_getsampwsid (struct pdb_methods *methods, SAM_ACCOUNT *user, const DOM_SID *sid) { - char *ptr; - pstring full_name; /* this must be translated to dos code page */ - pstring acct_desc; /* this must be translated to dos code page */ - pstring home_dir; /* set default value from smb.conf for user */ - pstring home_drive; /* set default value from smb.conf for user */ - pstring logon_script; /* set default value from smb.conf for user */ - pstring profile_path; /* set default value from smb.conf for user */ - pstring hours; - int hours_len; - unsigned char smbpwd[16]; - unsigned char smbntpwd[16]; - + uint32 rid; + if (!sid_peek_check_rid(get_global_sam_sid(), sid, &rid)) return False; + return nisplussam_getsampwrid(methods, user, rid); +} - /* - * time values. note: this code assumes 32bit time_t! - */ - /* Don't change these timestamp settings without a good reason. They are - important for NT member server compatibility. */ - pdb_set_logon_time(pw_buf, (time_t)0, True); - ptr = (uchar *)ENTRY_VAL(obj, NPF_LOGON_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "LNT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_logon_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); - } - } +/*************************************************************************** + Delete a SAM_ACCOUNT +****************************************************************************/ - pdb_set_logoff_time(pw_buf, get_time_t_max(), True); - ptr = (uchar *)ENTRY_VAL(obj, NPF_LOGOFF_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "LOT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_logoff_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); - } - } +static BOOL nisplussam_delete_sam_account(struct pdb_methods *methods, SAM_ACCOUNT *user) +{ - pdb_set_kickoff_time(pw_buf, get_time_t_max(), True); - ptr = (uchar *)ENTRY_VAL(obj, NPF_KICK_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "KOT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_kickoff_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); - } + const char *sname; + char *pfile = lp_smb_passwd_file(); + pstring nisname; + nis_result *result, *delresult; + nis_object *obj; + + if (!user) { + DEBUG(0, ("no SAM_ACCOUNT specified!\n")); + return False; } - pdb_set_pass_last_set_time(pw_buf, (time_t)0); - ptr = (uchar *)ENTRY_VAL(obj, NPF_PWDLSET_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "LCT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_pass_last_set_time(pw_buf, (time_t)strtol(ptr, NULL, 16)); + sname = pdb_get_username(user); + + if (!*pfile) + { + DEBUG(0, ("no SMB password file set\n")); + return False; } + if( strrchr( pfile, '/') ) + pfile = strrchr( pfile, '/') + 1; + + slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.org_dir", sname, pfile); + + /* Search the table. */ + + if( !(result = nisp_get_nis_list(nisname, + MASTER_ONLY|FOLLOW_LINKS|FOLLOW_PATH|\ + EXPAND_NAME|HARD_LOOKUP))) { + return False; } - pdb_set_pass_can_change_time(pw_buf, (time_t)0, True); - ptr = (uchar *)ENTRY_VAL(obj, NPF_PWDCCHG_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "CCT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_pass_can_change_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); - } - } - - pdb_set_pass_must_change_time(pw_buf, get_time_t_max(), True); /* Password never expires. */ - ptr = (uchar *)ENTRY_VAL(obj, NPF_PWDMCHG_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "MCT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_pass_must_change_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); - } + if(result->status != NIS_SUCCESS || NIS_RES_NUMOBJ(result) <= 0) { + /* User not found. */ + DEBUG(0,("user not found in NIS+\n")); + nis_freeresult(result); + return False; } - /* string values */ - pdb_set_username(pw_buf, ENTRY_VAL(obj, NPF_NAME)); - pdb_set_domain(pw_buf, lp_workgroup()); - /* pdb_set_nt_username() -- cant set it here... */ - - get_single_attribute(obj, NPF_FULL_NAME, full_name, sizeof(pstring)); -#if 0 - unix_to_dos(full_name, True); -#endif - pdb_set_fullname(pw_buf, full_name); - - pdb_set_acct_ctrl(pw_buf, pdb_decode_acct_ctrl(ENTRY_VAL(obj, - NPF_ACB))); - - get_single_attribute(obj, NPF_ACCT_DESC, acct_desc, sizeof(pstring)); -#if 0 - unix_to_dos(acct_desc, True); -#endif - pdb_set_acct_desc(pw_buf, acct_desc); + obj = NIS_RES_OBJECT(result); + slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.%s", sname, obj->zo_name, + obj->zo_domain); - pdb_set_workstations(pw_buf, ENTRY_VAL(obj, NPF_WORKSTATIONS)); - pdb_set_munged_dial(pw_buf, NULL); + DEBUG(10, ("removing name: %s\n", nisname)); + delresult = nis_remove_entry(nisname, obj, + MASTER_ONLY|REM_MULTIPLE|ALL_RESULTS|FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP); + + nis_freeresult(result); - pdb_set_uid(pw_buf, atoi(ENTRY_VAL(obj, NPF_UID))); - pdb_set_gid(pw_buf, atoi(ENTRY_VAL(obj, NPF_SMB_GRPID))); - pdb_set_user_sid_from_rid(pw_buf, atoi(ENTRY_VAL(obj, NPF_USER_RID))); - pdb_set_group_sid_from_rid(pw_buf, atoi(ENTRY_VAL(obj, NPF_GROUP_RID))); + if(delresult->status != NIS_SUCCESS) { + DEBUG(0, ("NIS+ table update failed: %s %s\n", + nisname, nis_sperrno(delresult->status))); + nis_freeresult(delresult); + return False; + } + nis_freeresult(delresult); + return True; + DEBUG(10, ("nisplussam_delete_sam_account called\n")); + return False; +} - /* values, must exist for user */ - if( !(pdb_get_acct_ctrl(pw_buf) & ACB_WSTRUST) ) { - - get_single_attribute(obj, NPF_HOME_DIR, home_dir, sizeof(pstring)); - if( !(home_dir && *home_dir) ) { - pstrcpy(home_dir, lp_logon_home()); - pdb_set_homedir(pw_buf, home_dir, False); - } - else - pdb_set_homedir(pw_buf, home_dir, True); +/*************************************************************************** + Modifies an existing SAM_ACCOUNT +****************************************************************************/ - get_single_attribute(obj, NPF_DIR_DRIVE, home_drive, sizeof(pstring)); - if( !(home_drive && *home_drive) ) { - pstrcpy(home_drive, lp_logon_drive()); - pdb_set_dir_drive(pw_buf, home_drive, False); - } - else - pdb_set_dir_drive(pw_buf, home_drive, True); +static BOOL nisplussam_update_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) +{ + nis_result *result, *addresult; + nis_object *obj; + nis_object new_obj; + entry_col *ecol; + int ta_maxcol; + char *pfile = lp_smb_passwd_file(); + pstring nisname; - get_single_attribute(obj, NPF_LOGON_SCRIPT, logon_script, - sizeof(pstring)); - if( !(logon_script && *logon_script) ) { - pstrcpy(logon_script, lp_logon_script()); + if (!*pfile) + { + DEBUG(0, ("no SMB password file set\n")); + return False; } - else - pdb_set_logon_script(pw_buf, logon_script, True); + if( strrchr( pfile, '/') ) + pfile = strrchr( pfile, '/') + 1; + + slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.org_dir", + pdb_get_username(newpwd), pfile); + + DEBUG(10, ("search by name: %s\n", nisname)); + + /* Search the table. */ + + if( !(result = nisp_get_nis_list(nisname, MASTER_ONLY|FOLLOW_LINKS|\ + FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP))) { + return False; + } + + if(result->status != NIS_SUCCESS || NIS_RES_NUMOBJ(result) <= 0) { + /* User not found. */ + DEBUG(0,("user not found in NIS+\n")); + nis_freeresult(result); + return False; + } - get_single_attribute(obj, NPF_PROFILE_PATH, profile_path, sizeof(pstring)); - if( !(profile_path && *profile_path) ) { - pstrcpy(profile_path, lp_logon_path()); - pdb_set_profile_path(pw_buf, profile_path, False); - } - else - pdb_set_profile_path(pw_buf, profile_path, True); + obj = NIS_RES_OBJECT(result); + DEBUG(6,("entry found in %s\n", obj->zo_domain)); - } - else - { - /* lkclXXXX this is OBSERVED behaviour by NT PDCs, enforced here. */ - pdb_set_group_sid_from_rid (pw_buf, DOMAIN_GROUP_RID_USERS); + /* we must create new stub object with EN_MODIFIED flag. + this is because obj from result is going to be freed and + we do not want to break it or cause memory leaks or corruption. + */ + + memmove((char *)&new_obj, obj, sizeof (new_obj)); + ta_maxcol = obj->TA_data.ta_maxcol; + + if(!(ecol = (entry_col*)malloc(ta_maxcol*sizeof(entry_col)))) { + DEBUG(0, ("memory allocation failure\n")); + nis_freeresult(result); + return False; } - /* Check the lanman password column. */ - ptr = (char *)ENTRY_VAL(obj, NPF_LMPWD); - if (!pdb_set_lanman_passwd(pw_buf, NULL)) - return False; + memmove((char *)ecol, obj->EN_data.en_cols.en_cols_val, + ta_maxcol*sizeof (entry_col)); + new_obj.EN_data.en_cols.en_cols_val = ecol; + new_obj.EN_data.en_cols.en_cols_len = ta_maxcol; - if (!strncasecmp(ptr, "NO PASSWORD", 11)) { - pdb_set_acct_ctrl(pw_buf, pdb_get_acct_ctrl(pw_buf) | ACB_PWNOTREQ); - } else { - if (strlen(ptr) != 32 || !pdb_gethexpwd(ptr, smbpwd)) { - DEBUG(0, ("malformed LM pwd entry: %s.\n", - pdb_get_username(pw_buf))); - return False; - } - if (!pdb_set_lanman_passwd(pw_buf, smbpwd)) - return False; - } - - /* Check the NT password column. */ - ptr = ENTRY_VAL(obj, NPF_NTPWD); - if (!pdb_set_nt_passwd(pw_buf, NULL)) - return False; + if ( init_nisp_from_sam(&new_obj, newpwd, obj) == True ) { + slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.%s", + pdb_get_username(newpwd), pfile, obj->zo_domain); + + DEBUG(10, ("NIS+ table update: %s\n", nisname)); + addresult = + nis_modify_entry(nisname, &new_obj, + MOD_SAMEOBJ | FOLLOW_PATH | EXPAND_NAME | HARD_LOOKUP); - if (!(pdb_get_acct_ctrl(pw_buf) & ACB_PWNOTREQ) && - strncasecmp(ptr, "NO PASSWORD", 11)) { - if (strlen(ptr) != 32 || !pdb_gethexpwd(ptr, smbntpwd)) { - DEBUG(0, ("malformed NT pwd entry:\ - uid = %d.\n", - pdb_get_uid(pw_buf))); + if(addresult->status != NIS_SUCCESS) { + DEBUG(0, ("NIS+ table update failed: %s %s\n", + nisname, nis_sperrno(addresult->status))); + nis_freeresult(addresult); + nis_freeresult(result); + free(ecol); return False; } - if (!pdb_set_nt_passwd(pw_buf, smbntpwd)) - return False; - } - - pdb_set_unknown_3(pw_buf, 0xffffff); /* don't know */ - pdb_set_logon_divs(pw_buf, 168); /* hours per week */ - - if( (hours_len = ENTRY_LEN(obj, NPF_HOURS)) == 21 ) { - memcpy(hours, ENTRY_VAL(obj, NPF_HOURS), hours_len); + + DEBUG(6,("password changed\n")); + nis_freeresult(addresult); } else { - hours_len = 21; /* 21 times 8 bits = 168 */ - /* available at all hours */ - memset(hours, 0xff, hours_len); + DEBUG(6,("nothing to change!\n")); } - pdb_set_hours_len(pw_buf, hours_len); - pdb_set_hours(pw_buf, hours); - - pdb_set_unknown_5(pw_buf, 0x00020000); /* don't know */ - pdb_set_unknown_6(pw_buf, 0x000004ec); /* don't know */ + free(ecol); + nis_freeresult(result); + return True; -} -/************************************************************************ - makes a struct sam_passwd from a NIS+ result. - ************************************************************************/ -static BOOL make_sam_from_nisresult(SAM_ACCOUNT *pw_buf, const nis_result *result) -{ - if (pw_buf == NULL || result == NULL) return False; - - if (result->status != NIS_SUCCESS && result->status != NIS_NOTFOUND) - { - DEBUG(0, ("NIS+ lookup failure: %s\n", - nis_sperrno(result->status))); - return False; - } - - /* User not found. */ - if (NIS_RES_NUMOBJ(result) <= 0) - { - DEBUG(10, ("user not found in NIS+\n")); - return False; - } - - if (NIS_RES_NUMOBJ(result) > 1) - { - DEBUG(10, ("WARNING: Multiple entries for user in NIS+ table!\n")); - } - - /* Grab the first hit. */ - return make_sam_from_nisp_object(pw_buf, &NIS_RES_OBJECT(result)[0]); + DEBUG(10, ("nisplussam_update_sam_account called\n")); + return False; } -/************************************************************************* - sets a NIS+ attribute - *************************************************************************/ -static void set_single_attribute(nis_object *new_obj, int col, - const char *val, int len, int flags) -{ - if (new_obj == NULL) return; - - ENTRY_VAL(new_obj, col) = val; - ENTRY_LEN(new_obj, col) = len+1; - - if (flags != 0) - { - new_obj->EN_data.en_cols.en_cols_val[col].ec_flags = flags; - } -} +/*************************************************************************** + Adds an existing SAM_ACCOUNT +****************************************************************************/ -/*************************************************************** - copy or modify nis object. this object is used to add or update - nisplus table entry. - ****************************************************************/ -static BOOL init_nisp_from_sam(nis_object *obj, const SAM_ACCOUNT *sampass, - nis_object *old) +static BOOL nisplussam_add_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) { + int local_user = 0; + char *pfile; + pstring pfiletmp; + char *nisname; + nis_result *result = NULL, + *tblresult = NULL; + nis_object new_obj; + entry_col *ecol; + int ta_maxcol; + /* - * Fill nis_object for entry add or update. - * if we are updateing, we have to find out differences and set - * EN_MODIFIED flag. also set need_to_modify to trigger - * nis_modify_entry() call in pdb_update_sam_account(). + * 1. find user domain. + * a. try nis search in passwd.org_dir - if found use domain from result. + * b. try getpwnam. this may be needed if user is defined + * in /etc/passwd file (or elsewere) and not in passwd.org_dir. + * if found, use host default domain. + * c. exit with False - no such user. * - * TODO: - * get data from SAM - * if (modify) get data from nis_object, compare and store if - * different + set EN_MODIFIED and need_to_modify - * else - * store + * 2. add user + * a. find smbpasswd table + * search pfile in user domain if not found, try host default + * domain. + * b. smbpasswd domain is found, fill data and add entry. + * + * pfile should contain ONLY table name, org_dir will be concated. + * so, at first we will clear path prefix from pfile, and + * then we will use pfiletmp as playground to put together full + * nisname string. + * such approach will make it possible to specify samba private dir + * AND still use NIS+ table. as all domain related data is normally + * stored in org_dir.DOMAIN, this should be ok do do. */ - BOOL need_to_modify = False; - const char *name = pdb_get_username(sampass); /* from SAM */ - /* these must be static or allocate and free entry columns! */ - static fstring uid; /* from SAM */ - static fstring user_rid; /* from SAM */ - static fstring gid; /* from SAM */ - static fstring group_rid; /* from SAM */ - char *acb; /* from SAM */ - static fstring smb_passwd; /* from SAM */ - static fstring smb_nt_passwd; /* from SAM */ - static fstring logon_t; /* from SAM */ - static fstring logoff_t; /* from SAM */ - static fstring kickoff_t; /* from SAM */ - static fstring pwdlset_t; /* from SAM */ - static fstring pwdlchg_t; /* from SAM */ - static fstring pwdmchg_t; /* from SAM */ - static fstring full_name; /* from SAM */ - static fstring acct_desc; /* from SAM */ - static char empty[1]; /* just an empty string */ - slprintf(uid, sizeof(uid)-1, "%u", pdb_get_uid(sampass)); - slprintf(user_rid, sizeof(user_rid)-1, "%u", - pdb_get_user_rid(sampass)? pdb_get_user_rid(sampass): - pdb_uid_to_user_rid(pdb_get_uid(sampass))); - slprintf(gid, sizeof(gid)-1, "%u", pdb_get_gid(sampass)); + pfile = lp_smb_passwd_file(); + if( strrchr( pfile, '/') ) + pfile = strrchr( pfile, '/') + 1; - { - uint32 rid; - GROUP_MAP map; - - rid=pdb_get_group_rid(sampass); + /* + * Check if user is already there. + */ + safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); + safe_strcat(pfiletmp, ".org_dir", + sizeof(pfiletmp)-strlen(pfiletmp)-1); - if (rid==0) { - if (get_group_map_from_gid(pdb_get_gid(sampass), &map, MAPPING_WITHOUT_PRIV)) { - if (!sid_peek_check_rid(get_global_sam_sid(), &map.sid, &rid)) - return False; - } else - rid=pdb_gid_to_group_rid(pdb_get_gid(sampass)); - } + if(pdb_get_username(newpwd) != NULL) { + nisname = make_nisname_from_name(pdb_get_username(newpwd), + pfiletmp); + } else { + return False; + } - slprintf(group_rid, sizeof(group_rid)-1, "%u", rid); - } - - acb = pdb_encode_acct_ctrl(pdb_get_acct_ctrl(sampass), - NEW_PW_FORMAT_SPACE_PADDED_LEN); - pdb_sethexpwd (smb_passwd, pdb_get_lanman_passwd(sampass), - pdb_get_acct_ctrl(sampass)); - pdb_sethexpwd (smb_nt_passwd, pdb_get_nt_passwd(sampass), - pdb_get_acct_ctrl(sampass)); - slprintf(logon_t, 13, "LNT-%08X", - (uint32)pdb_get_logon_time(sampass)); - slprintf(logoff_t, 13, "LOT-%08X", - (uint32)pdb_get_logoff_time(sampass)); - slprintf(kickoff_t, 13, "KOT-%08X", - (uint32)pdb_get_kickoff_time(sampass)); - slprintf(pwdlset_t, 13, "LCT-%08X", - (uint32)pdb_get_pass_last_set_time(sampass)); - slprintf(pwdlchg_t, 13, "CCT-%08X", - (uint32)pdb_get_pass_can_change_time(sampass)); - slprintf(pwdmchg_t, 13, "MCT-%08X", - (uint32)pdb_get_pass_must_change_time(sampass)); - safe_strcpy(full_name, pdb_get_fullname(sampass), sizeof(full_name)-1); - safe_strcpy(acct_desc, pdb_get_acct_desc(sampass), sizeof(acct_desc)-1); + if(!(result = nisp_get_nis_list(nisname, MASTER_ONLY|FOLLOW_LINKS|\ + FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP))) { + return False; + } + if (result->status != NIS_SUCCESS && + result->status != NIS_NOTFOUND) { + DEBUG(3, ( "nis_list failure: %s: %s\n", + nisname, nis_sperrno(result->status))); + nis_freeresult(result); + return False; + } -#if 0 + if (result->status == NIS_SUCCESS && NIS_RES_NUMOBJ(result) > 0) + { + DEBUG(3, ("User already exists in NIS+ password db: %s\n", + pfile)); + nis_freeresult(result); + return False; + } - /* Not sure what to do with these guys. -tpot */ + nis_freeresult(result); /* no such user, free results */ - dos_to_unix(full_name, True); - dos_to_unix(acct_desc, True); + /* + * check for user in unix password database. we need this to get + * domain, where smbpasswd entry should be stored. + */ -#endif + nisname = make_nisname_from_name(pdb_get_username(newpwd), + "passwd.org_dir"); + + result = nisp_get_nis_list(nisname, + MASTER_ONLY|FOLLOW_LINKS|FOLLOW_PATH|\ + EXPAND_NAME|HARD_LOOKUP); + + if (result->status != NIS_SUCCESS || NIS_RES_NUMOBJ(result) <= 0) + { + struct passwd *passwd; + DEBUG(3, ("nis_list failure: %s: %s\n", + nisname, nis_sperrno(result->status))); + nis_freeresult(result); - if( old ) { - /* name */ - if(strcmp(ENTRY_VAL(old, NPF_NAME), name)) - { - need_to_modify = True; - set_single_attribute(obj, NPF_NAME, name, strlen(name), - EN_MODIFIED); + if (!(passwd = getpwnam_alloc(pdb_get_username(newpwd)))) { + /* no such user in system! */ + return False; } + passwd_free(&passwd); + + /* + * user is defined, but not in passwd.org_dir. + */ + local_user = 1; + } else { + safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); + safe_strcat(pfiletmp, ".", sizeof(pfiletmp)-strlen(pfiletmp)-1); + safe_strcat(pfiletmp, NIS_RES_OBJECT(result)->zo_domain, + sizeof(pfiletmp)-strlen(pfiletmp)-1); + nis_freeresult(result); /* not needed any more */ + tblresult = nisp_get_nis_list(pfiletmp, + MASTER_ONLY|FOLLOW_LINKS|\ + FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP); + } - /* uid */ - if(pdb_get_uid(sampass) != -1) { - if(!ENTRY_VAL(old, NPF_UID) || strcmp(ENTRY_VAL(old, NPF_UID), uid)) + if (local_user || tblresult->status != NIS_SUCCESS) + { + /* + * no user domain or + * smbpasswd table not found in user domain, fallback to + * default domain. + */ + if (!local_user) /* free previous failed search result */ + nis_freeresult(tblresult); + + safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); + safe_strcat(pfiletmp, ".org_dir", + sizeof(pfiletmp)-strlen(pfiletmp)-1); + tblresult = nis_lookup(pfiletmp, MASTER_ONLY|FOLLOW_LINKS|\ + FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP); + if (tblresult->status != NIS_SUCCESS) { - need_to_modify = True; - set_single_attribute(obj, NPF_UID, uid, - strlen(uid), EN_MODIFIED); + /* still nothing. bail out */ + nis_freeresult(tblresult); + DEBUG(3, ( "nis_lookup failure: %s\n", + nis_sperrno(tblresult->status))); + return False; } - } - - /* user_rid */ - if (pdb_get_user_rid(sampass)) { - if(!ENTRY_VAL(old, NPF_USER_RID) || - strcmp(ENTRY_VAL(old, NPF_USER_RID), user_rid) ) { - need_to_modify = True; - set_single_attribute(obj, NPF_USER_RID, user_rid, - strlen(user_rid), EN_MODIFIED); - } - } - - /* smb_grpid */ - if (pdb_get_gid(sampass) != -1) { - if(!ENTRY_VAL(old, NPF_SMB_GRPID) || - strcmp(ENTRY_VAL(old, NPF_SMB_GRPID), gid) ) { - need_to_modify = True; - set_single_attribute(obj, NPF_SMB_GRPID, gid, - strlen(gid), EN_MODIFIED); - } + /* we need full name for nis_add_entry() */ + safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); + safe_strcat(pfiletmp, ".", sizeof(pfiletmp)-strlen(pfiletmp)-1); + safe_strcat(pfiletmp, NIS_RES_OBJECT(tblresult)->zo_domain, + sizeof(pfiletmp)-strlen(pfiletmp)-1); } - /* group_rid */ - if (pdb_get_group_rid(sampass)) { - if(!ENTRY_VAL(old, NPF_GROUP_RID) || - strcmp(ENTRY_VAL(old, NPF_GROUP_RID), group_rid) ) { - need_to_modify = True; - set_single_attribute(obj, NPF_GROUP_RID, group_rid, - strlen(group_rid), EN_MODIFIED); - } - } + memset((char *)&new_obj, 0, sizeof (new_obj)); + /* fill entry headers */ + /* we do not free these. */ + new_obj.zo_name = NIS_RES_OBJECT(tblresult)->zo_name; + new_obj.zo_owner = NIS_RES_OBJECT(tblresult)->zo_owner; + new_obj.zo_group = NIS_RES_OBJECT(tblresult)->zo_group; + new_obj.zo_domain = NIS_RES_OBJECT(tblresult)->zo_domain; + /* uints */ + new_obj.zo_access = NIS_RES_OBJECT(tblresult)->zo_access; + new_obj.zo_ttl = NIS_RES_OBJECT(tblresult)->zo_ttl; - /* acb */ - if (!ENTRY_VAL(old, NPF_ACB) || - strcmp(ENTRY_VAL(old, NPF_ACB), acb)) { - need_to_modify = True; - set_single_attribute(obj, NPF_ACB, acb, strlen(acb), EN_MODIFIED); - } - - /* lmpwd */ - if(!ENTRY_VAL(old, NPF_LMPWD) || - strcmp(ENTRY_VAL(old, NPF_LMPWD), smb_passwd) ) { - need_to_modify = True; - set_single_attribute(obj, NPF_LMPWD, smb_passwd, - strlen(smb_passwd), EN_CRYPT|EN_MODIFIED); - } + new_obj.zo_data.zo_type = ENTRY_OBJ; + new_obj.EN_data.en_type = + NIS_RES_OBJECT(tblresult)->TA_data.ta_type; - /* ntpwd */ - if(!ENTRY_VAL(old, NPF_NTPWD) || - strcmp(ENTRY_VAL(old, NPF_NTPWD), smb_nt_passwd) ) { - need_to_modify = True; - set_single_attribute(obj, NPF_NTPWD, smb_nt_passwd, - strlen(smb_nt_passwd), EN_CRYPT|EN_MODIFIED); - } + ta_maxcol = NIS_RES_OBJECT(tblresult)->TA_data.ta_maxcol; + + if(!(ecol = (entry_col*)malloc(ta_maxcol*sizeof(entry_col)))) { + DEBUG(0, ("memory allocation failure\n")); + nis_freeresult(tblresult); + return False; + } + + memset((char *)ecol, 0, ta_maxcol*sizeof (entry_col)); + new_obj.EN_data.en_cols.en_cols_val = ecol; + new_obj.EN_data.en_cols.en_cols_len = ta_maxcol; + + init_nisp_from_sam(&new_obj, newpwd, NULL); + + DEBUG(10, ( "add NIS+ entry: %s\n", nisname)); + result = nis_add_entry(pfiletmp, &new_obj, 0); - /* logon_t */ - if( pdb_get_logon_time(sampass) && - (!ENTRY_VAL(old, NPF_LOGON_T) || - strcmp(ENTRY_VAL(old, NPF_LOGON_T), logon_t ))) { - need_to_modify = True; - set_single_attribute(obj, NPF_LOGON_T, logon_t, - strlen(logon_t), EN_MODIFIED); + free(ecol); /* free allocated entry space */ + + if (result->status != NIS_SUCCESS) + { + DEBUG(3, ( "NIS+ table update failed: %s,%s\n", + nisname, nis_sperrno(result->status))); + nis_freeresult(tblresult); + nis_freeresult(result); + return False; } + + nis_freeresult(tblresult); + nis_freeresult(result); + + return True; - /* logoff_t */ - if( pdb_get_logoff_time(sampass) && - (!ENTRY_VAL(old, NPF_LOGOFF_T) || - strcmp(ENTRY_VAL(old, NPF_LOGOFF_T), logoff_t))) { - need_to_modify = True; - set_single_attribute(obj, NPF_LOGOFF_T, logoff_t, - strlen(logoff_t), EN_MODIFIED); - } + DEBUG(10, ("nisplussam_add_sam_account called\n")); + return False; +} - /* kick_t */ - if( pdb_get_kickoff_time(sampass) && - (!ENTRY_VAL(old, NPF_KICK_T) || - strcmp(ENTRY_VAL(old, NPF_KICK_T), kickoff_t))) { - need_to_modify = True; - set_single_attribute(obj, NPF_KICK_T, kickoff_t, - strlen(kickoff_t), EN_MODIFIED); +NTSTATUS pdb_init_nisplussam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location) +{ + NTSTATUS nt_status; + + if (!NT_STATUS_IS_OK(nt_status = make_pdb_methods(pdb_context->mem_ctx, pdb_method))) { + return nt_status; + } + + (*pdb_method)->name = "nisplussam"; + + /* Functions your pdb module doesn't provide should be set + * to NULL */ + + (*pdb_method)->setsampwent = nisplussam_setsampwent; + (*pdb_method)->endsampwent = nisplussam_endsampwent; + (*pdb_method)->getsampwent = nisplussam_getsampwent; + (*pdb_method)->getsampwnam = nisplussam_getsampwnam; + (*pdb_method)->getsampwsid = nisplussam_getsampwsid; + (*pdb_method)->add_sam_account = nisplussam_add_sam_account; + (*pdb_method)->update_sam_account = nisplussam_update_sam_account; + (*pdb_method)->delete_sam_account = nisplussam_delete_sam_account; + (*pdb_method)->private_data = malloc(sizeof(struct nisp_enum_info)); + + return NT_STATUS_OK; +} + + +/******************************************************************* + converts UNIX uid to an NT User RID. + ********************************************************************/ + +static uint32 pdb_uid_to_user_rid(uid_t uid) +{ + return (((((uint32)uid)*RID_MULTIPLIER) + 1000) | USER_RID_TYPE); +} + +/*************************************************************** + make_nisname_from_user_rid + ****************************************************************/ +static char *make_nisname_from_user_rid(uint32 rid, char *pfile) +{ + static pstring nisname; + + safe_strcpy(nisname, "[user_rid=", sizeof(nisname)-1); + slprintf(nisname, sizeof(nisname)-1, "%s%d", nisname, rid); + safe_strcat(nisname, "],", sizeof(nisname)-strlen(nisname)-1); + safe_strcat(nisname, pfile, sizeof(nisname)-strlen(nisname)-1); + + return nisname; +} + +/*************************************************************** + make_nisname_from_name + ****************************************************************/ +static char *make_nisname_from_name(const char *user_name, char *pfile) +{ + static pstring nisname; + + safe_strcpy(nisname, "[name=", sizeof(nisname)-1); + safe_strcat(nisname, user_name, sizeof(nisname) - strlen(nisname) - 1); + safe_strcat(nisname, "],", sizeof(nisname)-strlen(nisname)-1); + safe_strcat(nisname, pfile, sizeof(nisname)-strlen(nisname)-1); + + return nisname; +} + +/************************************************************************* + gets a NIS+ attribute + *************************************************************************/ +static void get_single_attribute(const nis_object *new_obj, int col, + char *val, int len) +{ + int entry_len; + + if (new_obj == NULL || val == NULL) return; + + entry_len = ENTRY_LEN(new_obj, col); + if (len > entry_len) + { + len = entry_len; + } + + safe_strcpy(val, ENTRY_VAL(new_obj, col), len-1); +} + +/************************************************************************ + makes a struct sam_passwd from a NIS+ object. + ************************************************************************/ +static BOOL make_sam_from_nisp_object(SAM_ACCOUNT *pw_buf, const nis_object *obj) +{ + char *ptr; + pstring full_name; /* this must be translated to dos code page */ + pstring acct_desc; /* this must be translated to dos code page */ + pstring home_dir; /* set default value from smb.conf for user */ + pstring home_drive; /* set default value from smb.conf for user */ + pstring logon_script; /* set default value from smb.conf for user */ + pstring profile_path; /* set default value from smb.conf for user */ + pstring hours; + int hours_len; + unsigned char smbpwd[16]; + unsigned char smbntpwd[16]; + + + /* + * time values. note: this code assumes 32bit time_t! + */ + + /* Don't change these timestamp settings without a good reason. They are + important for NT member server compatibility. */ + + pdb_set_logon_time(pw_buf, (time_t)0, True); + ptr = (uchar *)ENTRY_VAL(obj, NPF_LOGON_T); + if(ptr && *ptr && (StrnCaseCmp(ptr, "LNT-", 4)==0)) { + int i; + ptr += 4; + for(i = 0; i < 8; i++) { + if(ptr[i] == '\0' || !isxdigit(ptr[i])) + break; } - - /* pwdlset_t */ - if( pdb_get_pass_last_set_time(sampass) && - (!ENTRY_VAL(old, NPF_PWDLSET_T) || - strcmp(ENTRY_VAL(old, NPF_PWDLSET_T), pwdlset_t))) { - need_to_modify = True; - set_single_attribute(obj, NPF_PWDLSET_T, pwdlset_t, - strlen(pwdlset_t), EN_MODIFIED); + if(i == 8) { + pdb_set_logon_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); } + } - /* pwdlchg_t */ - if( pdb_get_pass_can_change_time(sampass) && - (!ENTRY_VAL(old, NPF_PWDCCHG_T) || - strcmp(ENTRY_VAL(old, NPF_PWDCCHG_T), pwdlchg_t))) { - need_to_modify = True; - set_single_attribute(obj, NPF_PWDCCHG_T, pwdlchg_t, - strlen(pwdlchg_t), EN_MODIFIED); + pdb_set_logoff_time(pw_buf, get_time_t_max(), True); + ptr = (uchar *)ENTRY_VAL(obj, NPF_LOGOFF_T); + if(ptr && *ptr && (StrnCaseCmp(ptr, "LOT-", 4)==0)) { + int i; + ptr += 4; + for(i = 0; i < 8; i++) { + if(ptr[i] == '\0' || !isxdigit(ptr[i])) + break; + } + if(i == 8) { + pdb_set_logoff_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); } + } - /* pwdmchg_t */ - if( pdb_get_pass_must_change_time(sampass) && - (!ENTRY_VAL(old, NPF_PWDMCHG_T) || - strcmp(ENTRY_VAL(old, NPF_PWDMCHG_T), pwdmchg_t))) { - need_to_modify = True; - set_single_attribute(obj, NPF_PWDMCHG_T, pwdmchg_t, - strlen(pwdmchg_t), EN_MODIFIED); + pdb_set_kickoff_time(pw_buf, get_time_t_max(), True); + ptr = (uchar *)ENTRY_VAL(obj, NPF_KICK_T); + if(ptr && *ptr && (StrnCaseCmp(ptr, "KOT-", 4)==0)) { + int i; + ptr += 4; + for(i = 0; i < 8; i++) { + if(ptr[i] == '\0' || !isxdigit(ptr[i])) + break; } - - /* full_name */ - /* must support set, unset and change */ - if ( (pdb_get_fullname(sampass) && - !ENTRY_VAL(old, NPF_FULL_NAME)) || - (ENTRY_VAL(old, NPF_FULL_NAME) && - !pdb_get_fullname(sampass)) || - (ENTRY_VAL(old, NPF_FULL_NAME) && - pdb_get_fullname(sampass) && - strcmp( ENTRY_VAL(old, NPF_FULL_NAME), full_name ))) { - need_to_modify = True; - set_single_attribute(obj, NPF_FULL_NAME, full_name, - strlen(full_name), EN_MODIFIED); + if(i == 8) { + pdb_set_kickoff_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); } - - /* home_dir */ - /* must support set, unset and change */ - if( (pdb_get_homedir(sampass) && - !ENTRY_VAL(old, NPF_HOME_DIR)) || - (ENTRY_VAL(old, NPF_HOME_DIR) && - !pdb_get_homedir(sampass)) || - (ENTRY_VAL(old, NPF_HOME_DIR) && - pdb_get_homedir(sampass) && - strcmp( ENTRY_VAL(old, NPF_HOME_DIR), - pdb_get_homedir(sampass)))) { - need_to_modify = True; - set_single_attribute(obj, NPF_HOME_DIR, pdb_get_homedir(sampass), - strlen(pdb_get_homedir(sampass)), EN_MODIFIED); + } + + pdb_set_pass_last_set_time(pw_buf, (time_t)0); + ptr = (uchar *)ENTRY_VAL(obj, NPF_PWDLSET_T); + if(ptr && *ptr && (StrnCaseCmp(ptr, "LCT-", 4)==0)) { + int i; + ptr += 4; + for(i = 0; i < 8; i++) { + if(ptr[i] == '\0' || !isxdigit(ptr[i])) + break; } - - /* dir_drive */ - /* must support set, unset and change */ - if( (pdb_get_dir_drive(sampass) && - !ENTRY_VAL(old, NPF_DIR_DRIVE)) || - (ENTRY_VAL(old, NPF_DIR_DRIVE) && - !pdb_get_dir_drive(sampass)) || - (ENTRY_VAL(old, NPF_DIR_DRIVE) && - pdb_get_dir_drive(sampass) && - strcmp( ENTRY_VAL(old, NPF_DIR_DRIVE), - pdb_get_dir_drive(sampass)))) { - need_to_modify = True; - set_single_attribute(obj, NPF_DIR_DRIVE, pdb_get_dir_drive(sampass), - strlen(pdb_get_dir_drive(sampass)), EN_MODIFIED); + if(i == 8) { + pdb_set_pass_last_set_time(pw_buf, (time_t)strtol(ptr, NULL, 16)); } - - /* logon_script */ - /* must support set, unset and change */ - if( (pdb_get_logon_script(sampass) && - !ENTRY_VAL(old, NPF_LOGON_SCRIPT) || - (ENTRY_VAL(old, NPF_LOGON_SCRIPT) && - !pdb_get_logon_script(sampass)) || - ( ENTRY_VAL(old, NPF_LOGON_SCRIPT) && - pdb_get_logon_script(sampass) && - strcmp( ENTRY_VAL(old, NPF_LOGON_SCRIPT), - pdb_get_logon_script(sampass))))) { - need_to_modify = True; - set_single_attribute(obj, NPF_LOGON_SCRIPT, - pdb_get_logon_script(sampass), - strlen(pdb_get_logon_script(sampass)), - EN_MODIFIED); + } + + pdb_set_pass_can_change_time(pw_buf, (time_t)0, True); + ptr = (uchar *)ENTRY_VAL(obj, NPF_PWDCCHG_T); + if(ptr && *ptr && (StrnCaseCmp(ptr, "CCT-", 4)==0)) { + int i; + ptr += 4; + for(i = 0; i < 8; i++) { + if(ptr[i] == '\0' || !isxdigit(ptr[i])) + break; } - - /* profile_path */ - /* must support set, unset and change */ - if( (pdb_get_profile_path(sampass) && - !ENTRY_VAL(old, NPF_PROFILE_PATH)) || - (ENTRY_VAL(old, NPF_PROFILE_PATH) && - !pdb_get_profile_path(sampass)) || - (ENTRY_VAL(old, NPF_PROFILE_PATH) && - pdb_get_profile_path(sampass) && - strcmp( ENTRY_VAL(old, NPF_PROFILE_PATH), - pdb_get_profile_path(sampass) ) )) { - need_to_modify = True; - set_single_attribute(obj, NPF_PROFILE_PATH, - pdb_get_profile_path(sampass), - strlen(pdb_get_profile_path(sampass)), - EN_MODIFIED); + if(i == 8) { + pdb_set_pass_can_change_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); } - - /* acct_desc */ - /* must support set, unset and change */ - if( (pdb_get_acct_desc(sampass) && - !ENTRY_VAL(old, NPF_ACCT_DESC)) || - (ENTRY_VAL(old, NPF_ACCT_DESC) && - !pdb_get_acct_desc(sampass)) || - (ENTRY_VAL(old, NPF_ACCT_DESC) && - pdb_get_acct_desc(sampass) && - strcmp( ENTRY_VAL(old, NPF_ACCT_DESC), acct_desc ) )) { - need_to_modify = True; - set_single_attribute(obj, NPF_ACCT_DESC, acct_desc, - strlen(acct_desc), EN_MODIFIED); + } + + pdb_set_pass_must_change_time(pw_buf, get_time_t_max(), True); /* Password never expires. */ + ptr = (uchar *)ENTRY_VAL(obj, NPF_PWDMCHG_T); + if(ptr && *ptr && (StrnCaseCmp(ptr, "MCT-", 4)==0)) { + int i; + ptr += 4; + for(i = 0; i < 8; i++) { + if(ptr[i] == '\0' || !isxdigit(ptr[i])) + break; } - - /* workstations */ - /* must support set, unset and change */ - if ( (pdb_get_workstations(sampass) && - !ENTRY_VAL(old, NPF_WORKSTATIONS) ) || - (ENTRY_VAL(old, NPF_WORKSTATIONS) && - !pdb_get_workstations(sampass)) || - (ENTRY_VAL(old, NPF_WORKSTATIONS) && - pdb_get_workstations(sampass)) && - strcmp( ENTRY_VAL(old, NPF_WORKSTATIONS), - pdb_get_workstations(sampass))) { - need_to_modify = True; - set_single_attribute(obj, NPF_WORKSTATIONS, - pdb_get_workstations(sampass), - strlen(pdb_get_workstations(sampass)), - EN_MODIFIED); + if(i == 8) { + pdb_set_pass_must_change_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); } - - /* hours */ - if ((pdb_get_hours_len(sampass) != ENTRY_LEN(old, NPF_HOURS)) || - memcmp(pdb_get_hours(sampass), ENTRY_VAL(old, NPF_HOURS), - ENTRY_LEN(old, NPF_HOURS))) { - need_to_modify = True; - /* set_single_attribute will add 1 for len ... */ - set_single_attribute(obj, NPF_HOURS, pdb_get_hours(sampass), - pdb_get_hours_len(sampass)-1, EN_MODIFIED); - } - } else { - const char *homedir, *dirdrive, *logon_script, *profile_path, *workstations; + } - *empty = '\0'; /* empty string */ + /* string values */ + pdb_set_username(pw_buf, ENTRY_VAL(obj, NPF_NAME)); + pdb_set_domain(pw_buf, lp_workgroup()); + /* pdb_set_nt_username() -- cant set it here... */ - set_single_attribute(obj, NPF_NAME, name, strlen(name), 0); - set_single_attribute(obj, NPF_UID, uid, strlen(uid), 0); - set_single_attribute(obj, NPF_USER_RID, user_rid, - strlen(user_rid), 0); - set_single_attribute(obj, NPF_SMB_GRPID, gid, strlen(gid), 0); - set_single_attribute(obj, NPF_GROUP_RID, group_rid, - strlen(group_rid), 0); - set_single_attribute(obj, NPF_ACB, acb, strlen(acb), 0); - set_single_attribute(obj, NPF_LMPWD, smb_passwd, - strlen(smb_passwd), EN_CRYPT); - set_single_attribute(obj, NPF_NTPWD, smb_nt_passwd, - strlen(smb_nt_passwd), EN_CRYPT); - set_single_attribute(obj, NPF_LOGON_T, logon_t, - strlen(logon_t), 0); - set_single_attribute(obj, NPF_LOGOFF_T, logoff_t, - strlen(logoff_t), 0); - set_single_attribute(obj, NPF_KICK_T, kickoff_t, - strlen(kickoff_t),0); - set_single_attribute(obj, NPF_PWDLSET_T, pwdlset_t, - strlen(pwdlset_t), 0); - set_single_attribute(obj, NPF_PWDCCHG_T, pwdlchg_t, - strlen(pwdlchg_t), 0); - set_single_attribute(obj, NPF_PWDMCHG_T, pwdmchg_t, - strlen(pwdmchg_t), 0); - set_single_attribute(obj, NPF_FULL_NAME , - full_name, strlen(full_name), 0); + get_single_attribute(obj, NPF_FULL_NAME, full_name, sizeof(pstring)); +#if 0 + unix_to_dos(full_name, True); +#endif + pdb_set_fullname(pw_buf, full_name); - if(!(homedir = pdb_get_homedir(sampass))) - homedir = empty; + pdb_set_acct_ctrl(pw_buf, pdb_decode_acct_ctrl(ENTRY_VAL(obj, + NPF_ACB))); - set_single_attribute(obj, NPF_HOME_DIR, - homedir, strlen(homedir), 0); - - if(!(dirdrive = pdb_get_dir_drive(sampass))) - dirdrive = empty; - - set_single_attribute(obj, NPF_DIR_DRIVE, - dirdrive, strlen(dirdrive), 0); - - if(!(logon_script = pdb_get_logon_script(sampass))) - logon_script = empty; - - set_single_attribute(obj, NPF_LOGON_SCRIPT, - logon_script, strlen(logon_script), 0); - - if(!(profile_path = pdb_get_profile_path(sampass))) - profile_path = empty; + get_single_attribute(obj, NPF_ACCT_DESC, acct_desc, sizeof(pstring)); +#if 0 + unix_to_dos(acct_desc, True); +#endif + pdb_set_acct_desc(pw_buf, acct_desc); - set_single_attribute(obj, NPF_PROFILE_PATH, - profile_path, strlen(profile_path), 0); - - set_single_attribute(obj, NPF_ACCT_DESC, - acct_desc, strlen(acct_desc), 0); - - if(!(workstations = pdb_get_workstations(sampass))) - workstations = empty; - - set_single_attribute(obj, NPF_WORKSTATIONS, - workstations, strlen(workstations), 0); - - /* set_single_attribute will add 1 for len ... */ - set_single_attribute(obj, NPF_HOURS, - pdb_get_hours(sampass), - pdb_get_hours_len(sampass)-1, 0); - } - - return need_to_modify; -} + pdb_set_workstations(pw_buf, ENTRY_VAL(obj, NPF_WORKSTATIONS)); + pdb_set_munged_dial(pw_buf, NULL); -/*************************************************************** - calls nis_list, returns results. - ****************************************************************/ -static nis_result *nisp_get_nis_list(const char *nis_name, unsigned int flags) -{ - nis_result *result; - int i; + pdb_set_uid(pw_buf, atoi(ENTRY_VAL(obj, NPF_UID))); + pdb_set_gid(pw_buf, atoi(ENTRY_VAL(obj, NPF_SMB_GRPID))); + pdb_set_user_sid_from_rid(pw_buf, atoi(ENTRY_VAL(obj, NPF_USER_RID))); + pdb_set_group_sid_from_rid(pw_buf, atoi(ENTRY_VAL(obj, NPF_GROUP_RID))); - if( ! flags) - flags = FOLLOW_LINKS|FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP; + /* values, must exist for user */ + if( !(pdb_get_acct_ctrl(pw_buf) & ACB_WSTRUST) ) { + + get_single_attribute(obj, NPF_HOME_DIR, home_dir, sizeof(pstring)); + if( !(home_dir && *home_dir) ) { + pstrcpy(home_dir, lp_logon_home()); + pdb_set_homedir(pw_buf, home_dir, False); + } + else + pdb_set_homedir(pw_buf, home_dir, True); - for(i = 0; i<2;i++ ) { - alarm(60); /* hopefully ok for long searches */ - result = nis_list(nis_name, flags,NULL,NULL); + get_single_attribute(obj, NPF_DIR_DRIVE, home_drive, sizeof(pstring)); + if( !(home_drive && *home_drive) ) { + pstrcpy(home_drive, lp_logon_drive()); + pdb_set_dir_drive(pw_buf, home_drive, False); + } + else + pdb_set_dir_drive(pw_buf, home_drive, True); - alarm(0); - CatchSignal(SIGALRM, SIGNAL_CAST SIG_DFL); + get_single_attribute(obj, NPF_LOGON_SCRIPT, logon_script, + sizeof(pstring)); + if( !(logon_script && *logon_script) ) { + pstrcpy(logon_script, lp_logon_script()); + } + else + pdb_set_logon_script(pw_buf, logon_script, True); - if (gotalarm) - { - DEBUG(0,("NIS+ lookup time out\n")); - nis_freeresult(result); - return NULL; - } - if( !(flags & MASTER_ONLY) && NIS_RES_NUMOBJ(result) <= 0 ) { - /* nis replicas are not in sync perhaps? - * this can happen, if account was just added. - */ - DEBUG(10,("will try master only\n")); - nis_freeresult(result); - flags |= MASTER_ONLY; - } else - break; - } - return result; -} - -/*************************************************************** - Start to enumerate the nisplus passwd list. - ****************************************************************/ -BOOL pdb_setsampwent(BOOL update) -{ - char *sp, * p = lp_smb_passwd_file(); - pstring pfiletmp; - - if( (sp = strrchr( p, '/' )) ) - safe_strcpy(pfiletmp, sp+1, sizeof(pfiletmp)-1); - else - safe_strcpy(pfiletmp, p, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".org_dir", sizeof(pfiletmp)-strlen(pfiletmp)-1); + get_single_attribute(obj, NPF_PROFILE_PATH, profile_path, sizeof(pstring)); + if( !(profile_path && *profile_path) ) { + pstrcpy(profile_path, lp_logon_path()); + pdb_set_profile_path(pw_buf, profile_path, False); + } + else + pdb_set_profile_path(pw_buf, profile_path, True); - pdb_endsampwent(); /* just in case */ - global_nisp_ent.result = nisp_get_nis_list( pfiletmp, 0 ); - global_nisp_ent.enum_entry = 0; - return global_nisp_ent.result != NULL ? True : False; -} + } + else + { + /* lkclXXXX this is OBSERVED behaviour by NT PDCs, enforced here. */ + pdb_set_group_sid_from_rid (pw_buf, DOMAIN_GROUP_RID_USERS); + } -/*************************************************************** - End enumeration of the nisplus passwd list. -****************************************************************/ -void pdb_endsampwent(void) -{ - if( global_nisp_ent.result ) - nis_freeresult(global_nisp_ent.result); - global_nisp_ent.result = NULL; - global_nisp_ent.enum_entry = 0; -} + /* Check the lanman password column. */ + ptr = (char *)ENTRY_VAL(obj, NPF_LMPWD); + if (!pdb_set_lanman_passwd(pw_buf, NULL)) + return False; -/************************************************************************* - Routine to return the next entry in the nisplus passwd list. - *************************************************************************/ -BOOL pdb_getsampwent(SAM_ACCOUNT *user) -{ - int enum_entry = (int)(global_nisp_ent.enum_entry); - nis_result *result = global_nisp_ent.result; + if (!strncasecmp(ptr, "NO PASSWORD", 11)) { + pdb_set_acct_ctrl(pw_buf, pdb_get_acct_ctrl(pw_buf) | ACB_PWNOTREQ); + } else { + if (strlen(ptr) != 32 || !pdb_gethexpwd(ptr, smbpwd)) { + DEBUG(0, ("malformed LM pwd entry: %s.\n", + pdb_get_username(pw_buf))); + return False; + } + if (!pdb_set_lanman_passwd(pw_buf, smbpwd)) + return False; + } - if (user==NULL) { - DEBUG(0,("SAM_ACCOUNT is NULL.\n")); + /* Check the NT password column. */ + ptr = ENTRY_VAL(obj, NPF_NTPWD); + if (!pdb_set_nt_passwd(pw_buf, NULL)) return False; + + if (!(pdb_get_acct_ctrl(pw_buf) & ACB_PWNOTREQ) && + strncasecmp(ptr, "NO PASSWORD", 11)) { + if (strlen(ptr) != 32 || !pdb_gethexpwd(ptr, smbntpwd)) { + DEBUG(0, ("malformed NT pwd entry:\ + uid = %d.\n", + pdb_get_uid(pw_buf))); + return False; + } + if (!pdb_set_nt_passwd(pw_buf, smbntpwd)) + return False; + } + + pdb_set_unknown_3(pw_buf, 0xffffff); /* don't know */ + pdb_set_logon_divs(pw_buf, 168); /* hours per week */ + + if( (hours_len = ENTRY_LEN(obj, NPF_HOURS)) == 21 ) { + memcpy(hours, ENTRY_VAL(obj, NPF_HOURS), hours_len); + } else { + hours_len = 21; /* 21 times 8 bits = 168 */ + /* available at all hours */ + memset(hours, 0xff, hours_len); } + pdb_set_hours_len(pw_buf, hours_len); + pdb_set_hours(pw_buf, hours); - if (result == NULL || - enum_entry < 0 || enum_entry >= (NIS_RES_NUMOBJ(result) - 1)) - { - return False; - } + pdb_set_unknown_5(pw_buf, 0x00020000); /* don't know */ + pdb_set_unknown_6(pw_buf, 0x000004ec); /* don't know */ - if(!make_sam_from_nisp_object(user, &NIS_RES_OBJECT(result)[enum_entry]) ) - { - DEBUG(0,("Bad SAM_ACCOUNT entry returned from NIS+!\n")); - return False; - } - (int)(global_nisp_ent.enum_entry)++; return True; } -/************************************************************************* - Routine to search the nisplus passwd file for an entry matching the username - *************************************************************************/ -BOOL pdb_getsampwnam(SAM_ACCOUNT * user, const char *sname) +/************************************************************************ + makes a struct sam_passwd from a NIS+ result. + ************************************************************************/ +static BOOL make_sam_from_nisresult(SAM_ACCOUNT *pw_buf, const nis_result *result) { - /* Static buffers we will return. */ - nis_result *result = NULL; - pstring nisname; - BOOL ret; - char *pfile = lp_smb_passwd_file(); - int i; + if (pw_buf == NULL || result == NULL) return False; - if (!*pfile) + if (result->status != NIS_SUCCESS && result->status != NIS_NOTFOUND) { - DEBUG(0, ("No SMB password file set\n")); + DEBUG(0, ("NIS+ lookup failure: %s\n", + nis_sperrno(result->status))); return False; } - if( strrchr( pfile, '/') ) - pfile = strrchr( pfile, '/') + 1; - - slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.org_dir", sname, pfile); - DEBUG(10, ("search by nisname: %s\n", nisname)); - - /* Search the table. */ - if(!(result = nisp_get_nis_list(nisname, 0))) + /* User not found. */ + if (NIS_RES_NUMOBJ(result) <= 0) { + DEBUG(10, ("user not found in NIS+\n")); return False; - } + } - ret = make_sam_from_nisresult(user, result); - nis_freeresult(result); + if (NIS_RES_NUMOBJ(result) > 1) + { + DEBUG(10, ("WARNING: Multiple entries for user in NIS+ table!\n")); + } - return ret; + /* Grab the first hit. */ + return make_sam_from_nisp_object(pw_buf, &NIS_RES_OBJECT(result)[0]); } /************************************************************************* - Routine to search the nisplus passwd file for an entry matching the username + sets a NIS+ attribute *************************************************************************/ - -BOOL pdb_getsampwsid(SAM_ACCOUNT * user, const DOM_SID *sid) +static void set_single_attribute(nis_object *new_obj, int col, + const char *val, int len, int flags) { - uint32 rid; - if (!sid_peek_check_rid(get_global_sam_sid(), sid, &rid)) - return False; - return pdb_getsampwrid(user, rid); -} + if (new_obj == NULL) return; -static BOOL pdb_getsampwrid(SAM_ACCOUNT * user, uint32 rid) -{ - nis_result *result; - char *nisname; - BOOL ret; - char *sp, *p = lp_smb_passwd_file(); - pstring pfiletmp; + ENTRY_VAL(new_obj, col) = val; + ENTRY_LEN(new_obj, col) = len+1; - if (!*p) + if (flags != 0) { - DEBUG(0, ("no SMB password file set\n")); - return False; + new_obj->EN_data.en_cols.en_cols_val[col].ec_flags = flags; } +} - if( (sp = strrchr( p, '/' )) ) - safe_strcpy(pfiletmp, sp+1, sizeof(pfiletmp)-1); - else - safe_strcpy(pfiletmp, p, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".org_dir", sizeof(pfiletmp)-strlen(pfiletmp)-1); +/*************************************************************** + copy or modify nis object. this object is used to add or update + nisplus table entry. + ****************************************************************/ +static BOOL init_nisp_from_sam(nis_object *obj, const SAM_ACCOUNT *sampass, + nis_object *old) +{ + /* + * Fill nis_object for entry add or update. + * if we are updateing, we have to find out differences and set + * EN_MODIFIED flag. also set need_to_modify to trigger + * nis_modify_entry() call in pdb_update_sam_account(). + * + * TODO: + * get data from SAM + * if (modify) get data from nis_object, compare and store if + * different + set EN_MODIFIED and need_to_modify + * else + * store + */ + BOOL need_to_modify = False; + const char *name = pdb_get_username(sampass); /* from SAM */ + /* these must be static or allocate and free entry columns! */ + static fstring uid; /* from SAM */ + static fstring user_rid; /* from SAM */ + static fstring gid; /* from SAM */ + static fstring group_rid; /* from SAM */ + char *acb; /* from SAM */ + static fstring smb_passwd; /* from SAM */ + static fstring smb_nt_passwd; /* from SAM */ + static fstring logon_t; /* from SAM */ + static fstring logoff_t; /* from SAM */ + static fstring kickoff_t; /* from SAM */ + static fstring pwdlset_t; /* from SAM */ + static fstring pwdlchg_t; /* from SAM */ + static fstring pwdmchg_t; /* from SAM */ + static fstring full_name; /* from SAM */ + static fstring acct_desc; /* from SAM */ + static char empty[1]; /* just an empty string */ - nisname = make_nisname_from_user_rid(rid, pfiletmp); + slprintf(uid, sizeof(uid)-1, "%u", pdb_get_uid(sampass)); + slprintf(user_rid, sizeof(user_rid)-1, "%u", + pdb_get_user_rid(sampass)? pdb_get_user_rid(sampass): + pdb_uid_to_user_rid(pdb_get_uid(sampass))); + slprintf(gid, sizeof(gid)-1, "%u", pdb_get_gid(sampass)); - DEBUG(10, ("search by rid: %s\n", nisname)); + { + uint32 rid; + GROUP_MAP map; + + rid=pdb_get_group_rid(sampass); - /* Search the table. */ + if (rid==0) { + if (get_group_map_from_gid(pdb_get_gid(sampass), &map, MAPPING_WITHOUT_PRIV)) { + if (!sid_peek_check_rid(get_global_sam_sid(), &map.sid, &rid)) + return False; + } else + rid=pdb_gid_to_group_rid(pdb_get_gid(sampass)); + } - if(!(result = nisp_get_nis_list(nisname, 0))) - { - return False; + slprintf(group_rid, sizeof(group_rid)-1, "%u", rid); } + + acb = pdb_encode_acct_ctrl(pdb_get_acct_ctrl(sampass), + NEW_PW_FORMAT_SPACE_PADDED_LEN); + pdb_sethexpwd (smb_passwd, pdb_get_lanman_passwd(sampass), + pdb_get_acct_ctrl(sampass)); + pdb_sethexpwd (smb_nt_passwd, pdb_get_nt_passwd(sampass), + pdb_get_acct_ctrl(sampass)); + slprintf(logon_t, 13, "LNT-%08X", + (uint32)pdb_get_logon_time(sampass)); + slprintf(logoff_t, 13, "LOT-%08X", + (uint32)pdb_get_logoff_time(sampass)); + slprintf(kickoff_t, 13, "KOT-%08X", + (uint32)pdb_get_kickoff_time(sampass)); + slprintf(pwdlset_t, 13, "LCT-%08X", + (uint32)pdb_get_pass_last_set_time(sampass)); + slprintf(pwdlchg_t, 13, "CCT-%08X", + (uint32)pdb_get_pass_can_change_time(sampass)); + slprintf(pwdmchg_t, 13, "MCT-%08X", + (uint32)pdb_get_pass_must_change_time(sampass)); + safe_strcpy(full_name, pdb_get_fullname(sampass), sizeof(full_name)-1); + safe_strcpy(acct_desc, pdb_get_acct_desc(sampass), sizeof(acct_desc)-1); - ret = make_sam_from_nisresult(user, result); - nis_freeresult(result); +#if 0 - return ret; -} + /* Not sure what to do with these guys. -tpot */ -/************************************************************************* - Routine to remove entry from the nisplus smbpasswd table - *************************************************************************/ -BOOL pdb_delete_sam_account(SAM_ACCOUNT * user) -{ - const char *sname; - char *pfile = lp_smb_passwd_file(); - pstring nisname; - nis_result *result, *delresult; - nis_object *obj; - int i; - - if (!user) { - DEBUG(0, ("no SAM_ACCOUNT specified!\n")); - return False; - } - - sname = pdb_get_username(user); - - if (!*pfile) - { - DEBUG(0, ("no SMB password file set\n")); - return False; - } - if( strrchr( pfile, '/') ) - pfile = strrchr( pfile, '/') + 1; - - slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.org_dir", sname, pfile); - - /* Search the table. */ - - if( !(result = nisp_get_nis_list(nisname, - MASTER_ONLY|FOLLOW_LINKS|FOLLOW_PATH|\ - EXPAND_NAME|HARD_LOOKUP))) { - return False; - } - - if(result->status != NIS_SUCCESS || NIS_RES_NUMOBJ(result) <= 0) { - /* User not found. */ - DEBUG(0,("user not found in NIS+\n")); - nis_freeresult(result); - return False; - } - - obj = NIS_RES_OBJECT(result); - slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.%s", sname, obj->zo_name, - obj->zo_domain); - - DEBUG(10, ("removing name: %s\n", nisname)); - delresult = nis_remove_entry(nisname, obj, - MASTER_ONLY|REM_MULTIPLE|ALL_RESULTS|FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP); - - nis_freeresult(result); - - if(delresult->status != NIS_SUCCESS) { - DEBUG(0, ("NIS+ table update failed: %s %s\n", - nisname, nis_sperrno(delresult->status))); - nis_freeresult(delresult); - return False; - } - nis_freeresult(delresult); - return True; -} - -/************************************************************************ - Routine to add an entry to the nisplus passwd file. -*************************************************************************/ -BOOL pdb_add_sam_account(SAM_ACCOUNT * newpwd) -{ - int local_user = 0; - char *pfile; - pstring pfiletmp; - char *nisname; - nis_result *result = NULL, - *tblresult = NULL; - nis_object new_obj; - entry_col *ecol; - int ta_maxcol; - - /* - * 1. find user domain. - * a. try nis search in passwd.org_dir - if found use domain from result. - * b. try getpwnam. this may be needed if user is defined - * in /etc/passwd file (or elsewere) and not in passwd.org_dir. - * if found, use host default domain. - * c. exit with False - no such user. - * - * 2. add user - * a. find smbpasswd table - * search pfile in user domain if not found, try host default - * domain. - * b. smbpasswd domain is found, fill data and add entry. - * - * pfile should contain ONLY table name, org_dir will be concated. - * so, at first we will clear path prefix from pfile, and - * then we will use pfiletmp as playground to put together full - * nisname string. - * such approach will make it possible to specify samba private dir - * AND still use NIS+ table. as all domain related data is normally - * stored in org_dir.DOMAIN, this should be ok do do. - */ + dos_to_unix(full_name, True); + dos_to_unix(acct_desc, True); - pfile = lp_smb_passwd_file(); - if( strrchr( pfile, '/') ) - pfile = strrchr( pfile, '/') + 1; +#endif - /* - * Check if user is already there. - */ - safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".org_dir", - sizeof(pfiletmp)-strlen(pfiletmp)-1); + if( old ) { + /* name */ + if(strcmp(ENTRY_VAL(old, NPF_NAME), name)) + { + need_to_modify = True; + set_single_attribute(obj, NPF_NAME, name, strlen(name), + EN_MODIFIED); + } - if(pdb_get_username(newpwd) != NULL) { - nisname = make_nisname_from_name(pdb_get_username(newpwd), - pfiletmp); - } else { - return False; - } - if(!(result = nisp_get_nis_list(nisname, MASTER_ONLY|FOLLOW_LINKS|\ - FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP))) { - return False; - } - if (result->status != NIS_SUCCESS && - result->status != NIS_NOTFOUND) { - DEBUG(3, ( "nis_list failure: %s: %s\n", - nisname, nis_sperrno(result->status))); - nis_freeresult(result); - return False; - } + /* uid */ + if(pdb_get_uid(sampass) != -1) { + if(!ENTRY_VAL(old, NPF_UID) || strcmp(ENTRY_VAL(old, NPF_UID), uid)) + { + need_to_modify = True; + set_single_attribute(obj, NPF_UID, uid, + strlen(uid), EN_MODIFIED); + } + } + + /* user_rid */ + if (pdb_get_user_rid(sampass)) { + if(!ENTRY_VAL(old, NPF_USER_RID) || + strcmp(ENTRY_VAL(old, NPF_USER_RID), user_rid) ) { + need_to_modify = True; + set_single_attribute(obj, NPF_USER_RID, user_rid, + strlen(user_rid), EN_MODIFIED); + } + } + + /* smb_grpid */ + if (pdb_get_gid(sampass) != -1) { + if(!ENTRY_VAL(old, NPF_SMB_GRPID) || + strcmp(ENTRY_VAL(old, NPF_SMB_GRPID), gid) ) { + need_to_modify = True; + set_single_attribute(obj, NPF_SMB_GRPID, gid, + strlen(gid), EN_MODIFIED); + } + } - if (result->status == NIS_SUCCESS && NIS_RES_NUMOBJ(result) > 0) - { - DEBUG(3, ("User already exists in NIS+ password db: %s\n", - pfile)); - nis_freeresult(result); - return False; + /* group_rid */ + if (pdb_get_group_rid(sampass)) { + if(!ENTRY_VAL(old, NPF_GROUP_RID) || + strcmp(ENTRY_VAL(old, NPF_GROUP_RID), group_rid) ) { + need_to_modify = True; + set_single_attribute(obj, NPF_GROUP_RID, group_rid, + strlen(group_rid), EN_MODIFIED); + } } - nis_freeresult(result); /* no such user, free results */ + /* acb */ + if (!ENTRY_VAL(old, NPF_ACB) || + strcmp(ENTRY_VAL(old, NPF_ACB), acb)) { + need_to_modify = True; + set_single_attribute(obj, NPF_ACB, acb, strlen(acb), EN_MODIFIED); + } + + /* lmpwd */ + if(!ENTRY_VAL(old, NPF_LMPWD) || + strcmp(ENTRY_VAL(old, NPF_LMPWD), smb_passwd) ) { + need_to_modify = True; + set_single_attribute(obj, NPF_LMPWD, smb_passwd, + strlen(smb_passwd), EN_CRYPT|EN_MODIFIED); + } - /* - * check for user in unix password database. we need this to get - * domain, where smbpasswd entry should be stored. - */ + /* ntpwd */ + if(!ENTRY_VAL(old, NPF_NTPWD) || + strcmp(ENTRY_VAL(old, NPF_NTPWD), smb_nt_passwd) ) { + need_to_modify = True; + set_single_attribute(obj, NPF_NTPWD, smb_nt_passwd, + strlen(smb_nt_passwd), EN_CRYPT|EN_MODIFIED); + } - nisname = make_nisname_from_name(pdb_get_username(newpwd), - "passwd.org_dir"); - - result = nisp_get_nis_list(nisname, - MASTER_ONLY|FOLLOW_LINKS|FOLLOW_PATH|\ - EXPAND_NAME|HARD_LOOKUP); - - if (result->status != NIS_SUCCESS || NIS_RES_NUMOBJ(result) <= 0) - { - struct passwd *passwd; - DEBUG(3, ("nis_list failure: %s: %s\n", - nisname, nis_sperrno(result->status))); - nis_freeresult(result); + /* logon_t */ + if( pdb_get_logon_time(sampass) && + (!ENTRY_VAL(old, NPF_LOGON_T) || + strcmp(ENTRY_VAL(old, NPF_LOGON_T), logon_t ))) { + need_to_modify = True; + set_single_attribute(obj, NPF_LOGON_T, logon_t, + strlen(logon_t), EN_MODIFIED); + } - if (!(passwd = getpwnam_alloc(pdb_get_username(newpwd)))) { - /* no such user in system! */ - return False; - } - passwd_free(&passwd); + /* logoff_t */ + if( pdb_get_logoff_time(sampass) && + (!ENTRY_VAL(old, NPF_LOGOFF_T) || + strcmp(ENTRY_VAL(old, NPF_LOGOFF_T), logoff_t))) { + need_to_modify = True; + set_single_attribute(obj, NPF_LOGOFF_T, logoff_t, + strlen(logoff_t), EN_MODIFIED); + } - /* - * user is defined, but not in passwd.org_dir. - */ - local_user = 1; - } else { - safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".", sizeof(pfiletmp)-strlen(pfiletmp)-1); - safe_strcat(pfiletmp, NIS_RES_OBJECT(result)->zo_domain, - sizeof(pfiletmp)-strlen(pfiletmp)-1); - nis_freeresult(result); /* not needed any more */ + /* kick_t */ + if( pdb_get_kickoff_time(sampass) && + (!ENTRY_VAL(old, NPF_KICK_T) || + strcmp(ENTRY_VAL(old, NPF_KICK_T), kickoff_t))) { + need_to_modify = True; + set_single_attribute(obj, NPF_KICK_T, kickoff_t, + strlen(kickoff_t), EN_MODIFIED); + } + + /* pwdlset_t */ + if( pdb_get_pass_last_set_time(sampass) && + (!ENTRY_VAL(old, NPF_PWDLSET_T) || + strcmp(ENTRY_VAL(old, NPF_PWDLSET_T), pwdlset_t))) { + need_to_modify = True; + set_single_attribute(obj, NPF_PWDLSET_T, pwdlset_t, + strlen(pwdlset_t), EN_MODIFIED); + } - tblresult = nisp_get_nis_list(pfiletmp, - MASTER_ONLY|FOLLOW_LINKS|\ - FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP); + /* pwdlchg_t */ + if( pdb_get_pass_can_change_time(sampass) && + (!ENTRY_VAL(old, NPF_PWDCCHG_T) || + strcmp(ENTRY_VAL(old, NPF_PWDCCHG_T), pwdlchg_t))) { + need_to_modify = True; + set_single_attribute(obj, NPF_PWDCCHG_T, pwdlchg_t, + strlen(pwdlchg_t), EN_MODIFIED); } - if (local_user || tblresult->status != NIS_SUCCESS) - { - /* - * no user domain or - * smbpasswd table not found in user domain, fallback to - * default domain. - */ - if (!local_user) /* free previous failed search result */ - nis_freeresult(tblresult); - - safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".org_dir", - sizeof(pfiletmp)-strlen(pfiletmp)-1); - tblresult = nis_lookup(pfiletmp, MASTER_ONLY|FOLLOW_LINKS|\ - FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP); - if (tblresult->status != NIS_SUCCESS) - { - /* still nothing. bail out */ - nis_freeresult(tblresult); - DEBUG(3, ( "nis_lookup failure: %s\n", - nis_sperrno(tblresult->status))); - return False; - } - /* we need full name for nis_add_entry() */ - safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".", sizeof(pfiletmp)-strlen(pfiletmp)-1); - safe_strcat(pfiletmp, NIS_RES_OBJECT(tblresult)->zo_domain, - sizeof(pfiletmp)-strlen(pfiletmp)-1); + /* pwdmchg_t */ + if( pdb_get_pass_must_change_time(sampass) && + (!ENTRY_VAL(old, NPF_PWDMCHG_T) || + strcmp(ENTRY_VAL(old, NPF_PWDMCHG_T), pwdmchg_t))) { + need_to_modify = True; + set_single_attribute(obj, NPF_PWDMCHG_T, pwdmchg_t, + strlen(pwdmchg_t), EN_MODIFIED); + } + + /* full_name */ + /* must support set, unset and change */ + if ( (pdb_get_fullname(sampass) && + !ENTRY_VAL(old, NPF_FULL_NAME)) || + (ENTRY_VAL(old, NPF_FULL_NAME) && + !pdb_get_fullname(sampass)) || + (ENTRY_VAL(old, NPF_FULL_NAME) && + pdb_get_fullname(sampass) && + strcmp( ENTRY_VAL(old, NPF_FULL_NAME), full_name ))) { + need_to_modify = True; + set_single_attribute(obj, NPF_FULL_NAME, full_name, + strlen(full_name), EN_MODIFIED); + } + + /* home_dir */ + /* must support set, unset and change */ + if( (pdb_get_homedir(sampass) && + !ENTRY_VAL(old, NPF_HOME_DIR)) || + (ENTRY_VAL(old, NPF_HOME_DIR) && + !pdb_get_homedir(sampass)) || + (ENTRY_VAL(old, NPF_HOME_DIR) && + pdb_get_homedir(sampass) && + strcmp( ENTRY_VAL(old, NPF_HOME_DIR), + pdb_get_homedir(sampass)))) { + need_to_modify = True; + set_single_attribute(obj, NPF_HOME_DIR, pdb_get_homedir(sampass), + strlen(pdb_get_homedir(sampass)), EN_MODIFIED); + } + + /* dir_drive */ + /* must support set, unset and change */ + if( (pdb_get_dir_drive(sampass) && + !ENTRY_VAL(old, NPF_DIR_DRIVE)) || + (ENTRY_VAL(old, NPF_DIR_DRIVE) && + !pdb_get_dir_drive(sampass)) || + (ENTRY_VAL(old, NPF_DIR_DRIVE) && + pdb_get_dir_drive(sampass) && + strcmp( ENTRY_VAL(old, NPF_DIR_DRIVE), + pdb_get_dir_drive(sampass)))) { + need_to_modify = True; + set_single_attribute(obj, NPF_DIR_DRIVE, pdb_get_dir_drive(sampass), + strlen(pdb_get_dir_drive(sampass)), EN_MODIFIED); + } + + /* logon_script */ + /* must support set, unset and change */ + if( ((pdb_get_logon_script(sampass) && + !ENTRY_VAL(old, NPF_LOGON_SCRIPT)) || + ((ENTRY_VAL(old, NPF_LOGON_SCRIPT) && + (!pdb_get_logon_script(sampass)))) || + (( ENTRY_VAL(old, NPF_LOGON_SCRIPT) && + pdb_get_logon_script(sampass) && + strcmp( ENTRY_VAL(old, NPF_LOGON_SCRIPT), + pdb_get_logon_script(sampass)))))) { + need_to_modify = True; + set_single_attribute(obj, NPF_LOGON_SCRIPT, + pdb_get_logon_script(sampass), + strlen(pdb_get_logon_script(sampass)), + EN_MODIFIED); + } + + /* profile_path */ + /* must support set, unset and change */ + if( (pdb_get_profile_path(sampass) && + !ENTRY_VAL(old, NPF_PROFILE_PATH)) || + (ENTRY_VAL(old, NPF_PROFILE_PATH) && + !pdb_get_profile_path(sampass)) || + (ENTRY_VAL(old, NPF_PROFILE_PATH) && + pdb_get_profile_path(sampass) && + strcmp( ENTRY_VAL(old, NPF_PROFILE_PATH), + pdb_get_profile_path(sampass) ) )) { + need_to_modify = True; + set_single_attribute(obj, NPF_PROFILE_PATH, + pdb_get_profile_path(sampass), + strlen(pdb_get_profile_path(sampass)), + EN_MODIFIED); + } + + /* acct_desc */ + /* must support set, unset and change */ + if( (pdb_get_acct_desc(sampass) && + !ENTRY_VAL(old, NPF_ACCT_DESC)) || + (ENTRY_VAL(old, NPF_ACCT_DESC) && + !pdb_get_acct_desc(sampass)) || + (ENTRY_VAL(old, NPF_ACCT_DESC) && + pdb_get_acct_desc(sampass) && + strcmp( ENTRY_VAL(old, NPF_ACCT_DESC), acct_desc ) )) { + need_to_modify = True; + set_single_attribute(obj, NPF_ACCT_DESC, acct_desc, + strlen(acct_desc), EN_MODIFIED); } - memset((char *)&new_obj, 0, sizeof (new_obj)); - /* fill entry headers */ - /* we do not free these. */ - new_obj.zo_name = NIS_RES_OBJECT(tblresult)->zo_name; - new_obj.zo_owner = NIS_RES_OBJECT(tblresult)->zo_owner; - new_obj.zo_group = NIS_RES_OBJECT(tblresult)->zo_group; - new_obj.zo_domain = NIS_RES_OBJECT(tblresult)->zo_domain; - /* uints */ - new_obj.zo_access = NIS_RES_OBJECT(tblresult)->zo_access; - new_obj.zo_ttl = NIS_RES_OBJECT(tblresult)->zo_ttl; + /* workstations */ + /* must support set, unset and change */ + if ( (pdb_get_workstations(sampass) && + !ENTRY_VAL(old, NPF_WORKSTATIONS) ) || + (ENTRY_VAL(old, NPF_WORKSTATIONS) && + !pdb_get_workstations(sampass)) || + (ENTRY_VAL(old, NPF_WORKSTATIONS) && + (pdb_get_workstations(sampass)) && + strcmp( ENTRY_VAL(old, NPF_WORKSTATIONS), + pdb_get_workstations(sampass)))) { + need_to_modify = True; + set_single_attribute(obj, NPF_WORKSTATIONS, + pdb_get_workstations(sampass), + strlen(pdb_get_workstations(sampass)), + EN_MODIFIED); + } + + /* hours */ + if ((pdb_get_hours_len(sampass) != ENTRY_LEN(old, NPF_HOURS)) || + memcmp(pdb_get_hours(sampass), ENTRY_VAL(old, NPF_HOURS), + ENTRY_LEN(old, NPF_HOURS))) { + need_to_modify = True; + /* set_single_attribute will add 1 for len ... */ + set_single_attribute(obj, NPF_HOURS, pdb_get_hours(sampass), + pdb_get_hours_len(sampass)-1, EN_MODIFIED); + } + } else { + const char *homedir, *dirdrive, *logon_script, *profile_path, *workstations; - new_obj.zo_data.zo_type = ENTRY_OBJ; - new_obj.EN_data.en_type = - NIS_RES_OBJECT(tblresult)->TA_data.ta_type; + *empty = '\0'; /* empty string */ - ta_maxcol = NIS_RES_OBJECT(tblresult)->TA_data.ta_maxcol; - - if(!(ecol = (entry_col*)malloc(ta_maxcol*sizeof(entry_col)))) { - DEBUG(0, ("memory allocation failure\n")); - nis_freeresult(tblresult); - return False; - } - - memset((char *)ecol, 0, ta_maxcol*sizeof (entry_col)); - new_obj.EN_data.en_cols.en_cols_val = ecol; - new_obj.EN_data.en_cols.en_cols_len = ta_maxcol; - - init_nisp_from_sam(&new_obj, newpwd, NULL); - - DEBUG(10, ( "add NIS+ entry: %s\n", nisname)); - result = nis_add_entry(pfiletmp, &new_obj, 0); + set_single_attribute(obj, NPF_NAME, name, strlen(name), 0); + set_single_attribute(obj, NPF_UID, uid, strlen(uid), 0); + set_single_attribute(obj, NPF_USER_RID, user_rid, + strlen(user_rid), 0); + set_single_attribute(obj, NPF_SMB_GRPID, gid, strlen(gid), 0); + set_single_attribute(obj, NPF_GROUP_RID, group_rid, + strlen(group_rid), 0); + set_single_attribute(obj, NPF_ACB, acb, strlen(acb), 0); + set_single_attribute(obj, NPF_LMPWD, smb_passwd, + strlen(smb_passwd), EN_CRYPT); + set_single_attribute(obj, NPF_NTPWD, smb_nt_passwd, + strlen(smb_nt_passwd), EN_CRYPT); + set_single_attribute(obj, NPF_LOGON_T, logon_t, + strlen(logon_t), 0); + set_single_attribute(obj, NPF_LOGOFF_T, logoff_t, + strlen(logoff_t), 0); + set_single_attribute(obj, NPF_KICK_T, kickoff_t, + strlen(kickoff_t),0); + set_single_attribute(obj, NPF_PWDLSET_T, pwdlset_t, + strlen(pwdlset_t), 0); + set_single_attribute(obj, NPF_PWDCCHG_T, pwdlchg_t, + strlen(pwdlchg_t), 0); + set_single_attribute(obj, NPF_PWDMCHG_T, pwdmchg_t, + strlen(pwdmchg_t), 0); + set_single_attribute(obj, NPF_FULL_NAME , + full_name, strlen(full_name), 0); - free(ecol); /* free allocated entry space */ - - if (result->status != NIS_SUCCESS) - { - DEBUG(3, ( "NIS+ table update failed: %s\n", - nisname, nis_sperrno(result->status))); - nis_freeresult(tblresult); - nis_freeresult(result); - return False; - } - - nis_freeresult(tblresult); - nis_freeresult(result); - - return True; -} + if(!(homedir = pdb_get_homedir(sampass))) + homedir = empty; -/************************************************************************ - Routine to modify the nisplus passwd entry. -************************************************************************/ -BOOL pdb_update_sam_account(SAM_ACCOUNT * newpwd) -{ - nis_result *result, *addresult; - nis_object *obj; - nis_object new_obj; - entry_col *ecol; - int ta_maxcol; - char *pfile = lp_smb_passwd_file(); - pstring nisname; - int i; + set_single_attribute(obj, NPF_HOME_DIR, + homedir, strlen(homedir), 0); + + if(!(dirdrive = pdb_get_dir_drive(sampass))) + dirdrive = empty; + + set_single_attribute(obj, NPF_DIR_DRIVE, + dirdrive, strlen(dirdrive), 0); + + if(!(logon_script = pdb_get_logon_script(sampass))) + logon_script = empty; + + set_single_attribute(obj, NPF_LOGON_SCRIPT, + logon_script, strlen(logon_script), 0); + + if(!(profile_path = pdb_get_profile_path(sampass))) + profile_path = empty; - if (!*pfile) - { - DEBUG(0, ("no SMB password file set\n")); - return False; - } - if( strrchr( pfile, '/') ) - pfile = strrchr( pfile, '/') + 1; - - slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.org_dir", - pdb_get_username(newpwd), pfile); - - DEBUG(10, ("search by name: %s\n", nisname)); - - /* Search the table. */ - - if( !(result = nisp_get_nis_list(nisname, MASTER_ONLY|FOLLOW_LINKS|\ - FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP))) { - return False; + set_single_attribute(obj, NPF_PROFILE_PATH, + profile_path, strlen(profile_path), 0); + + set_single_attribute(obj, NPF_ACCT_DESC, + acct_desc, strlen(acct_desc), 0); + + if(!(workstations = pdb_get_workstations(sampass))) + workstations = empty; + + set_single_attribute(obj, NPF_WORKSTATIONS, + workstations, strlen(workstations), 0); + + /* set_single_attribute will add 1 for len ... */ + set_single_attribute(obj, NPF_HOURS, + pdb_get_hours(sampass), + pdb_get_hours_len(sampass)-1, 0); } - if(result->status != NIS_SUCCESS || NIS_RES_NUMOBJ(result) <= 0) { - /* User not found. */ - DEBUG(0,("user not found in NIS+\n")); - nis_freeresult(result); - return False; - } + return need_to_modify; +} - obj = NIS_RES_OBJECT(result); - DEBUG(6,("entry found in %s\n", obj->zo_domain)); +/*************************************************************** + calls nis_list, returns results. + ****************************************************************/ +static nis_result *nisp_get_nis_list(const char *nisname, unsigned int flags) +{ + nis_result *result; + int i; - /* we must create new stub object with EN_MODIFIED flag. - this is because obj from result is going to be freed and - we do not want to break it or cause memory leaks or corruption. - */ - - memmove((char *)&new_obj, obj, sizeof (new_obj)); - ta_maxcol = obj->TA_data.ta_maxcol; - - if(!(ecol = (entry_col*)malloc(ta_maxcol*sizeof(entry_col)))) { - DEBUG(0, ("memory allocation failure\n")); - nis_freeresult(result); - return False; - } + if( ! flags) + flags = FOLLOW_LINKS|FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP; - memmove((char *)ecol, obj->EN_data.en_cols.en_cols_val, - ta_maxcol*sizeof (entry_col)); - new_obj.EN_data.en_cols.en_cols_val = ecol; - new_obj.EN_data.en_cols.en_cols_len = ta_maxcol; + for(i = 0; i<2;i++ ) { + alarm(60); /* hopefully ok for long searches */ + result = nis_list(nisname, flags,NULL,NULL); - if ( init_nisp_from_sam(&new_obj, newpwd, obj) == True ) { - slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.%s", - pdb_get_username(newpwd), pfile, obj->zo_domain); + alarm(0); + CatchSignal(SIGALRM, SIGNAL_CAST SIG_DFL); - DEBUG(10, ("NIS+ table update: %s\n", nisname)); - addresult = - nis_modify_entry(nisname, &new_obj, - MOD_SAMEOBJ | FOLLOW_PATH | EXPAND_NAME | HARD_LOOKUP); - - if(addresult->status != NIS_SUCCESS) { - DEBUG(0, ("NIS+ table update failed: %s %s\n", - nisname, nis_sperrno(addresult->status))); - nis_freeresult(addresult); - nis_freeresult(result); - free(ecol); - return False; - } - - DEBUG(6,("password changed\n")); - nis_freeresult(addresult); - } else { - DEBUG(6,("nothing to change!\n")); - } + if( !(flags & MASTER_ONLY) && NIS_RES_NUMOBJ(result) <= 0 ) { + /* nis replicas are not in sync perhaps? + * this can happen, if account was just added. + */ + DEBUG(10,("will try master only\n")); + nis_freeresult(result); + flags |= MASTER_ONLY; + } else + break; + } + return result; +} - free(ecol); - nis_freeresult(result); - - return True; +#else +NTSTATUS pdb_init_nisplussam(PDB_CONTEXT *c, PDB_METHODS **m, const char *l) +{ + DEBUG(0, ("nisplus sam not compiled in!\n")); + return NT_STATUS_UNSUCCESSFUL; } - -#else - void nisplus_dummy_function(void); - void nisplus_dummy_function(void) { } /* stop some compilers complaining */ -#endif /* WITH_NISPLUSSAM */ +#endif /* WITH_NISPLUS_SAM */ -- cgit From ca0345623d666213b06a0885012e177f6b4b8ca1 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Tue, 20 Aug 2002 21:21:56 +0000 Subject: fix typos thanks Josef Zlomek (This used to be commit fb32fd99b9878db2bacf0588d30fd5f1f37dbfd7) --- source3/client/client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/client/client.c b/source3/client/client.c index a421f36d80..894329a5d1 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -307,7 +307,7 @@ static BOOL do_this_one(file_info *finfo) if (*fileselection && !mask_match(finfo->name,fileselection,False)) { - DEBUG(3,("match_match %s failed\n", finfo->name)); + DEBUG(3,("mask_match %s failed\n", finfo->name)); return False; } @@ -695,7 +695,7 @@ static int do_get(char *rname,char *lname) } DEBUG(2,("getting file %s of size %.0f as %s ", - lname, (double)size, lname)); + rname, (double)size, lname)); if(!(data = (char *)malloc(read_size))) { d_printf("malloc fail for size %d\n", read_size); -- cgit From 85b7d9904e964f3038ad9d317518ae3bc6235545 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 21 Aug 2002 01:47:29 +0000 Subject: addform fix from SAMBA_2_2 (This used to be commit db286e66ec4788b40e279fd230b2013f311e44ec) --- source3/rpc_server/srv_spoolss_nt.c | 46 +++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 5373eeed63..296d9a8ca2 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -7259,40 +7259,52 @@ WERROR _spoolss_addform( pipes_struct *p, SPOOL_Q_ADDFORM *q_u, SPOOL_R_ADDFORM DEBUG(2,("_spoolss_addform: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle))); return WERR_BADFID; } - - if (!get_printer_snum(p,handle, &snum)) - return WERR_BADFID; + + + /* forms can be added on printer of on the print server handle */ + + if ( Printer->printer_type == PRINTER_HANDLE_IS_PRINTER ) + { + if (!get_printer_snum(p,handle, &snum)) + return WERR_BADFID; + + status = get_a_printer(&printer, 2, lp_servicename(snum)); + if (!W_ERROR_IS_OK(status)) + goto done; + } if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) { DEBUG(2,("_spoolss_addform: denied by handle permissions.\n")); status = WERR_ACCESS_DENIED; goto done; } - + /* can't add if builtin */ + if (get_a_builtin_ntform(&form->name,&tmpForm)) { - return WERR_ALREADY_EXISTS; + status = WERR_ALREADY_EXISTS; + goto done; } - count=get_ntforms(&list); - if(!add_a_form(&list, form, &count)) - return WERR_NOMEM; + count = get_ntforms(&list); + + if(!add_a_form(&list, form, &count)) { + status = WERR_NOMEM; + goto done; + } + write_ntforms(&list, count); /* - * ChangeID must always be set + * ChangeID must always be set if this is a printer */ - status = get_a_printer(&printer, 2, lp_servicename(snum)); - if (!W_ERROR_IS_OK(status)) - goto done; - - status = mod_a_printer(*printer, 2); - if (!W_ERROR_IS_OK(status)) - goto done; + if ( Printer->printer_type == PRINTER_HANDLE_IS_PRINTER ) + status = mod_a_printer(*printer, 2); done: - free_a_printer(&printer, 2); + if ( printer ) + free_a_printer(&printer, 2); SAFE_FREE(list); return status; -- cgit From 8e71f18acfc4e8e6945eb470b669e8d95447e5a8 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 21 Aug 2002 02:34:49 +0000 Subject: implemented lock and mknod addedd to vfstest the possibility to read a file to imput a stream of commands (This used to be commit 233b14f447994db8fdb4448d19eff0c38c17254d) --- source3/torture/cmd_vfs.c | 125 +++++++++++++++++++++++++++++++++++++++++++--- source3/torture/vfstest.c | 98 ++++++++++++++++++++++++++++++++---- 2 files changed, 207 insertions(+), 16 deletions(-) diff --git a/source3/torture/cmd_vfs.c b/source3/torture/cmd_vfs.c index 29af3c9a5f..24601207e6 100644 --- a/source3/torture/cmd_vfs.c +++ b/source3/torture/cmd_vfs.c @@ -28,16 +28,24 @@ static char *null_string = ""; static NTSTATUS cmd_load_module(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) { struct smb_vfs_handle_struct *handle; + char *path = lp_vfs_path(0); + char name[PATH_MAX]; if (argc != 2) { printf("Usage: load \n"); return NT_STATUS_OK; } + + if (path != NULL && *path != '\0') { + snprintf(name, PATH_MAX, "%s/%s", path, argv[1]); + } else { + snprintf(name, PATH_MAX, "%s", argv[1]); + } vfs->conn->vfs_private = NULL; handle = (struct smb_vfs_handle_struct *) smb_xmalloc(sizeof(smb_vfs_handle_struct)); handle->handle = NULL; DLIST_ADD(vfs->conn->vfs_private, handle) - if (!vfs_init_custom(vfs->conn, argv[1])) { + if (!vfs_init_custom(vfs->conn, name)) { DEBUG(0, ("load: error=-1 (vfs_init_custom failed for %s)\n", argv[1])); return NT_STATUS_UNSUCCESSFUL; } @@ -197,7 +205,8 @@ static NTSTATUS cmd_closedir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int arg static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int flags, mode, fd; + int flags, fd; + mode_t mode; char *flagstr; mode = 00400; @@ -520,7 +529,7 @@ static NTSTATUS cmd_stat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c printf(" Size: %10d", st.st_size); printf(" Blocks: %9d", st.st_blocks); printf(" IO Block: %d\n", st.st_blksize); - printf(" Device: 0x%.10x", st.st_dev); + printf(" Device: 0x%10x", st.st_dev); printf(" Inode: %10d", st.st_ino); printf(" Links: %10d\n", st.st_nlink); printf(" Access: %05o", (st.st_mode) & 007777); @@ -808,7 +817,84 @@ static NTSTATUS cmd_ftruncate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int ar static NTSTATUS cmd_lock(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) { - printf("lock: Not yet implemented!\n"); + BOOL ret; + int fd; + int op; + long offset; + long count; + int type; + char *typestr; + + if (argc != 6) { + printf("Usage: lock \n"); + printf(" ops: G = F_GETLK\n"); + printf(" S = F_SETLK\n"); + printf(" W = F_SETLKW\n"); + printf(" type: R = F_RDLCK\n"); + printf(" W = F_WRLCK\n"); + printf(" U = F_UNLCK\n"); + return NT_STATUS_OK; + } + + if (sscanf(argv[1], "%d", &fd) == 0) { + printf("lock: error=-1 (error parsing fd)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + op = 0; + switch (*argv[2]) { + case 'G': + op = F_GETLK; + break; + case 'S': + op = F_SETLK; + break; + case 'W': + op = F_SETLKW; + break; + default: + printf("lock: error=-1 (invalid op flag!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (sscanf(argv[3], "%ld", &offset) == 0) { + printf("lock: error=-1 (error parsing fd)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (sscanf(argv[4], "%ld", &count) == 0) { + printf("lock: error=-1 (error parsing fd)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + type = 0; + typestr = argv[5]; + while(*typestr) { + switch (*typestr) { + case 'R': + type |= F_RDLCK; + break; + case 'W': + type |= F_WRLCK; + break; + case 'U': + type |= F_UNLCK; + break; + default: + printf("lock: error=-1 (invalid type flag!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + typestr++; + } + + printf("lock: debug lock(fd=%d, op=%d, offset=%ld, count=%ld, type=%d))\n", fd, op, offset, count, type); + + if ((ret = vfs->conn->vfs_ops.lock(vfs->files[fd], fd, op, offset, count, type)) == False) { + printf("lock: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("lock: ok\n"); return NT_STATUS_OK; } @@ -868,7 +954,32 @@ static NTSTATUS cmd_link(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, c static NTSTATUS cmd_mknod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) { - printf("lock: Not yet implemented!\n"); + mode_t mode; + SMB_DEV_T dev; + + if (argc != 4) { + printf("Usage: mknod \n"); + printf(" mode is octal\n"); + printf(" dev is hex\n"); + return NT_STATUS_OK; + } + + if (sscanf(argv[2], "%o", &mode) == 0) { + printf("open: error=-1 (invalid mode!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (sscanf(argv[3], "%x", &dev) == 0) { + printf("open: error=-1 (invalid dev!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (vfs->conn->vfs_ops.mknod(vfs->conn, argv[1], mode, dev) == -1) { + printf("mknod: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("mknod: ok\n"); return NT_STATUS_OK; } @@ -924,11 +1035,11 @@ struct cmd_set vfs_commands[] = { { "getwd", cmd_getwd, "VFS getwd()", "getwd" }, { "utime", cmd_utime, "VFS utime()", "utime " }, { "ftruncate", cmd_ftruncate, "VFS ftruncate()", "ftruncate " }, - { "lock", cmd_lock, "VFS lock()", "lock: Not yet implemented!" }, + { "lock", cmd_lock, "VFS lock()", "lock " }, { "symlink", cmd_symlink, "VFS symlink()", "symlink " }, { "readlink", cmd_readlink, "VFS readlink()", "readlink " }, { "link", cmd_link, "VFS link()", "link " }, - { "mknod", cmd_mknod, "VFS mknod()", "mknod: Not yet implemented!" }, + { "mknod", cmd_mknod, "VFS mknod()", "mknod " }, { "realpath", cmd_realpath, "VFS realpath()", "realpath " }, { NULL } }; diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index 9deb309352..b76c289c17 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -35,6 +35,8 @@ static struct cmd_list { TALLOC_CTX *global_ctx; +extern pstring user_socket_options; + /**************************************************************************** handle completion of commands for readline ****************************************************************************/ @@ -87,7 +89,7 @@ static char **completion_fn(char *text, int start, int end) return matches; } -static char* next_command (char** cmdstr) +static char* next_command(char** cmdstr) { static pstring command; char *p; @@ -382,6 +384,26 @@ static NTSTATUS process_cmd(struct vfs_state *vfs, char *cmd) return result; } +static void process_file(struct vfs_state *pvfs, char *filename) { + FILE *file; + char command[3 * PATH_MAX]; + + if (*filename == '-') { + file = stdin; + } else { + file = fopen(filename, "r"); + if (file == NULL) { + printf("vfstest: error reading file (%s)!", filename); + printf("errno n.%d: %s", errno, strerror(errno)); + exit(-1); + } + } + + while (fgets(command, 3 * PATH_MAX, file) != NULL) { + process_cmd(pvfs, command); + } +} + void exit_server(char *reason) { DEBUG(3,("Server exit (%s)\n", (reason ? reason : ""))); @@ -396,9 +418,57 @@ int smbd_server_fd(void) return server_fd; } +/**************************************************************************** + Reload the services file. +**************************************************************************/ + BOOL reload_services(BOOL test) { - return True; + BOOL ret; + + if (lp_loaded()) { + pstring fname; + pstrcpy(fname,lp_configfile()); + if (file_exist(fname, NULL) && + !strcsequal(fname, dyn_CONFIGFILE)) { + pstrcpy(dyn_CONFIGFILE, fname); + test = False; + } + } + + reopen_logs(); + + if (test && !lp_file_list_changed()) + return(True); + + lp_killunused(conn_snum_used); + + ret = lp_load(dyn_CONFIGFILE, False, False, True); + + load_printers(); + + /* perhaps the config filename is now set */ + if (!test) + reload_services(True); + + reopen_logs(); + + load_interfaces(); + + { + if (smbd_server_fd() != -1) { + set_socket_options(smbd_server_fd(),"SO_KEEPALIVE"); + set_socket_options(smbd_server_fd(), user_socket_options); + } + } + + mangle_reset_cache(); + reset_stat_cache(); + + /* this forces service parameters to be flushed */ + set_current_service(NULL,True); + + return (ret); } /* Print usage information */ @@ -407,6 +477,7 @@ static void usage(void) printf("Usage: vfstest [options]\n"); printf("\t-c or --command \"command string\" execute semicolon separated cmds\n"); + printf("\t-f or --file filename execute a set of operations as described in the file\n"); printf("\t-d or --debug debuglevel set the debuglevel\n"); printf("\t-l or --logfile logfile logfile to use instead of stdout\n"); printf("\t-h or --help Print this help message.\n"); @@ -420,19 +491,20 @@ int main(int argc, char *argv[]) BOOL interactive = True; int opt; static char *cmdstr = ""; - static char *opt_logfile=NULL; + static char *opt_logfile=NULL; static int opt_debuglevel; pstring logfile; struct cmd_set **cmd_set; extern BOOL AllowDebugChange; static struct vfs_state vfs; int i; - + static char *filename = ""; /* make sure the vars that get altered (4th field) are in a fixed location or certain compilers complain */ poptContext pc; struct poptOption long_options[] = { + {"file", 'f', POPT_ARG_STRING, &filename}, {"debug", 'd', POPT_ARG_INT, &opt_debuglevel, 'd'}, {"debuglevel", 'd', POPT_ARG_INT, &opt_debuglevel, 'd'}, {"command", 'c', POPT_ARG_STRING, &cmdstr}, @@ -473,6 +545,9 @@ int main(int argc, char *argv[]) poptFreeContext(pc); + /* TODO: check output */ + reload_services(False); + /* the following functions are part of the Samba debugging facilities. See lib/debug.c */ setup_logging("vfstest", interactive); @@ -495,7 +570,16 @@ int main(int argc, char *argv[]) for (i=0; i < 1024; i++) vfs.files[i] = NULL; - /* Do anything specified with -c */ + /* some advanced initiliazation stuff */ + smbd_vfs_init(vfs.conn); + + /* Do we have a file input? */ + if (filename[0]) { + process_file(&vfs, filename); + return 0; + } + + /* Do anything specified with -c */ if (cmdstr[0]) { char *cmd; char *p = cmdstr; @@ -507,10 +591,6 @@ int main(int argc, char *argv[]) return 0; } - /* Initialize VFS */ - vfs.conn->vfs_private = NULL; - smbd_vfs_init(vfs.conn); - /* Loop around accepting commands */ while(1) { -- cgit From 257dfc89814f555d1f7478f8e303f7925bc143d7 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 21 Aug 2002 11:12:14 +0000 Subject: Handle wrap-around on this number by making it unsigned. (Wrapping to zero does not create problems in this cache) Andrew Bartlett (This used to be commit c58e3d5c7d78dd02584b1490a27f7007e11b8712) --- source3/include/smb.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/include/smb.h b/source3/include/smb.h index 091ef780ad..9101e947a7 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -431,7 +431,7 @@ typedef struct } dir_status_struct; struct vuid_cache { - int entries; + unsigned int entries; uint16 list[VUID_CACHE_SIZE]; }; -- cgit From e47acb0147fa5e215a872f69984fb80515dd0c97 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 21 Aug 2002 11:15:10 +0000 Subject: Fix pam_smbpass to always check the return value of pdb_getsampwnam() to determine if the user exists. (from post on samba-technical) Andrew Bartlett (This used to be commit b43304c2aa406267ef157dd0ac59319d6c494ce4) --- source3/pam_smbpass/pam_smb_passwd.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source3/pam_smbpass/pam_smb_passwd.c b/source3/pam_smbpass/pam_smb_passwd.c index 0f52755252..91eae3c7a1 100644 --- a/source3/pam_smbpass/pam_smb_passwd.c +++ b/source3/pam_smbpass/pam_smb_passwd.c @@ -96,6 +96,8 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags, char *pass_old; char *pass_new; + NTSTATUS nt_status; + /* Samba initialization. */ setup_logging( "pam_smbpass", False ); in_client = True; @@ -124,10 +126,11 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags, } /* obtain user record */ - pdb_init_sam(&sampass); - pdb_getsampwnam(sampass,user); + if (!NT_STATUS_IS_OK(nt_status = pdb_init_sam(&sampass))) { + return nt_status_to_pam(nt_status); + } - if (sampass == NULL) { + if (!pdb_getsampwnam(sampass,user)) { _log_err( LOG_ALERT, "Failed to find entry for user %s.", user ); return PAM_USER_UNKNOWN; } -- cgit From e45720be141e0a8f112446b24b3f95fa98d2a6a2 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 21 Aug 2002 11:18:25 +0000 Subject: Use the 'init' flag to determine if the UID is set, rather than testing the uid for -1. Andrew Bartlett (This used to be commit 2fc12864ae78ea08d8cb4e3b1c7e341ca4a854e6) --- source3/passdb/passdb.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c index a9c6f0729b..7a8c40346f 100644 --- a/source3/passdb/passdb.c +++ b/source3/passdb/passdb.c @@ -823,11 +823,14 @@ BOOL local_sid_to_uid(uid_t *puid, const DOM_SID *psid, enum SID_NAME_USE *name_ return False; if (pdb_getsampwsid(sam_user, psid)) { - *puid = pdb_get_uid(sam_user); - if (*puid == -1) { + + if (!(pdb_get_init_flag(sam_user) & FLAG_SAM_UID)) { pdb_free_sam(&sam_user); return False; } + + *puid = pdb_get_uid(sam_user); + DEBUG(10,("local_sid_to_uid: SID %s -> uid (%u) (%s).\n", sid_to_string( str, psid), (unsigned int)*puid, pdb_get_username(sam_user))); pdb_free_sam(&sam_user); -- cgit From 07dbe5af57414d20a370920d0467d36a69b2f03a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 21 Aug 2002 11:34:05 +0000 Subject: Cope with non-unix accounts - we just won't get the groups for those users. Andrew Bartlett (This used to be commit 7cad7814555645aa3bee95fb48fbd694e6a9e313) --- source3/auth/auth_util.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index 51b8005634..210c4d09f9 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -627,8 +627,10 @@ static NTSTATUS get_user_groups_from_local_sam(const DOM_SID *user_sid, *groups = NULL; if (!sid_to_uid(user_sid, &uid, &snu)) { - DEBUG(2, ("get_user_groups_from_local_sam: Failed to convert user SID %s to a uid!\n", sid_to_string(str, user_sid))); - return NT_STATUS_NO_SUCH_USER; + DEBUG(2, ("get_user_groups_from_local_sam: Failed to convert user SID %s to a uid!\n", + sid_to_string(str, user_sid))); + /* This might be a non-unix account */ + return NT_STATUS_OK; } usr = getpwuid_alloc(uid); -- cgit From 1ea5e17f950a8b7f50723649a48f67b4bca75160 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 21 Aug 2002 11:48:05 +0000 Subject: Fix debug level initialization for net.c Volker (This used to be commit 5af5326f1311a49d3c8316e1dcc27037b831065a) --- source3/lib/debug.c | 2 +- source3/param/loadparm.c | 1 + source3/utils/net.c | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/source3/lib/debug.c b/source3/lib/debug.c index 842d2dac1d..6dd9225bac 100644 --- a/source3/lib/debug.c +++ b/source3/lib/debug.c @@ -350,7 +350,7 @@ int debug_lookup_classname(const char *classname) /**************************************************************************** -dump the current registered denug levels +dump the current registered debug levels ****************************************************************************/ static void debug_dump_status(int level) { diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 9178136141..966124039f 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -3550,6 +3550,7 @@ BOOL lp_load(const char *pszFname, BOOL global_only, BOOL save_defaults, bGlobalOnly = global_only; init_globals(); + debug_init(); if (save_defaults) { diff --git a/source3/utils/net.c b/source3/utils/net.c index fc7094bcf7..416a599be3 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -391,7 +391,7 @@ static struct functable net_func[] = { {"force", 'f', POPT_ARG_NONE, &opt_force}, {"timeout", 't', POPT_ARG_INT, &opt_timeout}, {"machine-pass",'P', POPT_ARG_NONE, &opt_machine_pass}, - { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_debug }, + {"debuglevel", 'D', POPT_ARG_STRING, &debuglevel}, { 0, 0, 0, 0} }; -- cgit From f3110c68847dc0f5b68fd64b0165d558cf0dac10 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 21 Aug 2002 17:07:10 +0000 Subject: just comment typos (This used to be commit 169e784f4829ef356ed6232ace950d43cac1d467) --- source3/utils/net_rpc.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index 55e8a497cc..3f5c65ddf2 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -178,7 +178,7 @@ static int run_rpc_command(struct cli_state *cli_arg, const char *pipe_name, int /** * Force a change of the trust acccount password. * - * All paramaters are provided by the run_rpc_command funcion, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid aquired from the remote server @@ -224,7 +224,7 @@ static int rpc_changetrustpw(int argc, const char **argv) * * The password should be created with 'server manager' or eqiv first. * - * All paramaters are provided by the run_rpc_command funcion, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid aquired from the remote server @@ -319,7 +319,7 @@ int net_rpc_join(int argc, const char **argv) /** * display info about a rpc domain * - * All paramaters are provided by the run_rpc_command function, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -406,7 +406,7 @@ static int rpc_user_usage(int argc, const char **argv) /** * Add a new user to a remote RPC server * - * All paramaters are provided by the run_rpc_command funcion, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -494,7 +494,7 @@ static int rpc_user_add(int argc, const char **argv) /** * Delete a user from a remote RPC server * - * All paramaters are provided by the run_rpc_command funcion, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -595,7 +595,7 @@ static int rpc_user_delete(int argc, const char **argv) /** * List user's groups on a remote RPC server * - * All paramaters are provided by the run_rpc_command funcion, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -697,7 +697,7 @@ static int rpc_user_info(int argc, const char **argv) /** * List users on a remote RPC server * - * All paramaters are provided by the run_rpc_command function, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -811,7 +811,7 @@ static int rpc_group_usage(int argc, const char **argv) /** * List groups on a remote RPC server * - * All paramaters are provided by the run_rpc_command funcion, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -954,7 +954,7 @@ static int rpc_share_usage(int argc, const char **argv) /** * Add a share on a remote RPC server * - * All paramaters are provided by the run_rpc_command function, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -1002,7 +1002,7 @@ static int rpc_share_add(int argc, const char **argv) /** * Delete a share on a remote RPC server * - * All paramaters are provided by the run_rpc_command function, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -1070,7 +1070,7 @@ static void display_share_info_1(SRV_SHARE_INFO_1 *info1) /** * List shares on a remote RPC server * - * All paramaters are provided by the run_rpc_command function, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -1147,7 +1147,7 @@ static int rpc_file_usage(int argc, const char **argv) /** * Close a file on a remote RPC server * - * All paramaters are provided by the run_rpc_command function, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -1210,7 +1210,7 @@ static void display_file_info_3(FILE_INFO_3 *info3, FILE_INFO_3_STR *str3) /** * List open files on a remote RPC server * - * All paramaters are provided by the run_rpc_command funcion, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid acquired from the remote server @@ -1314,7 +1314,7 @@ int net_rpc_file(int argc, const char **argv) /** * ABORT the shutdown of a remote RPC Server * - * All paramaters are provided by the run_rpc_command function, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passed through. * * @param domain_sid The domain sid aquired from the remote server @@ -1362,7 +1362,7 @@ static int rpc_shutdown_abort(int argc, const char **argv) /** * Shut down a remote RPC Server * - * All paramaters are provided by the run_rpc_command funcion, except for + * All parameters are provided by the run_rpc_command function, except for * argc, argv which are passes through. * * @param domain_sid The domain sid aquired from the remote server -- cgit From 90e65e7ac7b365a898a620d2dc4de1643e41cbf7 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 21 Aug 2002 17:23:34 +0000 Subject: Add 'net rpc getsid' to fetch the PDC's SID into the local secrets.tdb Print domain SID on 'net rpc info' Volker (This used to be commit 12fd889a3f0e3eeeb27a51cdd7f648a59083f2ba) --- source3/utils/net_rpc.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index 3f5c65ddf2..df5b67372d 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -339,6 +339,9 @@ rpc_info_internals(const DOM_SID *domain_sid, struct cli_state *cli, POLICY_HND connect_pol, domain_pol; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; SAM_UNK_CTR ctr; + fstring sid_str; + + sid_to_string(sid_str, domain_sid); /* Get sam policy handle */ result = cli_samr_connect(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, @@ -361,6 +364,7 @@ rpc_info_internals(const DOM_SID *domain_sid, struct cli_state *cli, if (NT_STATUS_IS_OK(result)) { TALLOC_CTX *ctx = talloc_init(); d_printf("Domain Name: %s\n", unistr2_tdup(ctx, &ctr.info.inf2.uni_domain)); + d_printf("Domain SID: %s\n", sid_str); d_printf("Sequence number: %u\n", ctr.info.inf2.seq_num); d_printf("Num users: %u\n", ctr.info.inf2.num_domain_usrs); d_printf("Num domain groups: %u\n", ctr.info.inf2.num_domain_grps); @@ -387,6 +391,54 @@ int net_rpc_info(int argc, const char **argv) } +/** + * Fetch domain SID into the local secrets.tdb + * + * All parameters are provided by the run_rpc_command function, except for + * argc, argv which are passes through. + * + * @param domain_sid The domain sid acquired from the remote server + * @param cli A cli_state connected to the server. + * @param mem_ctx Talloc context, destoyed on completion of the function. + * @param argc Standard main() style argc + * @param argv Standard main() style argv. Initial components are already + * stripped + * + * @return Normal NTSTATUS return. + **/ + +static NTSTATUS +rpc_getsid_internals(const DOM_SID *domain_sid, struct cli_state *cli, + TALLOC_CTX *mem_ctx, int argc, const char **argv) +{ + fstring sid_str; + + sid_to_string(sid_str, domain_sid); + d_printf("Storing SID %s for Domain %s in secrets.tdb\n", + sid_str, lp_workgroup()); + + if (!secrets_store_domain_sid(global_myname, domain_sid)) { + DEBUG(0,("pdb_generate_sam_sid: " + "Can't store domain SID as a pdc/bdc.\n")); + return NT_STATUS_UNSUCCESSFUL; + } + + return NT_STATUS_OK; +} + + +/** + * 'net rpc getsid' entrypoint. + * @param argc Standard main() style argc + * @param argc Standard main() style argv. Initial components are already + * stripped + **/ +int net_rpc_getsid(int argc, const char **argv) +{ + return run_rpc_command(NULL, PIPE_SAMR, NET_FLAGS_ANONYMOUS | NET_FLAGS_PDC, + rpc_getsid_internals, + argc, argv); +} /****************************************************************************/ @@ -2120,12 +2172,13 @@ int net_rpc_usage(int argc, const char **argv) { d_printf(" net rpc info \t\t\tshow basic info about a domain \n"); d_printf(" net rpc join \t\t\tto join a domain \n"); - d_printf(" net rpc testjoin \t\t\ttests that a join is valid\n"); + d_printf(" net rpc testjoin \t\ttests that a join is valid\n"); d_printf(" net rpc user \t\t\tto add, delete and list users\n"); d_printf(" net rpc group \t\tto list groups\n"); d_printf(" net rpc share \t\tto add, delete, and list shares\n"); d_printf(" net rpc file \t\t\tto list open files\n"); d_printf(" net rpc changetrustpw \tto change the trust account password\n"); + d_printf(" net rpc getsid \t\tfetch the domain sid into the local secrets.tdb\n"); d_printf(" net rpc trustdom \t\tto create trusting domain's account\n" "\t\t\t\t\tor establish trust\n"); d_printf(" net rpc abortshutdown \tto abort the shutdown of a remote server\n"); @@ -2192,6 +2245,7 @@ int net_rpc(int argc, const char **argv) {"trustdom", rpc_trustdom}, {"abortshutdown", rpc_shutdown_abort}, {"shutdown", rpc_shutdown}, + {"getsid", net_rpc_getsid}, {"help", net_rpc_help}, {NULL, NULL} }; -- cgit From e315a84c19dbe522662c8ce1f01a2f77b5381941 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 21 Aug 2002 17:32:14 +0000 Subject: document nisplus sam (This used to be commit debf77cd3a7a48ad833255c42917d7e7660d3d15) --- docs/docbook/manpages/smb.conf.5.sgml | 2 ++ docs/manpages/smb.conf.5 | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index 9dc3ae3bbf..251341dbb1 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -5344,6 +5344,8 @@ See also non unix account range + nisplussam - The NIS+ based passdb backend. Takes name NIS domain as an optional argument. Only works with sun NIS+ servers. + plugin - Allows Samba to load an arbitary passdb backend from the .so specified as a compulsary argument. diff --git a/docs/manpages/smb.conf.5 b/docs/manpages/smb.conf.5 index 8918325428..71281143a4 100644 --- a/docs/manpages/smb.conf.5 +++ b/docs/manpages/smb.conf.5 @@ -3,7 +3,7 @@ .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "SMB.CONF" "5" "20 August 2002" "" "" +.TH "SMB.CONF" "5" "22 augustus 2002" "" "" .SH NAME smb.conf \- The configuration file for the Samba suite .SH "SYNOPSIS" @@ -3396,7 +3396,7 @@ The default is to match the login name with the uid attribute for all entries matching the sambaAccount objectclass. Note that this filter should only return one entry. -Default : \fBldap filter = (&(uid=%u)(objectclass=sambaAccount))\fR +Default : \fBldap filter = (%u)(objectclass=sambaAccount))\fR .TP \fBldap ssl (G)\fR This option is used to define whether or not Samba should @@ -4860,6 +4860,9 @@ backend, with non unix account support. Takes an LDAP URL as an optional argume See also \fInon unix account range\fR .TP 0.2i \(bu +\fBnisplussam\fR - The NIS+ based passdb backend. Takes name NIS domain as an optional argument. Only works with sun NIS+ servers. +.TP 0.2i +\(bu \fBplugin\fR - Allows Samba to load an arbitary passdb backend from the .so specified as a compulsary argument. -- cgit From 72f1a676d8e4af5e1f3e4bfdf5ee0d2832486a2f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 21 Aug 2002 18:58:04 +0000 Subject: Add changes suggested by abartlet: - don't use lp_passwd_file() to retrieve NIS domain name, but use location instead - some cleanups (This used to be commit 16f4568f35c753ec0ab0a0dda2b264668f5ac5ab) --- source3/passdb/pdb_nisplus.c | 2329 ++++++++++++++++++++++-------------------- 1 file changed, 1205 insertions(+), 1124 deletions(-) diff --git a/source3/passdb/pdb_nisplus.c b/source3/passdb/pdb_nisplus.c index c302691bec..484e8986e4 100644 --- a/source3/passdb/pdb_nisplus.c +++ b/source3/passdb/pdb_nisplus.c @@ -1,5 +1,6 @@ + /* - * Test password backend for samba + * NIS+ Passdb Backend * Copyright (C) Andrew Tridgell 1992-1998 Modified by Jeremy Allison 1995. * Copyright (C) Benny Holmgren 1998 * Copyright (C) Luke Kenneth Casson Leighton 1996-1998. @@ -52,16 +53,16 @@ the fields for the NIS+ table, generated from mknissmbpwtbl.sh, are: - name=S,nogw=r - uid=S,nogw=r + name=S,nogw=r + uid=S,nogw=r user_rid=S,nogw=r smb_grpid=,nw+r group_rid=,nw+r acb=,nw+r - - lmpwd=C,nw=,g=r,o=rm - ntpwd=C,nw=,g=r,o=rm - + + lmpwd=C,nw=,g=r,o=rm + ntpwd=C,nw=,g=r,o=rm + logon_t=,nw+r logoff_t=,nw+r kick_t=,nw+r @@ -104,43 +105,48 @@ #define NPF_WORKSTATIONS 20 #define NPF_HOURS 21 -struct nisp_enum_info -{ +struct nisplus_private_info { nis_result *result; int enum_entry; + char *location; }; -static char *make_nisname_from_user_rid(uint32 rid, char *pfile); -static char *make_nisname_from_name(const char *user_name, char *pfile); -static void get_single_attribute(const nis_object *new_obj, int col, - char *val, int len);; -static BOOL make_sam_from_nisp_object(SAM_ACCOUNT *pw_buf, const nis_object *obj); -static BOOL make_sam_from_nisresult(SAM_ACCOUNT *pw_buf, const nis_result *result);; -static void set_single_attribute(nis_object *new_obj, int col, - const char *val, int len, int flags); -static BOOL init_nisp_from_sam(nis_object *obj, const SAM_ACCOUNT *sampass, - nis_object *old); -static nis_result *nisp_get_nis_list(const char *nisname, unsigned int flags); +static char *make_nisname_from_user_rid (uint32 rid, char *pfile); +static char *make_nisname_from_name (const char *user_name, char *pfile); +static void get_single_attribute (const nis_object * new_obj, int col, + char *val, int len);; +static BOOL make_sam_from_nisp_object (SAM_ACCOUNT * pw_buf, + const nis_object * obj); +static BOOL make_sam_from_nisresult (SAM_ACCOUNT * pw_buf, + const nis_result * result);; +static void set_single_attribute (nis_object * new_obj, int col, + const char *val, int len, int flags); +static BOOL init_nisp_from_sam (nis_object * obj, const SAM_ACCOUNT * sampass, + nis_object * old); +static nis_result *nisp_get_nis_list (const char *nisname, + unsigned int flags); /*************************************************************** Start enumeration of the passwd list. ****************************************************************/ -static BOOL nisplussam_setsampwent(struct pdb_methods *methods, BOOL update) +static BOOL nisplussam_setsampwent (struct pdb_methods *methods, BOOL update) { - struct nisp_enum_info *global_nisp_ent = (struct nisp_enum_info *)methods->private_data; + struct nisplus_private_info *private = + (struct nisplus_private_info *) methods->private_data; - char *sp, * p = lp_smb_passwd_file(); + char *sp; pstring pfiletmp; - if( (sp = strrchr( p, '/' )) ) - safe_strcpy(pfiletmp, sp+1, sizeof(pfiletmp)-1); + if ((sp = strrchr (private->location, '/'))) + safe_strcpy (pfiletmp, sp + 1, sizeof (pfiletmp) - 1); else - safe_strcpy(pfiletmp, p, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".org_dir", sizeof(pfiletmp)-strlen(pfiletmp)-1); + safe_strcpy (pfiletmp, p, sizeof (pfiletmp) - 1); + safe_strcat (pfiletmp, ".org_dir", + sizeof (pfiletmp) - strlen (pfiletmp) - 1); - pdb_endsampwent(); /* just in case */ - global_nisp_ent->result = nisp_get_nis_list( pfiletmp, 0 ); + pdb_endsampwent (); /* just in case */ + global_nisp_ent->result = nisp_get_nis_list (pfiletmp, 0); global_nisp_ent->enum_entry = 0; return global_nisp_ent->result != NULL ? True : False; } @@ -149,45 +155,47 @@ static BOOL nisplussam_setsampwent(struct pdb_methods *methods, BOOL update) End enumeration of the passwd list. ****************************************************************/ -static void nisplussam_endsampwent(struct pdb_methods *methods) +static void nisplussam_endsampwent (struct pdb_methods *methods) { - struct nisp_enum_info *global_nisp_ent = (struct nisp_enum_info *)methods->private_data; - if( global_nisp_ent->result ) - nis_freeresult(global_nisp_ent->result); - global_nisp_ent->result = NULL; - global_nisp_ent->enum_entry = 0; + struct nisplus_private_info *global_nisp_ent = + (struct nisplus_private_info *) methods->private_data; + if (global_nisp_ent->result) + nis_freeresult (global_nisp_ent->result); + global_nisp_ent->result = NULL; + global_nisp_ent->enum_entry = 0; } /***************************************************************** Get one SAM_ACCOUNT from the list (next in line) *****************************************************************/ -static BOOL nisplussam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT *user) +static BOOL nisplussam_getsampwent (struct pdb_methods *methods, + SAM_ACCOUNT * user) { - struct nisp_enum_info *global_nisp_ent = (struct nisp_enum_info *)methods->private_data; - int enum_entry = (int)(global_nisp_ent->enum_entry); - nis_result *result = global_nisp_ent->result; - - if (user==NULL) { - DEBUG(0,("SAM_ACCOUNT is NULL.\n")); - return False; - } + struct nisplus_private_info *global_nisp_ent = + (struct nisplus_private_info *) methods->private_data; + int enum_entry = (int) (global_nisp_ent->enum_entry); + nis_result *result = global_nisp_ent->result; - if (result == NULL || - enum_entry < 0 || enum_entry >= (NIS_RES_NUMOBJ(result) - 1)) - { - return False; - } + if (user == NULL) { + DEBUG (0, ("SAM_ACCOUNT is NULL.\n")); + return False; + } - if(!make_sam_from_nisp_object(user, &NIS_RES_OBJECT(result)[enum_entry]) ) - { - DEBUG(0,("Bad SAM_ACCOUNT entry returned from NIS+!\n")); - return False; - } - (int)(global_nisp_ent->enum_entry)++; - return True; - DEBUG(10, ("nisplussam_getsampwent called\n")); + if (result == NULL || + enum_entry < 0 || enum_entry >= (NIS_RES_NUMOBJ (result) - 1)) { + return False; + } + + if (!make_sam_from_nisp_object + (user, &NIS_RES_OBJECT (result)[enum_entry])) { + DEBUG (0, ("Bad SAM_ACCOUNT entry returned from NIS+!\n")); + return False; + } + (int) (global_nisp_ent->enum_entry)++; + return True; + DEBUG (10, ("nisplussam_getsampwent called\n")); return False; } @@ -195,38 +203,39 @@ static BOOL nisplussam_getsampwent(struct pdb_methods *methods, SAM_ACCOUNT *use Lookup a name in the SAM database ******************************************************************/ -static BOOL nisplussam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT *user, const char *sname) +static BOOL nisplussam_getsampwnam (struct pdb_methods *methods, + SAM_ACCOUNT * user, const char *sname) { /* Static buffers we will return. */ nis_result *result = NULL; pstring nisname; BOOL ret; - char *pfile = lp_smb_passwd_file(); + struct nisplus_private_info *private = + (struct nisplus_private_info *) methods->private_data; - if (!*pfile) - { - DEBUG(0, ("No SMB password file set\n")); + if (!private->location || !(*private->location)) { + DEBUG (0, ("No SMB password file set\n")); return False; } - if( strrchr( pfile, '/') ) - pfile = strrchr( pfile, '/') + 1; + if (strrchr (private->location, '/')) + private->location = strrchr (private->location, '/') + 1; - slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.org_dir", sname, pfile); - DEBUG(10, ("search by nisname: %s\n", nisname)); + slprintf (nisname, sizeof (nisname) - 1, "[name=%s],%s.org_dir", + sname, private->location); + DEBUG (10, ("search by nisname: %s\n", nisname)); /* Search the table. */ - if(!(result = nisp_get_nis_list(nisname, 0))) - { + if (!(result = nisp_get_nis_list (nisname, 0))) { return False; - } + } - ret = make_sam_from_nisresult(user, result); - nis_freeresult(result); + ret = make_sam_from_nisresult (user, result); + nis_freeresult (result); return ret; - DEBUG(10, ("nisplussam_getsampwnam called\n")); + DEBUG (10, ("nisplussam_getsampwnam called\n")); return False; } @@ -234,51 +243,53 @@ static BOOL nisplussam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT *us Search by sid **************************************************************************/ -static BOOL nisplussam_getsampwrid (struct pdb_methods *methods, SAM_ACCOUNT *user, uint32 rid) +static BOOL nisplussam_getsampwrid (struct pdb_methods *methods, + SAM_ACCOUNT * user, uint32 rid) { nis_result *result; char *nisname; BOOL ret; - char *sp, *p = lp_smb_passwd_file(); + char *sp; pstring pfiletmp; + struct nisplus_private_info *private = + (struct nisplus_private_info *) methods->private_data; - if (!*p) - { - DEBUG(0, ("no SMB password file set\n")); + if (!private->location || !(*private->location)) { + DEBUG (0, ("no SMB password file set\n")); return False; } - if( (sp = strrchr( p, '/' )) ) - safe_strcpy(pfiletmp, sp+1, sizeof(pfiletmp)-1); - else - safe_strcpy(pfiletmp, p, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".org_dir", sizeof(pfiletmp)-strlen(pfiletmp)-1); + if ((sp = strrchr (private->location, '/'))) + safe_strcpy (pfiletmp, sp + 1, sizeof (pfiletmp) - 1); + else + safe_strcpy (pfiletmp, private->location, sizeof (pfiletmp) - 1); + safe_strcat (pfiletmp, ".org_dir", + sizeof (pfiletmp) - strlen (pfiletmp) - 1); - nisname = make_nisname_from_user_rid(rid, pfiletmp); + nisname = make_nisname_from_user_rid (rid, pfiletmp); - DEBUG(10, ("search by rid: %s\n", nisname)); + DEBUG (10, ("search by rid: %s\n", nisname)); /* Search the table. */ - if(!(result = nisp_get_nis_list(nisname, 0))) - { + if (!(result = nisp_get_nis_list (nisname, 0))) { return False; } - ret = make_sam_from_nisresult(user, result); - nis_freeresult(result); + ret = make_sam_from_nisresult (user, result); + nis_freeresult (result); return ret; - - DEBUG(10, ("nisplussam_getsampwsid called\n")); - return False; } -static BOOL nisplussam_getsampwsid (struct pdb_methods *methods, SAM_ACCOUNT *user, const DOM_SID *sid) +static BOOL nisplussam_getsampwsid (struct pdb_methods *methods, + SAM_ACCOUNT * user, const DOM_SID * sid) { uint32 rid; - if (!sid_peek_check_rid(get_global_sam_sid(), sid, &rid)) return False; - return nisplussam_getsampwrid(methods, user, rid); + + if (!sid_peek_check_rid (get_global_sam_sid (), sid, &rid)) + return False; + return nisplussam_getsampwrid (methods, user, rid); } @@ -287,66 +298,71 @@ static BOOL nisplussam_getsampwsid (struct pdb_methods *methods, SAM_ACCOUNT *us Delete a SAM_ACCOUNT ****************************************************************************/ -static BOOL nisplussam_delete_sam_account(struct pdb_methods *methods, SAM_ACCOUNT *user) +static BOOL nisplussam_delete_sam_account (struct pdb_methods *methods, + SAM_ACCOUNT * user) { + const char *sname; + pstring nisname; + nis_result *result, *delresult; + nis_object *obj; + struct nisplus_private_info *private = + (struct nisplus_private_info *) methods->private_data; + + if (!user) { + DEBUG (0, ("no SAM_ACCOUNT specified!\n")); + return False; + } + + sname = pdb_get_username (user); + + if (!private->location || !(*private->location)) { + DEBUG (0, ("no SMB password file set\n")); + return False; + } + + if (strrchr (private->location, '/')) + private->location = strrchr (private->location, '/') + 1; + + slprintf (nisname, sizeof (nisname) - 1, "[name=%s],%s.org_dir", + sname, private->location); + + /* Search the table. */ + + if (!(result = nisp_get_nis_list (nisname, + MASTER_ONLY | FOLLOW_LINKS | + FOLLOW_PATH | EXPAND_NAME | + HARD_LOOKUP))) { + return False; + } - const char *sname; - char *pfile = lp_smb_passwd_file(); - pstring nisname; - nis_result *result, *delresult; - nis_object *obj; - - if (!user) { - DEBUG(0, ("no SAM_ACCOUNT specified!\n")); - return False; - } - - sname = pdb_get_username(user); - - if (!*pfile) - { - DEBUG(0, ("no SMB password file set\n")); - return False; - } - if( strrchr( pfile, '/') ) - pfile = strrchr( pfile, '/') + 1; - - slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.org_dir", sname, pfile); - - /* Search the table. */ - - if( !(result = nisp_get_nis_list(nisname, - MASTER_ONLY|FOLLOW_LINKS|FOLLOW_PATH|\ - EXPAND_NAME|HARD_LOOKUP))) { - return False; - } - - if(result->status != NIS_SUCCESS || NIS_RES_NUMOBJ(result) <= 0) { - /* User not found. */ - DEBUG(0,("user not found in NIS+\n")); - nis_freeresult(result); - return False; - } - - obj = NIS_RES_OBJECT(result); - slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.%s", sname, obj->zo_name, - obj->zo_domain); - - DEBUG(10, ("removing name: %s\n", nisname)); - delresult = nis_remove_entry(nisname, obj, - MASTER_ONLY|REM_MULTIPLE|ALL_RESULTS|FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP); - - nis_freeresult(result); - - if(delresult->status != NIS_SUCCESS) { - DEBUG(0, ("NIS+ table update failed: %s %s\n", - nisname, nis_sperrno(delresult->status))); - nis_freeresult(delresult); - return False; - } - nis_freeresult(delresult); - return True; - DEBUG(10, ("nisplussam_delete_sam_account called\n")); + if (result->status != NIS_SUCCESS || NIS_RES_NUMOBJ (result) <= 0) { + /* User not found. */ + DEBUG (0, ("user not found in NIS+\n")); + nis_freeresult (result); + return False; + } + + obj = NIS_RES_OBJECT (result); + slprintf (nisname, sizeof (nisname) - 1, "[name=%s],%s.%s", sname, + obj->zo_name, obj->zo_domain); + + DEBUG (10, ("removing name: %s\n", nisname)); + delresult = nis_remove_entry (nisname, obj, + MASTER_ONLY | REM_MULTIPLE | ALL_RESULTS + | FOLLOW_PATH | EXPAND_NAME | + HARD_LOOKUP); + + nis_freeresult (result); + + if (delresult->status != NIS_SUCCESS) { + DEBUG (0, ("NIS+ table update failed: %s %s\n", + nisname, nis_sperrno (delresult->status))); + nis_freeresult (delresult); + return False; + } + nis_freeresult (delresult); + return True; + DEBUG (10, ("nisplussam_delete_sam_account called\n")); return False; } @@ -354,347 +370,311 @@ static BOOL nisplussam_delete_sam_account(struct pdb_methods *methods, SAM_ACCOU Modifies an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL nisplussam_update_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) +static BOOL nisplussam_update_sam_account (struct pdb_methods *methods, + SAM_ACCOUNT * newpwd) { - nis_result *result, *addresult; - nis_object *obj; - nis_object new_obj; - entry_col *ecol; - int ta_maxcol; - char *pfile = lp_smb_passwd_file(); - pstring nisname; - - if (!*pfile) - { - DEBUG(0, ("no SMB password file set\n")); - return False; - } - if( strrchr( pfile, '/') ) - pfile = strrchr( pfile, '/') + 1; - - slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.org_dir", - pdb_get_username(newpwd), pfile); - - DEBUG(10, ("search by name: %s\n", nisname)); - - /* Search the table. */ - - if( !(result = nisp_get_nis_list(nisname, MASTER_ONLY|FOLLOW_LINKS|\ - FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP))) { - return False; - } - - if(result->status != NIS_SUCCESS || NIS_RES_NUMOBJ(result) <= 0) { - /* User not found. */ - DEBUG(0,("user not found in NIS+\n")); - nis_freeresult(result); - return False; - } - - obj = NIS_RES_OBJECT(result); - DEBUG(6,("entry found in %s\n", obj->zo_domain)); - - /* we must create new stub object with EN_MODIFIED flag. - this is because obj from result is going to be freed and - we do not want to break it or cause memory leaks or corruption. - */ - - memmove((char *)&new_obj, obj, sizeof (new_obj)); - ta_maxcol = obj->TA_data.ta_maxcol; - - if(!(ecol = (entry_col*)malloc(ta_maxcol*sizeof(entry_col)))) { - DEBUG(0, ("memory allocation failure\n")); - nis_freeresult(result); - return False; - } - - memmove((char *)ecol, obj->EN_data.en_cols.en_cols_val, - ta_maxcol*sizeof (entry_col)); - new_obj.EN_data.en_cols.en_cols_val = ecol; - new_obj.EN_data.en_cols.en_cols_len = ta_maxcol; - - if ( init_nisp_from_sam(&new_obj, newpwd, obj) == True ) { - slprintf(nisname, sizeof(nisname)-1, "[name=%s],%s.%s", - pdb_get_username(newpwd), pfile, obj->zo_domain); - - DEBUG(10, ("NIS+ table update: %s\n", nisname)); - addresult = - nis_modify_entry(nisname, &new_obj, - MOD_SAMEOBJ | FOLLOW_PATH | EXPAND_NAME | HARD_LOOKUP); - - if(addresult->status != NIS_SUCCESS) { - DEBUG(0, ("NIS+ table update failed: %s %s\n", - nisname, nis_sperrno(addresult->status))); - nis_freeresult(addresult); - nis_freeresult(result); - free(ecol); - return False; - } - - DEBUG(6,("password changed\n")); - nis_freeresult(addresult); - } else { - DEBUG(6,("nothing to change!\n")); - } - - free(ecol); - nis_freeresult(result); - - return True; - - DEBUG(10, ("nisplussam_update_sam_account called\n")); - return False; + nis_result *result, *addresult; + nis_object *obj; + nis_object new_obj; + entry_col *ecol; + int ta_maxcol; + struct nisplus_private_info *private = + (struct nisplus_private_info *) methods->private_data; + pstring nisname; + + if (!private->location || !(*private->location)) { + DEBUG (0, ("no SMB password file set\n")); + return False; + } + if (strrchr (private->location, '/')) + private->location = strrchr (private->location, '/') + 1; + + slprintf (nisname, sizeof (nisname) - 1, "[name=%s],%s.org_dir", + pdb_get_username (newpwd), private->location); + + DEBUG (10, ("search by name: %s\n", nisname)); + + /* Search the table. */ + + if (! + (result = + nisp_get_nis_list (nisname, + MASTER_ONLY | FOLLOW_LINKS | FOLLOW_PATH | + EXPAND_NAME | HARD_LOOKUP))) { + return False; + } + + if (result->status != NIS_SUCCESS || NIS_RES_NUMOBJ (result) <= 0) { + /* User not found. */ + DEBUG (0, ("user not found in NIS+\n")); + nis_freeresult (result); + return False; + } + + obj = NIS_RES_OBJECT (result); + DEBUG (6, ("entry found in %s\n", obj->zo_domain)); + + /* we must create new stub object with EN_MODIFIED flag. + this is because obj from result is going to be freed and + we do not want to break it or cause memory leaks or corruption. + */ + + memmove ((char *) &new_obj, obj, sizeof (new_obj)); + ta_maxcol = obj->TA_data.ta_maxcol; + + if (!(ecol = (entry_col *) malloc (ta_maxcol * sizeof (entry_col)))) { + DEBUG (0, ("memory allocation failure\n")); + nis_freeresult (result); + return False; + } + + memmove ((char *) ecol, obj->EN_data.en_cols.en_cols_val, + ta_maxcol * sizeof (entry_col)); + new_obj.EN_data.en_cols.en_cols_val = ecol; + new_obj.EN_data.en_cols.en_cols_len = ta_maxcol; + + if (init_nisp_from_sam (&new_obj, newpwd, obj) == True) { + slprintf (nisname, sizeof (nisname) - 1, "[name=%s],%s.%s", + pdb_get_username (newpwd), private->location, obj->zo_domain); + + DEBUG (10, ("NIS+ table update: %s\n", nisname)); + addresult = + nis_modify_entry (nisname, &new_obj, + MOD_SAMEOBJ | FOLLOW_PATH | + EXPAND_NAME | HARD_LOOKUP); + + if (addresult->status != NIS_SUCCESS) { + DEBUG (0, ("NIS+ table update failed: %s %s\n", + nisname, nis_sperrno (addresult->status))); + nis_freeresult (addresult); + nis_freeresult (result); + free (ecol); + return False; + } + + DEBUG (6, ("password changed\n")); + nis_freeresult (addresult); + } else { + DEBUG (6, ("nothing to change!\n")); + } + + free (ecol); + nis_freeresult (result); + + return True; } /*************************************************************************** Adds an existing SAM_ACCOUNT ****************************************************************************/ -static BOOL nisplussam_add_sam_account (struct pdb_methods *methods, SAM_ACCOUNT *newpwd) +static BOOL nisplussam_add_sam_account (struct pdb_methods *methods, + SAM_ACCOUNT * newpwd) { - int local_user = 0; - char *pfile; - pstring pfiletmp; - char *nisname; - nis_result *result = NULL, - *tblresult = NULL; - nis_object new_obj; - entry_col *ecol; - int ta_maxcol; - - /* - * 1. find user domain. - * a. try nis search in passwd.org_dir - if found use domain from result. - * b. try getpwnam. this may be needed if user is defined - * in /etc/passwd file (or elsewere) and not in passwd.org_dir. - * if found, use host default domain. - * c. exit with False - no such user. - * - * 2. add user - * a. find smbpasswd table - * search pfile in user domain if not found, try host default - * domain. - * b. smbpasswd domain is found, fill data and add entry. - * - * pfile should contain ONLY table name, org_dir will be concated. - * so, at first we will clear path prefix from pfile, and - * then we will use pfiletmp as playground to put together full - * nisname string. - * such approach will make it possible to specify samba private dir - * AND still use NIS+ table. as all domain related data is normally - * stored in org_dir.DOMAIN, this should be ok do do. - */ - - pfile = lp_smb_passwd_file(); - if( strrchr( pfile, '/') ) - pfile = strrchr( pfile, '/') + 1; - - /* - * Check if user is already there. - */ - safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".org_dir", - sizeof(pfiletmp)-strlen(pfiletmp)-1); - - if(pdb_get_username(newpwd) != NULL) { - nisname = make_nisname_from_name(pdb_get_username(newpwd), - pfiletmp); - } else { - return False; - } - - if(!(result = nisp_get_nis_list(nisname, MASTER_ONLY|FOLLOW_LINKS|\ - FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP))) { - return False; - } - if (result->status != NIS_SUCCESS && - result->status != NIS_NOTFOUND) { - DEBUG(3, ( "nis_list failure: %s: %s\n", - nisname, nis_sperrno(result->status))); - nis_freeresult(result); - return False; - } - - if (result->status == NIS_SUCCESS && NIS_RES_NUMOBJ(result) > 0) - { - DEBUG(3, ("User already exists in NIS+ password db: %s\n", - pfile)); - nis_freeresult(result); - return False; - } - - nis_freeresult(result); /* no such user, free results */ - - /* - * check for user in unix password database. we need this to get - * domain, where smbpasswd entry should be stored. - */ - - nisname = make_nisname_from_name(pdb_get_username(newpwd), - "passwd.org_dir"); - - result = nisp_get_nis_list(nisname, - MASTER_ONLY|FOLLOW_LINKS|FOLLOW_PATH|\ - EXPAND_NAME|HARD_LOOKUP); - - if (result->status != NIS_SUCCESS || NIS_RES_NUMOBJ(result) <= 0) - { - struct passwd *passwd; - DEBUG(3, ("nis_list failure: %s: %s\n", - nisname, nis_sperrno(result->status))); - nis_freeresult(result); - - if (!(passwd = getpwnam_alloc(pdb_get_username(newpwd)))) { - /* no such user in system! */ - return False; - } - passwd_free(&passwd); + int local_user = 0; + char *pfile; + pstring pfiletmp; + char *nisname; + nis_result *result = NULL, *tblresult = NULL; + nis_object new_obj; + entry_col *ecol; + int ta_maxcol; + + /* + * 1. find user domain. + * a. try nis search in passwd.org_dir - if found use domain from result. + * b. try getpwnam. this may be needed if user is defined + * in /etc/passwd file (or elsewere) and not in passwd.org_dir. + * if found, use host default domain. + * c. exit with False - no such user. + * + * 2. add user + * a. find smbpasswd table + * search pfile in user domain if not found, try host default + * domain. + * b. smbpasswd domain is found, fill data and add entry. + * + * pfile should contain ONLY table name, org_dir will be concated. + * so, at first we will clear path prefix from pfile, and + * then we will use pfiletmp as playground to put together full + * nisname string. + * such approach will make it possible to specify samba private dir + * AND still use NIS+ table. as all domain related data is normally + * stored in org_dir.DOMAIN, this should be ok do do. + */ - /* - * user is defined, but not in passwd.org_dir. + pfile = private->location; + if (strrchr (pfile, '/')) + pfile = strrchr (pfile, '/') + 1; + + /* + * Check if user is already there. */ - local_user = 1; - } else { - safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".", sizeof(pfiletmp)-strlen(pfiletmp)-1); - safe_strcat(pfiletmp, NIS_RES_OBJECT(result)->zo_domain, - sizeof(pfiletmp)-strlen(pfiletmp)-1); - nis_freeresult(result); /* not needed any more */ - - tblresult = nisp_get_nis_list(pfiletmp, - MASTER_ONLY|FOLLOW_LINKS|\ - FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP); - } - - if (local_user || tblresult->status != NIS_SUCCESS) - { - /* - * no user domain or - * smbpasswd table not found in user domain, fallback to - * default domain. - */ - if (!local_user) /* free previous failed search result */ - nis_freeresult(tblresult); - - safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".org_dir", - sizeof(pfiletmp)-strlen(pfiletmp)-1); - tblresult = nis_lookup(pfiletmp, MASTER_ONLY|FOLLOW_LINKS|\ - FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP); - if (tblresult->status != NIS_SUCCESS) - { - /* still nothing. bail out */ - nis_freeresult(tblresult); - DEBUG(3, ( "nis_lookup failure: %s\n", - nis_sperrno(tblresult->status))); - return False; + safe_strcpy (pfiletmp, pfile, sizeof (pfiletmp) - 1); + safe_strcat (pfiletmp, ".org_dir", + sizeof (pfiletmp) - strlen (pfiletmp) - 1); + + if (pdb_get_username (newpwd) != NULL) { + nisname = make_nisname_from_name (pdb_get_username (newpwd), + pfiletmp); + } else { + return False; } - /* we need full name for nis_add_entry() */ - safe_strcpy(pfiletmp, pfile, sizeof(pfiletmp)-1); - safe_strcat(pfiletmp, ".", sizeof(pfiletmp)-strlen(pfiletmp)-1); - safe_strcat(pfiletmp, NIS_RES_OBJECT(tblresult)->zo_domain, - sizeof(pfiletmp)-strlen(pfiletmp)-1); - } - - memset((char *)&new_obj, 0, sizeof (new_obj)); - /* fill entry headers */ - /* we do not free these. */ - new_obj.zo_name = NIS_RES_OBJECT(tblresult)->zo_name; - new_obj.zo_owner = NIS_RES_OBJECT(tblresult)->zo_owner; - new_obj.zo_group = NIS_RES_OBJECT(tblresult)->zo_group; - new_obj.zo_domain = NIS_RES_OBJECT(tblresult)->zo_domain; - /* uints */ - new_obj.zo_access = NIS_RES_OBJECT(tblresult)->zo_access; - new_obj.zo_ttl = NIS_RES_OBJECT(tblresult)->zo_ttl; - - new_obj.zo_data.zo_type = ENTRY_OBJ; - new_obj.EN_data.en_type = - NIS_RES_OBJECT(tblresult)->TA_data.ta_type; - - ta_maxcol = NIS_RES_OBJECT(tblresult)->TA_data.ta_maxcol; - - if(!(ecol = (entry_col*)malloc(ta_maxcol*sizeof(entry_col)))) { - DEBUG(0, ("memory allocation failure\n")); - nis_freeresult(tblresult); - return False; - } - - memset((char *)ecol, 0, ta_maxcol*sizeof (entry_col)); - new_obj.EN_data.en_cols.en_cols_val = ecol; - new_obj.EN_data.en_cols.en_cols_len = ta_maxcol; - - init_nisp_from_sam(&new_obj, newpwd, NULL); - - DEBUG(10, ( "add NIS+ entry: %s\n", nisname)); - result = nis_add_entry(pfiletmp, &new_obj, 0); - - free(ecol); /* free allocated entry space */ - - if (result->status != NIS_SUCCESS) - { - DEBUG(3, ( "NIS+ table update failed: %s,%s\n", - nisname, nis_sperrno(result->status))); - nis_freeresult(tblresult); - nis_freeresult(result); - return False; - } - - nis_freeresult(tblresult); - nis_freeresult(result); - - return True; - - DEBUG(10, ("nisplussam_add_sam_account called\n")); - return False; -} -NTSTATUS pdb_init_nisplussam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location) -{ - NTSTATUS nt_status; + if (! + (result = + nisp_get_nis_list (nisname, + MASTER_ONLY | FOLLOW_LINKS | FOLLOW_PATH | + EXPAND_NAME | HARD_LOOKUP))) { + return False; + } + if (result->status != NIS_SUCCESS && result->status != NIS_NOTFOUND) { + DEBUG (3, ("nis_list failure: %s: %s\n", + nisname, nis_sperrno (result->status))); + nis_freeresult (result); + return False; + } - if (!NT_STATUS_IS_OK(nt_status = make_pdb_methods(pdb_context->mem_ctx, pdb_method))) { - return nt_status; + if (result->status == NIS_SUCCESS && NIS_RES_NUMOBJ (result) > 0) { + DEBUG (3, ("User already exists in NIS+ password db: %s\n", + pfile)); + nis_freeresult (result); + return False; } - (*pdb_method)->name = "nisplussam"; + nis_freeresult (result); /* no such user, free results */ - /* Functions your pdb module doesn't provide should be set - * to NULL */ + /* + * check for user in unix password database. we need this to get + * domain, where smbpasswd entry should be stored. + */ - (*pdb_method)->setsampwent = nisplussam_setsampwent; - (*pdb_method)->endsampwent = nisplussam_endsampwent; - (*pdb_method)->getsampwent = nisplussam_getsampwent; - (*pdb_method)->getsampwnam = nisplussam_getsampwnam; - (*pdb_method)->getsampwsid = nisplussam_getsampwsid; - (*pdb_method)->add_sam_account = nisplussam_add_sam_account; - (*pdb_method)->update_sam_account = nisplussam_update_sam_account; - (*pdb_method)->delete_sam_account = nisplussam_delete_sam_account; - (*pdb_method)->private_data = malloc(sizeof(struct nisp_enum_info)); + nisname = make_nisname_from_name (pdb_get_username (newpwd), + "passwd.org_dir"); - return NT_STATUS_OK; -} + result = nisp_get_nis_list (nisname, + MASTER_ONLY | FOLLOW_LINKS | FOLLOW_PATH | + EXPAND_NAME | HARD_LOOKUP); + if (result->status != NIS_SUCCESS || NIS_RES_NUMOBJ (result) <= 0) { + struct passwd *passwd; -/******************************************************************* - converts UNIX uid to an NT User RID. - ********************************************************************/ + DEBUG (3, ("nis_list failure: %s: %s\n", + nisname, nis_sperrno (result->status))); + nis_freeresult (result); -static uint32 pdb_uid_to_user_rid(uid_t uid) -{ - return (((((uint32)uid)*RID_MULTIPLIER) + 1000) | USER_RID_TYPE); + if (!(passwd = getpwnam_alloc (pdb_get_username (newpwd)))) { + /* no such user in system! */ + return False; + } + passwd_free (&passwd); + + /* + * user is defined, but not in passwd.org_dir. + */ + local_user = 1; + } else { + safe_strcpy (pfiletmp, pfile, sizeof (pfiletmp) - 1); + safe_strcat (pfiletmp, ".", + sizeof (pfiletmp) - strlen (pfiletmp) - 1); + safe_strcat (pfiletmp, NIS_RES_OBJECT (result)->zo_domain, + sizeof (pfiletmp) - strlen (pfiletmp) - 1); + nis_freeresult (result); /* not needed any more */ + + tblresult = nisp_get_nis_list (pfiletmp, + MASTER_ONLY | FOLLOW_LINKS | + FOLLOW_PATH | EXPAND_NAME | + HARD_LOOKUP); + } + + if (local_user || tblresult->status != NIS_SUCCESS) { + /* + * no user domain or + * smbpasswd table not found in user domain, fallback to + * default domain. + */ + if (!local_user) /* free previous failed search result */ + nis_freeresult (tblresult); + + safe_strcpy (pfiletmp, pfile, sizeof (pfiletmp) - 1); + safe_strcat (pfiletmp, ".org_dir", + sizeof (pfiletmp) - strlen (pfiletmp) - 1); + tblresult = nis_lookup (pfiletmp, MASTER_ONLY | FOLLOW_LINKS | + FOLLOW_PATH | EXPAND_NAME | + HARD_LOOKUP); + if (tblresult->status != NIS_SUCCESS) { + /* still nothing. bail out */ + nis_freeresult (tblresult); + DEBUG (3, ("nis_lookup failure: %s\n", + nis_sperrno (tblresult->status))); + return False; + } + /* we need full name for nis_add_entry() */ + safe_strcpy (pfiletmp, pfile, sizeof (pfiletmp) - 1); + safe_strcat (pfiletmp, ".", + sizeof (pfiletmp) - strlen (pfiletmp) - 1); + safe_strcat (pfiletmp, NIS_RES_OBJECT (tblresult)->zo_domain, + sizeof (pfiletmp) - strlen (pfiletmp) - 1); + } + + memset ((char *) &new_obj, 0, sizeof (new_obj)); + /* fill entry headers */ + /* we do not free these. */ + new_obj.zo_name = NIS_RES_OBJECT (tblresult)->zo_name; + new_obj.zo_owner = NIS_RES_OBJECT (tblresult)->zo_owner; + new_obj.zo_group = NIS_RES_OBJECT (tblresult)->zo_group; + new_obj.zo_domain = NIS_RES_OBJECT (tblresult)->zo_domain; + /* uints */ + new_obj.zo_access = NIS_RES_OBJECT (tblresult)->zo_access; + new_obj.zo_ttl = NIS_RES_OBJECT (tblresult)->zo_ttl; + + new_obj.zo_data.zo_type = ENTRY_OBJ; + new_obj.EN_data.en_type = NIS_RES_OBJECT (tblresult)->TA_data.ta_type; + + ta_maxcol = NIS_RES_OBJECT (tblresult)->TA_data.ta_maxcol; + + if (!(ecol = (entry_col *) malloc (ta_maxcol * sizeof (entry_col)))) { + DEBUG (0, ("memory allocation failure\n")); + nis_freeresult (tblresult); + return False; + } + + memset ((char *) ecol, 0, ta_maxcol * sizeof (entry_col)); + new_obj.EN_data.en_cols.en_cols_val = ecol; + new_obj.EN_data.en_cols.en_cols_len = ta_maxcol; + + init_nisp_from_sam (&new_obj, newpwd, NULL); + + DEBUG (10, ("add NIS+ entry: %s\n", nisname)); + result = nis_add_entry (pfiletmp, &new_obj, 0); + + free (ecol); /* free allocated entry space */ + + if (result->status != NIS_SUCCESS) { + DEBUG (3, ("NIS+ table update failed: %s,%s\n", + nisname, nis_sperrno (result->status))); + nis_freeresult (tblresult); + nis_freeresult (result); + return False; + } + + nis_freeresult (tblresult); + nis_freeresult (result); + + return True; } /*************************************************************** make_nisname_from_user_rid ****************************************************************/ -static char *make_nisname_from_user_rid(uint32 rid, char *pfile) +static char *make_nisname_from_user_rid (uint32 rid, char *pfile) { static pstring nisname; - safe_strcpy(nisname, "[user_rid=", sizeof(nisname)-1); - slprintf(nisname, sizeof(nisname)-1, "%s%d", nisname, rid); - safe_strcat(nisname, "],", sizeof(nisname)-strlen(nisname)-1); - safe_strcat(nisname, pfile, sizeof(nisname)-strlen(nisname)-1); + safe_strcpy (nisname, "[user_rid=", sizeof (nisname) - 1); + slprintf (nisname, sizeof (nisname) - 1, "%s%d", nisname, rid); + safe_strcat (nisname, "],", sizeof (nisname) - strlen (nisname) - 1); + safe_strcat (nisname, pfile, sizeof (nisname) - strlen (nisname) - 1); return nisname; } @@ -702,14 +682,15 @@ static char *make_nisname_from_user_rid(uint32 rid, char *pfile) /*************************************************************** make_nisname_from_name ****************************************************************/ -static char *make_nisname_from_name(const char *user_name, char *pfile) +static char *make_nisname_from_name (const char *user_name, char *pfile) { static pstring nisname; - safe_strcpy(nisname, "[name=", sizeof(nisname)-1); - safe_strcat(nisname, user_name, sizeof(nisname) - strlen(nisname) - 1); - safe_strcat(nisname, "],", sizeof(nisname)-strlen(nisname)-1); - safe_strcat(nisname, pfile, sizeof(nisname)-strlen(nisname)-1); + safe_strcpy (nisname, "[name=", sizeof (nisname) - 1); + safe_strcat (nisname, user_name, + sizeof (nisname) - strlen (nisname) - 1); + safe_strcat (nisname, "],", sizeof (nisname) - strlen (nisname) - 1); + safe_strcat (nisname, pfile, sizeof (nisname) - strlen (nisname) - 1); return nisname; } @@ -717,297 +698,323 @@ static char *make_nisname_from_name(const char *user_name, char *pfile) /************************************************************************* gets a NIS+ attribute *************************************************************************/ -static void get_single_attribute(const nis_object *new_obj, int col, - char *val, int len) +static void get_single_attribute (const nis_object * new_obj, int col, + char *val, int len) { int entry_len; - if (new_obj == NULL || val == NULL) return; - - entry_len = ENTRY_LEN(new_obj, col); - if (len > entry_len) - { + if (new_obj == NULL || val == NULL) + return; + + entry_len = ENTRY_LEN (new_obj, col); + if (len > entry_len) { len = entry_len; } - safe_strcpy(val, ENTRY_VAL(new_obj, col), len-1); + safe_strcpy (val, ENTRY_VAL (new_obj, col), len - 1); } /************************************************************************ makes a struct sam_passwd from a NIS+ object. ************************************************************************/ -static BOOL make_sam_from_nisp_object(SAM_ACCOUNT *pw_buf, const nis_object *obj) +static BOOL make_sam_from_nisp_object (SAM_ACCOUNT * pw_buf, + const nis_object * obj) { - char *ptr; - pstring full_name; /* this must be translated to dos code page */ - pstring acct_desc; /* this must be translated to dos code page */ - pstring home_dir; /* set default value from smb.conf for user */ - pstring home_drive; /* set default value from smb.conf for user */ - pstring logon_script; /* set default value from smb.conf for user */ - pstring profile_path; /* set default value from smb.conf for user */ - pstring hours; - int hours_len; - unsigned char smbpwd[16]; - unsigned char smbntpwd[16]; - - - /* - * time values. note: this code assumes 32bit time_t! - */ - - /* Don't change these timestamp settings without a good reason. They are - important for NT member server compatibility. */ - - pdb_set_logon_time(pw_buf, (time_t)0, True); - ptr = (uchar *)ENTRY_VAL(obj, NPF_LOGON_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "LNT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_logon_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); - } - } - - pdb_set_logoff_time(pw_buf, get_time_t_max(), True); - ptr = (uchar *)ENTRY_VAL(obj, NPF_LOGOFF_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "LOT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_logoff_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); - } - } - - pdb_set_kickoff_time(pw_buf, get_time_t_max(), True); - ptr = (uchar *)ENTRY_VAL(obj, NPF_KICK_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "KOT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_kickoff_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); - } - } - - pdb_set_pass_last_set_time(pw_buf, (time_t)0); - ptr = (uchar *)ENTRY_VAL(obj, NPF_PWDLSET_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "LCT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_pass_last_set_time(pw_buf, (time_t)strtol(ptr, NULL, 16)); - } - } - - pdb_set_pass_can_change_time(pw_buf, (time_t)0, True); - ptr = (uchar *)ENTRY_VAL(obj, NPF_PWDCCHG_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "CCT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_pass_can_change_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); - } - } - - pdb_set_pass_must_change_time(pw_buf, get_time_t_max(), True); /* Password never expires. */ - ptr = (uchar *)ENTRY_VAL(obj, NPF_PWDMCHG_T); - if(ptr && *ptr && (StrnCaseCmp(ptr, "MCT-", 4)==0)) { - int i; - ptr += 4; - for(i = 0; i < 8; i++) { - if(ptr[i] == '\0' || !isxdigit(ptr[i])) - break; - } - if(i == 8) { - pdb_set_pass_must_change_time(pw_buf, (time_t)strtol(ptr, NULL, 16), True); - } - } - - /* string values */ - pdb_set_username(pw_buf, ENTRY_VAL(obj, NPF_NAME)); - pdb_set_domain(pw_buf, lp_workgroup()); - /* pdb_set_nt_username() -- cant set it here... */ - - get_single_attribute(obj, NPF_FULL_NAME, full_name, sizeof(pstring)); + char *ptr; + pstring full_name; /* this must be translated to dos code page */ + pstring acct_desc; /* this must be translated to dos code page */ + pstring home_dir; /* set default value from smb.conf for user */ + pstring home_drive; /* set default value from smb.conf for user */ + pstring logon_script; /* set default value from smb.conf for user */ + pstring profile_path; /* set default value from smb.conf for user */ + pstring hours; + int hours_len; + unsigned char smbpwd[16]; + unsigned char smbntpwd[16]; + + + /* + * time values. note: this code assumes 32bit time_t! + */ + + /* Don't change these timestamp settings without a good reason. They are + important for NT member server compatibility. */ + + pdb_set_logon_time (pw_buf, (time_t) 0, True); + ptr = (uchar *) ENTRY_VAL (obj, NPF_LOGON_T); + if (ptr && *ptr && (StrnCaseCmp (ptr, "LNT-", 4) == 0)) { + int i; + + ptr += 4; + for (i = 0; i < 8; i++) { + if (ptr[i] == '\0' || !isxdigit (ptr[i])) + break; + } + if (i == 8) { + pdb_set_logon_time (pw_buf, + (time_t) strtol (ptr, NULL, 16), + True); + } + } + + pdb_set_logoff_time (pw_buf, get_time_t_max (), True); + ptr = (uchar *) ENTRY_VAL (obj, NPF_LOGOFF_T); + if (ptr && *ptr && (StrnCaseCmp (ptr, "LOT-", 4) == 0)) { + int i; + + ptr += 4; + for (i = 0; i < 8; i++) { + if (ptr[i] == '\0' || !isxdigit (ptr[i])) + break; + } + if (i == 8) { + pdb_set_logoff_time (pw_buf, + (time_t) strtol (ptr, NULL, 16), + True); + } + } + + pdb_set_kickoff_time (pw_buf, get_time_t_max (), True); + ptr = (uchar *) ENTRY_VAL (obj, NPF_KICK_T); + if (ptr && *ptr && (StrnCaseCmp (ptr, "KOT-", 4) == 0)) { + int i; + + ptr += 4; + for (i = 0; i < 8; i++) { + if (ptr[i] == '\0' || !isxdigit (ptr[i])) + break; + } + if (i == 8) { + pdb_set_kickoff_time (pw_buf, + (time_t) strtol (ptr, NULL, 16), + True); + } + } + + pdb_set_pass_last_set_time (pw_buf, (time_t) 0); + ptr = (uchar *) ENTRY_VAL (obj, NPF_PWDLSET_T); + if (ptr && *ptr && (StrnCaseCmp (ptr, "LCT-", 4) == 0)) { + int i; + + ptr += 4; + for (i = 0; i < 8; i++) { + if (ptr[i] == '\0' || !isxdigit (ptr[i])) + break; + } + if (i == 8) { + pdb_set_pass_last_set_time (pw_buf, + (time_t) strtol (ptr, + NULL, + 16)); + } + } + + pdb_set_pass_can_change_time (pw_buf, (time_t) 0, True); + ptr = (uchar *) ENTRY_VAL (obj, NPF_PWDCCHG_T); + if (ptr && *ptr && (StrnCaseCmp (ptr, "CCT-", 4) == 0)) { + int i; + + ptr += 4; + for (i = 0; i < 8; i++) { + if (ptr[i] == '\0' || !isxdigit (ptr[i])) + break; + } + if (i == 8) { + pdb_set_pass_can_change_time (pw_buf, + (time_t) strtol (ptr, + NULL, + 16), + True); + } + } + + pdb_set_pass_must_change_time (pw_buf, get_time_t_max (), True); /* Password never expires. */ + ptr = (uchar *) ENTRY_VAL (obj, NPF_PWDMCHG_T); + if (ptr && *ptr && (StrnCaseCmp (ptr, "MCT-", 4) == 0)) { + int i; + + ptr += 4; + for (i = 0; i < 8; i++) { + if (ptr[i] == '\0' || !isxdigit (ptr[i])) + break; + } + if (i == 8) { + pdb_set_pass_must_change_time (pw_buf, + (time_t) strtol (ptr, + NULL, + 16), + True); + } + } + + /* string values */ + pdb_set_username (pw_buf, ENTRY_VAL (obj, NPF_NAME)); + pdb_set_domain (pw_buf, lp_workgroup ()); + /* pdb_set_nt_username() -- cant set it here... */ + + get_single_attribute (obj, NPF_FULL_NAME, full_name, + sizeof (pstring)); #if 0 - unix_to_dos(full_name, True); + unix_to_dos (full_name, True); #endif - pdb_set_fullname(pw_buf, full_name); + pdb_set_fullname (pw_buf, full_name); - pdb_set_acct_ctrl(pw_buf, pdb_decode_acct_ctrl(ENTRY_VAL(obj, - NPF_ACB))); + pdb_set_acct_ctrl (pw_buf, pdb_decode_acct_ctrl (ENTRY_VAL (obj, + NPF_ACB))); - get_single_attribute(obj, NPF_ACCT_DESC, acct_desc, sizeof(pstring)); + get_single_attribute (obj, NPF_ACCT_DESC, acct_desc, + sizeof (pstring)); #if 0 - unix_to_dos(acct_desc, True); + unix_to_dos (acct_desc, True); #endif - pdb_set_acct_desc(pw_buf, acct_desc); - - pdb_set_workstations(pw_buf, ENTRY_VAL(obj, NPF_WORKSTATIONS)); - pdb_set_munged_dial(pw_buf, NULL); - - pdb_set_uid(pw_buf, atoi(ENTRY_VAL(obj, NPF_UID))); - pdb_set_gid(pw_buf, atoi(ENTRY_VAL(obj, NPF_SMB_GRPID))); - pdb_set_user_sid_from_rid(pw_buf, atoi(ENTRY_VAL(obj, NPF_USER_RID))); - pdb_set_group_sid_from_rid(pw_buf, atoi(ENTRY_VAL(obj, NPF_GROUP_RID))); - - /* values, must exist for user */ - if( !(pdb_get_acct_ctrl(pw_buf) & ACB_WSTRUST) ) { - - get_single_attribute(obj, NPF_HOME_DIR, home_dir, sizeof(pstring)); - if( !(home_dir && *home_dir) ) { - pstrcpy(home_dir, lp_logon_home()); - pdb_set_homedir(pw_buf, home_dir, False); - } - else - pdb_set_homedir(pw_buf, home_dir, True); - - get_single_attribute(obj, NPF_DIR_DRIVE, home_drive, sizeof(pstring)); - if( !(home_drive && *home_drive) ) { - pstrcpy(home_drive, lp_logon_drive()); - pdb_set_dir_drive(pw_buf, home_drive, False); - } - else - pdb_set_dir_drive(pw_buf, home_drive, True); - - get_single_attribute(obj, NPF_LOGON_SCRIPT, logon_script, - sizeof(pstring)); - if( !(logon_script && *logon_script) ) { - pstrcpy(logon_script, lp_logon_script()); - } - else - pdb_set_logon_script(pw_buf, logon_script, True); - - get_single_attribute(obj, NPF_PROFILE_PATH, profile_path, sizeof(pstring)); - if( !(profile_path && *profile_path) ) { - pstrcpy(profile_path, lp_logon_path()); - pdb_set_profile_path(pw_buf, profile_path, False); - } - else - pdb_set_profile_path(pw_buf, profile_path, True); - - } - else - { - /* lkclXXXX this is OBSERVED behaviour by NT PDCs, enforced here. */ - pdb_set_group_sid_from_rid (pw_buf, DOMAIN_GROUP_RID_USERS); - } - - /* Check the lanman password column. */ - ptr = (char *)ENTRY_VAL(obj, NPF_LMPWD); - if (!pdb_set_lanman_passwd(pw_buf, NULL)) - return False; + pdb_set_acct_desc (pw_buf, acct_desc); + + pdb_set_workstations (pw_buf, ENTRY_VAL (obj, NPF_WORKSTATIONS)); + pdb_set_munged_dial (pw_buf, NULL); + + pdb_set_uid (pw_buf, atoi (ENTRY_VAL (obj, NPF_UID))); + pdb_set_gid (pw_buf, atoi (ENTRY_VAL (obj, NPF_SMB_GRPID))); + pdb_set_user_sid_from_rid (pw_buf, + atoi (ENTRY_VAL (obj, NPF_USER_RID))); + pdb_set_group_sid_from_rid (pw_buf, + atoi (ENTRY_VAL (obj, NPF_GROUP_RID))); + + /* values, must exist for user */ + if (!(pdb_get_acct_ctrl (pw_buf) & ACB_WSTRUST)) { + + get_single_attribute (obj, NPF_HOME_DIR, home_dir, + sizeof (pstring)); + if (!(home_dir && *home_dir)) { + pstrcpy (home_dir, lp_logon_home ()); + pdb_set_homedir (pw_buf, home_dir, False); + } else + pdb_set_homedir (pw_buf, home_dir, True); + + get_single_attribute (obj, NPF_DIR_DRIVE, home_drive, + sizeof (pstring)); + if (!(home_drive && *home_drive)) { + pstrcpy (home_drive, lp_logon_drive ()); + pdb_set_dir_drive (pw_buf, home_drive, False); + } else + pdb_set_dir_drive (pw_buf, home_drive, True); + + get_single_attribute (obj, NPF_LOGON_SCRIPT, logon_script, + sizeof (pstring)); + if (!(logon_script && *logon_script)) { + pstrcpy (logon_script, lp_logon_script ()); + } else + pdb_set_logon_script (pw_buf, logon_script, True); + + get_single_attribute (obj, NPF_PROFILE_PATH, profile_path, + sizeof (pstring)); + if (!(profile_path && *profile_path)) { + pstrcpy (profile_path, lp_logon_path ()); + pdb_set_profile_path (pw_buf, profile_path, False); + } else + pdb_set_profile_path (pw_buf, profile_path, True); + + } else { + /* lkclXXXX this is OBSERVED behaviour by NT PDCs, enforced here. */ + pdb_set_group_sid_from_rid (pw_buf, DOMAIN_GROUP_RID_USERS); + } - if (!strncasecmp(ptr, "NO PASSWORD", 11)) { - pdb_set_acct_ctrl(pw_buf, pdb_get_acct_ctrl(pw_buf) | ACB_PWNOTREQ); - } else { - if (strlen(ptr) != 32 || !pdb_gethexpwd(ptr, smbpwd)) { - DEBUG(0, ("malformed LM pwd entry: %s.\n", - pdb_get_username(pw_buf))); - return False; - } - if (!pdb_set_lanman_passwd(pw_buf, smbpwd)) + /* Check the lanman password column. */ + ptr = (char *) ENTRY_VAL (obj, NPF_LMPWD); + if (!pdb_set_lanman_passwd (pw_buf, NULL)) return False; - } - - /* Check the NT password column. */ - ptr = ENTRY_VAL(obj, NPF_NTPWD); - if (!pdb_set_nt_passwd(pw_buf, NULL)) - return False; - - if (!(pdb_get_acct_ctrl(pw_buf) & ACB_PWNOTREQ) && - strncasecmp(ptr, "NO PASSWORD", 11)) { - if (strlen(ptr) != 32 || !pdb_gethexpwd(ptr, smbntpwd)) { - DEBUG(0, ("malformed NT pwd entry:\ - uid = %d.\n", - pdb_get_uid(pw_buf))); - return False; - } - if (!pdb_set_nt_passwd(pw_buf, smbntpwd)) + + if (!strncasecmp (ptr, "NO PASSWORD", 11)) { + pdb_set_acct_ctrl (pw_buf, + pdb_get_acct_ctrl (pw_buf) | ACB_PWNOTREQ); + } else { + if (strlen (ptr) != 32 || !pdb_gethexpwd (ptr, smbpwd)) { + DEBUG (0, ("malformed LM pwd entry: %s.\n", + pdb_get_username (pw_buf))); + return False; + } + if (!pdb_set_lanman_passwd (pw_buf, smbpwd)) + return False; + } + + /* Check the NT password column. */ + ptr = ENTRY_VAL (obj, NPF_NTPWD); + if (!pdb_set_nt_passwd (pw_buf, NULL)) return False; - } - - pdb_set_unknown_3(pw_buf, 0xffffff); /* don't know */ - pdb_set_logon_divs(pw_buf, 168); /* hours per week */ - - if( (hours_len = ENTRY_LEN(obj, NPF_HOURS)) == 21 ) { - memcpy(hours, ENTRY_VAL(obj, NPF_HOURS), hours_len); - } else { - hours_len = 21; /* 21 times 8 bits = 168 */ - /* available at all hours */ - memset(hours, 0xff, hours_len); - } - pdb_set_hours_len(pw_buf, hours_len); - pdb_set_hours(pw_buf, hours); - - pdb_set_unknown_5(pw_buf, 0x00020000); /* don't know */ - pdb_set_unknown_6(pw_buf, 0x000004ec); /* don't know */ - - return True; + + if (!(pdb_get_acct_ctrl (pw_buf) & ACB_PWNOTREQ) && + strncasecmp (ptr, "NO PASSWORD", 11)) { + if (strlen (ptr) != 32 || !pdb_gethexpwd (ptr, smbntpwd)) { + DEBUG (0, ("malformed NT pwd entry:\ + uid = %d.\n", pdb_get_uid (pw_buf))); + return False; + } + if (!pdb_set_nt_passwd (pw_buf, smbntpwd)) + return False; + } + + pdb_set_unknown_3 (pw_buf, 0xffffff); /* don't know */ + pdb_set_logon_divs (pw_buf, 168); /* hours per week */ + + if ((hours_len = ENTRY_LEN (obj, NPF_HOURS)) == 21) { + memcpy (hours, ENTRY_VAL (obj, NPF_HOURS), hours_len); + } else { + hours_len = 21; /* 21 times 8 bits = 168 */ + /* available at all hours */ + memset (hours, 0xff, hours_len); + } + pdb_set_hours_len (pw_buf, hours_len); + pdb_set_hours (pw_buf, hours); + + pdb_set_unknown_5 (pw_buf, 0x00020000); /* don't know */ + pdb_set_unknown_6 (pw_buf, 0x000004ec); /* don't know */ + + return True; } /************************************************************************ makes a struct sam_passwd from a NIS+ result. ************************************************************************/ -static BOOL make_sam_from_nisresult(SAM_ACCOUNT *pw_buf, const nis_result *result) +static BOOL make_sam_from_nisresult (SAM_ACCOUNT * pw_buf, + const nis_result * result) { - if (pw_buf == NULL || result == NULL) return False; + if (pw_buf == NULL || result == NULL) + return False; - if (result->status != NIS_SUCCESS && result->status != NIS_NOTFOUND) - { - DEBUG(0, ("NIS+ lookup failure: %s\n", - nis_sperrno(result->status))); + if (result->status != NIS_SUCCESS && result->status != NIS_NOTFOUND) { + DEBUG (0, ("NIS+ lookup failure: %s\n", + nis_sperrno (result->status))); return False; } /* User not found. */ - if (NIS_RES_NUMOBJ(result) <= 0) - { - DEBUG(10, ("user not found in NIS+\n")); + if (NIS_RES_NUMOBJ (result) <= 0) { + DEBUG (10, ("user not found in NIS+\n")); return False; } - if (NIS_RES_NUMOBJ(result) > 1) - { - DEBUG(10, ("WARNING: Multiple entries for user in NIS+ table!\n")); + if (NIS_RES_NUMOBJ (result) > 1) { + DEBUG (10, + ("WARNING: Multiple entries for user in NIS+ table!\n")); } /* Grab the first hit. */ - return make_sam_from_nisp_object(pw_buf, &NIS_RES_OBJECT(result)[0]); + return make_sam_from_nisp_object (pw_buf, + &NIS_RES_OBJECT (result)[0]); } /************************************************************************* sets a NIS+ attribute *************************************************************************/ -static void set_single_attribute(nis_object *new_obj, int col, - const char *val, int len, int flags) +static void set_single_attribute (nis_object * new_obj, int col, + const char *val, int len, int flags) { - if (new_obj == NULL) return; + if (new_obj == NULL) + return; - ENTRY_VAL(new_obj, col) = val; - ENTRY_LEN(new_obj, col) = len+1; + ENTRY_VAL (new_obj, col) = val; + ENTRY_LEN (new_obj, col) = len + 1; - if (flags != 0) - { + if (flags != 0) { new_obj->EN_data.en_cols.en_cols_val[col].ec_flags = flags; } } @@ -1016,449 +1023,523 @@ static void set_single_attribute(nis_object *new_obj, int col, copy or modify nis object. this object is used to add or update nisplus table entry. ****************************************************************/ -static BOOL init_nisp_from_sam(nis_object *obj, const SAM_ACCOUNT *sampass, - nis_object *old) +static BOOL init_nisp_from_sam (nis_object * obj, const SAM_ACCOUNT * sampass, + nis_object * old) { - /* - * Fill nis_object for entry add or update. - * if we are updateing, we have to find out differences and set - * EN_MODIFIED flag. also set need_to_modify to trigger - * nis_modify_entry() call in pdb_update_sam_account(). - * - * TODO: - * get data from SAM - * if (modify) get data from nis_object, compare and store if - * different + set EN_MODIFIED and need_to_modify - * else - * store - */ - BOOL need_to_modify = False; - const char *name = pdb_get_username(sampass); /* from SAM */ - /* these must be static or allocate and free entry columns! */ - static fstring uid; /* from SAM */ - static fstring user_rid; /* from SAM */ - static fstring gid; /* from SAM */ - static fstring group_rid; /* from SAM */ - char *acb; /* from SAM */ - static fstring smb_passwd; /* from SAM */ - static fstring smb_nt_passwd; /* from SAM */ - static fstring logon_t; /* from SAM */ - static fstring logoff_t; /* from SAM */ - static fstring kickoff_t; /* from SAM */ - static fstring pwdlset_t; /* from SAM */ - static fstring pwdlchg_t; /* from SAM */ - static fstring pwdmchg_t; /* from SAM */ - static fstring full_name; /* from SAM */ - static fstring acct_desc; /* from SAM */ - static char empty[1]; /* just an empty string */ - - slprintf(uid, sizeof(uid)-1, "%u", pdb_get_uid(sampass)); - slprintf(user_rid, sizeof(user_rid)-1, "%u", - pdb_get_user_rid(sampass)? pdb_get_user_rid(sampass): - pdb_uid_to_user_rid(pdb_get_uid(sampass))); - slprintf(gid, sizeof(gid)-1, "%u", pdb_get_gid(sampass)); + /* + * Fill nis_object for entry add or update. + * if we are updateing, we have to find out differences and set + * EN_MODIFIED flag. also set need_to_modify to trigger + * nis_modify_entry() call in pdb_update_sam_account(). + * + * TODO: + * get data from SAM + * if (modify) get data from nis_object, compare and store if + * different + set EN_MODIFIED and need_to_modify + * else + * store + */ + BOOL need_to_modify = False; + const char *name = pdb_get_username (sampass); /* from SAM */ + + /* these must be static or allocate and free entry columns! */ + static fstring uid; /* from SAM */ + static fstring user_rid; /* from SAM */ + static fstring gid; /* from SAM */ + static fstring group_rid; /* from SAM */ + char *acb; /* from SAM */ + static fstring smb_passwd; /* from SAM */ + static fstring smb_nt_passwd; /* from SAM */ + static fstring logon_t; /* from SAM */ + static fstring logoff_t; /* from SAM */ + static fstring kickoff_t; /* from SAM */ + static fstring pwdlset_t; /* from SAM */ + static fstring pwdlchg_t; /* from SAM */ + static fstring pwdmchg_t; /* from SAM */ + static fstring full_name; /* from SAM */ + static fstring acct_desc; /* from SAM */ + static char empty[1]; /* just an empty string */ + + slprintf (uid, sizeof (uid) - 1, "%u", pdb_get_uid (sampass)); + slprintf (user_rid, sizeof (user_rid) - 1, "%u", + pdb_get_user_rid (sampass) ? pdb_get_user_rid (sampass) : + fallback_pdb_uid_to_user_rid (pdb_get_uid (sampass))); + slprintf (gid, sizeof (gid) - 1, "%u", pdb_get_gid (sampass)); { uint32 rid; GROUP_MAP map; - - rid=pdb_get_group_rid(sampass); - if (rid==0) { - if (get_group_map_from_gid(pdb_get_gid(sampass), &map, MAPPING_WITHOUT_PRIV)) { - if (!sid_peek_check_rid(get_global_sam_sid(), &map.sid, &rid)) + rid = pdb_get_group_rid (sampass); + + if (rid == 0) { + if (get_group_map_from_gid + (pdb_get_gid (sampass), &map, + MAPPING_WITHOUT_PRIV)) { + if (!sid_peek_check_rid + (get_global_sam_sid (), &map.sid, &rid)) return False; - } else - rid=pdb_gid_to_group_rid(pdb_get_gid(sampass)); + } else + rid = pdb_gid_to_group_rid (pdb_get_gid + (sampass)); } - slprintf(group_rid, sizeof(group_rid)-1, "%u", rid); + slprintf (group_rid, sizeof (group_rid) - 1, "%u", rid); } - - acb = pdb_encode_acct_ctrl(pdb_get_acct_ctrl(sampass), - NEW_PW_FORMAT_SPACE_PADDED_LEN); - pdb_sethexpwd (smb_passwd, pdb_get_lanman_passwd(sampass), - pdb_get_acct_ctrl(sampass)); - pdb_sethexpwd (smb_nt_passwd, pdb_get_nt_passwd(sampass), - pdb_get_acct_ctrl(sampass)); - slprintf(logon_t, 13, "LNT-%08X", - (uint32)pdb_get_logon_time(sampass)); - slprintf(logoff_t, 13, "LOT-%08X", - (uint32)pdb_get_logoff_time(sampass)); - slprintf(kickoff_t, 13, "KOT-%08X", - (uint32)pdb_get_kickoff_time(sampass)); - slprintf(pwdlset_t, 13, "LCT-%08X", - (uint32)pdb_get_pass_last_set_time(sampass)); - slprintf(pwdlchg_t, 13, "CCT-%08X", - (uint32)pdb_get_pass_can_change_time(sampass)); - slprintf(pwdmchg_t, 13, "MCT-%08X", - (uint32)pdb_get_pass_must_change_time(sampass)); - safe_strcpy(full_name, pdb_get_fullname(sampass), sizeof(full_name)-1); - safe_strcpy(acct_desc, pdb_get_acct_desc(sampass), sizeof(acct_desc)-1); + + acb = pdb_encode_acct_ctrl (pdb_get_acct_ctrl (sampass), + NEW_PW_FORMAT_SPACE_PADDED_LEN); + pdb_sethexpwd (smb_passwd, pdb_get_lanman_passwd (sampass), + pdb_get_acct_ctrl (sampass)); + pdb_sethexpwd (smb_nt_passwd, pdb_get_nt_passwd (sampass), + pdb_get_acct_ctrl (sampass)); + slprintf (logon_t, 13, "LNT-%08X", + (uint32) pdb_get_logon_time (sampass)); + slprintf (logoff_t, 13, "LOT-%08X", + (uint32) pdb_get_logoff_time (sampass)); + slprintf (kickoff_t, 13, "KOT-%08X", + (uint32) pdb_get_kickoff_time (sampass)); + slprintf (pwdlset_t, 13, "LCT-%08X", + (uint32) pdb_get_pass_last_set_time (sampass)); + slprintf (pwdlchg_t, 13, "CCT-%08X", + (uint32) pdb_get_pass_can_change_time (sampass)); + slprintf (pwdmchg_t, 13, "MCT-%08X", + (uint32) pdb_get_pass_must_change_time (sampass)); + safe_strcpy (full_name, pdb_get_fullname (sampass), + sizeof (full_name) - 1); + safe_strcpy (acct_desc, pdb_get_acct_desc (sampass), + sizeof (acct_desc) - 1); #if 0 - /* Not sure what to do with these guys. -tpot */ + /* Not sure what to do with these guys. -tpot */ - dos_to_unix(full_name, True); - dos_to_unix(acct_desc, True); + dos_to_unix (full_name, True); + dos_to_unix (acct_desc, True); #endif - if( old ) { - /* name */ - if(strcmp(ENTRY_VAL(old, NPF_NAME), name)) - { - need_to_modify = True; - set_single_attribute(obj, NPF_NAME, name, strlen(name), - EN_MODIFIED); - } + if (old) { + /* name */ + if (strcmp (ENTRY_VAL (old, NPF_NAME), name)) { + need_to_modify = True; + set_single_attribute (obj, NPF_NAME, name, + strlen (name), EN_MODIFIED); + } - /* uid */ - if(pdb_get_uid(sampass) != -1) { - if(!ENTRY_VAL(old, NPF_UID) || strcmp(ENTRY_VAL(old, NPF_UID), uid)) - { - need_to_modify = True; - set_single_attribute(obj, NPF_UID, uid, - strlen(uid), EN_MODIFIED); + /* uid */ + if (pdb_get_uid (sampass) != -1) { + if (!ENTRY_VAL (old, NPF_UID) + || strcmp (ENTRY_VAL (old, NPF_UID), uid)) { + need_to_modify = True; + set_single_attribute (obj, NPF_UID, uid, + strlen (uid), + EN_MODIFIED); + } + } + + /* user_rid */ + if (pdb_get_user_rid (sampass)) { + if (!ENTRY_VAL (old, NPF_USER_RID) || + strcmp (ENTRY_VAL (old, NPF_USER_RID), + user_rid)) { + need_to_modify = True; + set_single_attribute (obj, NPF_USER_RID, + user_rid, + strlen (user_rid), + EN_MODIFIED); + } + } + + /* smb_grpid */ + if (pdb_get_gid (sampass) != -1) { + if (!ENTRY_VAL (old, NPF_SMB_GRPID) || + strcmp (ENTRY_VAL (old, NPF_SMB_GRPID), gid)) { + need_to_modify = True; + set_single_attribute (obj, NPF_SMB_GRPID, gid, + strlen (gid), + EN_MODIFIED); + } + } + + /* group_rid */ + if (pdb_get_group_rid (sampass)) { + if (!ENTRY_VAL (old, NPF_GROUP_RID) || + strcmp (ENTRY_VAL (old, NPF_GROUP_RID), + group_rid)) { + need_to_modify = True; + set_single_attribute (obj, NPF_GROUP_RID, + group_rid, + strlen (group_rid), + EN_MODIFIED); + } + } + + /* acb */ + if (!ENTRY_VAL (old, NPF_ACB) || + strcmp (ENTRY_VAL (old, NPF_ACB), acb)) { + need_to_modify = True; + set_single_attribute (obj, NPF_ACB, acb, strlen (acb), + EN_MODIFIED); + } + + /* lmpwd */ + if (!ENTRY_VAL (old, NPF_LMPWD) || + strcmp (ENTRY_VAL (old, NPF_LMPWD), smb_passwd)) { + need_to_modify = True; + set_single_attribute (obj, NPF_LMPWD, smb_passwd, + strlen (smb_passwd), + EN_CRYPT | EN_MODIFIED); + } + + /* ntpwd */ + if (!ENTRY_VAL (old, NPF_NTPWD) || + strcmp (ENTRY_VAL (old, NPF_NTPWD), smb_nt_passwd)) { + need_to_modify = True; + set_single_attribute (obj, NPF_NTPWD, smb_nt_passwd, + strlen (smb_nt_passwd), + EN_CRYPT | EN_MODIFIED); + } + + /* logon_t */ + if (pdb_get_logon_time (sampass) && + (!ENTRY_VAL (old, NPF_LOGON_T) || + strcmp (ENTRY_VAL (old, NPF_LOGON_T), logon_t))) { + need_to_modify = True; + set_single_attribute (obj, NPF_LOGON_T, logon_t, + strlen (logon_t), EN_MODIFIED); + } + + /* logoff_t */ + if (pdb_get_logoff_time (sampass) && + (!ENTRY_VAL (old, NPF_LOGOFF_T) || + strcmp (ENTRY_VAL (old, NPF_LOGOFF_T), logoff_t))) { + need_to_modify = True; + set_single_attribute (obj, NPF_LOGOFF_T, logoff_t, + strlen (logoff_t), EN_MODIFIED); + } + + /* kick_t */ + if (pdb_get_kickoff_time (sampass) && + (!ENTRY_VAL (old, NPF_KICK_T) || + strcmp (ENTRY_VAL (old, NPF_KICK_T), kickoff_t))) { + need_to_modify = True; + set_single_attribute (obj, NPF_KICK_T, kickoff_t, + strlen (kickoff_t), + EN_MODIFIED); + } + + /* pwdlset_t */ + if (pdb_get_pass_last_set_time (sampass) && + (!ENTRY_VAL (old, NPF_PWDLSET_T) || + strcmp (ENTRY_VAL (old, NPF_PWDLSET_T), pwdlset_t))) { + need_to_modify = True; + set_single_attribute (obj, NPF_PWDLSET_T, pwdlset_t, + strlen (pwdlset_t), + EN_MODIFIED); + } + + /* pwdlchg_t */ + if (pdb_get_pass_can_change_time (sampass) && + (!ENTRY_VAL (old, NPF_PWDCCHG_T) || + strcmp (ENTRY_VAL (old, NPF_PWDCCHG_T), pwdlchg_t))) { + need_to_modify = True; + set_single_attribute (obj, NPF_PWDCCHG_T, pwdlchg_t, + strlen (pwdlchg_t), + EN_MODIFIED); + } + + /* pwdmchg_t */ + if (pdb_get_pass_must_change_time (sampass) && + (!ENTRY_VAL (old, NPF_PWDMCHG_T) || + strcmp (ENTRY_VAL (old, NPF_PWDMCHG_T), pwdmchg_t))) { + need_to_modify = True; + set_single_attribute (obj, NPF_PWDMCHG_T, pwdmchg_t, + strlen (pwdmchg_t), + EN_MODIFIED); + } + + /* full_name */ + /* must support set, unset and change */ + if ((pdb_get_fullname (sampass) && + !ENTRY_VAL (old, NPF_FULL_NAME)) || + (ENTRY_VAL (old, NPF_FULL_NAME) && + !pdb_get_fullname (sampass)) || + (ENTRY_VAL (old, NPF_FULL_NAME) && + pdb_get_fullname (sampass) && + strcmp (ENTRY_VAL (old, NPF_FULL_NAME), full_name))) { + need_to_modify = True; + set_single_attribute (obj, NPF_FULL_NAME, full_name, + strlen (full_name), + EN_MODIFIED); + } + + /* home_dir */ + /* must support set, unset and change */ + if ((pdb_get_homedir (sampass) && + !ENTRY_VAL (old, NPF_HOME_DIR)) || + (ENTRY_VAL (old, NPF_HOME_DIR) && + !pdb_get_homedir (sampass)) || + (ENTRY_VAL (old, NPF_HOME_DIR) && + pdb_get_homedir (sampass) && + strcmp (ENTRY_VAL (old, NPF_HOME_DIR), + pdb_get_homedir (sampass)))) { + need_to_modify = True; + set_single_attribute (obj, NPF_HOME_DIR, + pdb_get_homedir (sampass), + strlen (pdb_get_homedir + (sampass)), + EN_MODIFIED); + } + + /* dir_drive */ + /* must support set, unset and change */ + if ((pdb_get_dir_drive (sampass) && + !ENTRY_VAL (old, NPF_DIR_DRIVE)) || + (ENTRY_VAL (old, NPF_DIR_DRIVE) && + !pdb_get_dir_drive (sampass)) || + (ENTRY_VAL (old, NPF_DIR_DRIVE) && + pdb_get_dir_drive (sampass) && + strcmp (ENTRY_VAL (old, NPF_DIR_DRIVE), + pdb_get_dir_drive (sampass)))) { + need_to_modify = True; + set_single_attribute (obj, NPF_DIR_DRIVE, + pdb_get_dir_drive (sampass), + strlen (pdb_get_dir_drive + (sampass)), + EN_MODIFIED); + } + + /* logon_script */ + /* must support set, unset and change */ + if (((pdb_get_logon_script (sampass) && + !ENTRY_VAL (old, NPF_LOGON_SCRIPT)) || + ((ENTRY_VAL (old, NPF_LOGON_SCRIPT) && + (!pdb_get_logon_script (sampass)))) || + ((ENTRY_VAL (old, NPF_LOGON_SCRIPT) && + pdb_get_logon_script (sampass) && + strcmp (ENTRY_VAL (old, NPF_LOGON_SCRIPT), + pdb_get_logon_script (sampass)))))) { + need_to_modify = True; + set_single_attribute (obj, NPF_LOGON_SCRIPT, + pdb_get_logon_script (sampass), + strlen (pdb_get_logon_script + (sampass)), + EN_MODIFIED); + } + + /* profile_path */ + /* must support set, unset and change */ + if ((pdb_get_profile_path (sampass) && + !ENTRY_VAL (old, NPF_PROFILE_PATH)) || + (ENTRY_VAL (old, NPF_PROFILE_PATH) && + !pdb_get_profile_path (sampass)) || + (ENTRY_VAL (old, NPF_PROFILE_PATH) && + pdb_get_profile_path (sampass) && + strcmp (ENTRY_VAL (old, NPF_PROFILE_PATH), + pdb_get_profile_path (sampass)))) { + need_to_modify = True; + set_single_attribute (obj, NPF_PROFILE_PATH, + pdb_get_profile_path (sampass), + strlen (pdb_get_profile_path + (sampass)), + EN_MODIFIED); + } + + /* acct_desc */ + /* must support set, unset and change */ + if ((pdb_get_acct_desc (sampass) && + !ENTRY_VAL (old, NPF_ACCT_DESC)) || + (ENTRY_VAL (old, NPF_ACCT_DESC) && + !pdb_get_acct_desc (sampass)) || + (ENTRY_VAL (old, NPF_ACCT_DESC) && + pdb_get_acct_desc (sampass) && + strcmp (ENTRY_VAL (old, NPF_ACCT_DESC), acct_desc))) { + need_to_modify = True; + set_single_attribute (obj, NPF_ACCT_DESC, acct_desc, + strlen (acct_desc), + EN_MODIFIED); + } + + /* workstations */ + /* must support set, unset and change */ + if ((pdb_get_workstations (sampass) && + !ENTRY_VAL (old, NPF_WORKSTATIONS)) || + (ENTRY_VAL (old, NPF_WORKSTATIONS) && + !pdb_get_workstations (sampass)) || + (ENTRY_VAL (old, NPF_WORKSTATIONS) && + (pdb_get_workstations (sampass)) && + strcmp (ENTRY_VAL (old, NPF_WORKSTATIONS), + pdb_get_workstations (sampass)))) { + need_to_modify = True; + set_single_attribute (obj, NPF_WORKSTATIONS, + pdb_get_workstations (sampass), + strlen (pdb_get_workstations + (sampass)), + EN_MODIFIED); + } + + /* hours */ + if ((pdb_get_hours_len (sampass) != + ENTRY_LEN (old, NPF_HOURS)) + || memcmp (pdb_get_hours (sampass), + ENTRY_VAL (old, NPF_HOURS), ENTRY_LEN (old, + NPF_HOURS))) + { + need_to_modify = True; + /* set_single_attribute will add 1 for len ... */ + set_single_attribute (obj, NPF_HOURS, + pdb_get_hours (sampass), + pdb_get_hours_len (sampass) - 1, + EN_MODIFIED); + } + } else { + const char *homedir, *dirdrive, *logon_script, *profile_path, + *workstations; + + *empty = '\0'; /* empty string */ + + set_single_attribute (obj, NPF_NAME, name, strlen (name), 0); + set_single_attribute (obj, NPF_UID, uid, strlen (uid), 0); + set_single_attribute (obj, NPF_USER_RID, user_rid, + strlen (user_rid), 0); + set_single_attribute (obj, NPF_SMB_GRPID, gid, strlen (gid), + 0); + set_single_attribute (obj, NPF_GROUP_RID, group_rid, + strlen (group_rid), 0); + set_single_attribute (obj, NPF_ACB, acb, strlen (acb), 0); + set_single_attribute (obj, NPF_LMPWD, smb_passwd, + strlen (smb_passwd), EN_CRYPT); + set_single_attribute (obj, NPF_NTPWD, smb_nt_passwd, + strlen (smb_nt_passwd), EN_CRYPT); + set_single_attribute (obj, NPF_LOGON_T, logon_t, + strlen (logon_t), 0); + set_single_attribute (obj, NPF_LOGOFF_T, logoff_t, + strlen (logoff_t), 0); + set_single_attribute (obj, NPF_KICK_T, kickoff_t, + strlen (kickoff_t), 0); + set_single_attribute (obj, NPF_PWDLSET_T, pwdlset_t, + strlen (pwdlset_t), 0); + set_single_attribute (obj, NPF_PWDCCHG_T, pwdlchg_t, + strlen (pwdlchg_t), 0); + set_single_attribute (obj, NPF_PWDMCHG_T, pwdmchg_t, + strlen (pwdmchg_t), 0); + set_single_attribute (obj, NPF_FULL_NAME, + full_name, strlen (full_name), 0); + + if (!(homedir = pdb_get_homedir (sampass))) + homedir = empty; + + set_single_attribute (obj, NPF_HOME_DIR, + homedir, strlen (homedir), 0); + + if (!(dirdrive = pdb_get_dir_drive (sampass))) + dirdrive = empty; + + set_single_attribute (obj, NPF_DIR_DRIVE, + dirdrive, strlen (dirdrive), 0); + + if (!(logon_script = pdb_get_logon_script (sampass))) + logon_script = empty; + + set_single_attribute (obj, NPF_LOGON_SCRIPT, + logon_script, strlen (logon_script), 0); + + if (!(profile_path = pdb_get_profile_path (sampass))) + profile_path = empty; + + set_single_attribute (obj, NPF_PROFILE_PATH, + profile_path, strlen (profile_path), 0); + + set_single_attribute (obj, NPF_ACCT_DESC, + acct_desc, strlen (acct_desc), 0); + + if (!(workstations = pdb_get_workstations (sampass))) + workstations = empty; + + set_single_attribute (obj, NPF_WORKSTATIONS, + workstations, strlen (workstations), 0); + + /* set_single_attribute will add 1 for len ... */ + set_single_attribute (obj, NPF_HOURS, + pdb_get_hours (sampass), + pdb_get_hours_len (sampass) - 1, 0); } - } - - /* user_rid */ - if (pdb_get_user_rid(sampass)) { - if(!ENTRY_VAL(old, NPF_USER_RID) || - strcmp(ENTRY_VAL(old, NPF_USER_RID), user_rid) ) { - need_to_modify = True; - set_single_attribute(obj, NPF_USER_RID, user_rid, - strlen(user_rid), EN_MODIFIED); - } - } - - /* smb_grpid */ - if (pdb_get_gid(sampass) != -1) { - if(!ENTRY_VAL(old, NPF_SMB_GRPID) || - strcmp(ENTRY_VAL(old, NPF_SMB_GRPID), gid) ) { - need_to_modify = True; - set_single_attribute(obj, NPF_SMB_GRPID, gid, - strlen(gid), EN_MODIFIED); - } - } - - /* group_rid */ - if (pdb_get_group_rid(sampass)) { - if(!ENTRY_VAL(old, NPF_GROUP_RID) || - strcmp(ENTRY_VAL(old, NPF_GROUP_RID), group_rid) ) { - need_to_modify = True; - set_single_attribute(obj, NPF_GROUP_RID, group_rid, - strlen(group_rid), EN_MODIFIED); - } - } - - /* acb */ - if (!ENTRY_VAL(old, NPF_ACB) || - strcmp(ENTRY_VAL(old, NPF_ACB), acb)) { - need_to_modify = True; - set_single_attribute(obj, NPF_ACB, acb, strlen(acb), EN_MODIFIED); - } - - /* lmpwd */ - if(!ENTRY_VAL(old, NPF_LMPWD) || - strcmp(ENTRY_VAL(old, NPF_LMPWD), smb_passwd) ) { - need_to_modify = True; - set_single_attribute(obj, NPF_LMPWD, smb_passwd, - strlen(smb_passwd), EN_CRYPT|EN_MODIFIED); - } - - /* ntpwd */ - if(!ENTRY_VAL(old, NPF_NTPWD) || - strcmp(ENTRY_VAL(old, NPF_NTPWD), smb_nt_passwd) ) { - need_to_modify = True; - set_single_attribute(obj, NPF_NTPWD, smb_nt_passwd, - strlen(smb_nt_passwd), EN_CRYPT|EN_MODIFIED); - } - - /* logon_t */ - if( pdb_get_logon_time(sampass) && - (!ENTRY_VAL(old, NPF_LOGON_T) || - strcmp(ENTRY_VAL(old, NPF_LOGON_T), logon_t ))) { - need_to_modify = True; - set_single_attribute(obj, NPF_LOGON_T, logon_t, - strlen(logon_t), EN_MODIFIED); - } - - /* logoff_t */ - if( pdb_get_logoff_time(sampass) && - (!ENTRY_VAL(old, NPF_LOGOFF_T) || - strcmp(ENTRY_VAL(old, NPF_LOGOFF_T), logoff_t))) { - need_to_modify = True; - set_single_attribute(obj, NPF_LOGOFF_T, logoff_t, - strlen(logoff_t), EN_MODIFIED); - } - - /* kick_t */ - if( pdb_get_kickoff_time(sampass) && - (!ENTRY_VAL(old, NPF_KICK_T) || - strcmp(ENTRY_VAL(old, NPF_KICK_T), kickoff_t))) { - need_to_modify = True; - set_single_attribute(obj, NPF_KICK_T, kickoff_t, - strlen(kickoff_t), EN_MODIFIED); - } - - /* pwdlset_t */ - if( pdb_get_pass_last_set_time(sampass) && - (!ENTRY_VAL(old, NPF_PWDLSET_T) || - strcmp(ENTRY_VAL(old, NPF_PWDLSET_T), pwdlset_t))) { - need_to_modify = True; - set_single_attribute(obj, NPF_PWDLSET_T, pwdlset_t, - strlen(pwdlset_t), EN_MODIFIED); - } - - /* pwdlchg_t */ - if( pdb_get_pass_can_change_time(sampass) && - (!ENTRY_VAL(old, NPF_PWDCCHG_T) || - strcmp(ENTRY_VAL(old, NPF_PWDCCHG_T), pwdlchg_t))) { - need_to_modify = True; - set_single_attribute(obj, NPF_PWDCCHG_T, pwdlchg_t, - strlen(pwdlchg_t), EN_MODIFIED); - } - - /* pwdmchg_t */ - if( pdb_get_pass_must_change_time(sampass) && - (!ENTRY_VAL(old, NPF_PWDMCHG_T) || - strcmp(ENTRY_VAL(old, NPF_PWDMCHG_T), pwdmchg_t))) { - need_to_modify = True; - set_single_attribute(obj, NPF_PWDMCHG_T, pwdmchg_t, - strlen(pwdmchg_t), EN_MODIFIED); - } - - /* full_name */ - /* must support set, unset and change */ - if ( (pdb_get_fullname(sampass) && - !ENTRY_VAL(old, NPF_FULL_NAME)) || - (ENTRY_VAL(old, NPF_FULL_NAME) && - !pdb_get_fullname(sampass)) || - (ENTRY_VAL(old, NPF_FULL_NAME) && - pdb_get_fullname(sampass) && - strcmp( ENTRY_VAL(old, NPF_FULL_NAME), full_name ))) { - need_to_modify = True; - set_single_attribute(obj, NPF_FULL_NAME, full_name, - strlen(full_name), EN_MODIFIED); - } - - /* home_dir */ - /* must support set, unset and change */ - if( (pdb_get_homedir(sampass) && - !ENTRY_VAL(old, NPF_HOME_DIR)) || - (ENTRY_VAL(old, NPF_HOME_DIR) && - !pdb_get_homedir(sampass)) || - (ENTRY_VAL(old, NPF_HOME_DIR) && - pdb_get_homedir(sampass) && - strcmp( ENTRY_VAL(old, NPF_HOME_DIR), - pdb_get_homedir(sampass)))) { - need_to_modify = True; - set_single_attribute(obj, NPF_HOME_DIR, pdb_get_homedir(sampass), - strlen(pdb_get_homedir(sampass)), EN_MODIFIED); - } - - /* dir_drive */ - /* must support set, unset and change */ - if( (pdb_get_dir_drive(sampass) && - !ENTRY_VAL(old, NPF_DIR_DRIVE)) || - (ENTRY_VAL(old, NPF_DIR_DRIVE) && - !pdb_get_dir_drive(sampass)) || - (ENTRY_VAL(old, NPF_DIR_DRIVE) && - pdb_get_dir_drive(sampass) && - strcmp( ENTRY_VAL(old, NPF_DIR_DRIVE), - pdb_get_dir_drive(sampass)))) { - need_to_modify = True; - set_single_attribute(obj, NPF_DIR_DRIVE, pdb_get_dir_drive(sampass), - strlen(pdb_get_dir_drive(sampass)), EN_MODIFIED); - } - - /* logon_script */ - /* must support set, unset and change */ - if( ((pdb_get_logon_script(sampass) && - !ENTRY_VAL(old, NPF_LOGON_SCRIPT)) || - ((ENTRY_VAL(old, NPF_LOGON_SCRIPT) && - (!pdb_get_logon_script(sampass)))) || - (( ENTRY_VAL(old, NPF_LOGON_SCRIPT) && - pdb_get_logon_script(sampass) && - strcmp( ENTRY_VAL(old, NPF_LOGON_SCRIPT), - pdb_get_logon_script(sampass)))))) { - need_to_modify = True; - set_single_attribute(obj, NPF_LOGON_SCRIPT, - pdb_get_logon_script(sampass), - strlen(pdb_get_logon_script(sampass)), - EN_MODIFIED); - } - - /* profile_path */ - /* must support set, unset and change */ - if( (pdb_get_profile_path(sampass) && - !ENTRY_VAL(old, NPF_PROFILE_PATH)) || - (ENTRY_VAL(old, NPF_PROFILE_PATH) && - !pdb_get_profile_path(sampass)) || - (ENTRY_VAL(old, NPF_PROFILE_PATH) && - pdb_get_profile_path(sampass) && - strcmp( ENTRY_VAL(old, NPF_PROFILE_PATH), - pdb_get_profile_path(sampass) ) )) { - need_to_modify = True; - set_single_attribute(obj, NPF_PROFILE_PATH, - pdb_get_profile_path(sampass), - strlen(pdb_get_profile_path(sampass)), - EN_MODIFIED); - } - - /* acct_desc */ - /* must support set, unset and change */ - if( (pdb_get_acct_desc(sampass) && - !ENTRY_VAL(old, NPF_ACCT_DESC)) || - (ENTRY_VAL(old, NPF_ACCT_DESC) && - !pdb_get_acct_desc(sampass)) || - (ENTRY_VAL(old, NPF_ACCT_DESC) && - pdb_get_acct_desc(sampass) && - strcmp( ENTRY_VAL(old, NPF_ACCT_DESC), acct_desc ) )) { - need_to_modify = True; - set_single_attribute(obj, NPF_ACCT_DESC, acct_desc, - strlen(acct_desc), EN_MODIFIED); - } - - /* workstations */ - /* must support set, unset and change */ - if ( (pdb_get_workstations(sampass) && - !ENTRY_VAL(old, NPF_WORKSTATIONS) ) || - (ENTRY_VAL(old, NPF_WORKSTATIONS) && - !pdb_get_workstations(sampass)) || - (ENTRY_VAL(old, NPF_WORKSTATIONS) && - (pdb_get_workstations(sampass)) && - strcmp( ENTRY_VAL(old, NPF_WORKSTATIONS), - pdb_get_workstations(sampass)))) { - need_to_modify = True; - set_single_attribute(obj, NPF_WORKSTATIONS, - pdb_get_workstations(sampass), - strlen(pdb_get_workstations(sampass)), - EN_MODIFIED); - } - - /* hours */ - if ((pdb_get_hours_len(sampass) != ENTRY_LEN(old, NPF_HOURS)) || - memcmp(pdb_get_hours(sampass), ENTRY_VAL(old, NPF_HOURS), - ENTRY_LEN(old, NPF_HOURS))) { - need_to_modify = True; - /* set_single_attribute will add 1 for len ... */ - set_single_attribute(obj, NPF_HOURS, pdb_get_hours(sampass), - pdb_get_hours_len(sampass)-1, EN_MODIFIED); - } - } else { - const char *homedir, *dirdrive, *logon_script, *profile_path, *workstations; - - *empty = '\0'; /* empty string */ - - set_single_attribute(obj, NPF_NAME, name, strlen(name), 0); - set_single_attribute(obj, NPF_UID, uid, strlen(uid), 0); - set_single_attribute(obj, NPF_USER_RID, user_rid, - strlen(user_rid), 0); - set_single_attribute(obj, NPF_SMB_GRPID, gid, strlen(gid), 0); - set_single_attribute(obj, NPF_GROUP_RID, group_rid, - strlen(group_rid), 0); - set_single_attribute(obj, NPF_ACB, acb, strlen(acb), 0); - set_single_attribute(obj, NPF_LMPWD, smb_passwd, - strlen(smb_passwd), EN_CRYPT); - set_single_attribute(obj, NPF_NTPWD, smb_nt_passwd, - strlen(smb_nt_passwd), EN_CRYPT); - set_single_attribute(obj, NPF_LOGON_T, logon_t, - strlen(logon_t), 0); - set_single_attribute(obj, NPF_LOGOFF_T, logoff_t, - strlen(logoff_t), 0); - set_single_attribute(obj, NPF_KICK_T, kickoff_t, - strlen(kickoff_t),0); - set_single_attribute(obj, NPF_PWDLSET_T, pwdlset_t, - strlen(pwdlset_t), 0); - set_single_attribute(obj, NPF_PWDCCHG_T, pwdlchg_t, - strlen(pwdlchg_t), 0); - set_single_attribute(obj, NPF_PWDMCHG_T, pwdmchg_t, - strlen(pwdmchg_t), 0); - set_single_attribute(obj, NPF_FULL_NAME , - full_name, strlen(full_name), 0); - - if(!(homedir = pdb_get_homedir(sampass))) - homedir = empty; - - set_single_attribute(obj, NPF_HOME_DIR, - homedir, strlen(homedir), 0); - - if(!(dirdrive = pdb_get_dir_drive(sampass))) - dirdrive = empty; - - set_single_attribute(obj, NPF_DIR_DRIVE, - dirdrive, strlen(dirdrive), 0); - - if(!(logon_script = pdb_get_logon_script(sampass))) - logon_script = empty; - - set_single_attribute(obj, NPF_LOGON_SCRIPT, - logon_script, strlen(logon_script), 0); - - if(!(profile_path = pdb_get_profile_path(sampass))) - profile_path = empty; - - set_single_attribute(obj, NPF_PROFILE_PATH, - profile_path, strlen(profile_path), 0); - - set_single_attribute(obj, NPF_ACCT_DESC, - acct_desc, strlen(acct_desc), 0); - - if(!(workstations = pdb_get_workstations(sampass))) - workstations = empty; - - set_single_attribute(obj, NPF_WORKSTATIONS, - workstations, strlen(workstations), 0); - - /* set_single_attribute will add 1 for len ... */ - set_single_attribute(obj, NPF_HOURS, - pdb_get_hours(sampass), - pdb_get_hours_len(sampass)-1, 0); - } - - return need_to_modify; + + return need_to_modify; } /*************************************************************** calls nis_list, returns results. ****************************************************************/ -static nis_result *nisp_get_nis_list(const char *nisname, unsigned int flags) +static nis_result *nisp_get_nis_list (const char *nisname, unsigned int flags) { nis_result *result; int i; - if( ! flags) - flags = FOLLOW_LINKS|FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP; - - for(i = 0; i<2;i++ ) { - alarm(60); /* hopefully ok for long searches */ - result = nis_list(nisname, flags,NULL,NULL); - - alarm(0); - CatchSignal(SIGALRM, SIGNAL_CAST SIG_DFL); - - if( !(flags & MASTER_ONLY) && NIS_RES_NUMOBJ(result) <= 0 ) { - /* nis replicas are not in sync perhaps? - * this can happen, if account was just added. - */ - DEBUG(10,("will try master only\n")); - nis_freeresult(result); - flags |= MASTER_ONLY; - } else - break; + if (!flags) + flags = FOLLOW_LINKS | FOLLOW_PATH | EXPAND_NAME | + HARD_LOOKUP; + + for (i = 0; i < 2; i++) { + alarm (60); /* hopefully ok for long searches */ + result = nis_list (nisname, flags, NULL, NULL); + + alarm (0); + CatchSignal (SIGALRM, SIGNAL_CAST SIG_DFL); + + if (!(flags & MASTER_ONLY) && NIS_RES_NUMOBJ (result) <= 0) { + /* nis replicas are not in sync perhaps? + * this can happen, if account was just added. + */ + DEBUG (10, ("will try master only\n")); + nis_freeresult (result); + flags |= MASTER_ONLY; + } else + break; } return result; } -#else -NTSTATUS pdb_init_nisplussam(PDB_CONTEXT *c, PDB_METHODS **m, const char *l) -{ - DEBUG(0, ("nisplus sam not compiled in!\n")); +NTSTATUS pdb_init_nisplussam (PDB_CONTEXT * pdb_context, + PDB_METHODS ** pdb_method, const char *location) +{ + NTSTATUS nt_status; + struct nisplus_private_info *private = malloc (sizeof (struct nisplus_private_info)); + + ZERO_STRUCT(private); + p->location = talloc_strdup(pdb_context->mem_ctx, location); + + if (!NT_STATUS_IS_OK + (nt_status = + make_pdb_methods (pdb_context->mem_ctx, pdb_method))) { + return nt_status; + } + + (*pdb_method)->name = "nisplussam"; + + /* Functions your pdb module doesn't provide should be set + * to NULL */ + + (*pdb_method)->setsampwent = nisplussam_setsampwent; + (*pdb_method)->endsampwent = nisplussam_endsampwent; + (*pdb_method)->getsampwent = nisplussam_getsampwent; + (*pdb_method)->getsampwnam = nisplussam_getsampwnam; + (*pdb_method)->getsampwsid = nisplussam_getsampwsid; + (*pdb_method)->add_sam_account = nisplussam_add_sam_account; + (*pdb_method)->update_sam_account = nisplussam_update_sam_account; + (*pdb_method)->delete_sam_account = nisplussam_delete_sam_account; + (*pdb_method)->private_data = private; + + return NT_STATUS_OK; +} + +#else +NTSTATUS pdb_init_nisplussam (PDB_CONTEXT * c, PDB_METHODS ** m, + const char *l) +{ + DEBUG (0, ("nisplus sam not compiled in!\n")); return NT_STATUS_UNSUCCESSFUL; } #endif /* WITH_NISPLUS_SAM */ -- cgit From e573a2a32c1ff01bc09215efae6927f4795b4ef6 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 21 Aug 2002 19:39:38 +0000 Subject: global_myname is a pstring, not an fstring (This used to be commit 2df34c9bfc76ee832e5005a2ad0ff0b6abb98034) --- source3/utils/net.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/utils/net.c b/source3/utils/net.c index 416a599be3..a3aa7adcae 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -469,7 +469,7 @@ static struct functable net_func[] = { if (!*global_myname) { char *p2; - fstrcpy(global_myname, myhostname()); + pstrcpy(global_myname, myhostname()); p2 = strchr_m(global_myname, '.'); if (p2) *p2 = 0; -- cgit From 30e51241ecdda2724c441e372e6f99857719630f Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 21 Aug 2002 19:48:56 +0000 Subject: pdbedit needs global_myname to be set in order to display the user SIDs correctly. Volker (This used to be commit 287b7bda11100c42f2cdea36a20a81f6ea397f43) --- source3/utils/pdbedit.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/source3/utils/pdbedit.c b/source3/utils/pdbedit.c index 51dbbb98c0..7c61e6d8be 100644 --- a/source3/utils/pdbedit.c +++ b/source3/utils/pdbedit.c @@ -508,6 +508,17 @@ int main (int argc, char **argv) exit(1); } + if (!*global_myname) { + char *p2; + + pstrcpy(global_myname, myhostname()); + p2 = strchr_m(global_myname, '.'); + if (p2) + *p2 = 0; + } + + strupper(global_myname); + setparms = (config_file ? BIT_CONFIGFILE : 0) + (new_debuglevel ? BIT_DEBUGLEVEL : 0) + (backend ? BIT_BACKEND : 0) + @@ -544,7 +555,7 @@ int main (int argc, char **argv) /* the lowest bit options are always accepted */ checkparms = setparms & ~MASK_ALWAYS_GOOD; - /* accoun tpolicy operations */ + /* account policy operations */ if ((checkparms & BIT_ACCPOLICY) && !(checkparms & ~(BIT_ACCPOLICY + BIT_ACCPOLVAL))) { uint32 value; int field = account_policy_name_to_fieldnum(account_policy); -- cgit From d3aa76cef528a15571cade12ebdd10973f4ca579 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 21 Aug 2002 19:59:23 +0000 Subject: Patch from Paul Green to be more POSIX-compatible (This used to be commit addf29e6765393b25c35bd833d29e29e4581c233) --- source3/include/includes.h | 4 ++++ source3/lib/util_sock.c | 2 +- source3/libsmb/clifile.c | 2 +- source3/nsswitch/winbind_nss_config.h | 4 ++++ source3/profile/profile.c | 8 ++++++++ source3/utils/status.c | 6 ++++++ 6 files changed, 24 insertions(+), 2 deletions(-) diff --git a/source3/include/includes.h b/source3/include/includes.h index 6084d583ed..9b597db78b 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -216,7 +216,11 @@ #include #include #include + +#ifdef WITH_SYSLOG #include +#endif + #include #ifdef HAVE_NETINET_TCP_H diff --git a/source3/lib/util_sock.c b/source3/lib/util_sock.c index 5e2b7c5ed9..56ef4a6ab1 100644 --- a/source3/lib/util_sock.c +++ b/source3/lib/util_sock.c @@ -871,7 +871,7 @@ static BOOL matchname(char *remotehost,struct in_addr addr) /* Look up the host address in the address list we just got. */ for (i = 0; hp->h_addr_list[i]; i++) { - if (memcmp(hp->h_addr_list[i], (caddr_t) & addr, sizeof(addr)) == 0) + if (memcmp(hp->h_addr_list[i], (char *) & addr, sizeof(addr)) == 0) return True; } diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c index a47c956a55..07b1ff6b6f 100644 --- a/source3/libsmb/clifile.c +++ b/source3/libsmb/clifile.c @@ -94,7 +94,7 @@ uint32 unix_perms_to_wire(mode_t perms) ret |= ((perms & S_ISGID) ? UNIX_SET_GID : 0); #endif #ifdef S_ISUID - ret |= ((perms & S_ISVTX) ? UNIX_SET_UID : 0); + ret |= ((perms & S_ISUID) ? UNIX_SET_UID : 0); #endif return ret; } diff --git a/source3/nsswitch/winbind_nss_config.h b/source3/nsswitch/winbind_nss_config.h index b9c738211e..00cd5c12e4 100644 --- a/source3/nsswitch/winbind_nss_config.h +++ b/source3/nsswitch/winbind_nss_config.h @@ -38,6 +38,10 @@ #include #endif +#ifdef HAVE_SYS_SELECT_H +#include +#endif + #ifdef HAVE_SYS_SOCKET_H #include #endif diff --git a/source3/profile/profile.c b/source3/profile/profile.c index 595593c6f0..bbcfc780e8 100644 --- a/source3/profile/profile.c +++ b/source3/profile/profile.c @@ -21,7 +21,9 @@ #include "includes.h" +#ifdef WITH_PROFILE #define IPC_PERMS ((SHM_R | SHM_W) | (SHM_R>>3) | (SHM_R>>6)) +#endif /* WITH_PROFILE */ static int shm_id; static BOOL read_only; @@ -45,6 +47,7 @@ void profile_message(int msg_type, pid_t src, void *buf, size_t len) int level; memcpy(&level, buf, sizeof(int)); +#ifdef WITH_PROFILE switch (level) { case 0: /* turn off profiling */ do_profile_flag = False; @@ -66,6 +69,9 @@ void profile_message(int msg_type, pid_t src, void *buf, size_t len) DEBUG(1,("INFO: Profiling values cleared from pid %d\n", (int)src)); break; } +#else /* WITH_PROFILE */ + DEBUG(1,("INFO: Profiling support unavailable in this build.\n")); +#endif /* WITH_PROFILE */ } /**************************************************************************** @@ -87,6 +93,7 @@ void reqprofile_message(int msg_type, pid_t src, void *buf, size_t len) /******************************************************************* open the profiling shared memory area ******************************************************************/ +#ifdef WITH_PROFILE BOOL profile_setup(BOOL rdonly) { struct shmid_ds shm_ds; @@ -154,3 +161,4 @@ BOOL profile_setup(BOOL rdonly) message_register(MSG_REQ_PROFILELEVEL, reqprofile_message); return True; } +#endif /* WITH_PROFILE */ diff --git a/source3/utils/status.c b/source3/utils/status.c index 0b0c591cb1..d87497f2fa 100644 --- a/source3/utils/status.c +++ b/source3/utils/status.c @@ -146,6 +146,7 @@ static void print_brl(SMB_DEV_T dev, SMB_INO_T ino, int pid, ******************************************************************/ static int profile_dump(void) { +#ifdef WITH_PROFILE if (!profile_setup(True)) { fprintf(stderr,"Failed to initialise profile memory\n"); return -1; @@ -482,6 +483,9 @@ static int profile_dump(void) d_printf("run_elections_time: %u\n", profile_p->run_elections_time); d_printf("election_count: %u\n", profile_p->election_count); d_printf("election_time: %u\n", profile_p->election_time); +#else /* WITH_PROFILE */ + fprintf(stderr, "Profile data unavailable\n"); +#endif /* WITH_PROFILE */ return 0; } @@ -549,7 +553,9 @@ static int traverse_sessionid(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, vo {"conf", 's', POPT_ARG_STRING, 0, 's'}, {"user", 'u', POPT_ARG_STRING, 0, 'u'}, {"brief", 'b', POPT_ARG_NONE, &brief}, +#ifdef WITH_PROFILE {"profile", 'P', POPT_ARG_NONE, &profile_only}, +#endif /* WITH_PROFILE */ {"byterange", 'B', POPT_ARG_NONE, &show_brl}, { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_debug }, { 0, 0, 0, 0} -- cgit From 16caf06f6026f8104f4a6701993cbd560e2cd74d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 21 Aug 2002 20:29:11 +0000 Subject: This is like jht's (abortive) patch for showing only non-default testparm options. Andrew Bartlett (This used to be commit 4cd822d9e4e5f35a47b0837bfa73c8a457e6cc85) --- source3/utils/testparm.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source3/utils/testparm.c b/source3/utils/testparm.c index 3086019467..852472073b 100644 --- a/source3/utils/testparm.c +++ b/source3/utils/testparm.c @@ -171,7 +171,7 @@ via the %%o substitution. With encrypted passwords this is not possible.\n", lp_ return ret; } -int main(int argc, char *argv[]) +int main(int argc, const char *argv[]) { extern char *optarg; extern int optind; @@ -185,17 +185,19 @@ int main(int argc, char *argv[]) static char *new_local_machine = NULL; const char *cname; const char *caddr; + static int show_defaults; struct poptOption long_options[] = { POPT_AUTOHELP {"suppress-prompt", 's', POPT_ARG_VAL, &silent_mode, 1, "Suppress prompt for enter"}, + {"verbose", 'v', POPT_ARG_NONE, &show_defaults, 1, "Show default options too"}, {"server", 'L',POPT_ARG_STRING, &new_local_machine, 0, "Set %%L macro to servername\n"}, {"encoding", 't', POPT_ARG_STRING, &term_code, 0, "Print parameters with encoding"}, {0,0,0,0} }; - pc = poptGetContext(NULL, argc, (const char **) argv, long_options, - POPT_CONTEXT_KEEP_FIRST); + pc = poptGetContext(NULL, argc, argv, long_options, + POPT_CONTEXT_KEEP_FIRST); while((opt = poptGetNextOpt(pc)) != -1); @@ -276,7 +278,7 @@ int main(int argc, char *argv[]) fflush(stdout); getc(stdin); } - lp_dump(stdout,True, lp_numservices()); + lp_dump(stdout, show_defaults, lp_numservices()); } if(cname && caddr){ -- cgit From 37b46432d4d64dc7ddf836dce3917451e62abbeb Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 21 Aug 2002 20:50:42 +0000 Subject: Replaced reference to global_myworkgroup by calls to lp_workgroup(). pdbedit failed to initialize global_myworkgroup, wo we could end up having a SID for SECRETS/SID/ in secrets.tdb. Volker (This used to be commit 8c96ab4bc05e55e119c1b44779fe14d3ab6c5f35) --- source3/passdb/machine_sid.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/source3/passdb/machine_sid.c b/source3/passdb/machine_sid.c index e1f7dec2a9..e1a1de83a6 100644 --- a/source3/passdb/machine_sid.c +++ b/source3/passdb/machine_sid.c @@ -80,7 +80,6 @@ static BOOL pdb_generate_sam_sid(void) { char *fname = NULL; extern pstring global_myname; - extern fstring global_myworkgroup; BOOL is_dc = False; if(global_sam_sid==NULL) @@ -106,11 +105,11 @@ static BOOL pdb_generate_sam_sid(void) if (!is_dc) return True; - if (!secrets_fetch_domain_sid(global_myworkgroup, &domain_sid)) { + if (!secrets_fetch_domain_sid(lp_workgroup(), &domain_sid)) { /* No domain sid and we're a pdc/bdc. Store it */ - if (!secrets_store_domain_sid(global_myworkgroup, global_sam_sid)) { + if (!secrets_store_domain_sid(lp_workgroup(), global_sam_sid)) { DEBUG(0,("pdb_generate_sam_sid: Can't store domain SID as a pdc/bdc.\n")); return False; } @@ -122,7 +121,7 @@ static BOOL pdb_generate_sam_sid(void) /* Domain name sid doesn't match global sam sid. Re-store global sam sid as domain sid. */ DEBUG(0,("pdb_generate_sam_sid: Mismatched SIDs as a pdc/bdc.\n")); - if (!secrets_store_domain_sid(global_myworkgroup, global_sam_sid)) { + if (!secrets_store_domain_sid(lp_workgroup(), global_sam_sid)) { DEBUG(0,("pdb_generate_sam_sid: Can't re-store domain SID as a pdc/bdc.\n")); return False; } @@ -145,7 +144,7 @@ static BOOL pdb_generate_sam_sid(void) } unlink(fname); if (is_dc) { - if (!secrets_store_domain_sid(global_myworkgroup, global_sam_sid)) { + if (!secrets_store_domain_sid(lp_workgroup(), global_sam_sid)) { DEBUG(0,("pdb_generate_sam_sid: Failed to store domain SID from file.\n")); SAFE_FREE(fname); return False; @@ -168,7 +167,7 @@ static BOOL pdb_generate_sam_sid(void) return False; } if (is_dc) { - if (!secrets_store_domain_sid(global_myworkgroup, global_sam_sid)) { + if (!secrets_store_domain_sid(lp_workgroup(), global_sam_sid)) { DEBUG(0,("pdb_generate_sam_sid: Failed to store generated domain SID.\n")); return False; } -- cgit From e56a79f03f014b4001179c4c4a392f5a8460eb32 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 21 Aug 2002 21:00:40 +0000 Subject: Document -v option (This used to be commit a8936762967643a935ae45f468ad70e206406190) --- docs/docbook/manpages/testparm.1.sgml | 8 ++++++++ docs/manpages/testparm.1 | 31 +++++++++++++++++++------------ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/docs/docbook/manpages/testparm.1.sgml b/docs/docbook/manpages/testparm.1.sgml index 320e39e6f5..350683eb57 100644 --- a/docs/docbook/manpages/testparm.1.sgml +++ b/docs/docbook/manpages/testparm.1.sgml @@ -18,6 +18,7 @@ testparm -s -h + -v -L <servername> config filename hostname hostIP @@ -77,6 +78,13 @@ %L macro.
+ + -v + If this option is specified, testparm + will also output all options that were not used in + smb.conf and are thus set to + their defaults. + configfilename diff --git a/docs/manpages/testparm.1 b/docs/manpages/testparm.1 index 21b6666133..d463db78b1 100644 --- a/docs/manpages/testparm.1 +++ b/docs/manpages/testparm.1 @@ -1,14 +1,15 @@ -.\" This manpage has been automatically generated by docbook2man-spec -.\" from a DocBook document. docbook2man-spec can be found at: -.\" +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "TESTPARM" "1" "28 January 2002" "" "" +.TH "TESTPARM" "1" "21 August 2002" "" "" .SH NAME testparm \- check an smb.conf configuration file for internal correctness .SH SYNOPSIS -.sp -\fBtestparm\fR [ \fB-s\fR ] [ \fB-h\fR ] [ \fB-L \fR ] \fBconfig filename\fR [ \fBhostname hostIP\fR ] + +\fBtestparm\fR [ \fB-s\fR ] [ \fB-h\fR ] [ \fB-v\fR ] [ \fB-L \fR ] \fBconfig filename\fR [ \fBhostname hostIP\fR ] + .SH "DESCRIPTION" .PP This tool is part of the Sambasuite. @@ -17,7 +18,7 @@ This tool is part of the Sambasuite. to check an \fBsmbd\fR configuration file for internal correctness. If this program reports no problems, you can use the configuration file with confidence that \fBsmbd -\fRwill successfully load the configuration file. +\fR will successfully load the configuration file. .PP Note that this is \fBNOT\fR a guarantee that the services specified in the configuration file will be @@ -46,10 +47,16 @@ Sets the value of the %L macro to \fIservername\fR. This is useful for testing include files specified with the %L macro. .TP +\fB-v\fR +If this option is specified, testparm +will also output all options that were not used in +\fIsmb.conf\fR and are thus set to +their defaults. +.TP \fBconfigfilename\fR This is the name of the configuration file to check. If this parameter is not present then the -default \fIsmb.conf\fR file will be checked. +default \fIsmb.conf\fR file will be checked. .TP \fBhostname\fR If this parameter and the following are @@ -57,13 +64,13 @@ specified, then \fBtestparm\fR will examine the \fIhosts allow\fR and \fIhosts deny\fR parameters in the \fIsmb.conf\fR file to determine if the hostname with this IP address would be -allowed access to the \fBsmbd\fR server. If +allowed access to the \fBsmbd\fR server. If this parameter is supplied, the hostIP parameter must also be supplied. .TP \fBhostIP\fR This is the IP address of the host specified -in the previous parameter. This address must be supplied +in the previous parameter. This address must be supplied if the hostname parameter is supplied. .SH "FILES" .TP @@ -95,6 +102,6 @@ to the way the Linux kernel is developed. The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another excellent piece of Open Source software, available at -ftp://ftp.icce.rug.nl/pub/unix/ ) and updated for the Samba 2.0 -release by Jeremy Allison. The conversion to DocBook for +ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 +release by Jeremy Allison. The conversion to DocBook for Samba 2.2 was done by Gerald Carter -- cgit From 00ec57063460533b3074227b9df73ba781744253 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 21 Aug 2002 21:07:27 +0000 Subject: Fix longstanding bug in Win2k clients by clearing the shortname buffer before returning ascii short name. Jeremy. (This used to be commit d01bbd42ff043d9fb0dc40dc4e207da8df0c9c14) --- source3/smbd/trans2.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 8da55ba4ec..91e76012e6 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -660,6 +660,11 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn, SIVAL(p,0,nt_extmode); p += 4; q = p; p += 4; SIVAL(p,0,0); p += 4; + /* Clear the short name buffer. This is + * IMPORTANT as not doing so will trigger + * a Win2k client bug. JRA. + */ + memset(p,'\0',26); if (!was_8_3) { pstring mangled_name; pstrcpy(mangled_name, fname); -- cgit From 9abf0703b13c4d7547f2d5dbab86405cd401b7da Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 21 Aug 2002 21:42:05 +0000 Subject: Add tridge's backtrace script - it should at least work for systems with gdb.... Andrew Bartlett (This used to be commit 7cb080559eaf39fb0afd6d846bf56715f1303801) --- testsuite/build_farm/backtrace | 15 +++++++++++++++ testsuite/build_farm/basicsmb.smb.conf.template | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100755 testsuite/build_farm/backtrace diff --git a/testsuite/build_farm/backtrace b/testsuite/build_farm/backtrace new file mode 100755 index 0000000000..efaa9f2dcd --- /dev/null +++ b/testsuite/build_farm/backtrace @@ -0,0 +1,15 @@ +#!/bin/sh +# Modified version of tridge's backtrace script. +# we want everything on stderr, so the program is not disturbed +exec 1>&2 + +PID=$1 +TMPFILE=$prefix/backtrace.$$ +cat << EOF > $TMPFILE +set height 0 +up 8 +bt full +quit +EOF +gdb -x $TMPFILE $prefix/sbin/smbd $PID +/bin/rm -f $TMPFILE diff --git a/testsuite/build_farm/basicsmb.smb.conf.template b/testsuite/build_farm/basicsmb.smb.conf.template index 64cdbaa5e5..ed2e3dee61 100644 --- a/testsuite/build_farm/basicsmb.smb.conf.template +++ b/testsuite/build_farm/basicsmb.smb.conf.template @@ -15,7 +15,7 @@ add machine script = useradd %u -d /dev/null -s /bin/false - panic action = echo bt | gdb PREFIX/sbin/smbd %d + panic action = /bin/sh BUILD_FARM/samba/testsuite/build_farm/backtrace %d passdb backend = smbpasswd_nua -- cgit From 00b7fa8951aa7c101a541847f5ef29318aec03f6 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 21 Aug 2002 22:13:45 +0000 Subject: More hacks for 'guest account' to get it to show up with the right rid... Andrew Bartlett (This used to be commit 2795d92268d23063faf5a661279a91f7703d8aac) --- source3/passdb/pdb_smbpasswd.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/source3/passdb/pdb_smbpasswd.c b/source3/passdb/pdb_smbpasswd.c index d40ea03511..04c0d333e4 100644 --- a/source3/passdb/pdb_smbpasswd.c +++ b/source3/passdb/pdb_smbpasswd.c @@ -1327,7 +1327,8 @@ static BOOL smbpasswd_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *u call getpwnam() for unix account information until we have found the correct entry ***************************************************************/ -static BOOL smbpasswd_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT *sam_acct, const char *username) +static BOOL smbpasswd_getsampwnam(struct pdb_methods *my_methods, + SAM_ACCOUNT *sam_acct, const char *username) { struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data; struct smb_passwd *smb_pw; @@ -1381,6 +1382,16 @@ static BOOL smbpasswd_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *s DEBUG(10, ("pdb_getsampwrid: search by rid: %d\n", rid)); + /* More special case 'guest account' hacks... */ + if (rid == DOMAIN_USER_RID_GUEST) { + const char *guest_account = lp_guestaccount(); + if (!(guest_account && *guest_account)) { + DEBUG(1, ("Guest account not specfied!\n")); + return False; + } + return smbpasswd_getsampwnam(my_methods, sam_acct, guest_account); + } + /* Open the sam password file - not for update. */ fp = startsmbfilepwent(smbpasswd_state->smbpasswd_file, PWF_READ, &(smbpasswd_state->pw_file_lock_depth)); -- cgit From 474c1489699cb36e5831e6546aef496404a45752 Mon Sep 17 00:00:00 2001 From: Jean-Fran§ois Micouleau Date: Wed, 21 Aug 2002 23:08:28 +0000 Subject: NETLOGON NetServerAuthenticate3 include and parser file J.F. (This used to be commit 2f68d6f5ec925f07a387f784db6de0cfbaa53278) --- source3/include/rpc_netlogon.h | 41 +++++++++++++++------ source3/rpc_parse/parse_net.c | 81 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 110 insertions(+), 12 deletions(-) diff --git a/source3/include/rpc_netlogon.h b/source3/include/rpc_netlogon.h index 80b00fbaad..3c19c574f0 100644 --- a/source3/include/rpc_netlogon.h +++ b/source3/include/rpc_netlogon.h @@ -4,6 +4,7 @@ Copyright (C) Andrew Tridgell 1992-1997 Copyright (C) Luke Kenneth Casson Leighton 1996-1997 Copyright (C) Paul Ashton 1997 + Copyright (C) Jean François Micouleau 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 @@ -25,17 +26,18 @@ /* NETLOGON pipe */ -#define NET_SAMLOGON 0x02 -#define NET_SAMLOGOFF 0x03 -#define NET_REQCHAL 0x04 -#define NET_AUTH 0x05 -#define NET_SRVPWSET 0x06 -#define NET_SAM_DELTAS 0x07 -#define NET_LOGON_CTRL 0x0c -#define NET_AUTH2 0x0f -#define NET_LOGON_CTRL2 0x0e -#define NET_SAM_SYNC 0x10 -#define NET_TRUST_DOM_LIST 0x13 +#define NET_SAMLOGON 0x02 +#define NET_SAMLOGOFF 0x03 +#define NET_REQCHAL 0x04 +#define NET_AUTH 0x05 +#define NET_SRVPWSET 0x06 +#define NET_SAM_DELTAS 0x07 +#define NET_LOGON_CTRL 0x0c +#define NET_AUTH2 0x0f +#define NET_LOGON_CTRL2 0x0e +#define NET_SAM_SYNC 0x10 +#define NET_TRUST_DOM_LIST 0x13 +#define NET_AUTH3 0x1a /* Secure Channel types. used in NetrServerAuthenticate negotiation */ #define SEC_CHAN_WKSTA 2 @@ -370,6 +372,23 @@ typedef struct net_r_auth2_info NTSTATUS status; /* return code */ } NET_R_AUTH_2; +/* NET_Q_AUTH_3 */ +typedef struct net_q_auth3_info +{ + DOM_LOG_INFO clnt_id; /* client identification info */ + DOM_CHAL clnt_chal; /* client-calculated credentials */ + NEG_FLAGS clnt_flgs; /* usually 0x6007 ffff */ +} NET_Q_AUTH_3; + +/* NET_R_AUTH_3 */ +typedef struct net_r_auth3_info +{ + DOM_CHAL srv_chal; /* server-calculated credentials */ + NEG_FLAGS srv_flgs; /* usually 0x6007 ffff */ + uint32 unknown; /* 0x0000045b */ + NTSTATUS status; /* return code */ +} NET_R_AUTH_3; + /* NET_Q_SRV_PWSET */ typedef struct net_q_srv_pwset_info diff --git a/source3/rpc_parse/parse_net.c b/source3/rpc_parse/parse_net.c index da49a6531d..7f8d1953d1 100644 --- a/source3/rpc_parse/parse_net.c +++ b/source3/rpc_parse/parse_net.c @@ -4,7 +4,8 @@ * Copyright (C) Andrew Tridgell 1992-1997, * Copyright (C) Luke Kenneth Casson Leighton 1996-1997, * Copyright (C) Paul Ashton 1997. - * + * Copyright (C) Jean François Micouleau 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 @@ -740,6 +741,84 @@ BOOL net_io_r_auth_2(char *desc, NET_R_AUTH_2 *r_a, prs_struct *ps, int depth) return True; } +/******************************************************************* + Inits a NET_Q_AUTH_3 struct. +********************************************************************/ + +void init_q_auth_3(NET_Q_AUTH_3 *q_a, + const char *logon_srv, const char *acct_name, uint16 sec_chan, const char *comp_name, + DOM_CHAL *clnt_chal, uint32 clnt_flgs) +{ + DEBUG(5,("init_q_auth_3: %d\n", __LINE__)); + + init_log_info(&q_a->clnt_id, logon_srv, acct_name, sec_chan, comp_name); + memcpy(q_a->clnt_chal.data, clnt_chal->data, sizeof(clnt_chal->data)); + q_a->clnt_flgs.neg_flags = clnt_flgs; + + DEBUG(5,("init_q_auth_3: %d\n", __LINE__)); +} + +/******************************************************************* + Reads or writes a structure. +********************************************************************/ + +BOOL net_io_q_auth_3(char *desc, NET_Q_AUTH_3 *q_a, prs_struct *ps, int depth) +{ + int old_align; + if (q_a == NULL) + return False; + + prs_debug(ps, depth, desc, "net_io_q_auth_3"); + depth++; + + if(!prs_align(ps)) + return False; + + if(!smb_io_log_info ("", &q_a->clnt_id, ps, depth)) /* client identification info */ + return False; + /* client challenge is _not_ aligned */ + old_align = ps->align; + ps->align = 0; + if(!smb_io_chal("", &q_a->clnt_chal, ps, depth)) { + /* client-calculated credentials */ + ps->align = old_align; + return False; + } + ps->align = old_align; + if(!net_io_neg_flags("", &q_a->clnt_flgs, ps, depth)) + return False; + + return True; +} + +/******************************************************************* + Reads or writes a structure. +********************************************************************/ + +BOOL net_io_r_auth_3(char *desc, NET_R_AUTH_3 *r_a, prs_struct *ps, int depth) +{ + if (r_a == NULL) + return False; + + prs_debug(ps, depth, desc, "net_io_r_auth_3"); + depth++; + + if(!prs_align(ps)) + return False; + + if(!smb_io_chal("srv_chal", &r_a->srv_chal, ps, depth)) /* server challenge */ + return False; + if(!net_io_neg_flags("srv_flgs", &r_a->srv_flgs, ps, depth)) + return False; + if (!prs_uint32("unknown", ps, depth, &r_a->unknown)) + return False; + + if(!prs_ntstatus("status", ps, depth, &r_a->status)) + return False; + + return True; +} + /******************************************************************* Inits a NET_Q_SRV_PWSET. -- cgit From 39966b7e167736e34874fc0523298877490e0a65 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 21 Aug 2002 23:27:38 +0000 Subject: fix segfault (This used to be commit 982eadf73bb3932ec3ac89c6112a8bf79dbec127) --- source3/libsmb/namecache.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c index e69d462268..88dbcf218d 100644 --- a/source3/libsmb/namecache.c +++ b/source3/libsmb/namecache.c @@ -29,7 +29,7 @@ static TDB_CONTEXT *namecache_tdb; struct nc_value { time_t expiry; /* When entry expires */ int count; /* Number of addresses */ - struct in_addr *ip_list; /* Address list */ + struct in_addr ip_list[1]; /* Address list */ }; /* Initialise namecache system */ @@ -94,14 +94,14 @@ static TDB_DATA namecache_value(struct in_addr *ip_list, int num_names, int size; size = sizeof(struct nc_value) + sizeof(struct in_addr) * - num_names; + (num_names-1); value = (struct nc_value *)malloc(size); value->expiry = expiry; value->count = num_names; - memcpy(value->ip_list, ip_list, num_names * sizeof(struct in_addr)); + memcpy(value->ip_list, ip_list, size); retval.dptr = (char *)value; retval.dsize = size; @@ -210,10 +210,10 @@ BOOL namecache_fetch(const char *name, int name_type, struct in_addr **ip_list, /* Extract and return namelist */ *ip_list = (struct in_addr *)malloc( - sizeof(struct in_addr) * data->count); + sizeof(struct in_addr) * (data->count-1)); memcpy(*ip_list, data->ip_list, sizeof(struct in_addr) * - data->count); + (data->count-1)); *num_names = data->count; -- cgit From 16b454f6c768cea3132d54bb75348ea8c60b5d35 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 21 Aug 2002 23:28:41 +0000 Subject: Added README written by Jelmer - thanks! (This used to be commit f639eb3817b9edf421dc103394428d607857a0bb) --- source3/python/README | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 source3/python/README diff --git a/source3/python/README b/source3/python/README new file mode 100644 index 0000000000..f751046376 --- /dev/null +++ b/source3/python/README @@ -0,0 +1,48 @@ +Quick Install Guide +-- +Lines prepended with a $ indicate shell commands. + +1. Requirements + +In order to be able to compile samba-python you need to have +python and the python-dev packages installed. + +2. Checking out the CVS HEAD branch of Samba and Samba-Python + +In your shell, type: + +$ cvs -d :pserver:cvs@pserver.samba.org:/cvsroot login + +When asked for a password, type 'cvs'. + +Now, type: + +$ cvs -d :pserver:cvs@pserver.samba.org:/cvsroot co samba + +This might probably take a while. When everything is downloaded, +check out the samba-python tree: + +$ cvs -d :pserver:cvs@pserver.samba.org:/cvsroot co samba-python + +Now that you have both cvs modules, move the directory 'samba-python' to +inside the samba source tree, using: + +$ mv samba-python samba/source/python + +Now, go to the samba/source directory and apply the samba-head.patch patch: + +$ cd samba/source && patch -p0 < location/to/samba-python/samba-head.patch + +You can now configure samba as usual and create the python extension: + +$ autoconf +$ ./configure +$ make python_ext + +Now, you can install the modules: + +$ cp build/lib.*/*.so /usr/lib/python2.1/lib-dynload/ + +(the directory /usr/lib/python2.1 may vary, depending on your installation) + +Samba-python should work now! -- cgit From d2915a466fcb1744dfe551b8a180e5b1b50d4c70 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 22 Aug 2002 00:10:02 +0000 Subject: Fixed IFSTEST errors with OpenParams... more to go. Jeremy. (This used to be commit 31a0c4ac33e89be4a27ff697dd3850fe6578e75f) --- source3/smbd/nttrans.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index 4e02ecce6e..529d68f6e3 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -371,7 +371,7 @@ static int map_share_mode( char *fname, uint32 create_options, if (smb_open_mode == -1) { - if(*desired_access & (DELETE_ACCESS|WRITE_DAC_ACCESS|WRITE_OWNER_ACCESS| + if(*desired_access & (DELETE_ACCESS|WRITE_DAC_ACCESS|WRITE_OWNER_ACCESS|SYNCHRONIZE_ACCESS| FILE_EXECUTE|FILE_READ_ATTRIBUTES| FILE_READ_EA|FILE_WRITE_EA|SYSTEM_SECURITY_ACCESS| FILE_WRITE_ATTRIBUTES|READ_CONTROL_ACCESS)) { @@ -579,7 +579,7 @@ create_options = 0x%x root_dir_fid = 0x%x\n", flags, desired_access, file_attrib return do_ntcreate_pipe_open(conn,inbuf,outbuf,length,bufsize); } else { END_PROFILE(SMBntcreateX); - return(ERROR_DOS(ERRDOS,ERRbadaccess)); + return(ERROR_DOS(ERRDOS,ERRnoaccess)); } } @@ -595,7 +595,7 @@ create_options = 0x%x root_dir_fid = 0x%x\n", flags, desired_access, file_attrib if((smb_ofun = map_create_disposition( create_disposition )) == -1) { END_PROFILE(SMBntcreateX); - return(ERROR_DOS(ERRDOS,ERRbadaccess)); + return(ERROR_DOS(ERRDOS,ERRnoaccess)); } /* @@ -670,7 +670,7 @@ create_options = 0x%x root_dir_fid = 0x%x\n", flags, desired_access, file_attrib share_access, file_attributes)) == -1) { END_PROFILE(SMBntcreateX); - return ERROR_DOS(ERRDOS,ERRbadaccess); + return ERROR_DOS(ERRDOS,ERRnoaccess); } oplock_request = (flags & REQUEST_OPLOCK) ? EXCLUSIVE_OPLOCK : 0; @@ -902,7 +902,7 @@ static int do_nt_transact_create_pipe( connection_struct *conn, if(total_parameter_count < 54) { DEBUG(0,("do_nt_transact_create_pipe - insufficient parameters (%u)\n", (unsigned int)total_parameter_count)); - return ERROR_DOS(ERRDOS,ERRbadaccess); + return ERROR_DOS(ERRDOS,ERRnoaccess); } srvstr_pull(inbuf, fname, params+53, sizeof(fname), total_parameter_count-53, STR_TERMINATE); @@ -1059,7 +1059,7 @@ static int call_nt_transact_create(connection_struct *conn, return do_nt_transact_create_pipe(conn, inbuf, outbuf, length, bufsize, ppsetup, ppparams, ppdata); else - return ERROR_DOS(ERRDOS,ERRbadaccess); + return ERROR_DOS(ERRDOS,ERRnoaccess); } /* @@ -1068,7 +1068,7 @@ static int call_nt_transact_create(connection_struct *conn, if(total_parameter_count < 54) { DEBUG(0,("call_nt_transact_create - insufficient parameters (%u)\n", (unsigned int)total_parameter_count)); - return ERROR_DOS(ERRDOS,ERRbadaccess); + return ERROR_DOS(ERRDOS,ERRnoaccess); } flags = IVAL(params,0); @@ -1159,7 +1159,7 @@ static int call_nt_transact_create(connection_struct *conn, if((smb_open_mode = map_share_mode( fname, create_options, &desired_access, share_access, file_attributes)) == -1) - return ERROR_DOS(ERRDOS,ERRbadaccess); + return ERROR_DOS(ERRDOS,ERRnoaccess); oplock_request = (flags & REQUEST_OPLOCK) ? EXCLUSIVE_OPLOCK : 0; oplock_request |= (flags & REQUEST_BATCH_OPLOCK) ? BATCH_OPLOCK : 0; @@ -1609,7 +1609,7 @@ static int call_nt_transact_set_security_desc(connection_struct *conn, (unsigned int)security_info_sent )); if (total_data_count == 0) - return ERROR_DOS(ERRDOS, ERRbadaccess); + return ERROR_DOS(ERRDOS, ERRnoaccess); if (!NT_STATUS_IS_OK(nt_status = set_sd( fsp, data, total_data_count, security_info_sent))) return ERROR_NT(nt_status); -- cgit From bad6e2dbe2096c13049fbb8936ee6df74a1bb9a8 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 22 Aug 2002 00:16:21 +0000 Subject: Move comment (This used to be commit 009b331182b1338e07968388004f5d44b835e7f5) --- source3/rpcclient/samsync.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source3/rpcclient/samsync.c b/source3/rpcclient/samsync.c index 3694eb47df..aaef889278 100644 --- a/source3/rpcclient/samsync.c +++ b/source3/rpcclient/samsync.c @@ -401,6 +401,9 @@ static NTSTATUS sam_sync(struct cli_state *cli, unsigned char trust_passwd[16], if (!NT_STATUS_IS_OK(result)) goto done; + + /* Update sam */ + apply_deltas(num_deltas_0, hdr_deltas_0, deltas_0); @@ -466,8 +469,6 @@ static NTSTATUS sam_sync(struct cli_state *cli, unsigned char trust_passwd[16], goto done; } - /* Update sam tdb */ - done: cli_nt_session_close(cli); talloc_destroy(mem_ctx); -- cgit From 2749f5e998a672e03ac7bbb932b1fd54b7f4a997 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 22 Aug 2002 00:51:00 +0000 Subject: A few fixes towards libsmbclient and rpcclient - get pointer types right and try to keep to functions inside libsmbclient. Andrew Bartlett (This used to be commit 340bc31fdb031d79fa87de27c2c46215dd8113a3) --- source3/libsmb/libsmbclient.c | 8 +++----- source3/rpcclient/samsync.c | 14 +++++++------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/source3/libsmb/libsmbclient.c b/source3/libsmb/libsmbclient.c index 0ffc1c1378..fa27f54340 100644 --- a/source3/libsmb/libsmbclient.c +++ b/source3/libsmb/libsmbclient.c @@ -180,14 +180,13 @@ smbc_parse_path(SMBCCTX *context, const char *fname, char *server, char *share, static int smbc_errno(SMBCCTX *context, struct cli_state *c) { - int ret; - + int ret = cli_errno(c); + if (cli_is_dos_error(c)) { uint8 eclass; uint32 ecode; cli_dos_error(c, &eclass, &ecode); - ret = cli_errno_from_dos(eclass, ecode); DEBUG(3,("smbc_error %d %d (0x%x) -> %d\n", (int)eclass, (int)ecode, (int)ecode, ret)); @@ -195,10 +194,9 @@ static int smbc_errno(SMBCCTX *context, struct cli_state *c) NTSTATUS status; status = cli_nt_error(c); - ret = cli_errno_from_nt(status); DEBUG(3,("smbc errno %s -> %d\n", - get_nt_error_msg(status), ret)); + nt_errstr(status), ret)); } return ret; diff --git a/source3/rpcclient/samsync.c b/source3/rpcclient/samsync.c index aaef889278..be3d4211e0 100644 --- a/source3/rpcclient/samsync.c +++ b/source3/rpcclient/samsync.c @@ -324,15 +324,15 @@ static void sam_account_from_delta(SAM_ACCOUNT *account, static void apply_account_info(SAM_ACCOUNT_INFO *sam_acct_delta) { - SAM_ACCOUNT sam_acct; + SAM_ACCOUNT *sam_acct; BOOL result; - ZERO_STRUCT(sam_acct); - - pdb_init_sam(&sam_acct); + if (!NT_STATUS_IS_OK(pdb_init_sam(&sam_acct))) { + return; + } - sam_account_from_delta(&sam_acct, sam_acct_delta); - result = pdb_add_sam_account(&sam_acct); + sam_account_from_delta(sam_acct, sam_acct_delta); + result = pdb_add_sam_account(sam_acct); } /* Apply an array of deltas to the SAM database */ @@ -544,7 +544,7 @@ static void user_callback(poptContext con, const struct poptOption *opt, const char *arg, const void *data) { - char *p, *ch; + const char *p, *ch; if (!arg) return; -- cgit From a1e32fee3957d0566a4c089dd5750541c15c843f Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 22 Aug 2002 01:25:10 +0000 Subject: Make samsync use popt (This used to be commit 6aa7aa00f32c2d6512029eb603f9087ce6c98bf9) --- source3/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index bfdb8c9d22..009cd18228 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -631,7 +631,7 @@ bin/rpcclient: $(RPCCLIENT_OBJ) @BUILD_POPT@ bin/.dummy bin/samsync: $(SAMSYNC_OBJ) bin/.dummy @echo Linking $@ - @$(CC) $(FLAGS) -o $@ $(SAMSYNC_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) + @$(CC) $(FLAGS) -o $@ $(SAMSYNC_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) @BUILD_POPT@ bin/smbclient: $(CLIENT_OBJ) bin/.dummy @echo Linking $@ -- cgit From 7c4d1ba0581dfd152a876f8726124938515410bd Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Thu, 22 Aug 2002 02:51:32 +0000 Subject: fix a few segfaults (This used to be commit ccb02f7cfcec4a555cf7304816c739f4bf7b46f0) --- source3/lib/system.c | 12 ++++++------ source3/libsmb/namecache.c | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/source3/lib/system.c b/source3/lib/system.c index 8822d3c414..873b8737d5 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -1233,23 +1233,23 @@ int sys_dup2(int oldfd, int newfd) Wrapper for Admin Logs. ****************************************************************************/ -void sys_adminlog(int priority, const char *format_str, ...) +void sys_adminlog(int priority, char *format_str, ...) { va_list ap; int ret; - char **msgbuf = NULL; + char *msgbuf = NULL; va_start( ap, format_str ); - ret = vasprintf( msgbuf, format_str, ap ); + ret = vasprintf( &msgbuf, format_str, ap ); va_end( ap ); if (ret == -1) return; #if defined(HAVE_SYSLOG) - syslog( priority, "%s", *msgbuf ); + syslog( priority, "%s", msgbuf ); #else - DEBUG(0,("%s", *msgbuf )); + DEBUG(0,("%s", msgbuf )); #endif - SAFE_FREE(*msgbuf); + SAFE_FREE(msgbuf); } diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c index 88dbcf218d..f05f76a22b 100644 --- a/source3/libsmb/namecache.c +++ b/source3/libsmb/namecache.c @@ -101,7 +101,7 @@ static TDB_DATA namecache_value(struct in_addr *ip_list, int num_names, value->expiry = expiry; value->count = num_names; - memcpy(value->ip_list, ip_list, size); + memcpy(value->ip_list, ip_list, sizeof(*ip_list)); retval.dptr = (char *)value; retval.dsize = size; -- cgit From c9c404b26cb82b155f9170bc0dc2b6ba934531e4 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Thu, 22 Aug 2002 03:12:10 +0000 Subject: get the access check in addform() correct this time. Needed to modify OpenPrinter() to store the access granted to on the print server handle as well. (This used to be commit 08b3f9688c6c3c83ad8949e6346d8fab5e563df4) --- source3/rpc_server/srv_spoolss_nt.c | 205 +++++++++++++++++------------------- 1 file changed, 94 insertions(+), 111 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 296d9a8ca2..a9c09b9107 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1143,7 +1143,58 @@ WERROR _spoolss_open_printer(pipes_struct *p, SPOOL_Q_OPEN_PRINTER *q_u, SPOOL_R /******************************************************************** * spoolss_open_printer * - * called from the spoolss dispatcher + * If the openprinterex rpc call contains a devmode, + * it's a per-user one. This per-user devmode is derivated + * from the global devmode. Openprinterex() contains a per-user + * devmode for when you do EMF printing and spooling. + * In the EMF case, the NT workstation is only doing half the job + * of rendering the page. The other half is done by running the printer + * driver on the server. + * The EMF file doesn't contain the page description (paper size, orientation, ...). + * The EMF file only contains what is to be printed on the page. + * So in order for the server to know how to print, the NT client sends + * a devicemode attached to the openprinterex call. + * But this devicemode is short lived, it's only valid for the current print job. + * + * If Samba would have supported EMF spooling, this devicemode would + * have been attached to the handle, to sent it to the driver to correctly + * rasterize the EMF file. + * + * As Samba only supports RAW spooling, we only receive a ready-to-print file, + * we just act as a pass-thru between windows and the printer. + * + * In order to know that Samba supports only RAW spooling, NT has to call + * getprinter() at level 2 (attribute field) or NT has to call startdoc() + * and until NT sends a RAW job, we refuse it. + * + * But to call getprinter() or startdoc(), you first need a valid handle, + * and to get an handle you have to call openprintex(). Hence why you have + * a devicemode in the openprinterex() call. + * + * + * Differences between NT4 and NT 2000. + * NT4: + * --- + * On NT4, you only have a global devicemode. This global devicemode can be changed + * by the administrator (or by a user with enough privs). Everytime a user + * wants to print, the devicemode is resetted to the default. In Word, everytime + * you print, the printer's characteristics are always reset to the global devicemode. + * + * NT 2000: + * ------- + * In W2K, there is the notion of per-user devicemode. The first time you use + * a printer, a per-user devicemode is build from the global devicemode. + * If you change your per-user devicemode, it is saved in the registry, under the + * H_KEY_CURRENT_KEY sub_tree. So that everytime you print, you have your default + * printer preferences available. + * + * To change the per-user devicemode: it's the "Printing Preferences ..." button + * on the General Tab of the printer properties windows. + * + * To change the global devicemode: it's the "Printing Defaults..." button + * on the Advanced Tab of the printer properties window. + * + * JFM. ********************************************************************/ WERROR _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u, SPOOL_R_OPEN_PRINTER_EX *r_u) @@ -1180,39 +1231,36 @@ Can't find printer handle we created for printer %s\n", name )); return WERR_INVALID_PRINTER_NAME; } - /* - First case: the user is opening the print server: - - Disallow MS AddPrinterWizard if parameter disables it. A Win2k - client 1st tries an OpenPrinterEx with access==0, MUST be allowed. - - Then both Win2k and WinNT clients try an OpenPrinterEx with - SERVER_ALL_ACCESS, which we allow only if the user is root (uid=0) - or if the user is listed in the smb.conf printer admin parameter. - - Then they try OpenPrinterEx with SERVER_READ which we allow. This lets the - client view printer folder, but does not show the MSAPW. - - Note: this test needs code to check access rights here too. Jeremy - could you look at this? - - - Second case: the user is opening a printer: - NT doesn't let us connect to a printer if the connecting user - doesn't have print permission. - - */ - get_current_user(&user, p); - if (Printer->printer_type == PRINTER_HANDLE_IS_PRINTSERVER) { + /* + * First case: the user is opening the print server: + * + * Disallow MS AddPrinterWizard if parameter disables it. A Win2k + * client 1st tries an OpenPrinterEx with access==0, MUST be allowed. + * + * Then both Win2k and WinNT clients try an OpenPrinterEx with + * SERVER_ALL_ACCESS, which we allow only if the user is root (uid=0) + * or if the user is listed in the smb.conf printer admin parameter. + * + * Then they try OpenPrinterEx with SERVER_READ which we allow. This lets the + * client view printer folder, but does not show the MSAPW. + * + * Note: this test needs code to check access rights here too. Jeremy + * could you look at this? + * + * Second case: the user is opening a printer: + * NT doesn't let us connect to a printer if the connecting user + * doesn't have print permission. + */ + if (Printer->printer_type == PRINTER_HANDLE_IS_PRINTSERVER) + { /* Printserver handles use global struct... */ snum = -1; - /* Map standard access rights to object specific access - rights */ + /* Map standard access rights to object specific access rights */ se_map_standard(&printer_default->access_required, &printserver_std_mapping); @@ -1233,21 +1281,30 @@ Can't find printer handle we created for printer %s\n", name )); if ( printer_default->access_required & SERVER_ACCESS_ADMINISTER ) { - if (!lp_ms_add_printer_wizard()) { close_printer_handle(p, handle); return WERR_ACCESS_DENIED; } - if (user.uid == 0 || - user_in_list(uidtoname(user.uid), - lp_printer_admin(snum))) - return WERR_OK; + /* if the user is not root and not a printer admin, then fail */ - close_printer_handle(p, handle); - return WERR_ACCESS_DENIED; + if ( user.uid != 0 + && !user_in_list(uidtoname(user.uid), lp_printer_admin(snum)) ) + { + close_printer_handle(p, handle); + return WERR_ACCESS_DENIED; + } + + printer_default->access_required = SERVER_ACCESS_ADMINISTER; + } + else + { + printer_default->access_required = SERVER_ACCESS_ENUMERATE; } + DEBUG(4,("Setting print server access = %s\n", (printer_default->access_required == SERVER_ACCESS_ADMINISTER) + ? "SERVER_ACCESS_ADMINISTER" : "SERVER_ACCESS_ENUMERATE" )); + /* We fall through to return WERR_OK */ } @@ -1299,83 +1356,9 @@ Can't find printer handle we created for printer %s\n", name )); DEBUG(4,("Setting printer access = %s\n", (printer_default->access_required == PRINTER_ACCESS_ADMINISTER) ? "PRINTER_ACCESS_ADMINISTER" : "PRINTER_ACCESS_USE" )); - Printer->access_granted = printer_default->access_required; - - /* - * If we have a default device pointer in the - * printer_default struct, then we need to get - * the printer info from the tdb and if there is - * no default devicemode there then we do a *SET* - * here ! This is insanity.... JRA. - */ - - /* - * If the openprinterex rpc call contains a devmode, - * it's a per-user one. This per-user devmode is derivated - * from the global devmode. Openprinterex() contains a per-user - * devmode for when you do EMF printing and spooling. - * In the EMF case, the NT workstation is only doing half the job - * of rendering the page. The other half is done by running the printer - * driver on the server. - * The EMF file doesn't contain the page description (paper size, orientation, ...). - * The EMF file only contains what is to be printed on the page. - * So in order for the server to know how to print, the NT client sends - * a devicemode attached to the openprinterex call. - * But this devicemode is short lived, it's only valid for the current print job. - * - * If Samba would have supported EMF spooling, this devicemode would - * have been attached to the handle, to sent it to the driver to correctly - * rasterize the EMF file. - * - * As Samba only supports RAW spooling, we only receive a ready-to-print file, - * we just act as a pass-thru between windows and the printer. - * - * In order to know that Samba supports only RAW spooling, NT has to call - * getprinter() at level 2 (attribute field) or NT has to call startdoc() - * and until NT sends a RAW job, we refuse it. - * - * But to call getprinter() or startdoc(), you first need a valid handle, - * and to get an handle you have to call openprintex(). Hence why you have - * a devicemode in the openprinterex() call. - * - * - * Differences between NT4 and NT 2000. - * NT4: - * --- - * On NT4, you only have a global devicemode. This global devicemode can be changed - * by the administrator (or by a user with enough privs). Everytime a user - * wants to print, the devicemode is resetted to the default. In Word, everytime - * you print, the printer's characteristics are always reset to the global devicemode. - * - * NT 2000: - * ------- - * In W2K, there is the notion of per-user devicemode. The first time you use - * a printer, a per-user devicemode is build from the global devicemode. - * If you change your per-user devicemode, it is saved in the registry, under the - * H_KEY_CURRENT_KEY sub_tree. So that everytime you print, you have your default - * printer preferences available. - * - * To change the per-user devicemode: it's the "Printing Preferences ..." button - * on the General Tab of the printer properties windows. - * - * To change the global devicemode: it's the "Printing Defaults..." button - * on the Advanced Tab of the printer properties window. - * - * JFM. - */ - - - -#if 0 - if (printer_default->devmode_cont.devmode != NULL) { - result = printer_write_default_dev( snum, printer_default); - if (result != 0) { - close_printer_handle(p, handle); - return result; - } - } -#endif } + + Printer->access_granted = printer_default->access_required; return WERR_OK; } @@ -7273,7 +7256,7 @@ WERROR _spoolss_addform( pipes_struct *p, SPOOL_Q_ADDFORM *q_u, SPOOL_R_ADDFORM goto done; } - if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) { + if ( !(Printer->access_granted & (PRINTER_ACCESS_ADMINISTER|SERVER_ACCESS_ADMINISTER)) ) { DEBUG(2,("_spoolss_addform: denied by handle permissions.\n")); status = WERR_ACCESS_DENIED; goto done; -- cgit From 3276da43142bb4a0886747dabcfce6a436f11f25 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 22 Aug 2002 09:48:06 +0000 Subject: Spelling fixes. (This used to be commit 24fa84bda49a3a77fbc092652a0b6b132f06ff7c) --- source3/auth/auth_sam.c | 8 ++++---- source3/lib/account_pol.c | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/source3/auth/auth_sam.c b/source3/auth/auth_sam.c index 50f1e5dac9..58def0567a 100644 --- a/source3/auth/auth_sam.c +++ b/source3/auth/auth_sam.c @@ -233,17 +233,17 @@ static NTSTATUS sam_password_ok(const struct auth_context *auth_context, return NT_STATUS_OK; } else { if (lp_ntlm_auth()) { - /* Apparently NT accepts NT responses in the LM feild - - I think this is related to Win9X pass-though authenticaion + /* Apparently NT accepts NT responses in the LM field + - I think this is related to Win9X pass-though authentication */ - DEBUG(4,("sam_password_ok: Checking NT MD4 password in LM feild\n")); + DEBUG(4,("sam_password_ok: Checking NT MD4 password in LM field\n")); if (smb_pwd_check_ntlmv1(user_info->lm_resp, nt_pw, auth_context->challenge, user_sess_key)) { return NT_STATUS_OK; } else { - DEBUG(3,("sam_password_ok: NT MD4 password in LM feild failed for user %s\n",pdb_get_username(sampass))); + DEBUG(3,("sam_password_ok: NT MD4 password in LM field failed for user %s\n",pdb_get_username(sampass))); return NT_STATUS_WRONG_PASSWORD; } } diff --git a/source3/lib/account_pol.c b/source3/lib/account_pol.c index 07b5e2ecfc..b5f205c508 100644 --- a/source3/lib/account_pol.c +++ b/source3/lib/account_pol.c @@ -128,7 +128,7 @@ BOOL account_policy_get(int field, uint32 *value) return False; } if (!tdb_fetch_uint32(tdb, name, value)) { - DEBUG(1, ("account_policy_get: tdb_fetch_uint32 failed for feild %d (%s), returning 0", field, name)); + DEBUG(1, ("account_policy_get: tdb_fetch_uint32 failed for efild %d (%s), returning 0", field, name)); return False; } DEBUG(10,("account_policy_get: %s:%d\n", name, *value)); @@ -151,7 +151,7 @@ BOOL account_policy_set(int field, uint32 value) } if (!tdb_store_uint32(tdb, name, value)) { - DEBUG(1, ("tdb_store_uint32 failed for feild %d (%s) on value %u", field, name, value)); + DEBUG(1, ("tdb_store_uint32 failed for field %d (%s) on value %u", field, name, value)); return False; } -- cgit From f5a4487df573f8dfb2b6e18a492585220df1f5bb Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Thu, 22 Aug 2002 10:33:21 +0000 Subject: fix for difference in strsep and strtok semantics (This used to be commit 51e0a4adc7c6cc09e53003726b31201a091e9f35) --- source3/nmbd/nmbd_processlogon.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source3/nmbd/nmbd_processlogon.c b/source3/nmbd/nmbd_processlogon.c index 49de2e4a50..b65cebe203 100644 --- a/source3/nmbd/nmbd_processlogon.c +++ b/source3/nmbd/nmbd_processlogon.c @@ -335,6 +335,7 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n", dc = domain; q1 = q; while ((component = strtok(dc, "."))) { + dc = NULL; size = push_ascii(&q[1], component, -1, 0); SCVAL(q, 0, size); q += (size + 1); -- cgit From 68b9a4cebc04ba80fb1fb37940e013bc680b589e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 22 Aug 2002 17:05:35 +0000 Subject: Ensure we don't change to a user that we can't get an NT_TOKEN for. (This used to be commit 9416289b571b1c838239e5342bb6148041ab681b) --- source3/smbd/uid.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c index 6f91065ceb..2bda26aa51 100644 --- a/source3/smbd/uid.c +++ b/source3/smbd/uid.c @@ -178,6 +178,10 @@ BOOL change_to_user(connection_struct *conn, uint16 vuid) is_guest = True; token = create_nt_token(uid, gid, current_user.ngroups, current_user.groups, is_guest); + if (!token) { + DEBUG(1, ("change_to_user: create_nt_token failed!\n")); + return False; + } must_free_token = True; } -- cgit From 752f2adec593170b3711736b584c28b7daf82be4 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 22 Aug 2002 17:43:27 +0000 Subject: Fix compile warnings. (This used to be commit e84f47a234d31e98b0dc28c51f3ec337458e48d1) --- source3/registry/reg_printing.c | 4 ---- source3/rpc_server/srv_pipe.c | 3 --- 2 files changed, 7 deletions(-) diff --git a/source3/registry/reg_printing.c b/source3/registry/reg_printing.c index 8f53fe9ea5..8ab0abba9b 100644 --- a/source3/registry/reg_printing.c +++ b/source3/registry/reg_printing.c @@ -517,10 +517,6 @@ static int print_subpath_values_printers( char *key, REGVAL_CTR *val ) prs_struct prs; uint32 offset; int snum; - int i; - fstring valuename; - uint8 *data; - uint32 type, data_len; fstring printername; /* diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c index 62e10c9965..1947d5514e 100644 --- a/source3/rpc_server/srv_pipe.c +++ b/source3/rpc_server/srv_pipe.c @@ -276,9 +276,6 @@ static BOOL api_pipe_ntlmssp_verify(pipes_struct *p, RPC_AUTH_NTLMSSP_RESP *ntlm auth_usersupplied_info *user_info = NULL; auth_serversupplied_info *server_info = NULL; - uid_t uid; - uid_t gid; - DEBUG(5,("api_pipe_ntlmssp_verify: checking user details\n")); memset(p->user_name, '\0', sizeof(p->user_name)); -- cgit From b781c7af193b0e6cc0ba50bc91ea7b19ae0baf52 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 22 Aug 2002 17:46:25 +0000 Subject: More compile warnings. (This used to be commit 8303ff62609bd57af457bc1f1527c58657225fdf) --- source3/profile/profile.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source3/profile/profile.c b/source3/profile/profile.c index bbcfc780e8..689f67da99 100644 --- a/source3/profile/profile.c +++ b/source3/profile/profile.c @@ -25,8 +25,10 @@ #define IPC_PERMS ((SHM_R | SHM_W) | (SHM_R>>3) | (SHM_R>>6)) #endif /* WITH_PROFILE */ +#ifdef WITH_PROFILE static int shm_id; static BOOL read_only; +#endif struct profile_header *profile_h; struct profile_stats *profile_p; -- cgit From 7490b8c2c74c18c675902f3d6b7c48320d891858 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 22 Aug 2002 19:56:16 +0000 Subject: We were returning incorrect flags in smb_action.... IFSTEST strikes again :-). Jeremy. (This used to be commit 4e0a2564302bdb18087e395576208fa0f0c5c32e) --- source3/smbd/nttrans.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index 529d68f6e3..722a7ff8bf 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -563,6 +563,8 @@ int reply_ntcreate_and_X(connection_struct *conn, files_struct *fsp=NULL; char *p = NULL; time_t c_time; + BOOL extended_oplock_granted = False; + START_PROFILE(SMBntcreateX); DEBUG(10,("reply_ntcreateX: flags = 0x%x, desired_access = 0x%x \ @@ -810,10 +812,10 @@ create_options = 0x%x root_dir_fid = 0x%x\n", flags, desired_access, file_attrib */ if (oplock_request && lp_fake_oplocks(SNUM(conn))) - smb_action |= EXTENDED_OPLOCK_GRANTED; + extended_oplock_granted = True; if(oplock_request && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) - smb_action |= EXTENDED_OPLOCK_GRANTED; + extended_oplock_granted = True; #if 0 /* W2K sends back 42 words here ! If we do the same it breaks offline sync. Go figure... ? JRA. */ @@ -829,7 +831,7 @@ create_options = 0x%x root_dir_fid = 0x%x\n", flags, desired_access, file_attrib * exclusive & batch here. */ - if (smb_action & EXTENDED_OPLOCK_GRANTED) { + if (extended_oplock_granted) { if (flags & REQUEST_BATCH_OPLOCK) { SCVAL(p,0, BATCH_OPLOCK_RETURN); } else { @@ -1034,6 +1036,7 @@ static int call_nt_transact_create(connection_struct *conn, BOOL bad_path = False; files_struct *fsp = NULL; char *p = NULL; + BOOL extended_oplock_granted = False; uint32 flags; uint32 desired_access; uint32 file_attributes; @@ -1261,10 +1264,10 @@ static int call_nt_transact_create(connection_struct *conn, */ if (oplock_request && lp_fake_oplocks(SNUM(conn))) - smb_action |= EXTENDED_OPLOCK_GRANTED; + extended_oplock_granted = True; if(oplock_request && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) - smb_action |= EXTENDED_OPLOCK_GRANTED; + extended_oplock_granted = True; } /* @@ -1289,7 +1292,7 @@ static int call_nt_transact_create(connection_struct *conn, memset((char *)params,'\0',69); p = params; - if (smb_action & EXTENDED_OPLOCK_GRANTED) + if (extended_oplock_granted) SCVAL(p,0, BATCH_OPLOCK_RETURN); else if (LEVEL_II_OPLOCK_TYPE(fsp->oplock_type)) SCVAL(p,0, LEVEL_II_OPLOCK_RETURN); -- cgit From 7d81e7757059686ae2c57748edfe6b948347748c Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 22 Aug 2002 19:57:53 +0000 Subject: Put back in BDC support in set_server_role(). Tidied up debugs. (This used to be commit 08d7d6ffa65568209e953a2834d263cf3537064e) --- source3/param/loadparm.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 966124039f..6fb8cd896a 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -3496,32 +3496,46 @@ static void set_server_role(void) case SEC_SHARE: if (lp_domain_logons()) DEBUG(0, ("Server's Role (logon server) conflicts with share-level security\n")); - DEBUG(10,("set_server_role: ROLE_STANDALONE\n")); break; case SEC_SERVER: case SEC_DOMAIN: case SEC_ADS: if (lp_domain_logons()) { server_role = ROLE_DOMAIN_PDC; - DEBUG(10,("set_server_role:ROLE_DOMAIN_PDC\n")); break; } server_role = ROLE_DOMAIN_MEMBER; - DEBUG(10,("set_server_role: ROLE_DOMAIN_MEMBER\n")); break; case SEC_USER: if (lp_domain_logons()) { - server_role = ROLE_DOMAIN_PDC; - DEBUG(10,("set_server_role: ROLE_DOMAIN_PDC\n")); - break; + + if (lp_domain_master()) + server_role = ROLE_DOMAIN_PDC; + else + server_role = ROLE_DOMAIN_BDC; } - DEBUG(10,("set_server_role: ROLE_STANDALONE\n")); break; default: DEBUG(0, ("Server's Role undefined due to unknown security mode\n")); - DEBUG(10,("set_server_role: ROLE_STANDALONE\n")); break; } + + DEBUG(10, ("set_server_role: role = ")); + + switch(server_role) { + case ROLE_STANDALONE: + DEBUGADD(10, ("ROLE_STANDALONE\n")); + break; + case ROLE_DOMAIN_MEMBER: + DEBUGADD(10, ("ROLE_DOMAIN_MEMBER\n")); + break; + case ROLE_DOMAIN_BDC: + DEBUGADD(10, ("ROLE_DOMAIN_BDC\n")); + break; + case ROLE_DOMAIN_PDC: + DEBUGADD(10, ("ROLE_DOMAIN_PDC\n")); + break; + } } -- cgit From 1c016844517e221ea5167b7d3898c7b81e0fb792 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 22 Aug 2002 20:02:33 +0000 Subject: Remember to check for UNIX extensions before saying we support them. Jeremy. (This used to be commit 2c7ad907eb5e1838b6430940cb5289489fad4bb0) --- source3/smbd/negprot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/negprot.c b/source3/smbd/negprot.c index 2be04fd686..58d0158c38 100644 --- a/source3/smbd/negprot.c +++ b/source3/smbd/negprot.c @@ -239,7 +239,7 @@ static int reply_nt1(char *inbuf, char *outbuf) capabilities |= CAP_EXTENDED_SECURITY; } - capabilities |= CAP_NT_SMBS|CAP_RPC_REMOTE_APIS|CAP_UNIX; + capabilities |= CAP_NT_SMBS|CAP_RPC_REMOTE_APIS|(lp_unix_extensions() ? CAP_UNIX : 0); if (lp_large_readwrite() && (SMB_OFF_T_BITS == 64)) capabilities |= CAP_LARGE_READX|CAP_LARGE_WRITEX|CAP_W2K_SMBS; -- cgit From f99ed72f8bc46725094de27b961a0c3af84f1e12 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 22 Aug 2002 20:19:49 +0000 Subject: Spelling fixes. (This used to be commit 9b49d97b94a7e3842cdcbfa4ebfa961586857aea) --- source3/include/rpc_netlogon.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source3/include/rpc_netlogon.h b/source3/include/rpc_netlogon.h index 3c19c574f0..f4ad3113e5 100644 --- a/source3/include/rpc_netlogon.h +++ b/source3/include/rpc_netlogon.h @@ -51,16 +51,18 @@ #define SAM_DELTA_GROUP_MEM 0x08 /* Group membership */ #define SAM_DELTA_ALIAS_INFO 0x09 /* Local groups */ #define SAM_DELTA_ALIAS_MEM 0x0C /* Local group membership */ -#define SAM_DELTA_DOM_INFO 0x0D /* Privilige stuff */ -#define SAM_DELTA_UNK0E_INFO 0x0e /* Privilige stuff */ -#define SAM_DELTA_PRIVS_INFO 0x10 /* Privilige stuff */ -#define SAM_DELTA_UNK12_INFO 0x12 /* Privilige stuff */ +#define SAM_DELTA_DOM_INFO 0x0D /* Privilege stuff */ +#define SAM_DELTA_UNK0E_INFO 0x0e /* Privilege stuff */ +#define SAM_DELTA_PRIVS_INFO 0x10 /* Privilege stuff */ +#define SAM_DELTA_UNK12_INFO 0x12 /* Privilege stuff */ #define SAM_DELTA_SAM_STAMP 0x16 /* Some kind of journal record? */ /* SAM database types */ #define SAM_DATABASE_DOMAIN 0x00 /* Domain users and groups */ +#define SAM_DATABASE_BUILTIN 0x01 /* BUILTIN users and g/* SAM database types */ +#define SAM_DATABASE_DOMAIN 0x00 /* Domain users and groups */ #define SAM_DATABASE_BUILTIN 0x01 /* BUILTIN users and groups */ -#define SAM_DATABASE_PRIVS 0x02 /* Priviliges? */ +#define SAM_DATABASE_PRIVS 0x02 /* Privileges */ #if 0 /* I think this is correct - it's what gets parsed on the wire. JRA. */ -- cgit From 02f8ed71103ca57135980a203d99785a97563455 Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Thu, 22 Aug 2002 21:15:17 +0000 Subject: reload_after_sighup and got_sig_term are defined in server.c (This used to be commit 667e2fe32f111ce840fe3be028c61497d54d6b3d) --- source3/smbd/process.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 13fd4998fe..7c269b0134 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -42,8 +42,8 @@ extern int last_message; extern int global_oplock_break; extern userdom_struct current_user_info; extern int smb_read_error; -SIG_ATOMIC_T reload_after_sighup; -SIG_ATOMIC_T got_sig_term; +extern SIG_ATOMIC_T reload_after_sighup; +extern SIG_ATOMIC_T got_sig_term; extern BOOL global_machine_password_needs_changing; extern fstring global_myworkgroup; extern pstring global_myname; -- cgit From 2bd75e4714f664a4cddf406a18f665b5cd590f29 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Thu, 22 Aug 2002 21:16:11 +0000 Subject: fix registry editor API for printing backend after I changed the NT_PRINTER_PARAM to a REGISTRY_VALUE (This used to be commit 8d510abe125e15a8d71c58a13d170dc3d6371368) --- source3/registry/reg_frontend.c | 39 +++++++++++++++++++-- source3/registry/reg_printing.c | 67 ++++++++++++++++++------------------- source3/rpc_server/srv_spoolss_nt.c | 4 +-- 3 files changed, 69 insertions(+), 41 deletions(-) diff --git a/source3/registry/reg_frontend.c b/source3/registry/reg_frontend.c index f31f675997..05bcd989b4 100644 --- a/source3/registry/reg_frontend.c +++ b/source3/registry/reg_frontend.c @@ -253,12 +253,9 @@ int regval_ctr_addvalue( REGVAL_CTR *ctr, char *name, uint16 type, char *data_p, size_t size ) { REGISTRY_VALUE **ppreg; - uint16 len; if ( name ) { - len = strlen( name ); - /* allocate a slot in the array of pointers */ if ( ctr->num_values == 0 ) @@ -285,6 +282,42 @@ int regval_ctr_addvalue( REGVAL_CTR *ctr, char *name, uint16 type, return ctr->num_values; } +/*********************************************************************** + Add a new registry value to the array + **********************************************************************/ + +int regval_ctr_copyvalue( REGVAL_CTR *ctr, REGISTRY_VALUE *val ) +{ + REGISTRY_VALUE **ppreg; + + if ( val ) + { + /* allocate a slot in the array of pointers */ + + if ( ctr->num_values == 0 ) + ctr->values = talloc( ctr->ctx, sizeof(REGISTRY_VALUE*) ); + else { + ppreg = talloc_realloc( ctr->ctx, ctr->values, sizeof(REGISTRY_VALUE*)*(ctr->num_values+1) ); + if ( ppreg ) + ctr->values = ppreg; + } + + /* allocate a new value and store the pointer in the arrya */ + + ctr->values[ctr->num_values] = talloc( ctr->ctx, sizeof(REGISTRY_VALUE) ); + + /* init the value */ + + fstrcpy( ctr->values[ctr->num_values]->valuename, val->valuename ); + ctr->values[ctr->num_values]->type = val->type; + ctr->values[ctr->num_values]->data_p = talloc_memdup( ctr->ctx, val->data_p, val->size ); + ctr->values[ctr->num_values]->size = val->size; + ctr->num_values++; + } + + return ctr->num_values; +} + /*********************************************************************** Delete a single value from the registry container. No need to free memory since it is talloc'd. diff --git a/source3/registry/reg_printing.c b/source3/registry/reg_printing.c index 8ab0abba9b..2bc9d056e4 100644 --- a/source3/registry/reg_printing.c +++ b/source3/registry/reg_printing.c @@ -453,11 +453,12 @@ static int print_subpath_printers( char *key, REGSUBKEY_CTR *subkeys ) int n_services = lp_numservices(); int snum; fstring sname; + int i; int num_subkeys = 0; char *keystr, *key2 = NULL; char *base, *new_path; NT_PRINTER_INFO_LEVEL *printer = NULL; - + fstring *subkey_names = NULL; DEBUG(10,("print_subpath_printers: key=>[%s]\n", key ? key : "NULL" )); @@ -483,22 +484,23 @@ static int print_subpath_printers( char *key, REGSUBKEY_CTR *subkeys ) key2 = strdup( key ); keystr = key2; reg_split_path( keystr, &base, &new_path ); + + if ( !W_ERROR_IS_OK( get_a_printer(&printer, 2, base) ) ) + goto done; + + num_subkeys = get_printer_subkeys( &printer->info_2->data, new_path?new_path:"", &subkey_names ); + for ( i=0; iinfo_2; - /* iterate over all printer data and fill the regval container */ -#if 0 /* JERRY */ - for ( i=0; get_specific_param_by_index(*printer, 2, i, valuename, &data, &type, &data_len); i++ ) - { - regval_ctr_addvalue( val, valuename, type, data, data_len ); + p_data = &printer->info_2->data; + if ( (key_index = lookup_printerkey( p_data, new_path )) == -1 ) { + DEBUG(10,("print_subpath_values_printer: Unknown keyname [%s]\n", new_path)); + goto done; } -#endif - - free_a_printer( &printer, 2 ); - - num_values = regval_ctr_numvals( val ); + num_values = regval_ctr_numvals( &p_data->keys[key_index].values ); + + for ( i=0; ikeys[key_index].values, i) ); + + done: + if ( printer ) + free_a_printer( &printer, 2 ); + SAFE_FREE( key2 ); return num_values; diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index a9c09b9107..1c60e7024e 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -7925,7 +7925,6 @@ WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u, fstring valuename; fstring keyname; char *oid_string; - UNISTR2 uni_oid; DEBUG(4,("_spoolss_setprinterdataex\n")); @@ -7988,9 +7987,8 @@ WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u, * this is right. --jerry */ - init_unistr2( &uni_oid, oid_string, strlen(oid_string)+1 ); set_printer_dataex( printer, keyname, valuename, - REG_SZ, (void*)uni_oid.buffer, uni_oid.uni_str_len*sizeof(uint16) ); + REG_SZ, (void*)oid_string, strlen(oid_string)+1 ); } free_a_printer(&printer, 2); -- cgit From 600558a2eaa953f42cfced3912612f8e9ce2e135 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Thu, 22 Aug 2002 21:42:59 +0000 Subject: typos typos :) (This used to be commit 78cfbebc69fb15326d8f6dbbce1090c301a1f270) --- source3/include/rpc_netlogon.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/source3/include/rpc_netlogon.h b/source3/include/rpc_netlogon.h index f4ad3113e5..190199e048 100644 --- a/source3/include/rpc_netlogon.h +++ b/source3/include/rpc_netlogon.h @@ -59,8 +59,6 @@ /* SAM database types */ #define SAM_DATABASE_DOMAIN 0x00 /* Domain users and groups */ -#define SAM_DATABASE_BUILTIN 0x01 /* BUILTIN users and g/* SAM database types */ -#define SAM_DATABASE_DOMAIN 0x00 /* Domain users and groups */ #define SAM_DATABASE_BUILTIN 0x01 /* BUILTIN users and groups */ #define SAM_DATABASE_PRIVS 0x02 /* Privileges */ -- cgit From a10519049eaff027056e82440444638b68b8cf3a Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 22 Aug 2002 22:44:06 +0000 Subject: added a useful unistr2 display function (This used to be commit f4581133649b5208d8f91c4995ef60579e04b6f6) --- source3/lib/util_unistr.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source3/lib/util_unistr.c b/source3/lib/util_unistr.c index ba02819bdc..eb47252413 100644 --- a/source3/lib/util_unistr.c +++ b/source3/lib/util_unistr.c @@ -218,6 +218,16 @@ void unistr2_to_ascii(char *dest, const UNISTR2 *str, size_t maxlen) pull_ucs2(NULL, dest, str->buffer, maxlen, str->uni_str_len*2, STR_NOALIGN); } +/******************************************************************* +give a static string for displaying a UNISTR2 +********************************************************************/ +const char *unistr2_static(const UNISTR2 *str) +{ + static pstring ret; + unistr2_to_ascii(ret, str, sizeof(ret)); + return ret; +} + /******************************************************************* duplicate a UNISTR2 string into a null terminated char* -- cgit From 2a505d023f95457f63a3975e386b95e8658928f4 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 22 Aug 2002 22:48:54 +0000 Subject: added a 'net rpc samdump' command for dumping the whole sam via samsync operations (as a BDC) (This used to be commit e4cb106d2e3e6a41529369545a7a6ce5fe6d8986) --- source3/Makefile.in | 2 +- source3/rpc_client/cli_netlogon.c | 25 +++--- source3/rpc_parse/parse_net.c | 9 ++- source3/rpcclient/samsync.c | 4 +- source3/utils/net_rpc.c | 1 + source3/utils/net_rpc_samsync.c | 162 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 184 insertions(+), 19 deletions(-) create mode 100644 source3/utils/net_rpc_samsync.c diff --git a/source3/Makefile.in b/source3/Makefile.in index 009cd18228..788859a353 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -377,7 +377,7 @@ CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ $(READLINE_OBJ) NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_ads_cldap.o utils/net_help.o \ - utils/net_rap.o utils/net_rpc.o \ + utils/net_rap.o utils/net_rpc.o utils/net_rpc_samsync.o \ utils/net_rpc_join.o utils/net_time.o utils/net_lookup.o NET_OBJ = $(NET_OBJ1) $(SECRETS_OBJ) $(LIBSMB_OBJ) \ diff --git a/source3/rpc_client/cli_netlogon.c b/source3/rpc_client/cli_netlogon.c index acc9135542..60048d189d 100644 --- a/source3/rpc_client/cli_netlogon.c +++ b/source3/rpc_client/cli_netlogon.c @@ -257,24 +257,23 @@ file. They should be combined at some stage. )-: static void gen_next_creds( struct cli_state *cli, DOM_CRED *new_clnt_cred) { - /* - * Create the new client credentials. - */ - - cli->clnt_cred.timestamp.time = time(NULL); - - memcpy(new_clnt_cred, &cli->clnt_cred, sizeof(*new_clnt_cred)); - - /* Calculate the new credentials. */ - cred_create(cli->sess_key, &(cli->clnt_cred.challenge), - new_clnt_cred->timestamp, &(new_clnt_cred->challenge)); + /* + * Create the new client credentials. + */ + + cli->clnt_cred.timestamp.time = time(NULL); + + memcpy(new_clnt_cred, &cli->clnt_cred, sizeof(*new_clnt_cred)); + /* Calculate the new credentials. */ + cred_create(cli->sess_key, &(cli->clnt_cred.challenge), + new_clnt_cred->timestamp, &(new_clnt_cred->challenge)); } /* Sam synchronisation */ NTSTATUS cli_netlogon_sam_sync(struct cli_state *cli, TALLOC_CTX *mem_ctx, DOM_CRED *ret_creds, - uint32 database_id, uint32 *num_deltas, + uint32 database_id, uint32 next_rid, uint32 *num_deltas, SAM_DELTA_HDR **hdr_deltas, SAM_DELTA_CTR **deltas) { @@ -297,7 +296,7 @@ NTSTATUS cli_netlogon_sam_sync(struct cli_state *cli, TALLOC_CTX *mem_ctx, DOM_C gen_next_creds(cli, &clnt_creds); init_net_q_sam_sync(&q, cli->srv_name_slash, cli->clnt_name_slash + 2, - &clnt_creds, ret_creds, database_id); + &clnt_creds, ret_creds, database_id, next_rid); /* Marshall data and send request */ diff --git a/source3/rpc_parse/parse_net.c b/source3/rpc_parse/parse_net.c index 7f8d1953d1..52cbc8e8df 100644 --- a/source3/rpc_parse/parse_net.c +++ b/source3/rpc_parse/parse_net.c @@ -1690,7 +1690,8 @@ makes a NET_Q_SAM_SYNC structure. ********************************************************************/ BOOL init_net_q_sam_sync(NET_Q_SAM_SYNC * q_s, const char *srv_name, const char *cli_name, DOM_CRED *cli_creds, - DOM_CRED *ret_creds, uint32 database_id) + DOM_CRED *ret_creds, uint32 database_id, + uint32 next_rid) { DEBUG(5, ("init_q_sam_sync\n")); @@ -1706,8 +1707,8 @@ BOOL init_net_q_sam_sync(NET_Q_SAM_SYNC * q_s, const char *srv_name, memset(&q_s->ret_creds, 0, sizeof(q_s->ret_creds)); q_s->database_id = database_id; - q_s->restart_state = 0; - q_s->sync_context = 0; + q_s->restart_state = 4; + q_s->sync_context = next_rid; q_s->max_size = 0xffff; return True; @@ -2785,6 +2786,8 @@ BOOL net_io_r_sam_sync(char *desc, uint8 sess_key[16], if (!prs_uint32("sync_context", ps, depth, &r_s->sync_context)) return False; + d_printf("Got sync context %u\n", r_s->sync_context); + if (!prs_uint32("ptr_deltas", ps, depth, &r_s->ptr_deltas)) return False; if (r_s->ptr_deltas != 0) diff --git a/source3/rpcclient/samsync.c b/source3/rpcclient/samsync.c index be3d4211e0..a8344cd5e2 100644 --- a/source3/rpcclient/samsync.c +++ b/source3/rpcclient/samsync.c @@ -394,7 +394,7 @@ static NTSTATUS sam_sync(struct cli_state *cli, unsigned char trust_passwd[16], /* Do sam synchronisation on the SAM database*/ - result = cli_netlogon_sam_sync(cli, mem_ctx, &ret_creds, 0, + result = cli_netlogon_sam_sync(cli, mem_ctx, &ret_creds, 0, 0, &num_deltas_0, &hdr_deltas_0, &deltas_0); @@ -415,7 +415,7 @@ static NTSTATUS sam_sync(struct cli_state *cli, unsigned char trust_passwd[16], #if 1 /* Do sam synchronisation on the LSA database */ - result = cli_netlogon_sam_sync(cli, mem_ctx, &ret_creds, 2, &num_deltas_2, &hdr_deltas_2, &deltas_2); + result = cli_netlogon_sam_sync(cli, mem_ctx, &ret_creds, 2, 0, &num_deltas_2, &hdr_deltas_2, &deltas_2); if (!NT_STATUS_IS_OK(result)) goto done; diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index df5b67372d..a7d2a08b38 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -2245,6 +2245,7 @@ int net_rpc(int argc, const char **argv) {"trustdom", rpc_trustdom}, {"abortshutdown", rpc_shutdown_abort}, {"shutdown", rpc_shutdown}, + {"samdump", rpc_samdump}, {"getsid", net_rpc_getsid}, {"help", net_rpc_help}, {NULL, NULL} diff --git a/source3/utils/net_rpc_samsync.c b/source3/utils/net_rpc_samsync.c new file mode 100644 index 0000000000..44c3fdb26a --- /dev/null +++ b/source3/utils/net_rpc_samsync.c @@ -0,0 +1,162 @@ +/* + Unix SMB/CIFS implementation. + dump the remote SAM using rpc samsync operations + + Copyright (C) Andrew Tridgell 2002 + Copyright (C) Tim Potter 2001,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 "../utils/net.h" + +static void display_group_mem_info(uint32 rid, SAM_GROUP_MEM_INFO *g) +{ + int i; + d_printf("Group mem %u: ", rid); + for (i=0;inum_members;i++) { + d_printf("%u ", g->rids[i]); + } + d_printf("\n"); +} + +static void display_alias_info(uint32 rid, SAM_ALIAS_INFO *a) +{ + d_printf("Alias '%s' ", unistr2_static(&a->uni_als_name)); + d_printf("desc='%s' rid=%u\n", unistr2_static(&a->uni_als_desc), a->als_rid); +} + +static void display_alias_mem(uint32 rid, SAM_ALIAS_MEM_INFO *a) +{ + int i; + d_printf("Alias rid %u: ", rid); + for (i=0;inum_sids;i++) { + d_printf("%s ", sid_string_static(&a->sids[i].sid)); + } + d_printf("\n"); +} + +static void display_account_info(uint32 rid, SAM_ACCOUNT_INFO *a) +{ + fstring hex_nt_passwd, hex_lm_passwd; + uchar lm_passwd[16], nt_passwd[16]; + + /* Decode hashes from password hash */ + sam_pwd_hash(a->user_rid, a->pass.buf_lm_pwd, lm_passwd, 0); + sam_pwd_hash(a->user_rid, a->pass.buf_nt_pwd, nt_passwd, 0); + + /* Encode as strings */ + smbpasswd_sethexpwd(hex_lm_passwd, lm_passwd, a->acb_info); + smbpasswd_sethexpwd(hex_nt_passwd, nt_passwd, a->acb_info); + + printf("%s:%d:%s:%s:%s:LCT-0\n", unistr2_static(&a->uni_acct_name), + a->user_rid, hex_lm_passwd, hex_nt_passwd, + smbpasswd_encode_acb_info(a->acb_info)); +} + +static void display_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta) +{ + switch (hdr_delta->type) { + case SAM_DELTA_ACCOUNT_INFO: + display_account_info(hdr_delta->target_rid, &delta->account_info); + break; + case SAM_DELTA_GROUP_MEM: + display_group_mem_info(hdr_delta->target_rid, &delta->grp_mem_info); + break; + case SAM_DELTA_ALIAS_INFO: + display_alias_info(hdr_delta->target_rid, &delta->alias_info); + break; + case SAM_DELTA_ALIAS_MEM: + display_alias_mem(hdr_delta->target_rid, &delta->als_mem_info); + break; + default: + d_printf("Unknown delta record type %d\n", hdr_delta->type); + break; + } +} + +/* dump sam database via samsync rpc calls */ +int rpc_samdump(int argc, const char **argv) +{ + TALLOC_CTX *mem_ctx = NULL; + SAM_DELTA_HDR *hdr_deltas; + SAM_DELTA_CTR *deltas; + uint32 num_deltas; + NTSTATUS result; + int i; + unsigned last_rid=0; + DOM_CRED ret_creds; + struct cli_state *cli = NULL; + uchar trust_password[16]; + + /* Connect to remote machine */ + if (!(cli = net_make_ipc_connection(NET_FLAGS_ANONYMOUS | NET_FLAGS_PDC))) { + return 1; + } + + if (!cli_nt_session_open(cli, PIPE_NETLOGON)) { + DEBUG(0,("Error connecting to NETLOGON pipe\n")); + goto fail; + } + + if (!secrets_fetch_trust_account_password(lp_workgroup(), trust_password, NULL)) { + d_printf("Could not retrieve domain trust secret"); + goto fail; + } + + result = cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_password); + if (!NT_STATUS_IS_OK(result)) { + d_printf("Failed to setup BDC creds\n"); + goto fail; + } + + if (!(mem_ctx = talloc_init())) { + DEBUG(0,("talloc_init failed\n")); + goto fail; + } + + /* on first call the returnAuthenticator is empty */ + memset(&ret_creds, 0, sizeof(ret_creds)); + + /* Do sam synchronisation on the SAM database*/ + do { + result = cli_netlogon_sam_sync(cli, mem_ctx, &ret_creds, SAM_DATABASE_DOMAIN, last_rid+1, + &num_deltas, &hdr_deltas, &deltas); + clnt_deal_with_creds(cli->sess_key, &(cli->clnt_cred), &ret_creds); + last_rid = 0; + for (i = 0; i < num_deltas; i++) { + display_sam_entry(&hdr_deltas[i], &deltas[i]); + last_rid = hdr_deltas[i].target_rid; + if (last_rid == 0) { + break; + } + } + } while (last_rid && NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)); + + cli_nt_session_close(cli); + talloc_destroy(mem_ctx); + + return 0; + +fail: + if (cli) { + cli_nt_session_close(cli); + } + if (mem_ctx) { + talloc_destroy(mem_ctx); + } + return -1; +} -- cgit From 84b4e79227c4e5ad7f03c3fbc289465fa913cb39 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 22 Aug 2002 22:50:57 +0000 Subject: a few minor cleanups in the cldap request (This used to be commit 228fc518da0404fe770175d5277fe5f5b08f9c67) --- source3/utils/net_ads_cldap.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/source3/utils/net_ads_cldap.c b/source3/utils/net_ads_cldap.c index 1bf96fc5d5..6821a5902e 100644 --- a/source3/utils/net_ads_cldap.c +++ b/source3/utils/net_ads_cldap.c @@ -45,7 +45,7 @@ static unsigned pull_len_string(char **ret, const char *p) unsigned len = *p; (*ret) = NULL; if (len == 0) return 1; - (*ret) = strndup(p+1, len); + (*ret) = smb_xstrndup(p+1, len); return len+1; } @@ -156,8 +156,9 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) blob = data_blob(NULL, 8192); ret = read(sock, blob.data, blob.length); + if (ret <= 0) { - d_printf("no reply to cldap netlogon\n"); + d_printf("no reply received to cldap netlogon\n"); return -1; } blob.length = ret; @@ -180,6 +181,11 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) asn1_end_tag(&data); asn1_end_tag(&data); + if (data.has_error) { + d_printf("Failed to parse cldap reply\n"); + return -1; + } + file_save("cldap_reply_core.dat", os3.data, os3.length); p = os3.data; @@ -207,6 +213,18 @@ static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply) } +/* + free a cldap reply packet +*/ +static void cldap_reply_free(struct cldap_netlogon_reply *reply) +{ + SAFE_FREE(reply->domain); + SAFE_FREE(reply->server_name); + SAFE_FREE(reply->domain_flatname); + SAFE_FREE(reply->server_flatname); + SAFE_FREE(reply->dns_name); +} + /* do a cldap netlogon query */ @@ -233,6 +251,10 @@ int ads_cldap_netlogon(ADS_STRUCT *ads) ret = recv_cldap_netlogon(sock, &reply); close(sock); + if (ret == -1) { + return -1; + } + d_printf("Version: 0x%x\n", reply.version); d_printf("GUID: "); print_guid(&reply.guid); @@ -242,6 +264,8 @@ int ads_cldap_netlogon(ADS_STRUCT *ads) d_printf("Flatname: %s\n", reply.domain_flatname); d_printf("Server Name2: %s\n", reply.server_flatname); d_printf("DNS Name: %s\n", reply.dns_name); + + cldap_reply_free(&reply); return ret; } -- cgit From 0bc1feb2d60e1584c4ab41d50c8c0890a0cac00f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 22 Aug 2002 22:51:28 +0000 Subject: made the CAP_UNIX test a bit cleaner (This used to be commit 8c8b0dd381f357bdd204fd6b5d50b78765e93090) --- source3/smbd/negprot.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source3/smbd/negprot.c b/source3/smbd/negprot.c index 58d0158c38..0e306cdab0 100644 --- a/source3/smbd/negprot.c +++ b/source3/smbd/negprot.c @@ -239,7 +239,11 @@ static int reply_nt1(char *inbuf, char *outbuf) capabilities |= CAP_EXTENDED_SECURITY; } - capabilities |= CAP_NT_SMBS|CAP_RPC_REMOTE_APIS|(lp_unix_extensions() ? CAP_UNIX : 0); + capabilities |= CAP_NT_SMBS|CAP_RPC_REMOTE_APIS; + + if (lp_unix_extensions()) { + capabilities |= CAP_UNIX; + } if (lp_large_readwrite() && (SMB_OFF_T_BITS == 64)) capabilities |= CAP_LARGE_READX|CAP_LARGE_WRITEX|CAP_W2K_SMBS; -- cgit From 8e089e8770722d218c76881e3de2138433e3504c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 22 Aug 2002 22:52:16 +0000 Subject: don't use spnego in the client unless enabled in smb.conf (This used to be commit c00388de6cf5d0527505bfe4edfe2f0269c5a4c8) --- source3/libsmb/clientgen.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index c9500ead5d..9ae3882301 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -234,7 +234,9 @@ struct cli_state *cli_initialise(struct cli_state *cli) cli->outbuf = (char *)malloc(cli->bufsize); cli->inbuf = (char *)malloc(cli->bufsize); cli->oplock_handler = cli_oplock_ack; - cli->use_spnego = True; + if (lp_use_spnego()) { + cli->use_spnego = True; + } /* Set the CLI_FORCE_DOSERR environment variable to test client routines using DOS errors instead of STATUS32 -- cgit From ba2fdbb4c841a917187b512b7021e9da287fe360 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 22 Aug 2002 22:53:00 +0000 Subject: a ASN.1 fix from anthony (This used to be commit 5ff687a839f805af56ae77cba94c466a0ff87ccc) --- source3/libsmb/asn1.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source3/libsmb/asn1.c b/source3/libsmb/asn1.c index 358c23c146..b7cfca41fb 100644 --- a/source3/libsmb/asn1.c +++ b/source3/libsmb/asn1.c @@ -373,6 +373,7 @@ BOOL asn1_read_GeneralString(ASN1_DATA *data, char **s) BOOL asn1_read_OctetString(ASN1_DATA *data, DATA_BLOB *blob) { int len; + ZERO_STRUCTP(blob); if (!asn1_start_tag(data, ASN1_OCTET_STRING)) return False; len = asn1_tag_remaining(data); *blob = data_blob(NULL, len); @@ -389,7 +390,8 @@ BOOL asn1_read_Integer(ASN1_DATA *data, int *i) if (!asn1_start_tag(data, ASN1_INTEGER)) return False; while (asn1_tag_remaining(data)>0) { - *i = (*i << 8) + asn1_read_uint8(data, &b); + asn1_read_uint8(data, &b); + *i = (*i << 8) + b; } return asn1_end_tag(data); -- cgit From 89586f0b7c256c39a72dfac798e1882c97b24838 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 22 Aug 2002 22:53:33 +0000 Subject: added smb_xstrndup() (This used to be commit 26fc20187d405702c50d1e7a38d3a94c84932bed) --- source3/lib/util.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source3/lib/util.c b/source3/lib/util.c index ae94b710b2..bf012b9721 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -1819,6 +1819,17 @@ char *smb_xstrdup(const char *s) return s1; } +/** + strndup that aborts on malloc fail. +**/ +char *smb_xstrndup(const char *s, size_t n) +{ + char *s1 = strndup(s, n); + if (!s1) + smb_panic("smb_xstrndup: malloc fail\n"); + return s1; +} + /* vasprintf that aborts on malloc fail */ -- cgit From e6de7c24a5d60f0481eef9695780890e360802f9 Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Thu, 22 Aug 2002 23:34:27 +0000 Subject: move where got_sig_term and reload_after_sighup are defined. populate cli structure with called name and calling name even for port 445 connects. (This used to be commit 123eee6206d9afb28c169540dc63824957b505f4) --- source3/libsmb/cliconnect.c | 18 +++++++++--------- source3/smbd/process.c | 4 ++-- source3/smbd/server.c | 6 ++---- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 73846c4d43..7db377c25f 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -938,15 +938,6 @@ BOOL cli_session_request(struct cli_state *cli, int len = 4; extern pstring user_socket_options; - /* 445 doesn't have session request */ - if (cli->port == 445) return True; - - if (cli->sign_info.use_smb_signing) { - DEBUG(0, ("Cannot send session resquest again, particularly after setting up SMB Signing\n")); - return False; - } - - /* send a session request (RFC 1002) */ memcpy(&(cli->calling), calling, sizeof(*calling)); memcpy(&(cli->called ), called , sizeof(*called )); @@ -960,6 +951,15 @@ BOOL cli_session_request(struct cli_state *cli, name_mangle(cli->calling.name, p, cli->calling.name_type); len += name_len(p); + /* 445 doesn't have session request */ + if (cli->port == 445) return True; + + if (cli->sign_info.use_smb_signing) { + DEBUG(0, ("Cannot send session resquest again, particularly after setting up SMB Signing\n")); + return False; + } + + /* send a session request (RFC 1002) */ /* setup the packet length * Remove four bytes from the length count, since the length * field in the NBT Session Service header counts the number diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 7c269b0134..f2b2a5c15a 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -42,8 +42,8 @@ extern int last_message; extern int global_oplock_break; extern userdom_struct current_user_info; extern int smb_read_error; -extern SIG_ATOMIC_T reload_after_sighup; -extern SIG_ATOMIC_T got_sig_term; +SIG_ATOMIC_T reload_after_sighup = 0; +SIG_ATOMIC_T got_sig_term = 0; extern BOOL global_machine_password_needs_changing; extern fstring global_myworkgroup; extern pstring global_myname; diff --git a/source3/smbd/server.c b/source3/smbd/server.c index b2b905cec3..c748a87da2 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -33,6 +33,8 @@ int last_message = -1; #define LAST_MESSAGE() smb_fn_name(last_message) extern pstring user_socket_options; +extern SIG_ATOMIC_T got_sig_term; +extern SIG_ATOMIC_T reload_after_sighup; #ifdef WITH_DFS extern int dcelogin_atmost_once; @@ -61,8 +63,6 @@ static void smbd_set_server_fd(int fd) Terminate signal. ****************************************************************************/ -SIG_ATOMIC_T got_sig_term = 0; - static void sig_term(void) { got_sig_term = 1; @@ -73,8 +73,6 @@ static void sig_term(void) Catch a sighup. ****************************************************************************/ -SIG_ATOMIC_T reload_after_sighup = 0; - static void sig_hup(int sig) { reload_after_sighup = 1; -- cgit From 266fd83651bb5b2446e136492b82c836a8be095b Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 22 Aug 2002 23:39:26 +0000 Subject: Added some new delta types discovered by Ronnie from ethereal" - SAM_DELTA_RENAME{USER,GROUP,ALIAS} - SAM_DELTA_DELETE{USER,GROUP} Renamed some of the unknown delta types and their unmarshalling functions: - SAM_DELTA_TRUST_DOMS - SAM_DELTA_SECRET_INFO (This used to be commit 1f29276c2ff450c4ca3705c27fb0be71ddcda4ad) --- source3/include/rpc_netlogon.h | 51 ++++++++++++++++++++++------------------ source3/rpc_parse/parse_net.c | 39 +++++++++++++++++------------- source3/rpcclient/cmd_netlogon.c | 7 +++--- source3/rpcclient/samsync.c | 4 ++-- 4 files changed, 56 insertions(+), 45 deletions(-) diff --git a/source3/include/rpc_netlogon.h b/source3/include/rpc_netlogon.h index 190199e048..5ee8120c68 100644 --- a/source3/include/rpc_netlogon.h +++ b/source3/include/rpc_netlogon.h @@ -45,17 +45,22 @@ #define SEC_CHAN_BDC 6 /* Returned delta types */ -#define SAM_DELTA_DOMAIN_INFO 0x01 /* Domain */ -#define SAM_DELTA_GROUP_INFO 0x02 /* Domain groups */ -#define SAM_DELTA_ACCOUNT_INFO 0x05 /* Users */ -#define SAM_DELTA_GROUP_MEM 0x08 /* Group membership */ -#define SAM_DELTA_ALIAS_INFO 0x09 /* Local groups */ -#define SAM_DELTA_ALIAS_MEM 0x0C /* Local group membership */ -#define SAM_DELTA_DOM_INFO 0x0D /* Privilege stuff */ -#define SAM_DELTA_UNK0E_INFO 0x0e /* Privilege stuff */ -#define SAM_DELTA_PRIVS_INFO 0x10 /* Privilege stuff */ -#define SAM_DELTA_UNK12_INFO 0x12 /* Privilege stuff */ -#define SAM_DELTA_SAM_STAMP 0x16 /* Some kind of journal record? */ +#define SAM_DELTA_DOMAIN_INFO 0x01 +#define SAM_DELTA_GROUP_INFO 0x02 +#define SAM_DELTA_RENAME_GROUP 0x04 +#define SAM_DELTA_ACCOUNT_INFO 0x05 +#define SAM_DELTA_RENAME_USER 0x07 +#define SAM_DELTA_GROUP_MEM 0x08 +#define SAM_DELTA_ALIAS_INFO 0x09 +#define SAM_DELTA_RENAME_ALIAS 0x0b +#define SAM_DELTA_ALIAS_MEM 0x0c +#define SAM_DELTA_POLICY_INFO 0x0d +#define SAM_DELTA_TRUST_DOMS 0x0e +#define SAM_DELTA_PRIVS_INFO 0x10 /* DT_DELTA_ACCOUNTS */ +#define SAM_DELTA_SECRET_INFO 0x12 +#define SAM_DELTA_DELETE_GROUP 0x14 +#define SAM_DELTA_DELETE_USER 0x15 +#define SAM_DELTA_MODIFIED_COUNT 0x16 /* SAM database types */ #define SAM_DATABASE_DOMAIN 0x00 /* Domain users and groups */ @@ -711,7 +716,7 @@ typedef struct sam_alias_mem_info_info } SAM_ALIAS_MEM_INFO; -/* SAM_DELTA_DOM (0x0D) */ +/* SAM_DELTA_POLICY (0x0D) */ typedef struct { uint32 unknown1; /* 0x5000 */ @@ -753,9 +758,9 @@ typedef struct UNISTR2 domain_name; DOM_SID2 domain_sid; -} SAM_DELTA_DOM; +} SAM_DELTA_POLICY; -/* SAM_DELTA_UNK0E (0x0e) */ +/* SAM_DELTA_TRUST_DOMS */ typedef struct { uint32 buf_size; @@ -773,7 +778,7 @@ typedef struct uint32 unknown3; UNISTR2 domain; -} SAM_DELTA_UNK0E; +} SAM_DELTA_TRUSTDOMS; /* SAM_DELTA_PRIVS (0x10) */ typedef struct @@ -812,7 +817,7 @@ typedef struct } SAM_DELTA_PRIVS; -/* SAM_DELTA_UNK12 (0x12) */ +/* SAM_DELTA_SECRET */ typedef struct { uint32 buf_size; @@ -846,15 +851,15 @@ typedef struct uint32 buf_size3; SEC_DESC *sec_desc2; -} SAM_DELTA_UNK12; +} SAM_DELTA_SECRET; -/* SAM_DELTA_STAMP (0x16) */ +/* SAM_DELTA_MOD_COUNT (0x16) */ typedef struct { uint32 seqnum; uint32 dom_mod_count_ptr; UINT64_S dom_mod_count; /* domain mod count at last sync */ -} SAM_DELTA_STAMP; +} SAM_DELTA_MOD_COUNT; typedef union sam_delta_ctr_info { @@ -864,11 +869,11 @@ typedef union sam_delta_ctr_info SAM_GROUP_MEM_INFO grp_mem_info; SAM_ALIAS_INFO alias_info ; SAM_ALIAS_MEM_INFO als_mem_info; - SAM_DELTA_DOM dom_info; + SAM_DELTA_POLICY policy_info; SAM_DELTA_PRIVS privs_info; - SAM_DELTA_STAMP stamp; - SAM_DELTA_UNK0E unk0e_info; - SAM_DELTA_UNK12 unk12_info; + SAM_DELTA_MOD_COUNT mod_count; + SAM_DELTA_TRUSTDOMS trustdoms_info; + SAM_DELTA_SECRET secret_info; } SAM_DELTA_CTR; /* NET_R_SAM_SYNC */ diff --git a/source3/rpc_parse/parse_net.c b/source3/rpc_parse/parse_net.c index 52cbc8e8df..ecab979ff2 100644 --- a/source3/rpc_parse/parse_net.c +++ b/source3/rpc_parse/parse_net.c @@ -1779,7 +1779,7 @@ static BOOL net_io_sam_delta_hdr(char *desc, SAM_DELTA_HDR * delta, /******************************************************************* reads or writes a structure. ********************************************************************/ -static BOOL net_io_sam_delta_stamp(char *desc, SAM_DELTA_STAMP *info, +static BOOL net_io_sam_delta_mod_count(char *desc, SAM_DELTA_MOD_COUNT *info, prs_struct *ps, int depth) { prs_debug(ps, depth, desc, "net_io_sam_delta_stamp"); @@ -2386,12 +2386,12 @@ static BOOL net_io_sam_alias_mem_info(char *desc, SAM_ALIAS_MEM_INFO * info, /******************************************************************* reads or writes a structure. ********************************************************************/ -static BOOL net_io_sam_dom_info(char *desc, SAM_DELTA_DOM *info, +static BOOL net_io_sam_policy_info(char *desc, SAM_DELTA_POLICY *info, prs_struct *ps, int depth) { int i; - prs_debug(ps, depth, desc, "net_io_sam_dom_info"); + prs_debug(ps, depth, desc, "net_io_sam_policy_info"); depth++; if(!prs_align(ps)) @@ -2476,12 +2476,12 @@ static BOOL net_io_sam_dom_info(char *desc, SAM_DELTA_DOM *info, /******************************************************************* reads or writes a structure. ********************************************************************/ -static BOOL net_io_sam_unk0e_info(char *desc, SAM_DELTA_UNK0E *info, +static BOOL net_io_sam_trustdoms_info(char *desc, SAM_DELTA_TRUSTDOMS *info, prs_struct *ps, int depth) { int i; - prs_debug(ps, depth, desc, "net_io_sam_unk0e_info"); + prs_debug(ps, depth, desc, "net_io_sam_trustdoms_info"); depth++; if(!prs_align(ps)) @@ -2524,12 +2524,12 @@ static BOOL net_io_sam_unk0e_info(char *desc, SAM_DELTA_UNK0E *info, /******************************************************************* reads or writes a structure. ********************************************************************/ -static BOOL net_io_sam_unk12_info(char *desc, SAM_DELTA_UNK12 *info, - prs_struct *ps, int depth) +static BOOL net_io_sam_secret_info(char *desc, SAM_DELTA_SECRET *info, + prs_struct *ps, int depth) { int i; - prs_debug(ps, depth, desc, "net_io_sam_unk12_info"); + prs_debug(ps, depth, desc, "net_io_sam_secret_info"); depth++; if(!prs_align(ps)) @@ -2707,8 +2707,8 @@ static BOOL net_io_sam_delta_ctr(char *desc, uint8 sess_key[16], switch (type) { /* Seen in sam deltas */ - case SAM_DELTA_SAM_STAMP: - if (!net_io_sam_delta_stamp("", &delta->stamp, ps, depth)) + case SAM_DELTA_MODIFIED_COUNT: + if (!net_io_sam_delta_mod_count("", &delta->mod_count, ps, depth)) return False; break; @@ -2737,8 +2737,8 @@ static BOOL net_io_sam_delta_ctr(char *desc, uint8 sess_key[16], return False; break; - case SAM_DELTA_DOM_INFO: - if (!net_io_sam_dom_info("", &delta->dom_info, ps, depth)) + case SAM_DELTA_POLICY_INFO: + if (!net_io_sam_policy_info("", &delta->policy_info, ps, depth)) return False; break; @@ -2752,16 +2752,23 @@ static BOOL net_io_sam_delta_ctr(char *desc, uint8 sess_key[16], return False; break; - case SAM_DELTA_UNK0E_INFO: - if (!net_io_sam_unk0e_info("", &delta->unk0e_info, ps, depth)) + case SAM_DELTA_TRUST_DOMS: + if (!net_io_sam_trustdoms_info("", &delta->trustdoms_info, ps, depth)) return False; break; - case SAM_DELTA_UNK12_INFO: - if (!net_io_sam_unk12_info("", &delta->unk12_info, ps, depth)) + case SAM_DELTA_SECRET_INFO: + if (!net_io_sam_secret_info("", &delta->secret_info, ps, depth)) return False; break; + /* These guys are not implemented yet */ + + case SAM_DELTA_RENAME_GROUP: + case SAM_DELTA_RENAME_USER: + case SAM_DELTA_RENAME_ALIAS: + case SAM_DELTA_DELETE_GROUP: + case SAM_DELTA_DELETE_USER: default: DEBUG(0, ("Replication error: Unknown delta type 0x%x\n", type)); break; diff --git a/source3/rpcclient/cmd_netlogon.c b/source3/rpcclient/cmd_netlogon.c index c3bc9e5e13..198787f22b 100644 --- a/source3/rpcclient/cmd_netlogon.c +++ b/source3/rpcclient/cmd_netlogon.c @@ -125,11 +125,10 @@ static void display_sam_sync(uint32 num_deltas, SAM_DELTA_HDR *hdr_deltas, group->rids[j], group->attribs[j]); break; } - case SAM_DELTA_SAM_STAMP: { - SAM_DELTA_STAMP *stamp = &deltas[i].stamp; + case SAM_DELTA_MODIFIED_COUNT: { + SAM_DELTA_MOD_COUNT *mc = &deltas[i].mod_count; - printf("sam sequence update: 0x%04x\n", - stamp->seqnum); + printf("sam sequence update: 0x%04x\n", mc->seqnum); break; } default: diff --git a/source3/rpcclient/samsync.c b/source3/rpcclient/samsync.c index a8344cd5e2..710614469e 100644 --- a/source3/rpcclient/samsync.c +++ b/source3/rpcclient/samsync.c @@ -217,8 +217,8 @@ static void decode_sam_deltas(uint32 num_deltas, SAM_DELTA_HDR *hdr_deltas, SAM_ decode_sam_als_mem_info(a); break; } - case SAM_DELTA_DOM_INFO: { - SAM_DELTA_DOM *a; + case SAM_DELTA_POLICY_INFO: { + SAM_DELTA_POLICY *a; a = &deltas[i].dom_info; decode_sam_dom_info(a); break; -- cgit From 6232468dcaadca90c1106c12a557c83b1dca0fc4 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 22 Aug 2002 23:44:36 +0000 Subject: Fix for change in cli_netlogon_sam_sync() (This used to be commit 6ec267618a7ba2c4a7170b78ccfe95120c5430c4) --- source3/rpcclient/cmd_netlogon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/rpcclient/cmd_netlogon.c b/source3/rpcclient/cmd_netlogon.c index 198787f22b..20fd069fbe 100644 --- a/source3/rpcclient/cmd_netlogon.c +++ b/source3/rpcclient/cmd_netlogon.c @@ -187,7 +187,7 @@ static NTSTATUS cmd_netlogon_sam_sync(struct cli_state *cli, /* Synchronise sam database */ result = cli_netlogon_sam_sync(cli, mem_ctx, &ret_creds, database_id, - &num_deltas, &hdr_deltas, &deltas); + 0, &num_deltas, &hdr_deltas, &deltas); if (!NT_STATUS_IS_OK(result)) goto done; -- cgit From 8462dbb933ec66f5756ee3a76152c32bacf746a4 Mon Sep 17 00:00:00 2001 From: Jean-Fran§ois Micouleau Date: Fri, 23 Aug 2002 05:12:06 +0000 Subject: some cleanup while working on the NETLOGON pipe. smb_io_chal() did a prs_align() but a challenge is an array of bytes. and all code calling smb_io_chal() played with the alignment to not align ! I'm confident in my change, but I would *really* like if jeremy could look at that. J.F. (This used to be commit 23501ea971f8cc0799515e0d51ad8619221a31e1) --- source3/rpc_parse/parse_misc.c | 3 --- source3/rpc_parse/parse_net.c | 41 ++++------------------------------------- 2 files changed, 4 insertions(+), 40 deletions(-) diff --git a/source3/rpc_parse/parse_misc.c b/source3/rpc_parse/parse_misc.c index 01d7698173..3dd9c3bc2a 100644 --- a/source3/rpc_parse/parse_misc.c +++ b/source3/rpc_parse/parse_misc.c @@ -1255,9 +1255,6 @@ BOOL smb_io_chal(char *desc, DOM_CHAL *chal, prs_struct *ps, int depth) prs_debug(ps, depth, desc, "smb_io_chal"); depth++; - - if(!prs_align(ps)) - return False; if(!prs_uint8s (False, "data", ps, depth, chal->data, 8)) return False; diff --git a/source3/rpc_parse/parse_net.c b/source3/rpc_parse/parse_net.c index ecab979ff2..f380862ea7 100644 --- a/source3/rpc_parse/parse_net.c +++ b/source3/rpc_parse/parse_net.c @@ -553,8 +553,6 @@ void init_q_req_chal(NET_Q_REQ_CHAL *q_c, BOOL net_io_q_req_chal(char *desc, NET_Q_REQ_CHAL *q_c, prs_struct *ps, int depth) { - int old_align; - if (q_c == NULL) return False; @@ -572,15 +570,8 @@ BOOL net_io_q_req_chal(char *desc, NET_Q_REQ_CHAL *q_c, prs_struct *ps, int dep if(!smb_io_unistr2("", &q_c->uni_logon_clnt, True, ps, depth)) /* logon client unicode string */ return False; - old_align = ps->align; - ps->align = 0; - /* client challenge is _not_ aligned after the unicode strings */ - if(!smb_io_chal("", &q_c->clnt_chal, ps, depth)) { - /* client challenge */ - ps->align = old_align; + if(!smb_io_chal("", &q_c->clnt_chal, ps, depth)) return False; - } - ps->align = old_align; return True; } @@ -616,7 +607,6 @@ BOOL net_io_r_req_chal(char *desc, NET_R_REQ_CHAL *r_c, prs_struct *ps, int dept BOOL net_io_q_auth(char *desc, NET_Q_AUTH *q_a, prs_struct *ps, int depth) { - int old_align; if (q_a == NULL) return False; @@ -628,15 +618,8 @@ BOOL net_io_q_auth(char *desc, NET_Q_AUTH *q_a, prs_struct *ps, int depth) if(!smb_io_log_info ("", &q_a->clnt_id, ps, depth)) /* client identification info */ return False; - /* client challenge is _not_ aligned */ - old_align = ps->align; - ps->align = 0; - if(!smb_io_chal("", &q_a->clnt_chal, ps, depth)) { - /* client-calculated credentials */ - ps->align = old_align; + if(!smb_io_chal("", &q_a->clnt_chal, ps, depth)) return False; - } - ps->align = old_align; return True; } @@ -688,7 +671,6 @@ void init_q_auth_2(NET_Q_AUTH_2 *q_a, BOOL net_io_q_auth_2(char *desc, NET_Q_AUTH_2 *q_a, prs_struct *ps, int depth) { - int old_align; if (q_a == NULL) return False; @@ -700,15 +682,8 @@ BOOL net_io_q_auth_2(char *desc, NET_Q_AUTH_2 *q_a, prs_struct *ps, int depth) if(!smb_io_log_info ("", &q_a->clnt_id, ps, depth)) /* client identification info */ return False; - /* client challenge is _not_ aligned */ - old_align = ps->align; - ps->align = 0; - if(!smb_io_chal("", &q_a->clnt_chal, ps, depth)) { - /* client-calculated credentials */ - ps->align = old_align; + if(!smb_io_chal("", &q_a->clnt_chal, ps, depth)) return False; - } - ps->align = old_align; if(!net_io_neg_flags("", &q_a->clnt_flgs, ps, depth)) return False; @@ -764,7 +739,6 @@ void init_q_auth_3(NET_Q_AUTH_3 *q_a, BOOL net_io_q_auth_3(char *desc, NET_Q_AUTH_3 *q_a, prs_struct *ps, int depth) { - int old_align; if (q_a == NULL) return False; @@ -776,15 +750,8 @@ BOOL net_io_q_auth_3(char *desc, NET_Q_AUTH_3 *q_a, prs_struct *ps, int depth) if(!smb_io_log_info ("", &q_a->clnt_id, ps, depth)) /* client identification info */ return False; - /* client challenge is _not_ aligned */ - old_align = ps->align; - ps->align = 0; - if(!smb_io_chal("", &q_a->clnt_chal, ps, depth)) { - /* client-calculated credentials */ - ps->align = old_align; + if(!smb_io_chal("", &q_a->clnt_chal, ps, depth)) return False; - } - ps->align = old_align; if(!net_io_neg_flags("", &q_a->clnt_flgs, ps, depth)) return False; -- cgit From f4806920562ae4db7096109754c8f9c83db52d62 Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Fri, 23 Aug 2002 10:58:44 +0000 Subject: sync with 2.2 branch (This used to be commit 52924c064dc649032619c52e5cc915ca74e3aa10) --- packaging/SGI/winbindd.rc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packaging/SGI/winbindd.rc b/packaging/SGI/winbindd.rc index c63944a04d..deb4708c66 100644 --- a/packaging/SGI/winbindd.rc +++ b/packaging/SGI/winbindd.rc @@ -1,7 +1,7 @@ #! /bin/sh # -# winbindd server control +# winbindd control # IS_ON=/etc/chkconfig @@ -21,7 +21,7 @@ fi case $1 in 'start') - if $IS_ON winbindd && test -x $WINBINDD; then + if $IS_ON winbind && test -x $WINBINDD; then $KILLALL -15 winbindd $ECHO "winbindd:\c" $WINBINDD ; $ECHO " winbindd." @@ -33,6 +33,6 @@ case $1 in exit 0 ;; *) - echo "usage: /etc/init.d/winbindd {start|stop}" + echo "usage: /etc/init.d/winbind {start|stop}" ;; esac -- cgit From 548203a0c42727d7ff3fc339968fdd448180bcae Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 23 Aug 2002 12:31:36 +0000 Subject: We need to return the value here... Andrew Bartlett (This used to be commit 8fbc964f2f40de80851cf89f7bed0ddc5d01b074) --- source3/lib/system_smbd.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source3/lib/system_smbd.c b/source3/lib/system_smbd.c index 28ceaf3939..580ef8a463 100644 --- a/source3/lib/system_smbd.c +++ b/source3/lib/system_smbd.c @@ -101,5 +101,6 @@ int sys_getgrouplist(const char *user, gid_t gid, gid_t *groups, int *grpcnt) become_root(); retval = getgrouplist_internals(user, gid, groups, grpcnt); unbecome_root(); + return retval; #endif } -- cgit From d58445d6cc6921fd8fa2049b0c50d32b6d961c1d Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Fri, 23 Aug 2002 12:43:46 +0000 Subject: remove samsync and spamsync (This used to be commit 34a7efd1f8fc5d5fda7cafe50cb6fd7c4aac32ab) --- source3/Makefile.in | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 788859a353..24ec132fd4 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -346,13 +346,6 @@ RPCCLIENT_OBJ = $(RPCCLIENT_OBJ1) \ $(READLINE_OBJ) $(GROUPDB_OBJ) \ $(LIBADS_OBJ) $(SECRETS_OBJ) -SAMSYNC_OBJ1 = rpcclient/samsync.o rpcclient/display_sec.o - -SAMSYNC_OBJ = $(SAMSYNC_OBJ1) \ - $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ - $(RPC_PARSE_OBJ) $(PASSDB_OBJ) $(LIBMSRPC_OBJ) \ - $(GROUPDB_OBJ) $(SECRETS_OBJ) - PAM_WINBIND_OBJ = nsswitch/pam_winbind.po nsswitch/wb_common.po lib/snprintf.po SMBW_OBJ1 = smbwrapper/smbw.o \ @@ -540,7 +533,7 @@ nsswitch : SHOWFLAGS $(WINBIND_PROGS) $(WINBIND_SPROGS) $(LPROGS) wins : SHOWFLAGS nsswitch/libnss_wins.so -everything: all libsmbclient debug2html smbfilter talloctort bin/samsync bin/make_printerdef +everything: all libsmbclient debug2html smbfilter talloctort bin/make_printerdef .SUFFIXES: .SUFFIXES: .c .o .po .po32 .lo @@ -629,10 +622,6 @@ bin/rpcclient: $(RPCCLIENT_OBJ) @BUILD_POPT@ bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(RPCCLIENT_OBJ) $(LDFLAGS) $(DYNEXP) $(TERMLDFLAGS) $(TERMLIBS) $(LIBS) @BUILD_POPT@ -bin/samsync: $(SAMSYNC_OBJ) bin/.dummy - @echo Linking $@ - @$(CC) $(FLAGS) -o $@ $(SAMSYNC_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) @BUILD_POPT@ - bin/smbclient: $(CLIENT_OBJ) bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(CLIENT_OBJ) $(LDFLAGS) $(TERMLDFLAGS) $(TERMLIBS) $(LIBS) @@ -812,10 +801,6 @@ bin/pam_smbpass.@SHLIBEXT@: $(PAM_SMBPASS_PICOOBJ) bin/libmsrpc.a: $(LIBMSRPC_PICOBJ) -$(AR) -rc $@ $(LIBMSRPC_PICOBJ) -bin/spamsync: rpcclient/samsync.o bin/libmsrpc.a - @$(LINK) -o $@ rpcclient/samsync.o bin/libmsrpc.a \ - $(UBIQX_OBJ) $(LIBS) - bin/tdbbackup: $(TDBBACKUP_OBJ) bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(TDBBACKUP_OBJ) -- cgit From 53fabdee019699d39648fadafa0963ecb04ba3aa Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 23 Aug 2002 13:23:49 +0000 Subject: Don't take the sizeof(struct in_addr) * -1 (This used to be commit e13016bb42dbba675d6e7ee7e163543aad2e62c2) --- source3/libsmb/namecache.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c index f05f76a22b..d985832613 100644 --- a/source3/libsmb/namecache.c +++ b/source3/libsmb/namecache.c @@ -93,8 +93,10 @@ static TDB_DATA namecache_value(struct in_addr *ip_list, int num_names, struct nc_value *value; int size; - size = sizeof(struct nc_value) + sizeof(struct in_addr) * - (num_names-1); + size = sizeof(struct nc_value); + + if (num_names > 0) + size += sizeof(struct in_addr) * (num_names-1); value = (struct nc_value *)malloc(size); -- cgit From 55315b4b4e0f25ab9d77228219b8a4f8ceee6b29 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 23 Aug 2002 13:38:00 +0000 Subject: Moved calculation of secure channel type into a new function. (This used to be commit b8dba26978c281259e02b9d6ebacaa7cba4f7787) --- source3/libsmb/trust_passwd.c | 3 +-- source3/nsswitch/winbindd_cm.c | 7 +++---- source3/rpc_client/cli_netlogon.c | 18 ++++++++++++++++++ source3/rpcclient/cmd_netlogon.c | 9 +++------ 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/source3/libsmb/trust_passwd.c b/source3/libsmb/trust_passwd.c index fe6b673e39..d500cb3ab7 100644 --- a/source3/libsmb/trust_passwd.c +++ b/source3/libsmb/trust_passwd.c @@ -35,8 +35,7 @@ static NTSTATUS just_change_the_password(struct cli_state *cli, TALLOC_CTX *mem_ unsigned char new_trust_passwd_hash[16]) { NTSTATUS result; - result = cli_nt_setup_creds(cli, (lp_server_role() == ROLE_DOMAIN_MEMBER) ? - SEC_CHAN_WKSTA : SEC_CHAN_BDC, orig_trust_passwd_hash); + result = cli_nt_setup_creds(cli, get_sec_chan(), orig_trust_passwd_hash); if (!NT_STATUS_IS_OK(result)) { DEBUG(1,("just_change_the_password: unable to setup creds (%s)!\n", diff --git a/source3/nsswitch/winbindd_cm.c b/source3/nsswitch/winbindd_cm.c index 2dec9f0558..ddab850cf0 100644 --- a/source3/nsswitch/winbindd_cm.c +++ b/source3/nsswitch/winbindd_cm.c @@ -870,8 +870,7 @@ NTSTATUS cm_get_netlogon_cli(char *domain, unsigned char *trust_passwd, return result; } - result = cli_nt_setup_creds(conn->cli, (lp_server_role() == ROLE_DOMAIN_MEMBER) ? - SEC_CHAN_WKSTA : SEC_CHAN_BDC, trust_passwd); + result = cli_nt_setup_creds(conn->cli, get_sec_chan(), trust_passwd); if (!NT_STATUS_IS_OK(result)) { DEBUG(0, ("error connecting to domain password server: %s\n", @@ -884,8 +883,8 @@ NTSTATUS cm_get_netlogon_cli(char *domain, unsigned char *trust_passwd, } /* Try again */ - result = cli_nt_setup_creds(conn->cli, (lp_server_role() == ROLE_DOMAIN_MEMBER) ? - SEC_CHAN_WKSTA : SEC_CHAN_BDC, trust_passwd); + result = cli_nt_setup_creds( + conn->cli, get_sec_chan(),trust_passwd); } if (!NT_STATUS_IS_OK(result)) { diff --git a/source3/rpc_client/cli_netlogon.c b/source3/rpc_client/cli_netlogon.c index 60048d189d..58ba32eb2e 100644 --- a/source3/rpc_client/cli_netlogon.c +++ b/source3/rpc_client/cli_netlogon.c @@ -152,6 +152,24 @@ password ?).\n", cli->desthost )); return result; } +/* Return the secure channel type depending on the server role. */ + +uint16 get_sec_chan(void) +{ + uint16 sec_chan = SEC_CHAN_WKSTA; + + switch (lp_server_role()) { + case ROLE_DOMAIN_PDC: + sec_chan = SEC_CHAN_DOMAIN; + break; + case ROLE_DOMAIN_BDC: + sec_chan = SEC_CHAN_BDC; + break; + } + + return sec_chan; +} + /* Initialize domain session credentials */ NTSTATUS cli_nt_setup_creds(struct cli_state *cli, diff --git a/source3/rpcclient/cmd_netlogon.c b/source3/rpcclient/cmd_netlogon.c index 20fd069fbe..ffff1dab04 100644 --- a/source3/rpcclient/cmd_netlogon.c +++ b/source3/rpcclient/cmd_netlogon.c @@ -173,8 +173,7 @@ static NTSTATUS cmd_netlogon_sam_sync(struct cli_state *cli, goto done; } - result = cli_nt_setup_creds(cli, (lp_server_role() == ROLE_DOMAIN_MEMBER) ? - SEC_CHAN_WKSTA : SEC_CHAN_BDC, trust_passwd); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); @@ -237,8 +236,7 @@ static NTSTATUS cmd_netlogon_sam_deltas(struct cli_state *cli, goto done; } - result = cli_nt_setup_creds(cli, (lp_server_role() == ROLE_DOMAIN_MEMBER) ? - SEC_CHAN_WKSTA : SEC_CHAN_BDC, trust_passwd); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); @@ -300,8 +298,7 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, goto done; } - result = cli_nt_setup_creds(cli, (lp_server_role() == ROLE_DOMAIN_MEMBER) ? - SEC_CHAN_WKSTA : SEC_CHAN_BDC, trust_passwd); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); -- cgit From f38fc7b3b1ded90c2562bdfc9aaa7a026ec1e56a Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 23 Aug 2002 15:01:07 +0000 Subject: We never checked if the smb packet len is != 0 Should fix a supposed DoS too. (This used to be commit f76e5b2677beb161c2f9c0d3dd78e707655e942f) --- source3/lib/util_sock.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/lib/util_sock.c b/source3/lib/util_sock.c index 56ef4a6ab1..03c780f8bf 100644 --- a/source3/lib/util_sock.c +++ b/source3/lib/util_sock.c @@ -585,8 +585,8 @@ BOOL receive_smb(int fd,char *buffer, unsigned int timeout) memset(buffer,'\0',smb_size + 100); len = read_smb_length_return_keepalive(fd,buffer,timeout); - if (len < 0) { - DEBUG(10,("receive_smb: length < 0!\n")); + if (len < 0 || len == 0) { + DEBUG(10,("receive_smb: length < 0 or == 0!\n")); /* * Correct fix. smb_read_error may have already been -- cgit From 6bca45020764ac36eee77518bc3727aaf5ebc268 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 23 Aug 2002 15:01:08 +0000 Subject: Cope with negative cache dns entries better. (This used to be commit 3404023260a5d6fed5523eb378d4a1ad418302a0) --- source3/libsmb/namecache.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c index d985832613..31341df86e 100644 --- a/source3/libsmb/namecache.c +++ b/source3/libsmb/namecache.c @@ -91,19 +91,20 @@ static TDB_DATA namecache_value(struct in_addr *ip_list, int num_names, { TDB_DATA retval; struct nc_value *value; - int size; - - size = sizeof(struct nc_value); + int size = sizeof(struct nc_value); if (num_names > 0) size += sizeof(struct in_addr) * (num_names-1); value = (struct nc_value *)malloc(size); - + + memset(value, 0, size); + value->expiry = expiry; value->count = num_names; - memcpy(value->ip_list, ip_list, sizeof(*ip_list)); + if (ip_list) + memcpy(value->ip_list, ip_list, sizeof(*ip_list)); retval.dptr = (char *)value; retval.dsize = size; -- cgit From d5dd9dcc3f2f7ca9c6ccbb0b2d193b165b3c0c76 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 23 Aug 2002 15:29:44 +0000 Subject: Test for non-POSIX st_blksize field. Jeremy. (This used to be commit d406d08e3e1aa2266a472f98cff7dd0ff311a33c) --- source3/acconfig.h | 2 +- source3/configure | 272 +++++++++++++++++++++++++++++---------------------- source3/configure.in | 10 ++ 3 files changed, 165 insertions(+), 119 deletions(-) diff --git a/source3/acconfig.h b/source3/acconfig.h index 274bc4aaad..64fbe1d719 100644 --- a/source3/acconfig.h +++ b/source3/acconfig.h @@ -186,6 +186,7 @@ #undef HAVE_LDAP #undef HAVE_STAT_ST_BLOCKS #undef STAT_ST_BLOCKSIZE +#undef HAVE_STAT_ST_BLKSIZE #undef HAVE_DEVICE_MAJOR_FN #undef HAVE_DEVICE_MINOR_FN #undef HAVE_PASSWD_PW_COMMENT @@ -220,4 +221,3 @@ #endif #undef LDAP_SET_REBIND_PROC_ARGS - diff --git a/source3/configure b/source3/configure index cec3161ccc..4d9145c783 100755 --- a/source3/configure +++ b/source3/configure @@ -11774,16 +11774,52 @@ EOF fi +echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 +echo "configure:11779: checking for st_blksize in struct stat" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +cat > conftest.$ac_ext < +#include +#include +int main() { +struct stat st; st.st_blksize = 0; +; return 0; } +EOF +if { (eval echo configure:11794: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + samba_cv_HAVE_STAT_ST_BLKSIZE=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_STAT_ST_BLKSIZE=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_STAT_ST_BLKSIZE" 1>&6 +if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_STAT_ST_BLKSIZE 1 +EOF + +fi + case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11781: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11817: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11820,13 +11856,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11824: checking for broken nisplus include files" >&5 +echo "configure:11860: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11836,7 +11872,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11876: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11860,7 +11896,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11864: checking whether to use smbwrapper" >&5 +echo "configure:11900: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11907,7 +11943,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11911: checking whether to use AFS clear-text auth" >&5 +echo "configure:11947: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -11933,7 +11969,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11937: checking whether to use DFS clear-text auth" >&5 +echo "configure:11973: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -11959,7 +11995,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:11963: checking for /usr/kerberos" >&5 +echo "configure:11999: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -11972,7 +12008,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:11976: checking for kerberos 5 install path" >&5 +echo "configure:12012: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12001,17 +12037,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12005: checking for $ac_hdr" >&5 +echo "configure:12041: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12015: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12051: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12044,17 +12080,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12048: checking for $ac_hdr" >&5 +echo "configure:12084: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12058: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12084,7 +12120,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12088: checking for _et_list in -lcom_err" >&5 +echo "configure:12124: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12092,7 +12128,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12124,7 +12160,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12128: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12164: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12132,7 +12168,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12168,7 +12204,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12172: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12208: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12176,7 +12212,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12215,7 +12251,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12219: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12255: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12223,7 +12259,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12263,7 +12299,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12267: checking for ber_scanf in -llber" >&5 +echo "configure:12303: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12271,7 +12307,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12307,7 +12343,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12311: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12347: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12315,7 +12351,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12357,12 +12393,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12361: checking for $ac_func" >&5 +echo "configure:12397: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12425: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12410,13 +12446,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12414: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12450: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12425,7 +12461,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12429: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12447,7 +12483,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12451: checking whether to use AUTOMOUNT" >&5 +echo "configure:12487: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12472,7 +12508,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12476: checking whether to use SMBMOUNT" >&5 +echo "configure:12512: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12509,7 +12545,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12513: checking whether to use PAM" >&5 +echo "configure:12549: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12535,7 +12571,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12539: checking for pam_get_data in -lpam" >&5 +echo "configure:12575: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12543,7 +12579,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12581,7 +12617,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12585: checking whether to use pam_smbpass" >&5 +echo "configure:12621: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12619,12 +12655,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12623: checking for $ac_func" >&5 +echo "configure:12659: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12673,7 +12709,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12677: checking for crypt in -lcrypt" >&5 +echo "configure:12713: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12681,7 +12717,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12727,7 +12763,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12731: checking for a crypt that needs truncated salt" >&5 +echo "configure:12767: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12736,11 +12772,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12774,7 +12810,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12778: checking whether to use TDB SAM database" >&5 +echo "configure:12814: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12799,7 +12835,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12803: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12839: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12830,7 +12866,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12834: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12870: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12855,7 +12891,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12859: checking whether to use syslog logging" >&5 +echo "configure:12895: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12880,7 +12916,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12884: checking whether to use profiling" >&5 +echo "configure:12920: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -12908,7 +12944,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:12912: checking whether to support disk-quotas" >&5 +echo "configure:12948: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -12919,13 +12955,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:12923: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:12959: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -12937,7 +12973,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:12941: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -12986,7 +13022,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:12990: checking whether to support utmp accounting" >&5 +echo "configure:13026: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13011,7 +13047,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13015: checking chosen man pages' language(s)" >&5 +echo "configure:13051: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13042,7 +13078,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13046: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13082: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13070,14 +13106,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13074: checking how to get filesystem space usage" >&5 +echo "configure:13110: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13081: checking statvfs64 function (SVR4)" >&5 +echo "configure:13117: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13085,7 +13121,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13132,12 +13168,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13136: checking statvfs function (SVR4)" >&5 +echo "configure:13172: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13145,7 +13181,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13170,7 +13206,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13174: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13210: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13178,7 +13214,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13191,7 +13227,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13195: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13218,7 +13254,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13222: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13258: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13226,7 +13262,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13272,7 +13308,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13276: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13312: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13280,7 +13316,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13290,7 +13326,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13317,7 +13353,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13321: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13357: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13325,7 +13361,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13341,7 +13377,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13368,7 +13404,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13372: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13408: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13376,7 +13412,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13396,7 +13432,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13429,9 +13465,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13433: checking if large file support can be enabled" >&5 +echo "configure:13469: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13484: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13509,7 +13545,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13513: checking whether to support ACLs" >&5 +echo "configure:13549: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13562,7 +13598,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13566: checking for acl_get_file in -lacl" >&5 +echo "configure:13602: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13570,7 +13606,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13609,13 +13645,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13613: checking for ACL support" >&5 +echo "configure:13649: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13623,7 +13659,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13643,13 +13679,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13647: checking for acl_get_perm_np" >&5 +echo "configure:13683: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13657,7 +13693,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13704,7 +13740,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13708: checking whether to build winbind" >&5 +echo "configure:13744: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13800,20 +13836,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13804: checking whether struct passwd has pw_comment" >&5 +echo "configure:13840: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13817: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13838,20 +13874,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13842: checking whether struct passwd has pw_age" >&5 +echo "configure:13878: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13855: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13891: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13890,7 +13926,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:13894: checking for poptGetContext in -lpopt" >&5 +echo "configure:13930: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13898,7 +13934,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13933,7 +13969,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:13937: checking whether to use included popt" >&5 +echo "configure:13973: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -13956,16 +13992,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:13960: checking configure summary" >&5 +echo "configure:13996: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source3/configure.in b/source3/configure.in index e907697d25..be1064fb4e 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -1820,6 +1820,16 @@ if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then AC_DEFINE(HAVE_STAT_ST_BLOCKS) fi +AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[ +AC_TRY_COMPILE([#include +#include +#include ], +[struct stat st; st.st_blksize = 0;], +samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)]) +if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then + AC_DEFINE(HAVE_STAT_ST_BLKSIZE) +fi + case "$host_os" in *linux*) AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[ -- cgit From 9c31d189875c3d95e46df6210d70c48f202e3c4a Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 23 Aug 2002 15:51:28 +0000 Subject: Merged initial allocation code for IFSTEST fix. Jeremy. (This used to be commit 095e2bf9469a4c26814fb049f2870983c090ed81) --- source3/include/config.h.in | 1 + source3/include/smb.h | 1 + source3/include/smb_macros.h | 3 +-- source3/smbd/nttrans.c | 40 ++++++++++++++++++++++++++++++++++--- source3/smbd/trans2.c | 47 ++++++++++++++++++++++++-------------------- 5 files changed, 66 insertions(+), 26 deletions(-) diff --git a/source3/include/config.h.in b/source3/include/config.h.in index 4a138b6db6..8c06e25396 100644 --- a/source3/include/config.h.in +++ b/source3/include/config.h.in @@ -252,6 +252,7 @@ #undef HAVE_LDAP #undef HAVE_STAT_ST_BLOCKS #undef STAT_ST_BLOCKSIZE +#undef HAVE_STAT_ST_BLKSIZE #undef HAVE_DEVICE_MAJOR_FN #undef HAVE_DEVICE_MINOR_FN #undef HAVE_PASSWD_PW_COMMENT diff --git a/source3/include/smb.h b/source3/include/smb.h index 9101e947a7..958a563642 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -391,6 +391,7 @@ typedef struct files_struct BOOL delete_on_close; SMB_OFF_T pos; SMB_OFF_T size; + SMB_OFF_T initial_allocation_size; /* Faked up initial allocation on disk. */ mode_t mode; uint16 vuid; write_bmpx_struct *wbmpx_ptr; diff --git a/source3/include/smb_macros.h b/source3/include/smb_macros.h index a2351c705e..ccf151fab2 100644 --- a/source3/include/smb_macros.h +++ b/source3/include/smb_macros.h @@ -165,8 +165,7 @@ /* this is how errors are generated */ #define UNIXERROR(defclass,deferror) unix_error_packet(outbuf,defclass,deferror,__LINE__,__FILE__) -#define SMB_ROUNDUP(x,g) (((x)+((g)-1))&~((g)-1)) -#define SMB_ROUNDUP_ALLOCATION(s) ((s) ? (SMB_ROUNDUP((SMB_OFF_T)((s)+1), ((SMB_OFF_T)SMB_ROUNDUP_ALLOCATION_SIZE))) : 0 ) +#define SMB_ROUNDUP(x,r) ( ((x)%(r)) ? ( (((x)+(r))/(r))*(r) ) : (x)) /* Extra macros added by Ying Chen at IBM - speed increase by inlining. */ #define smb_buf(buf) (((char *)(buf)) + smb_size + CVAL(buf,smb_wct)*2) diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c index 722a7ff8bf..ff35771644 100644 --- a/source3/smbd/nttrans.c +++ b/source3/smbd/nttrans.c @@ -548,6 +548,7 @@ int reply_ntcreate_and_X(connection_struct *conn, uint32 create_disposition = IVAL(inbuf,smb_ntcreate_CreateDisposition); uint32 create_options = IVAL(inbuf,smb_ntcreate_CreateOptions); uint16 root_dir_fid = (uint16)IVAL(inbuf,smb_ntcreate_RootDirectoryFid); + SMB_OFF_T allocation_size = 0; int smb_ofun; int smb_open_mode; int smb_attr = (file_attributes & SAMBA_ATTRIBUTES_MASK); @@ -571,7 +572,7 @@ int reply_ntcreate_and_X(connection_struct *conn, file_attributes = 0x%x, share_access = 0x%x, create_disposition = 0x%x \ create_options = 0x%x root_dir_fid = 0x%x\n", flags, desired_access, file_attributes, share_access, create_disposition, - root_dir_fid, create_options )); + create_options, root_dir_fid )); /* If it's an IPC, use the pipe handler. */ @@ -805,6 +806,22 @@ create_options = 0x%x root_dir_fid = 0x%x\n", flags, desired_access, file_attrib return ERROR_DOS(ERRDOS,ERRnoaccess); } + /* Save the requested allocation size. */ + allocation_size = IVAL(inbuf,smb_ntcreate_AllocationSize); +#ifdef LARGE_SMB_OFF_T + allocation_size |= (((SMB_OFF_T)IVAL(inbuf,smb_ntcreate_AllocationSize + 4)) << 32); +#endif + if (allocation_size && (allocation_size > file_len)) { + fsp->initial_allocation_size = SMB_ROUNDUP(allocation_size,SMB_ROUNDUP_ALLOCATION_SIZE); + if (vfs_allocate_file_space(fsp, fsp->initial_allocation_size) == -1) { + close_file(fsp,False); + END_PROFILE(SMBntcreateX); + return ERROR_NT(NT_STATUS_DISK_FULL); + } + } else { + fsp->initial_allocation_size = SMB_ROUNDUP(file_len,SMB_ROUNDUP_ALLOCATION_SIZE); + } + /* * If the caller set the extended oplock request bit * and we granted one (by whatever means) - set the @@ -869,7 +886,7 @@ create_options = 0x%x root_dir_fid = 0x%x\n", flags, desired_access, file_attrib p += 8; SIVAL(p,0,fmode); /* File Attributes. */ p += 4; - SOFF_T(p, 0, get_allocation_size(&sbuf)); + SOFF_T(p, 0, get_allocation_size(fsp,&sbuf)); p += 8; SOFF_T(p,0,file_len); p += 12; @@ -1045,6 +1062,7 @@ static int call_nt_transact_create(connection_struct *conn, uint32 create_options; uint32 sd_len; uint16 root_dir_fid; + SMB_OFF_T allocation_size = 0; int smb_ofun; int smb_open_mode; int smb_attr; @@ -1282,6 +1300,22 @@ static int call_nt_transact_create(connection_struct *conn, restore_case_semantics(file_attributes); + /* Save the requested allocation size. */ + allocation_size = IVAL(params,12); +#ifdef LARGE_SMB_OFF_T + allocation_size |= (((SMB_OFF_T)IVAL(params,16)) << 32); +#endif + if (allocation_size && (allocation_size > file_len)) { + fsp->initial_allocation_size = SMB_ROUNDUP(allocation_size,SMB_ROUNDUP_ALLOCATION_SIZE); + if (vfs_allocate_file_space(fsp, fsp->initial_allocation_size) == -1) { + close_file(fsp,False); + END_PROFILE(SMBntcreateX); + return ERROR_NT(NT_STATUS_DISK_FULL); + } + } else { + fsp->initial_allocation_size = SMB_ROUNDUP(file_len,SMB_ROUNDUP_ALLOCATION_SIZE); + } + /* Realloc the size of parameters and data we will return */ params = Realloc(*ppparams, 69); if(params == NULL) @@ -1325,7 +1359,7 @@ static int call_nt_transact_create(connection_struct *conn, p += 8; SIVAL(p,0,fmode); /* File Attributes. */ p += 4; - SOFF_T(p, 0, get_allocation_size(&sbuf)); + SOFF_T(p, 0, get_allocation_size(fsp,&sbuf)); p += 8; SOFF_T(p,0,file_len); diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 91e76012e6..8def7c0250 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -30,19 +30,26 @@ extern int global_oplock_break; extern uint32 global_client_caps; extern pstring global_myname; +#define get_file_size(sbuf) (sbuf.st_size) + /* given a stat buffer return the allocated size on disk, taking into account sparse files */ -SMB_OFF_T get_allocation_size(SMB_STRUCT_STAT *sbuf) +SMB_OFF_T get_allocation_size(files_struct *fsp, SMB_STRUCT_STAT *sbuf) { SMB_OFF_T ret; +#if defined(HAVE_STAT_ST_BLKSIZE) && defined(HAVE_STAT_ST_BLOCKS) ret = sbuf->st_blksize * (SMB_OFF_T)sbuf->st_blocks; - ret = SMB_ROUNDUP_ALLOCATION(ret); +#elif defined(HAVE_STAT_ST_BLOCKS) && defined(STAT_ST_BLOCKSIZE) + ret = (SMB_OFF_T)STAT_ST_BLOCKSIZE * (SMB_OFF_T)sbuf->st_blocks; +#else + ret = get_file_size(*sbuf); +#endif + if (!ret && fsp && fsp->initial_allocation_size) + ret = fsp->initial_allocation_size; + ret = SMB_ROUNDUP(ret,SMB_ROUNDUP_ALLOCATION_SIZE); return ret; } -#define get_file_size(sbuf) (sbuf.st_size) - - /**************************************************************************** Send the required number of replies back. We assume all fields other than the data fields are @@ -579,7 +586,7 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn, } file_size = get_file_size(sbuf); - allocation_size = get_allocation_size(&sbuf); + allocation_size = get_allocation_size(NULL,&sbuf); mdate = sbuf.st_mtime; adate = sbuf.st_atime; cdate = get_create_time(&sbuf,lp_fake_dir_create_times(SNUM(conn))); @@ -756,12 +763,7 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn, SOFF_T(p,0,get_file_size(sbuf)); /* File size 64 Bit */ p+= 8; -#if defined(HAVE_STAT_ST_BLOCKS) && defined(STAT_ST_BLOCKSIZE) - SOFF_T(p,0,sbuf.st_blocks*STAT_ST_BLOCKSIZE); /* Number of bytes used on disk - 64 Bit */ -#else - /* Can't get the value - fake it using size. */ - SOFF_T(p,0,get_file_size(sbuf)); /* Number of bytes used on disk - 64 Bit */ -#endif + SOFF_T(p,0,get_allocation_size(NULL,&sbuf)); /* Number of bytes used on disk - 64 Bit */ p+= 8; put_long_date(p,sbuf.st_ctime); /* Creation Time 64 Bit */ @@ -1559,12 +1561,16 @@ static int call_trans2qfilepathinfo(connection_struct *conn, BOOL delete_pending = False; int len; time_t c_time; + files_struct *fsp = NULL; if (!params) return ERROR_NT(NT_STATUS_INVALID_PARAMETER); if (tran_call == TRANSACT2_QFILEINFO) { - files_struct *fsp = file_fsp(params,0); + if (total_params < 4) + return(ERROR_DOS(ERRDOS,ERRinvalidparam)); + + fsp = file_fsp(params,0); info_level = SVAL(params,2); DEBUG(3,("call_trans2qfilepathinfo: TRANSACT2_QFILEINFO: level = %d\n", info_level)); @@ -1662,7 +1668,7 @@ static int call_trans2qfilepathinfo(connection_struct *conn, mode = dos_mode(conn,fname,&sbuf); fullpathname = fname; file_size = get_file_size(sbuf); - allocation_size = get_allocation_size(&sbuf); + allocation_size = get_allocation_size(fsp,&sbuf); if (mode & aDIR) file_size = 0; @@ -1982,12 +1988,7 @@ static int call_trans2qfilepathinfo(connection_struct *conn, SOFF_T(pdata,0,get_file_size(sbuf)); /* File size 64 Bit */ pdata += 8; -#if defined(HAVE_STAT_ST_BLOCKS) && defined(STAT_ST_BLOCKSIZE) - SOFF_T(pdata,0,sbuf.st_blocks*STAT_ST_BLOCKSIZE); /* Number of bytes used on disk - 64 Bit */ -#else - /* Can't get the value - fake it using size. */ - SOFF_T(pdata,0,get_file_size(sbuf)); /* Number of bytes used on disk - 64 Bit */ -#endif + SOFF_T(pdata,0,get_allocation_size(fsp,&sbuf)); /* Number of bytes used on disk - 64 Bit */ pdata += 8; put_long_date(pdata,sbuf.st_ctime); /* Creation Time 64 Bit */ @@ -2422,11 +2423,12 @@ static int call_trans2setfilepathinfo(connection_struct *conn, case SMB_SET_FILE_ALLOCATION_INFO: { int ret = -1; - SMB_OFF_T allocation_size = IVAL(pdata,0); + SMB_OFF_T allocation_size; if (total_data < 8) return(ERROR_DOS(ERRDOS,ERRinvalidparam)); + allocation_size = IVAL(pdata,0); #ifdef LARGE_SMB_OFF_T allocation_size |= (((SMB_OFF_T)IVAL(pdata,4)) << 32); #else /* LARGE_SMB_OFF_T */ @@ -2436,6 +2438,9 @@ static int call_trans2setfilepathinfo(connection_struct *conn, DEBUG(10,("call_trans2setfilepathinfo: Set file allocation info for file %s to %.0f\n", fname, (double)allocation_size )); + if (allocation_size) + allocation_size = SMB_ROUNDUP(allocation_size,SMB_ROUNDUP_ALLOCATION_SIZE); + if(allocation_size != get_file_size(sbuf)) { SMB_STRUCT_STAT new_sbuf; -- cgit From 9cf3c89ed68e51e9dd08e8975e97361bfbfb5f33 Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Fri, 23 Aug 2002 17:01:02 +0000 Subject: Removed samsync (This used to be commit 644a45d493712c12e6318d13f7dd6ef1be5e6b1a) --- packaging/Caldera/OpenLinux/samba3.spec.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/Caldera/OpenLinux/samba3.spec.tmpl b/packaging/Caldera/OpenLinux/samba3.spec.tmpl index 701dd35073..7d7da04336 100644 --- a/packaging/Caldera/OpenLinux/samba3.spec.tmpl +++ b/packaging/Caldera/OpenLinux/samba3.spec.tmpl @@ -296,7 +296,7 @@ do install -m 755 source/bin/$i $DESTDIR/usr/bin done # Next install /usr/sbin progs -for i in talloctort samsync locktest locktest2 masktest msgtest smbtorture +for i in talloctort locktest locktest2 masktest msgtest smbtorture do install -m 755 source/bin/$i $DESTDIR/usr/sbin done -- cgit From 699fcb65fc17cd74adb6ac9a108b894b224965b8 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sat, 24 Aug 2002 01:33:25 +0000 Subject: do not expose special files, only files, directories and links (and we should really check if a link points to a special file and deny access imho), expose no fifo, socket, devices ... (This used to be commit 59954113348cfb2061fa6bd7dfe7545f614e2891) --- source3/smbd/dir.c | 100 ++++++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 51 deletions(-) diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c index 1a18476b75..31bbe0dec2 100644 --- a/source3/smbd/dir.c +++ b/source3/smbd/dir.c @@ -671,10 +671,9 @@ it is used as part of the "hide unreadable" option. Don't use it for anything security sensitive ********************************************************************/ -static BOOL user_can_read_file(connection_struct *conn, char *name) +static BOOL user_can_read_file(connection_struct *conn, SMB_STRUCT_STAT *ste, char *name) { extern struct current_user current_user; - SMB_STRUCT_STAT ste; SEC_DESC *psd = NULL; size_t sd_size; files_struct *fsp; @@ -683,8 +682,6 @@ static BOOL user_can_read_file(connection_struct *conn, char *name) NTSTATUS status; uint32 access_granted; - ZERO_STRUCT(ste); - /* * If user is a member of the Admin group * we never hide files from them. @@ -693,17 +690,13 @@ static BOOL user_can_read_file(connection_struct *conn, char *name) if (conn->admin_user) return True; - /* If we can't stat it does not show it */ - if (vfs_stat(conn, name, &ste) != 0) - return False; - /* Pseudo-open the file (note - no fd's created). */ - if(S_ISDIR(ste.st_mode)) - fsp = open_directory(conn, name, &ste, 0, SET_DENY_MODE(DENY_NONE), (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), + if(S_ISDIR(ste->st_mode)) + fsp = open_directory(conn, name, ste, 0, SET_DENY_MODE(DENY_NONE), (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), unix_mode(conn,aRONLY|aDIR, name), &smb_action); else - fsp = open_file_shared1(conn, name, &ste, FILE_READ_ATTRIBUTES, SET_DENY_MODE(DENY_NONE), + fsp = open_file_shared1(conn, name, ste, FILE_READ_ATTRIBUTES, SET_DENY_MODE(DENY_NONE), (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), 0, 0, &access_mode, &smb_action); if (!fsp) @@ -728,10 +721,9 @@ it is used as part of the "hide unwriteable" option. Don't use it for anything security sensitive ********************************************************************/ -static BOOL user_can_write_file(connection_struct *conn, char *name) +static BOOL user_can_write_file(connection_struct *conn, SMB_STRUCT_STAT *ste, char *name) { extern struct current_user current_user; - SMB_STRUCT_STAT ste; SEC_DESC *psd = NULL; size_t sd_size; files_struct *fsp; @@ -740,26 +732,12 @@ static BOOL user_can_write_file(connection_struct *conn, char *name) NTSTATUS status; uint32 access_granted; - ZERO_STRUCT(ste); - - /* - * If user is a member of the Admin group - * we never hide files from them. - */ - - if (conn->admin_user) - return True; - - /* If we can't stat it does not show it */ - if (vfs_stat(conn, name, &ste) != 0) - return False; - /* Pseudo-open the file (note - no fd's created). */ - if(S_ISDIR(ste.st_mode)) + if(S_ISDIR(ste->st_mode)) return True; else - fsp = open_file_shared1(conn, name, &ste, FILE_WRITE_ATTRIBUTES, SET_DENY_MODE(DENY_NONE), + fsp = open_file_shared1(conn, name, ste, FILE_WRITE_ATTRIBUTES, SET_DENY_MODE(DENY_NONE), (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), 0, 0, &access_mode, &smb_action); if (!fsp) @@ -785,6 +763,7 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto) { Dir *dirp; char *n; + SMB_STRUCT_STAT ste; DIR *p = conn->vfs_ops.opendir(conn,name); int used=0; @@ -820,34 +799,53 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto) l = strlen(n)+1; - /* If it's a vetoed file, pretend it doesn't even exist */ - if (normal_entry && use_veto && conn && IS_VETO_PATH(conn, n)) - continue; + /* + * If user is a member of the Admin group + * we never hide files from them. + */ + + if (!conn->admin_user && normal_entry && conn) { + + /* If it's a vetoed file, pretend it doesn't even exist */ + if (use_veto && IS_VETO_PATH(conn, n)) + continue; + + ZERO_STRUCT(ste); - /* Honour _hide unreadable_ option */ - if (normal_entry && conn && lp_hideunreadable(SNUM(conn))) { - char *entry; - int ret=0; + /* If we can't stat it does not show it */ + if (vfs_stat(conn, n, &ste) != 0) + continue; + + /* If it is a special file, do not show it! */ + /* FIXME: maybe we should put an option to unhide special files?? --simo */ + if (!S_ISREG(ste.st_mode) && !S_ISDIR(ste.st_mode) && !S_ISLNK(ste.st_mode)) + continue; + + /* Honour _hide unreadable_ option */ + if (lp_hideunreadable(SNUM(conn))) { + char *entry; + int ret=0; - if (asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) { - ret = user_can_read_file(conn, entry); - SAFE_FREE(entry); + if (asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) { + ret = user_can_read_file(conn, &ste, entry); + SAFE_FREE(entry); + } + if (!ret) + continue; } - if (!ret) - continue; - } - /* Honour _hide unwriteable_ option */ - if (normal_entry && conn && lp_hideunwriteable_files(SNUM(conn))) { - char *entry; - int ret=0; + /* Honour _hide unwriteable_ option */ + if (normal_entry && conn && lp_hideunwriteable_files(SNUM(conn))) { + char *entry; + int ret=0; - if (asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) { - ret = user_can_write_file(conn, entry); - SAFE_FREE(entry); + if (asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) { + ret = user_can_write_file(conn, &ste, entry); + SAFE_FREE(entry); + } + if (!ret) + continue; } - if (!ret) - continue; } if (used + l > dirp->mallocsize) { -- cgit From bf6cd377165046c3003d7243cb45c65a897cc9f7 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sat, 24 Aug 2002 02:06:17 +0000 Subject: if muhammad does not go to the mountain ... (This used to be commit 5246d3693c463e581a7cd40f86878e40456237c3) --- source3/torture/vfstest.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index b76c289c17..3c67fa4633 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -36,6 +36,8 @@ static struct cmd_list { TALLOC_CTX *global_ctx; extern pstring user_socket_options; +extern SIG_ATOMIC_T got_sig_term; +extern SIG_ATOMIC_T reload_after_sighup; /**************************************************************************** handle completion of commands for readline -- cgit From 0fb1bfaeeadfd0af3282e6e9bbabbcf8186276ff Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sat, 24 Aug 2002 17:06:07 +0000 Subject: Your car depreciates in value, while obsolete parameters are deprecated. (This used to be commit c95e53a1dda579cabbe2fb5059f2a1bde33ccf0c) --- docs/htmldocs/printer_driver2.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/htmldocs/printer_driver2.html b/docs/htmldocs/printer_driver2.html index b3dbc9f9fc..b94d0fbbfd 100644 --- a/docs/htmldocs/printer_driver2.html +++ b/docs/htmldocs/printer_driver2.html @@ -165,7 +165,7 @@ CLASS="PARAMETER" >printer driver file parameter, are being depreciated and should not +> parameter, are being deprecated and should not be used in new installations. For more information on this change, you should refer to the \ No newline at end of file +> -- cgit From 4a366ae4bf57e71b908a860e6842e595ca61c0f5 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sat, 24 Aug 2002 17:24:03 +0000 Subject: Some more minor doco fixes ... (This used to be commit b02e8aa4cb302689fa54cc6de9d2f1e5e23bb560) --- docs/htmldocs/printer_driver2.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/htmldocs/printer_driver2.html b/docs/htmldocs/printer_driver2.html index b94d0fbbfd..5b2111a5b4 100644 --- a/docs/htmldocs/printer_driver2.html +++ b/docs/htmldocs/printer_driver2.html @@ -447,7 +447,7 @@ NAME="AEN88" >One issue that has arisen during the development phase of Samba 2.2 is the need to support driver downloads for 100's of printers. Using the Windows NT APW is somewhat -awkward to say the list. If more than one printer are using the +awkward to say the least. If more than one printer is using the same driver, the can be used to set the driver -associated with an installed driver. The following is example +associated with an installed driver. The following is an example of how this could be accomplished:

smb.conf
-in the "Printers..." folder.  Also existing in this folder is the Windows NT 
+in the "Printers..." folder.  Also in this folder is the Windows NT 
 Add Printer Wizard icon.  The APW will be show only if

add printer command and reparse to the and reparse the smb.conf @@ -594,7 +594,7 @@ CLASS="PARAMETER" > is executed under the context of the connected user, not necessarily a root account.

There is a complementing There is a complementary Windows NT/2000 print servers associate a port with each printer. These normally take the form of LPT1:, COM1:, FILE:, etc... Samba must also support the concept of ports associated with a printer. By default, only one printer port, -named "Samba Printer Port", exists on a system. Samba does not really a port in +named "Samba Printer Port", exists on a system. Samba does not really need a port in order to print, rather it is a requirement of Windows clients.

Note that Samba does not support the concept of "Printer Pooling" internally -- cgit From 46f0426c28b7a33b4537a60ad2527a24f25acd51 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sat, 24 Aug 2002 17:26:08 +0000 Subject: Another speling fix (This used to be commit c904fa4abd7b79057ef9369aacaa368cdc177c32) --- docs/htmldocs/printer_driver2.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/htmldocs/printer_driver2.html b/docs/htmldocs/printer_driver2.html index 5b2111a5b4..5a6e6586da 100644 --- a/docs/htmldocs/printer_driver2.html +++ b/docs/htmldocs/printer_driver2.html @@ -978,7 +978,7 @@ CLASS="PARAMETER" >use client driver). Both of -these options are described in the smb.coinf(5) man page and are +these options are described in the smb.conf(5) man page and are disabled by default.

Date: Sun, 25 Aug 2002 21:36:45 +0000 Subject: Fix from kai to correctly decode ntlmssp flags. Andrew Bartlett (This used to be commit 2e74473551f0fce0384eacd31bc1a53ff3967464) --- source3/libsmb/clispnego.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/libsmb/clispnego.c b/source3/libsmb/clispnego.c index 16702c375b..bc4d0ca348 100644 --- a/source3/libsmb/clispnego.c +++ b/source3/libsmb/clispnego.c @@ -696,7 +696,7 @@ void debug_ntlmssp_flags(uint32 neg_flags) DEBUG(4, (" NTLMSSP_REQUEST_TARGET\n")); if (neg_flags & NTLMSSP_NEGOTIATE_SIGN) DEBUG(4, (" NTLMSSP_NEGOTIATE_SIGN\n")); - if (neg_flags & NTLMSSP_NEGOTIATE_SIGN) + if (neg_flags & NTLMSSP_NEGOTIATE_SEAL) DEBUG(4, (" NTLMSSP_NEGOTIATE_SEAL\n")); if (neg_flags & NTLMSSP_NEGOTIATE_LM_KEY) DEBUG(4, (" NTLMSSP_NEGOTIATE_LM_KEY\n")); -- cgit From b97a387c0ff29bcafacc8109069e1c2f3cce7c1b Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 25 Aug 2002 21:46:49 +0000 Subject: Patch from mimir to back out idra's attempted DOS mitigation patch. (It broke port 139 name exchange) I've been thinking about this, and doing is properly is actually rather difficult - but I'll try and get somthing in there. (My worry is what smb_read_error should be set to, and how that interacts with the rest of samba). Andrew Bartlett (This used to be commit 3e682867bbb13dae265cb9a8acea8b7cc87d82a6) --- source3/lib/util_sock.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/lib/util_sock.c b/source3/lib/util_sock.c index 03c780f8bf..56ef4a6ab1 100644 --- a/source3/lib/util_sock.c +++ b/source3/lib/util_sock.c @@ -585,8 +585,8 @@ BOOL receive_smb(int fd,char *buffer, unsigned int timeout) memset(buffer,'\0',smb_size + 100); len = read_smb_length_return_keepalive(fd,buffer,timeout); - if (len < 0 || len == 0) { - DEBUG(10,("receive_smb: length < 0 or == 0!\n")); + if (len < 0) { + DEBUG(10,("receive_smb: length < 0!\n")); /* * Correct fix. smb_read_error may have already been -- cgit From 6b9de4f69f6d4f2cb7f28228c70e72837cc745ac Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 25 Aug 2002 22:23:46 +0000 Subject: Use a function that actually exists for the keepalive send. Andrew Bartlett (This used to be commit 82e7212bbbeefce873291c2fdb3b04ae1e6c26d6) --- source3/libsmb/libsmbclient.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/libsmb/libsmbclient.c b/source3/libsmb/libsmbclient.c index fa27f54340..3897851167 100644 --- a/source3/libsmb/libsmbclient.c +++ b/source3/libsmb/libsmbclient.c @@ -211,7 +211,7 @@ static int smbc_errno(SMBCCTX *context, struct cli_state *c) */ int smbc_check_server(SMBCCTX * context, SMBCSRV * server) { - if ( cli_send_keepalive(&server->cli) == False ) + if ( send_keepalive(server->cli.fd) == False ) return 1; /* connection is ok */ -- cgit From 066c5ae97fd62109d9e0a5ae417753a1585e14d0 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 25 Aug 2002 22:43:20 +0000 Subject: Steve Langasek has again attempted to simplify Samba's external lib dependencies - let's hope this patch stays around for longer than the previous attempt. Andrew Bartlett (This used to be commit d0c0e9f427400c24f5cc38c67b7a927f9d937375) --- source3/Makefile.in | 7 +- source3/configure | 1614 +++++++++++++++++++++++++------------------------- source3/configure.in | 3 +- 3 files changed, 814 insertions(+), 810 deletions(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 24ec132fd4..7b958d03c5 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -21,6 +21,7 @@ DYNEXP=@DYNEXP@ TERMLDFLAGS=@TERMLDFLAGS@ TERMLIBS=@TERMLIBS@ +PRINTLIBS=@PRINTLIBS@ LINK=$(CC) $(FLAGS) $(LDFLAGS) @@ -604,7 +605,7 @@ bin/.dummy: bin/smbd: $(SMBD_OBJ) bin/.dummy @echo Linking $@ - @$(CC) $(FLAGS) -o $@ $(SMBD_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) + @$(CC) $(FLAGS) -o $@ $(SMBD_OBJ) $(LDFLAGS) $(DYNEXP) $(PRINTLIBS) $(LIBS) bin/nmbd: $(NMBD_OBJ) bin/.dummy @echo Linking $@ @@ -616,7 +617,7 @@ bin/wrepld: $(WREPL_OBJ) bin/.dummy bin/swat: $(SWAT_OBJ) bin/.dummy @echo Linking $@ - @$(CC) $(FLAGS) -o $@ $(SWAT_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) + @$(CC) $(FLAGS) -o $@ $(SWAT_OBJ) $(LDFLAGS) $(DYNEXP) $(PRINTLIBS) $(LIBS) bin/rpcclient: $(RPCCLIENT_OBJ) @BUILD_POPT@ bin/.dummy @echo Linking $@ @@ -652,7 +653,7 @@ bin/testparm: $(TESTPARM_OBJ) bin/.dummy bin/testprns: $(TESTPRNS_OBJ) bin/.dummy @echo Linking $@ - @$(CC) $(FLAGS) -o $@ $(TESTPRNS_OBJ) $(LDFLAGS) $(LIBS) + @$(CC) $(FLAGS) -o $@ $(TESTPRNS_OBJ) $(LDFLAGS) $(PRINTLIBS) $(LIBS) bin/smbstatus: $(STATUS_OBJ) @BUILD_POPT@ bin/.dummy @echo Linking $@ diff --git a/source3/configure b/source3/configure index 4d9145c783..f95f30e393 100755 --- a/source3/configure +++ b/source3/configure @@ -758,6 +758,7 @@ fi + # compile with optimization and without debugging by default @@ -813,7 +814,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:817: checking for $ac_word" >&5 +echo "configure:818: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -843,7 +844,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:847: checking for $ac_word" >&5 +echo "configure:848: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -894,7 +895,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:898: checking for $ac_word" >&5 +echo "configure:899: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -926,7 +927,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:930: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:931: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -937,12 +938,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 941 "configure" +#line 942 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -968,12 +969,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:972: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:973: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:977: checking whether we are using GNU C" >&5 +echo "configure:978: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -982,7 +983,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:986: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:987: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1001,7 +1002,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1005: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1006: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1063,7 +1064,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1067: checking for a BSD compatible install" >&5 +echo "configure:1068: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1120,7 +1121,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1124: checking for $ac_word" >&5 +echo "configure:1125: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1152,7 +1153,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1156: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1157: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1168,7 +1169,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1172: checking for POSIXized ISC" >&5 +echo "configure:1173: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1191,10 +1192,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1195: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1196: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1198: checking whether cc understands -c and -o together" >&5 +echo "configure:1199: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1206,16 +1207,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1212: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1218: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1249,20 +1250,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1253: checking that the C compiler understands volatile" >&5 +echo "configure:1254: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1267: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1311,7 +1312,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1315: checking host system type" >&5 +echo "configure:1316: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1332,7 +1333,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1336: checking target system type" >&5 +echo "configure:1337: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1350,7 +1351,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1354: checking build system type" >&5 +echo "configure:1355: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1384,7 +1385,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1388: checking config.cache system type" >&5 +echo "configure:1389: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1412,7 +1413,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1416: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1417: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1573,14 +1574,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1577: checking for LFS support" >&5 +echo "configure:1578: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1592,7 +1593,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1623,14 +1624,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1627: checking for LFS support" >&5 +echo "configure:1628: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1668,7 +1669,7 @@ main() { } EOF -if { (eval echo configure:1672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1701,14 +1702,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1705: checking for LFS support" >&5 +echo "configure:1706: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1720,7 +1721,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1750,21 +1751,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1754: checking for inline" >&5 +echo "configure:1755: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1790,7 +1791,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1794: checking how to run the C preprocessor" >&5 +echo "configure:1795: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1805,13 +1806,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1815: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1816: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1822,13 +1823,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1839,13 +1840,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1849: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1850: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1870,12 +1871,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1874: checking for ANSI C header files" >&5 +echo "configure:1875: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1883,7 +1884,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1887: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1900,7 +1901,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1918,7 +1919,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1939,7 +1940,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1950,7 +1951,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1978,12 +1979,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1982: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1983: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1991,7 +1992,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:1995: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2016,7 +2017,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2020: checking for opendir in -ldir" >&5 +echo "configure:2021: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2024,7 +2025,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2040: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2057,7 +2058,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2061: checking for opendir in -lx" >&5 +echo "configure:2062: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2065,7 +2066,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2099,12 +2100,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2103: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2104: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2113,7 +2114,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2134,12 +2135,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2138: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2139: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2155,7 +2156,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2159: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2179,17 +2180,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2183: checking for $ac_hdr" >&5 +echo "configure:2184: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2193: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2194: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2219,17 +2220,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2223: checking for $ac_hdr" >&5 +echo "configure:2224: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2233: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2259,17 +2260,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2263: checking for $ac_hdr" >&5 +echo "configure:2264: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2273: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2274: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2299,17 +2300,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2303: checking for $ac_hdr" >&5 +echo "configure:2304: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2313: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2339,17 +2340,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2343: checking for $ac_hdr" >&5 +echo "configure:2344: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2353: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2354: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2379,17 +2380,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2383: checking for $ac_hdr" >&5 +echo "configure:2384: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2393: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2394: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2419,17 +2420,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2423: checking for $ac_hdr" >&5 +echo "configure:2424: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2433: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2459,17 +2460,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2463: checking for $ac_hdr" >&5 +echo "configure:2464: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2473: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2474: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2503,14 +2504,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2532,17 +2533,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2536: checking for $ac_hdr" >&5 +echo "configure:2537: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2546: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2547: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2572,17 +2573,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2576: checking for $ac_hdr" >&5 +echo "configure:2577: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2586: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2587: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2612,17 +2613,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2616: checking for $ac_hdr" >&5 +echo "configure:2617: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2626: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2652,17 +2653,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2656: checking for $ac_hdr" >&5 +echo "configure:2657: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2666: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2667: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2692,17 +2693,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2696: checking for $ac_hdr" >&5 +echo "configure:2697: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2706: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2707: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2734,17 +2735,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2738: checking for $ac_hdr" >&5 +echo "configure:2739: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2748: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2776,17 +2777,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2780: checking for $ac_hdr" >&5 +echo "configure:2781: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2790: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2818,17 +2819,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2822: checking for $ac_hdr" >&5 +echo "configure:2823: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2856,7 +2857,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2860: checking size of int" >&5 +echo "configure:2861: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2864,7 +2865,7 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < int main() @@ -2875,7 +2876,7 @@ int main() return(0); } EOF -if { (eval echo configure:2879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2895,7 +2896,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2899: checking size of long" >&5 +echo "configure:2900: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2903,7 +2904,7 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < int main() @@ -2914,7 +2915,7 @@ int main() return(0); } EOF -if { (eval echo configure:2918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2934,7 +2935,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2938: checking size of short" >&5 +echo "configure:2939: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2942,7 +2943,7 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < int main() @@ -2953,7 +2954,7 @@ int main() return(0); } EOF -if { (eval echo configure:2957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -2974,12 +2975,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:2978: checking for working const" >&5 +echo "configure:2979: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3033: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3049,21 +3050,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3053: checking for inline" >&5 +echo "configure:3054: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3068: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3089,14 +3090,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3093: checking whether byte ordering is bigendian" >&5 +echo "configure:3094: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3107,11 +3108,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3111: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3122,7 +3123,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3127: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3142,7 +3143,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3179,14 +3180,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3183: checking whether char is unsigned" >&5 +echo "configure:3184: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3243,12 +3244,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3247: checking return type of signal handlers" >&5 +echo "configure:3248: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3265,7 +3266,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3270: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3284,12 +3285,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3288: checking for uid_t in sys/types.h" >&5 +echo "configure:3289: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3318,12 +3319,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3322: checking for mode_t" >&5 +echo "configure:3323: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3351,12 +3352,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3355: checking for off_t" >&5 +echo "configure:3356: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3384,12 +3385,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3388: checking for size_t" >&5 +echo "configure:3389: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3417,12 +3418,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3421: checking for pid_t" >&5 +echo "configure:3422: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3450,12 +3451,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3454: checking for st_rdev in struct stat" >&5 +echo "configure:3455: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3463,7 +3464,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3467: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3468: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3484,12 +3485,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3488: checking for d_off in dirent" >&5 +echo "configure:3489: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3499,7 +3500,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3520,12 +3521,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3524: checking for ino_t" >&5 +echo "configure:3525: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3553,12 +3554,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3557: checking for loff_t" >&5 +echo "configure:3558: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3586,12 +3587,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3590: checking for offset_t" >&5 +echo "configure:3591: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3619,12 +3620,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3623: checking for ssize_t" >&5 +echo "configure:3624: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3652,12 +3653,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3656: checking for wchar_t" >&5 +echo "configure:3657: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3699,7 +3700,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3703: checking for $ac_word" >&5 +echo "configure:3704: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3739,7 +3740,7 @@ EOF CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`" LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`" - LIBS="$LIBS `$CUPS_CONFIG --libs`" + PRINTLIBS="$PRINTLIBS `$CUPS_CONFIG --libs`" fi fi @@ -3748,12 +3749,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3752: checking for $ac_func" >&5 +echo "configure:3753: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3802,7 +3803,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3806: checking for dlopen in -ldl" >&5 +echo "configure:3807: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3810,7 +3811,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3851,13 +3852,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3855: checking for immediate structures" >&5 +echo "configure:3856: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3875,7 +3876,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3898,13 +3899,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3902: checking for unix domain sockets" >&5 +echo "configure:3903: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3919,7 +3920,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3941,13 +3942,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3945: checking for socklen_t type" >&5 +echo "configure:3946: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3960,7 +3961,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:3964: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3965: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -3981,13 +3982,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:3985: checking for sig_atomic_t type" >&5 +echo "configure:3986: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4000,7 +4001,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4004: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4005: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4023,20 +4024,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4027: checking for errno declaration" >&5 +echo "configure:4028: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4040: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4041: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4058,20 +4059,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4062: checking for setresuid declaration" >&5 +echo "configure:4063: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4076: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4093,20 +4094,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4097: checking for setresgid declaration" >&5 +echo "configure:4098: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4110: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4111: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4128,20 +4129,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4132: checking for asprintf declaration" >&5 +echo "configure:4133: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4145: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4146: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4163,20 +4164,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4167: checking for vasprintf declaration" >&5 +echo "configure:4168: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4180: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4181: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4198,20 +4199,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4202: checking for vsnprintf declaration" >&5 +echo "configure:4203: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4215: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4233,20 +4234,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4237: checking for snprintf declaration" >&5 +echo "configure:4238: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4250: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4251: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4270,7 +4271,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4274: checking for real setresuid" >&5 +echo "configure:4275: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4279,12 +4280,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4309,7 +4310,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4313: checking for real setresgid" >&5 +echo "configure:4314: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4318,13 +4319,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4347,7 +4348,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4351: checking for 8-bit clean memcmp" >&5 +echo "configure:4352: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4355,7 +4356,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4388,12 +4389,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4392: checking for $ac_func" >&5 +echo "configure:4393: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4442,7 +4443,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4446: checking for crypt in -lcrypt" >&5 +echo "configure:4447: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4450,7 +4451,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4494,7 +4495,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4498: checking whether to use readline" >&5 +echo "configure:4499: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4506,17 +4507,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4510: checking for $ac_hdr" >&5 +echo "configure:4511: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4521: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4546,17 +4547,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4550: checking for $ac_hdr" >&5 +echo "configure:4551: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4560: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4561: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4587,17 +4588,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4591: checking for $ac_hdr" >&5 +echo "configure:4592: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4601: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4602: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4620,7 +4621,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4624: checking for tgetent in -l${termlib}" >&5 +echo "configure:4625: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4628,7 +4629,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4661,7 +4662,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4665: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4666: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4669,7 +4670,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4731,17 +4732,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4735: checking for $ac_hdr" >&5 +echo "configure:4736: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4745: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4746: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4771,17 +4772,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4775: checking for $ac_hdr" >&5 +echo "configure:4776: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4785: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4786: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4812,17 +4813,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4816: checking for $ac_hdr" >&5 +echo "configure:4817: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4826: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4845,7 +4846,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4849: checking for tgetent in -l${termlib}" >&5 +echo "configure:4850: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4853,7 +4854,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4886,7 +4887,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4890: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4891: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4894,7 +4895,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4955,7 +4956,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:4959: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:4960: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4963,7 +4964,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5007,12 +5008,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5011: checking for $ac_func" >&5 +echo "configure:5012: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5040: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5063,7 +5064,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5067: checking for printf in -lnsl_s" >&5 +echo "configure:5068: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5071,7 +5072,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5113,7 +5114,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5117: checking for printf in -lnsl" >&5 +echo "configure:5118: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5121,7 +5122,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5163,7 +5164,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5167: checking for connect in -lsocket" >&5 +echo "configure:5168: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5171,7 +5172,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5213,7 +5214,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5217: checking for connect in -linet" >&5 +echo "configure:5218: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5221,7 +5222,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5276,12 +5277,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5280: checking for $ac_func" >&5 +echo "configure:5281: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5330,7 +5331,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5334: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5335: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5338,7 +5339,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5379,12 +5380,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5383: checking for $ac_func" >&5 +echo "configure:5384: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5440,12 +5441,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5444: checking for $ac_func" >&5 +echo "configure:5445: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5495,12 +5496,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5499: checking for $ac_func" >&5 +echo "configure:5500: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5550,12 +5551,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5554: checking for $ac_func" >&5 +echo "configure:5555: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5583: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5605,12 +5606,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5609: checking for $ac_func" >&5 +echo "configure:5610: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5660,12 +5661,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5664: checking for $ac_func" >&5 +echo "configure:5665: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5715,12 +5716,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5719: checking for $ac_func" >&5 +echo "configure:5720: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5770,12 +5771,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5774: checking for $ac_func" >&5 +echo "configure:5775: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5825,12 +5826,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5829: checking for $ac_func" >&5 +echo "configure:5830: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5880,12 +5881,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5884: checking for $ac_func" >&5 +echo "configure:5885: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5935,12 +5936,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5939: checking for $ac_func" >&5 +echo "configure:5940: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5991,12 +5992,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5995: checking for $ac_func" >&5 +echo "configure:5996: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6048,12 +6049,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6052: checking for $ac_func" >&5 +echo "configure:6053: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6104,12 +6105,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6108: checking for $ac_func" >&5 +echo "configure:6109: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6159,12 +6160,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6163: checking for $ac_func" >&5 +echo "configure:6164: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6214,12 +6215,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6218: checking for $ac_func" >&5 +echo "configure:6219: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6269,12 +6270,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6273: checking for $ac_func" >&5 +echo "configure:6274: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6324,12 +6325,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6328: checking for $ac_func" >&5 +echo "configure:6329: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6379,12 +6380,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6383: checking for $ac_func" >&5 +echo "configure:6384: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6434,12 +6435,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6438: checking for $ac_func" >&5 +echo "configure:6439: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6489,12 +6490,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6493: checking for $ac_func" >&5 +echo "configure:6494: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6544,12 +6545,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6548: checking for $ac_func" >&5 +echo "configure:6549: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6599,12 +6600,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6603: checking for $ac_func" >&5 +echo "configure:6604: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6654,12 +6655,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6658: checking for $ac_func" >&5 +echo "configure:6659: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6709,12 +6710,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6713: checking for $ac_func" >&5 +echo "configure:6714: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6742: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6764,12 +6765,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6768: checking for $ac_func" >&5 +echo "configure:6769: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6819,12 +6820,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6823: checking for $ac_func" >&5 +echo "configure:6824: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6878,9 +6879,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6882: checking for stat64 in " >&5 +echo "configure:6883: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6911,9 +6912,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6915: checking for lstat64 in " >&5 +echo "configure:6916: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6944,9 +6945,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6948: checking for fstat64 in " >&5 +echo "configure:6949: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -6978,7 +6979,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:6982: checking for dn_expand in -lresolv" >&5 +echo "configure:6983: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6986,7 +6987,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7035,12 +7036,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7039: checking for $ac_func" >&5 +echo "configure:7040: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7088,7 +7089,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7092: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7093: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7096,7 +7097,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7112: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7137,12 +7138,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7141: checking for $ac_func" >&5 +echo "configure:7142: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7196,12 +7197,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7200: checking for $ac_func" >&5 +echo "configure:7201: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7249,7 +7250,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7253: checking for putprpwnam in -lsec" >&5 +echo "configure:7254: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7257,7 +7258,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7298,12 +7299,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7302: checking for $ac_func" >&5 +echo "configure:7303: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7358,12 +7359,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7362: checking for $ac_func" >&5 +echo "configure:7363: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7411,7 +7412,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7415: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7416: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7419,7 +7420,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7460,12 +7461,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7464: checking for $ac_func" >&5 +echo "configure:7465: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7519,12 +7520,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7523: checking for $ac_func" >&5 +echo "configure:7524: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7572,7 +7573,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7576: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7577: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7580,7 +7581,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7621,12 +7622,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7625: checking for $ac_func" >&5 +echo "configure:7626: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7682,12 +7683,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7686: checking for $ac_func" >&5 +echo "configure:7687: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7735,7 +7736,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7739: checking for getspnam in -lgen" >&5 +echo "configure:7740: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7743,7 +7744,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7784,12 +7785,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7788: checking for $ac_func" >&5 +echo "configure:7789: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7844,12 +7845,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7848: checking for $ac_func" >&5 +echo "configure:7849: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7897,7 +7898,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7901: checking for getspnam in -lsecurity" >&5 +echo "configure:7902: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7905,7 +7906,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7946,12 +7947,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7950: checking for $ac_func" >&5 +echo "configure:7951: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8005,12 +8006,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8009: checking for $ac_func" >&5 +echo "configure:8010: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8038: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8058,7 +8059,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8062: checking for getspnam in -lsec" >&5 +echo "configure:8063: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8066,7 +8067,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8107,12 +8108,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8111: checking for $ac_func" >&5 +echo "configure:8112: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8167,12 +8168,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8171: checking for $ac_func" >&5 +echo "configure:8172: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8220,7 +8221,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8224: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8225: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8228,7 +8229,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8269,12 +8270,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8273: checking for $ac_func" >&5 +echo "configure:8274: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8328,12 +8329,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8332: checking for $ac_func" >&5 +echo "configure:8333: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8381,7 +8382,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8385: checking for bigcrypt in -lsec" >&5 +echo "configure:8386: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8389,7 +8390,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8430,12 +8431,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8434: checking for $ac_func" >&5 +echo "configure:8435: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8490,12 +8491,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8494: checking for $ac_func" >&5 +echo "configure:8495: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8543,7 +8544,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8547: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8548: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8551,7 +8552,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8592,12 +8593,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8596: checking for $ac_func" >&5 +echo "configure:8597: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8625: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8651,12 +8652,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8655: checking for $ac_func" >&5 +echo "configure:8656: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8704,7 +8705,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8708: checking for getprpwnam in -lsec" >&5 +echo "configure:8709: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8712,7 +8713,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8753,12 +8754,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8757: checking for $ac_func" >&5 +echo "configure:8758: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8825,7 +8826,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8829: checking ability to build shared libraries" >&5 +echo "configure:8830: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -8985,7 +8986,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8989: checking for $ac_word" >&5 +echo "configure:8990: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9042,17 +9043,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9046: checking linker flags for shared libraries" >&5 +echo "configure:9047: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9049: checking compiler flags for position-independent code" >&5 +echo "configure:9050: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9056: checking whether building shared libraries actually works" >&5 +echo "configure:9057: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9083,7 +9084,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9087: checking for long long" >&5 +echo "configure:9088: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9092,12 +9093,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9124,20 +9125,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9128: checking for LL suffix on long long integers" >&5 +echo "configure:9129: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9141: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9159,7 +9160,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9163: checking for 64 bit off_t" >&5 +echo "configure:9164: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9168,13 +9169,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9197,7 +9198,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9201: checking for off64_t" >&5 +echo "configure:9202: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9206,7 +9207,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9239,7 +9240,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9243: checking for 64 bit ino_t" >&5 +echo "configure:9244: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9248,13 +9249,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9277,7 +9278,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9281: checking for ino64_t" >&5 +echo "configure:9282: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9286,7 +9287,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9319,7 +9320,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9323: checking for dev64_t" >&5 +echo "configure:9324: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9328,7 +9329,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9361,13 +9362,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9365: checking for struct dirent64" >&5 +echo "configure:9366: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9384: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9400,7 +9401,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9404: checking for major macro" >&5 +echo "configure:9405: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9409,7 +9410,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9441,7 +9442,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9445: checking for minor macro" >&5 +echo "configure:9446: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9450,7 +9451,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9482,7 +9483,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9486: checking for unsigned char" >&5 +echo "configure:9487: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9491,12 +9492,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9519,13 +9520,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9523: checking for sin_len in sock" >&5 +echo "configure:9524: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9534,7 +9535,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9538: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9539: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9555,13 +9556,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9559: checking whether seekdir returns void" >&5 +echo "configure:9560: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9570,7 +9571,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9574: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9575: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9591,20 +9592,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9595: checking for __FILE__ macro" >&5 +echo "configure:9596: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9608: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9609: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9625,20 +9626,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9629: checking for __FUNCTION__ macro" >&5 +echo "configure:9630: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9642: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9643: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9659,7 +9660,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9663: checking if gettimeofday takes tz argument" >&5 +echo "configure:9664: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9668,14 +9669,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9698,13 +9699,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9702: checking for __va_copy" >&5 +echo "configure:9703: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9712,7 +9713,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9733,7 +9734,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9737: checking for C99 vsnprintf" >&5 +echo "configure:9738: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9742,7 +9743,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9769,7 +9770,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9792,7 +9793,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9796: checking for broken readdir" >&5 +echo "configure:9797: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9801,7 +9802,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9809,7 +9810,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9832,13 +9833,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9836: checking for utimbuf" >&5 +echo "configure:9837: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9846,7 +9847,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9850: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9870,12 +9871,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9874: checking for $ac_func" >&5 +echo "configure:9875: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9924,13 +9925,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9928: checking for ut_name in utmp" >&5 +echo "configure:9929: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9938,7 +9939,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9942: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9943: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -9959,13 +9960,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:9963: checking for ut_user in utmp" >&5 +echo "configure:9964: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9973,7 +9974,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -9994,13 +9995,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:9998: checking for ut_id in utmp" >&5 +echo "configure:9999: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10008,7 +10009,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10012: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10029,13 +10030,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10033: checking for ut_host in utmp" >&5 +echo "configure:10034: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10043,7 +10044,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10064,13 +10065,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10068: checking for ut_time in utmp" >&5 +echo "configure:10069: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10078,7 +10079,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10099,13 +10100,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10103: checking for ut_tv in utmp" >&5 +echo "configure:10104: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10113,7 +10114,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10134,13 +10135,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10138: checking for ut_type in utmp" >&5 +echo "configure:10139: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10148,7 +10149,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10152: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10169,13 +10170,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10173: checking for ut_pid in utmp" >&5 +echo "configure:10174: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10183,7 +10184,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10204,13 +10205,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10208: checking for ut_exit in utmp" >&5 +echo "configure:10209: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10218,7 +10219,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10222: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10239,13 +10240,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10243: checking for ut_addr in utmp" >&5 +echo "configure:10244: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10253,7 +10254,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10257: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10275,13 +10276,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10279: checking whether pututline returns pointer" >&5 +echo "configure:10280: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10289,7 +10290,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10293: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10311,13 +10312,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10315: checking for ut_syslen in utmpx" >&5 +echo "configure:10316: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10325,7 +10326,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10329: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10330: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10349,7 +10350,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10353: checking whether to use libiconv" >&5 +echo "configure:10354: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10362,7 +10363,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10366: checking for iconv_open in -liconv" >&5 +echo "configure:10367: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10370,7 +10371,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10386: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10424,7 +10425,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10428: checking for working iconv" >&5 +echo "configure:10429: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10433,7 +10434,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10444,7 +10445,7 @@ main() { } EOF -if { (eval echo configure:10448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10449: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10468,7 +10469,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10472: checking for Linux kernel oplocks" >&5 +echo "configure:10473: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10477,7 +10478,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10491,7 +10492,7 @@ main() { } EOF -if { (eval echo configure:10495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10514,7 +10515,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10518: checking for kernel change notify support" >&5 +echo "configure:10519: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10523,7 +10524,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10537,7 +10538,7 @@ main() { } EOF -if { (eval echo configure:10541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10560,7 +10561,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10564: checking for kernel share modes" >&5 +echo "configure:10565: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10569,7 +10570,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10585,7 +10586,7 @@ main() { } EOF -if { (eval echo configure:10589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10611,13 +10612,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10615: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10616: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10625,7 +10626,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10629: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10630: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10646,7 +10647,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10650: checking for irix specific capabilities" >&5 +echo "configure:10651: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10655,7 +10656,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10670,7 +10671,7 @@ main() { } EOF -if { (eval echo configure:10674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10698,13 +10699,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10702: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10703: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10714,7 +10715,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10718: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10719: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10735,13 +10736,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10739: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10740: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10751,7 +10752,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10755: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10756: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10772,13 +10773,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10776: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10777: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10788,7 +10789,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10792: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10793: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10809,13 +10810,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10813: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10814: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10825,7 +10826,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10829: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10847,13 +10848,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10851: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10852: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10867,7 +10868,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10871: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10888,16 +10889,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10892: checking for test routines" >&5 +echo "configure:10893: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10911,7 +10912,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10915: checking for ftruncate extend" >&5 +echo "configure:10916: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10920,11 +10921,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10947,7 +10948,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10951: checking for AF_LOCAL socket support" >&5 +echo "configure:10952: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10956,11 +10957,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -10984,7 +10985,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:10988: checking for broken getgroups" >&5 +echo "configure:10989: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10993,11 +10994,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11020,7 +11021,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11024: checking whether getpass should be replaced" >&5 +echo "configure:11025: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11028,7 +11029,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11046: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11064,7 +11065,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11068: checking for broken inet_ntoa" >&5 +echo "configure:11069: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11073,7 +11074,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11087,7 +11088,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11110,7 +11111,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11114: checking for secure mkstemp" >&5 +echo "configure:11115: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11119,7 +11120,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11136,7 +11137,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11159,7 +11160,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11163: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11164: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11168,12 +11169,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11177: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11196,7 +11197,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11200: checking for root" >&5 +echo "configure:11201: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11205,11 +11206,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11237,7 +11238,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11241: checking for iface AIX" >&5 +echo "configure:11242: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11246,7 +11247,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11278,7 +11279,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11282: checking for iface ifconf" >&5 +echo "configure:11283: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11287,7 +11288,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11320,7 +11321,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11324: checking for iface ifreq" >&5 +echo "configure:11325: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11329,7 +11330,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11366,7 +11367,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11370: checking for setresuid" >&5 +echo "configure:11371: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11375,7 +11376,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11409,7 +11410,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11413: checking for setreuid" >&5 +echo "configure:11414: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11418,7 +11419,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11451,7 +11452,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11455: checking for seteuid" >&5 +echo "configure:11456: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11460,7 +11461,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11493,7 +11494,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11497: checking for setuidx" >&5 +echo "configure:11498: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11502,7 +11503,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11535,7 +11536,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11539: checking for working mmap" >&5 +echo "configure:11540: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11544,11 +11545,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11571,7 +11572,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11575: checking for ftruncate needs root" >&5 +echo "configure:11576: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11580,11 +11581,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11607,7 +11608,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11611: checking for fcntl locking" >&5 +echo "configure:11612: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11616,11 +11617,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11625: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11643,7 +11644,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11647: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11648: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11652,11 +11653,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11681,7 +11682,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11685: checking for 64 bit fcntl locking" >&5 +echo "configure:11686: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11690,7 +11691,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11739,13 +11740,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11743: checking for st_blocks in struct stat" >&5 +echo "configure:11744: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11754,7 +11755,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11758: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11775,13 +11776,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11779: checking for st_blksize in struct stat" >&5 +echo "configure:11780: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11790,7 +11791,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11794: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11795: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11813,13 +11814,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11817: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11818: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11838: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11856,13 +11857,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11860: checking for broken nisplus include files" >&5 +echo "configure:11861: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11872,7 +11873,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11876: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11896,7 +11897,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11900: checking whether to use smbwrapper" >&5 +echo "configure:11901: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11943,7 +11944,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11947: checking whether to use AFS clear-text auth" >&5 +echo "configure:11948: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -11969,7 +11970,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11973: checking whether to use DFS clear-text auth" >&5 +echo "configure:11974: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -11995,7 +11996,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:11999: checking for /usr/kerberos" >&5 +echo "configure:12000: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12008,7 +12009,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12012: checking for kerberos 5 install path" >&5 +echo "configure:12013: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12037,17 +12038,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12041: checking for $ac_hdr" >&5 +echo "configure:12042: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12051: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12052: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12080,17 +12081,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12084: checking for $ac_hdr" >&5 +echo "configure:12085: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12095: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12120,7 +12121,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12124: checking for _et_list in -lcom_err" >&5 +echo "configure:12125: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12128,7 +12129,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12160,7 +12161,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12164: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12165: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12168,7 +12169,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12204,7 +12205,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12208: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12209: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12212,7 +12213,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12251,7 +12252,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12255: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12256: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12259,7 +12260,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12299,7 +12300,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12303: checking for ber_scanf in -llber" >&5 +echo "configure:12304: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12307,7 +12308,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12343,7 +12344,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12347: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12348: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12351,7 +12352,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12367: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12393,12 +12394,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12397: checking for $ac_func" >&5 +echo "configure:12398: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12446,13 +12447,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12450: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12451: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12461,7 +12462,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12466: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12483,7 +12484,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12487: checking whether to use AUTOMOUNT" >&5 +echo "configure:12488: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12508,7 +12509,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12512: checking whether to use SMBMOUNT" >&5 +echo "configure:12513: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12545,7 +12546,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12549: checking whether to use PAM" >&5 +echo "configure:12550: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12571,7 +12572,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12575: checking for pam_get_data in -lpam" >&5 +echo "configure:12576: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12579,7 +12580,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12617,7 +12618,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12621: checking whether to use pam_smbpass" >&5 +echo "configure:12622: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12655,12 +12656,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12659: checking for $ac_func" >&5 +echo "configure:12660: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12709,7 +12710,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12713: checking for crypt in -lcrypt" >&5 +echo "configure:12714: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12717,7 +12718,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12763,7 +12764,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12767: checking for a crypt that needs truncated salt" >&5 +echo "configure:12768: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12772,11 +12773,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12810,7 +12811,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12814: checking whether to use TDB SAM database" >&5 +echo "configure:12815: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12835,7 +12836,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12839: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12840: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12866,7 +12867,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12870: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12871: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12891,7 +12892,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12895: checking whether to use syslog logging" >&5 +echo "configure:12896: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12916,7 +12917,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12920: checking whether to use profiling" >&5 +echo "configure:12921: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -12944,7 +12945,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:12948: checking whether to support disk-quotas" >&5 +echo "configure:12949: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -12955,13 +12956,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:12959: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:12960: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -12973,7 +12974,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:12977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13022,7 +13023,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13026: checking whether to support utmp accounting" >&5 +echo "configure:13027: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13047,7 +13048,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13051: checking chosen man pages' language(s)" >&5 +echo "configure:13052: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13078,7 +13079,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13082: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13083: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13106,14 +13107,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13110: checking how to get filesystem space usage" >&5 +echo "configure:13111: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13117: checking statvfs64 function (SVR4)" >&5 +echo "configure:13118: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13121,7 +13122,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13168,12 +13169,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13172: checking statvfs function (SVR4)" >&5 +echo "configure:13173: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13181,7 +13182,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13206,7 +13207,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13210: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13211: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13214,7 +13215,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13227,7 +13228,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13254,7 +13255,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13258: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13259: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13262,7 +13263,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13308,7 +13309,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13312: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13313: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13316,7 +13317,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13326,7 +13327,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13353,7 +13354,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13357: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13358: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13361,7 +13362,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13377,7 +13378,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13404,7 +13405,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13408: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13409: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13412,7 +13413,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13432,7 +13433,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13465,9 +13466,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13469: checking if large file support can be enabled" >&5 +echo "configure:13470: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13485: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13545,7 +13546,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13549: checking whether to support ACLs" >&5 +echo "configure:13550: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13598,7 +13599,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13602: checking for acl_get_file in -lacl" >&5 +echo "configure:13603: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13606,7 +13607,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13645,13 +13646,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13649: checking for ACL support" >&5 +echo "configure:13650: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13659,7 +13660,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13679,13 +13680,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13683: checking for acl_get_perm_np" >&5 +echo "configure:13684: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13693,7 +13694,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13740,7 +13741,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13744: checking whether to build winbind" >&5 +echo "configure:13745: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13836,20 +13837,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13840: checking whether struct passwd has pw_comment" >&5 +echo "configure:13841: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13854: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13874,20 +13875,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13878: checking whether struct passwd has pw_age" >&5 +echo "configure:13879: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13891: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13892: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13926,7 +13927,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:13930: checking for poptGetContext in -lpopt" >&5 +echo "configure:13931: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13934,7 +13935,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13969,7 +13970,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:13973: checking whether to use included popt" >&5 +echo "configure:13974: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -13992,16 +13993,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:13996: checking configure summary" >&5 +echo "configure:13997: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -14172,6 +14173,7 @@ s%@POBAD_CC@%$POBAD_CC%g s%@SHLIBEXT@%$SHLIBEXT%g s%@LIBSMBCLIENT_SHARED@%$LIBSMBCLIENT_SHARED%g s%@LIBSMBCLIENT@%$LIBSMBCLIENT%g +s%@PRINTLIBS@%$PRINTLIBS%g s%@CC@%$CC%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g diff --git a/source3/configure.in b/source3/configure.in index be1064fb4e..90b07ef20a 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -147,6 +147,7 @@ AC_SUBST(POBAD_CC) AC_SUBST(SHLIBEXT) AC_SUBST(LIBSMBCLIENT_SHARED) AC_SUBST(LIBSMBCLIENT) +AC_SUBST(PRINTLIBS) # compile with optimization and without debugging by default CFLAGS="-O ${CFLAGS}" @@ -496,7 +497,7 @@ if test x$enable_cups != xno; then AC_DEFINE(HAVE_CUPS) CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`" LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`" - LIBS="$LIBS `$CUPS_CONFIG --libs`" + PRINTLIBS="$PRINTLIBS `$CUPS_CONFIG --libs`" fi fi -- cgit From 014792fc03c9d4030794e4e06fb137cd2ce32b17 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 25 Aug 2002 23:33:22 +0000 Subject: Clarify function comments (This used to be commit a613dde7edab62c4439d256932b9f9b4ae2ec4e0) --- source3/lib/charcnv.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c index 6e96136643..03337cbf26 100644 --- a/source3/lib/charcnv.c +++ b/source3/lib/charcnv.c @@ -432,6 +432,7 @@ int push_ucs2(const void *base_ptr, void *dest, const char *src, int dest_len, i * @param dest always set at least to NULL * * @retval The number of bytes occupied by the string in the destination + * or -1 in case of error. **/ int push_ucs2_talloc(TALLOC_CTX *ctx, void **dest, const char *src) { @@ -447,6 +448,7 @@ int push_ucs2_talloc(TALLOC_CTX *ctx, void **dest, const char *src) * @param dest always set at least to NULL * * @retval The number of bytes occupied by the string in the destination + * or -1 in case of error. **/ int push_ucs2_allocate(void **dest, const char *src) { -- cgit From 9c7742727a03daa486d77a4ae5f7c4314ced6ad4 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 26 Aug 2002 00:43:06 +0000 Subject: Try to support non-root-mode systems without getgrouplist(). Andrew Bartlett (This used to be commit 17096315a0f30f946ddecb79708604a111c37011) --- source3/auth/auth_sam.c | 2 +- source3/auth/auth_util.c | 16 +++++++++------- source3/lib/system_smbd.c | 5 +++++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/source3/auth/auth_sam.c b/source3/auth/auth_sam.c index 58def0567a..ca611c46b9 100644 --- a/source3/auth/auth_sam.c +++ b/source3/auth/auth_sam.c @@ -404,7 +404,7 @@ static NTSTATUS check_sam_security(const struct auth_context *auth_context, } if (!NT_STATUS_IS_OK(nt_status = make_server_info_sam(server_info, sampass))) { - DEBUG(0,("failed to malloc memory for server_info ret: %s\n", nt_errstr(nt_status))); + DEBUG(0,("check_sam_security: make_server_info_sam() failed with '%s'\n", nt_errstr(nt_status))); return nt_status; } diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index 210c4d09f9..118126a275 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -643,7 +643,7 @@ static NTSTATUS get_user_groups_from_local_sam(const DOM_SID *user_sid, } if (sys_getgrouplist(usr->pw_name, usr->pw_gid, *unix_groups, &n_unix_groups) == -1) { - *unix_groups = realloc(unix_groups, sizeof(gid_t) * n_unix_groups); + *unix_groups = Realloc(unix_groups, sizeof(gid_t) * n_unix_groups); if (sys_getgrouplist(usr->pw_name, usr->pw_gid, *unix_groups, &n_unix_groups) == -1) { DEBUG(0, ("get_user_groups_from_local_sam: failed to get the unix group list\n")); SAFE_FREE(unix_groups); @@ -657,12 +657,14 @@ static NTSTATUS get_user_groups_from_local_sam(const DOM_SID *user_sid, DEBUG(5,("get_user_groups_from_local_sam: user is in the unix following groups\n")); for (i = 0; i < n_unix_groups; i++) DEBUGADD(5,("supplementary group gid:%ld\n",(long int)(*unix_groups)[i])); - - *groups = malloc(sizeof(DOM_SID) * n_unix_groups); - if (!*groups) { - DEBUG(0, ("get_user_group_from_local_sam: malloc() failed for DOM_SID list!\n")); - SAFE_FREE(unix_groups); - return NT_STATUS_NO_MEMORY; + + if (n_unix_groups > 0) { + *groups = malloc(sizeof(DOM_SID) * n_unix_groups); + if (!*groups) { + DEBUG(0, ("get_user_group_from_local_sam: malloc() failed for DOM_SID list!\n")); + SAFE_FREE(unix_groups); + return NT_STATUS_NO_MEMORY; + } } *n_groups = n_unix_groups; diff --git a/source3/lib/system_smbd.c b/source3/lib/system_smbd.c index 580ef8a463..5eda37d903 100644 --- a/source3/lib/system_smbd.c +++ b/source3/lib/system_smbd.c @@ -41,6 +41,11 @@ static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups, in gid_t *gids_saved; int ret, ngrp_saved; + if (non_root_mode()) { + *grpcnt = 0; + return 0; + } + /* work out how many groups we need to save */ ngrp_saved = getgroups(0, NULL); if (ngrp_saved == -1) { -- cgit From 53749c1342a70d51639eecab8bbe6e402a74af93 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 26 Aug 2002 02:01:05 +0000 Subject: Our 'guest' login still requires an entry in the SAM - and build farm machines do not run 'unixsam', so add it to smbpasswd. Andrew Bartlett (This used to be commit 2ff6d53db550c1f4472b735b1bc87c9705716241) --- testsuite/build_farm/basicsmb-sharelist.test | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/testsuite/build_farm/basicsmb-sharelist.test b/testsuite/build_farm/basicsmb-sharelist.test index 87c3e47552..188e985658 100644 --- a/testsuite/build_farm/basicsmb-sharelist.test +++ b/testsuite/build_farm/basicsmb-sharelist.test @@ -12,7 +12,10 @@ test_sharelist() { return 0 } -(test_smb_conf_setup) || exit 1 +# Need guest account +password=samba +security=USER +(test_smb_conf_setup && test_smbpasswd $password ) || exit 1 test_sharelist || exit 1 -- cgit From 2560c73026ced1917a04f0e670f51ebcc984bb86 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 26 Aug 2002 03:08:37 +0000 Subject: Updates! - Don't print an uninitialised buffer in service.c - Change some charcnv.c functions to take smb_ucs2_t ** instead of void ** - Update NTLMv2 code to use dynamic buffers - Update experimental SMB signing code - still more work to do - Move sys_getgrouplist() to SAFE_FREE() and do a DEBUG() on initgroups() failure. Andrew Bartlett (This used to be commit de1964f7fa855022258a84556b266100b917444b) --- source3/auth/auth_sam.c | 5 ++- source3/lib/charcnv.c | 8 ++--- source3/lib/system_smbd.c | 5 +-- source3/libsmb/cliconnect.c | 74 +++++++++++++++++++++++++++---------------- source3/libsmb/clientgen.c | 7 +++- source3/libsmb/clireadwrite.c | 2 +- source3/libsmb/smbencrypt.c | 60 +++++++++++++++++++++++++++-------- source3/smbd/mangle_hash.c | 2 +- source3/smbd/service.c | 2 +- 9 files changed, 113 insertions(+), 52 deletions(-) diff --git a/source3/auth/auth_sam.c b/source3/auth/auth_sam.c index ca611c46b9..bc98f46dc2 100644 --- a/source3/auth/auth_sam.c +++ b/source3/auth/auth_sam.c @@ -106,7 +106,10 @@ static BOOL smb_pwd_check_ntlmv2(const DATA_BLOB ntv2_response, client_key_data = data_blob(ntv2_response.data+16, ntv2_response.length-16); memcpy(client_response, ntv2_response.data, sizeof(client_response)); - ntv2_owf_gen(part_passwd, user, domain, kr); + if (!ntv2_owf_gen(part_passwd, user, domain, kr)) { + return False; + } + SMBOWFencrypt_ntv2(kr, sec_blob, client_key_data, value_from_encryption); if (user_sess_key != NULL) { diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c index 03337cbf26..cd8aa4fe55 100644 --- a/source3/lib/charcnv.c +++ b/source3/lib/charcnv.c @@ -434,12 +434,12 @@ int push_ucs2(const void *base_ptr, void *dest, const char *src, int dest_len, i * @retval The number of bytes occupied by the string in the destination * or -1 in case of error. **/ -int push_ucs2_talloc(TALLOC_CTX *ctx, void **dest, const char *src) +int push_ucs2_talloc(TALLOC_CTX *ctx, smb_ucs2_t **dest, const char *src) { int src_len = strlen(src)+1; *dest = NULL; - return convert_string_talloc(ctx, CH_UNIX, CH_UCS2, src, src_len, dest); + return convert_string_talloc(ctx, CH_UNIX, CH_UCS2, src, src_len, (void **)dest); } /** @@ -450,12 +450,12 @@ int push_ucs2_talloc(TALLOC_CTX *ctx, void **dest, const char *src) * @retval The number of bytes occupied by the string in the destination * or -1 in case of error. **/ -int push_ucs2_allocate(void **dest, const char *src) +int push_ucs2_allocate(smb_ucs2_t **dest, const char *src) { int src_len = strlen(src)+1; *dest = NULL; - return convert_string_allocate(CH_UNIX, CH_UCS2, src, src_len, dest); + return convert_string_allocate(CH_UNIX, CH_UCS2, src, src_len, (void **)dest); } /**************************************************************************** diff --git a/source3/lib/system_smbd.c b/source3/lib/system_smbd.c index 5eda37d903..0cd3086945 100644 --- a/source3/lib/system_smbd.c +++ b/source3/lib/system_smbd.c @@ -61,13 +61,14 @@ static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups, in ngrp_saved = getgroups(ngrp_saved, gids_saved); if (ngrp_saved == -1) { - free(gids_saved); + SAFE_FREE(gids_saved); /* very strange! */ return -1; } if (initgroups(user, gid) != 0) { - free(gids_saved); + DEBUG(0, ("getgrouplist_internals: initgroups() failed!\n")); + SAFE_FREE(gids_saved); return -1; } diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 7db377c25f..ded5a843f3 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -237,6 +237,23 @@ static BOOL cli_session_setup_plaintext(struct cli_state *cli, char *user, return True; } +static void set_signing_on_cli (struct cli_state *cli, char* pass, uint8 response[24]) +{ + uint8 zero_sig[8]; + ZERO_STRUCT(zero_sig); + if (memcmp(&cli->outbuf[smb_ss_field], zero_sig, 8) != 0) { + cli->sign_info.use_smb_signing = True; + cli_calculate_mac_key(cli, pass, response); + } +} + +static void set_temp_signing_on_cli(struct cli_state *cli) +{ + if (cli->sign_info.negotiated_smb_signing) { + cli->sign_info.temp_smb_signing = True; + } +} + /** do a NT1 NTLM/LM encrypted session setup @@ -256,7 +273,6 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, uchar pword[24]; uchar ntpword[24]; char *p; - BOOL tried_signing = False; if (passlen > sizeof(pword) || ntpasslen > sizeof(ntpword)) { return False; @@ -268,12 +284,12 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, ntpasslen = 24; SMBencrypt(pass,cli->secblob.data,pword); SMBNTencrypt(pass,cli->secblob.data,ntpword); - if (!cli->sign_info.use_smb_signing && cli->sign_info.negotiated_smb_signing) { - cli_calculate_mac_key(cli, pass, ntpword); - tried_signing = True; - } + + set_temp_signing_on_cli(cli); + } else { - /* pre-encrypted password supplied. Only used for security=server, can't do + /* pre-encrypted password supplied. Only used for + security=server, can't do signing becouse we don't have oringial key */ memcpy(pword, pass, 24); if (ntpasslen == 24) { @@ -307,22 +323,16 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, p += clistr_push(cli, p, "Samba", -1, STR_TERMINATE); cli_setup_bcc(cli, p); - cli_send_smb(cli); + if (!cli_send_smb(cli)) { + return False; + } + if (!cli_receive_smb(cli)) { - if (tried_signing) { - /* We only use it if we have a successful non-guest connect */ - cli->sign_info.use_smb_signing = False; - } return False; } show_msg(cli->inbuf); - if (tried_signing && (cli_is_error(cli) || SVAL(cli->inbuf,smb_vwv2) /* guest */)) { - /* We only use it if we have a successful non-guest connect */ - cli->sign_info.use_smb_signing = False; - } - if (cli_is_error(cli)) { return False; } @@ -337,6 +347,11 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, fstrcpy(cli->user_name, user); + if (passlen != 24) { + /* Have plaintext orginal */ + set_signing_on_cli(cli, pass, ntpword); + } + return True; } @@ -360,6 +375,9 @@ static DATA_BLOB cli_session_setup_blob(struct cli_state *cli, DATA_BLOB blob) set_message(cli->outbuf,12,0,True); SCVAL(cli->outbuf,smb_com,SMBsesssetupX); + + set_temp_signing_on_cli(cli); + cli_setup_packet(cli); SCVAL(cli->outbuf,smb_vwv0,0xFF); @@ -375,8 +393,8 @@ static DATA_BLOB cli_session_setup_blob(struct cli_state *cli, DATA_BLOB blob) p += clistr_push(cli, p, "Unix", -1, STR_TERMINATE); p += clistr_push(cli, p, "Samba", -1, STR_TERMINATE); cli_setup_bcc(cli, p); - cli_send_smb(cli); + if (!cli_receive_smb(cli)) return blob2; @@ -451,7 +469,7 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, uint32 neg_flags; neg_flags = NTLMSSP_NEGOTIATE_UNICODE | - NTLMSSP_NEGOTIATE_LM_KEY | + NTLMSSP_NEGOTIATE_128 | NTLMSSP_NEGOTIATE_NTLM; memset(sess_key, 0, 16); @@ -525,7 +543,13 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, data_blob_free(&auth); data_blob_free(&blob); - return !cli_is_error(cli); + if (cli_is_error(cli)) { + return False; + } + + set_signing_on_cli(cli, pass, nthash); + + return True; } /**************************************************************************** @@ -541,9 +565,6 @@ static BOOL cli_session_setup_spnego(struct cli_state *cli, char *user, int i; BOOL got_kerberos_mechanism = False; - /* spnego security cannot use SMB signing (for now). */ - cli->sign_info.use_smb_signing = False; - DEBUG(2,("Doing spnego session setup (blob length=%d)\n", cli->secblob.length)); /* the server might not even do spnego */ @@ -643,6 +664,9 @@ BOOL cli_session_setup(struct cli_state *cli, return cli_session_setup_plaintext(cli, user, pass, workgroup); } + /* Indidicate signing */ + + /* if the server supports extended security then use SPNEGO */ if (cli->capabilities & CAP_EXTENDED_SECURITY) { return cli_session_setup_spnego(cli, user, pass, workgroup); @@ -891,12 +915,8 @@ BOOL cli_negprot(struct cli_state *cli) smb_buflen(cli->inbuf)-8, STR_UNICODE|STR_NOALIGN); } - /* A way to attempt to force SMB signing */ - if (getenv("CLI_FORCE_SMB_SIGNING")) + if ((cli->sec_mode & NEGOTIATE_SECURITY_SIGNATURES_ENABLED)) cli->sign_info.negotiated_smb_signing = True; - - if (cli->sign_info.negotiated_smb_signing && !(cli->sec_mode & NEGOTIATE_SECURITY_SIGNATURES_ENABLED)) - cli->sign_info.negotiated_smb_signing = False; } else if (cli->protocol >= PROTOCOL_LANMAN1) { cli->use_spnego = False; diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index 9ae3882301..560d391320 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -160,7 +160,8 @@ void cli_setup_packet(struct cli_state *cli) if (cli->use_spnego) { flags2 |= FLAGS2_EXTENDED_SECURITY; } - if (cli->sign_info.use_smb_signing) + if (cli->sign_info.use_smb_signing + || cli->sign_info.temp_smb_signing) flags2 |= FLAGS2_SMB_SECURITY_SIGNATURES; SSVAL(cli->outbuf,smb_flg2, flags2); } @@ -245,6 +246,10 @@ struct cli_state *cli_initialise(struct cli_state *cli) cli->force_dos_errors = True; } + /* A way to attempt to force SMB signing */ + if (getenv("CLI_FORCE_SMB_SIGNING")) + cli->sign_info.negotiated_smb_signing = True; + if (!cli->outbuf || !cli->inbuf) goto error; diff --git a/source3/libsmb/clireadwrite.c b/source3/libsmb/clireadwrite.c index 756a6cce2f..875df11dca 100644 --- a/source3/libsmb/clireadwrite.c +++ b/source3/libsmb/clireadwrite.c @@ -127,7 +127,7 @@ ssize_t cli_read(struct cli_state *cli, int fnum, char *buf, off_t offset, size_ return total; } -#if 0 /* relies on client_recieve_smb(), now a static in libsmb/clientgen.c */ +#if 0 /* relies on client_receive_smb(), now a static in libsmb/clientgen.c */ /* This call is INCOMPATIBLE with SMB signing. If you remove the #if 0 you must fix ensure you don't attempt to sign the packets - data diff --git a/source3/libsmb/smbencrypt.c b/source3/libsmb/smbencrypt.c index dfa355a7ec..db265c4bf7 100644 --- a/source3/libsmb/smbencrypt.c +++ b/source3/libsmb/smbencrypt.c @@ -116,39 +116,63 @@ void nt_lm_owf_gen(const char *pwd, uchar nt_p16[16], uchar p16[16]) } /* Does both the NTLMv2 owfs of a user's password */ -void ntv2_owf_gen(const uchar owf[16], - const char *user_n, const char *domain_n, uchar kr_buf[16]) +BOOL ntv2_owf_gen(const uchar owf[16], + const char *user_in, const char *domain_in, uchar kr_buf[16]) { - pstring user_u; - pstring dom_u; + smb_ucs2_t *user; + smb_ucs2_t *domain; + + int user_byte_len; + int domain_byte_len; + HMACMD5Context ctx; - int user_l = strlen(user_n); - int domain_l = strlen(domain_n); + user_byte_len = push_ucs2_allocate(&user, user_in); + if (user_byte_len < 0) { + DEBUG(0, ("push_uss2_allocate() for user returned %d (probably malloc() failure)\n", user_byte_len)); + return False; + } - push_ucs2(NULL, user_u, user_n, (user_l+1)*2, STR_UNICODE|STR_NOALIGN|STR_TERMINATE|STR_UPPER); - push_ucs2(NULL, dom_u, domain_n, (domain_l+1)*2, STR_UNICODE|STR_NOALIGN|STR_TERMINATE|STR_UPPER); + domain_byte_len = push_ucs2_allocate(&domain, domain_in); + if (domain_byte_len < 0) { + DEBUG(0, ("push_uss2_allocate() for domain returned %d (probably malloc() failure)\n", user_byte_len)); + return False; + } + + strupper_w(user); + strupper_w(domain); + + /* We don't want null termination */ + user_byte_len = user_byte_len - 2; + domain_byte_len = domain_byte_len - 2; + + SMB_ASSERT(user_byte_len >= 0); + SMB_ASSERT(domain_byte_len >= 0); hmac_md5_init_limK_to_64(owf, 16, &ctx); - hmac_md5_update((const unsigned char *)user_u, user_l * 2, &ctx); - hmac_md5_update((const unsigned char *)dom_u, domain_l * 2, &ctx); + hmac_md5_update((const unsigned char *)user, user_byte_len, &ctx); + hmac_md5_update((const unsigned char *)domain, domain_byte_len, &ctx); hmac_md5_final(kr_buf, &ctx); #ifdef DEBUG_PASSWORD DEBUG(100, ("ntv2_owf_gen: user, domain, owfkey, kr\n")); - dump_data(100, user_u, user_l * 2); - dump_data(100, dom_u, domain_l * 2); + dump_data(100, (const char *)user, user_byte_len); + dump_data(100, (const char *)domain, domain_byte_len); dump_data(100, owf, 16); dump_data(100, kr_buf, 16); #endif + + SAFE_FREE(user); + SAFE_FREE(domain); + return True; } /* Does the des encryption from the NT or LM MD4 hash. */ void SMBOWFencrypt(const uchar passwd[16], const uchar *c8, uchar p24[24]) { uchar p21[21]; - - memset(p21,'\0',21); + + ZERO_STRUCT(p21); memcpy(p21, passwd, 16); E_P24(p21, c8, p24); @@ -362,6 +386,12 @@ void cli_caclulate_sign_mac(struct cli_state *cli) unsigned char calc_md5_mac[16]; struct MD5Context md5_ctx; + if (cli->sign_info.temp_smb_signing) { + memcpy(&cli->outbuf[smb_ss_field], "SignRequest", 8); + cli->sign_info.temp_smb_signing = False; + return; + } + if (!cli->sign_info.use_smb_signing) { return; } @@ -380,6 +410,8 @@ void cli_caclulate_sign_mac(struct cli_state *cli) MD5Final(calc_md5_mac, &md5_ctx); memcpy(&cli->outbuf[smb_ss_field], calc_md5_mac, 8); +/* cli->outbuf[smb_ss_field+2]=0; + Uncomment this to test if the remote server actually verifies signitures...*/ cli->sign_info.send_seq_num++; cli->sign_info.reply_seq_num = cli->sign_info.send_seq_num; cli->sign_info.send_seq_num++; diff --git a/source3/smbd/mangle_hash.c b/source3/smbd/mangle_hash.c index 1d4697474c..0446a953ff 100644 --- a/source3/smbd/mangle_hash.c +++ b/source3/smbd/mangle_hash.c @@ -730,7 +730,7 @@ static void name_map(char *OutName, BOOL need83, BOOL cache83) DEBUG(5,("name_map( %s, need83 = %s, cache83 = %s)\n", OutName, need83 ? "True" : "False", cache83 ? "True" : "False")); - if (push_ucs2_allocate((void **)&OutName_ucs2, OutName) < 0) { + if (push_ucs2_allocate(&OutName_ucs2, OutName) < 0) { DEBUG(0, ("push_ucs2_allocate failed!\n")); return; } diff --git a/source3/smbd/service.c b/source3/smbd/service.c index 7c38cf5793..d475451e6b 100644 --- a/source3/smbd/service.c +++ b/source3/smbd/service.c @@ -808,7 +808,7 @@ connection_struct *make_connection(const char *service_in, DATA_BLOB password, } else if ((lp_security() != SEC_SHARE) && (vuser->homes_snum != -1) && strequal(service_in, lp_servicename(vuser->homes_snum))) { DATA_BLOB no_pw = data_blob(NULL, 0); - DEBUG(5, ("making a connection to 'homes' service [%s] created at session setup time\n", service)); + DEBUG(5, ("making a connection to 'homes' service [%s] created at session setup time\n", service_in)); return make_connection_snum(vuser->homes_snum, vuser, no_pw, dev, status); -- cgit From d8767bcdad96355b54a02fdf8cc9be6c569bc49d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 26 Aug 2002 03:16:10 +0000 Subject: Header file change from last commit. (This used to be commit a760bca56a55b119cf399c5ac6f8b0db418be2e0) --- source3/include/client.h | 1 + 1 file changed, 1 insertion(+) diff --git a/source3/include/client.h b/source3/include/client.h index 711ae1fd19..1e8d1c3d29 100644 --- a/source3/include/client.h +++ b/source3/include/client.h @@ -60,6 +60,7 @@ struct print_job_info typedef struct smb_sign_info { BOOL use_smb_signing; BOOL negotiated_smb_signing; + BOOL temp_smb_signing; size_t mac_key_len; uint8 mac_key[44]; uint32 send_seq_num; -- cgit From e32fdc10015ad57739c3db4ff476379274f09c77 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 26 Aug 2002 03:59:01 +0000 Subject: Some fixes for SMB signing. I can now get Win2k to correctly respond with a security signiture, but I can't get it to accept ours. Andrew Bartlett (This used to be commit 7746de6a3c5798e321ed8300f763588fa3807964) --- source3/libsmb/cliconnect.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index ded5a843f3..0d033c9b59 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -241,9 +241,19 @@ static void set_signing_on_cli (struct cli_state *cli, char* pass, uint8 respons { uint8 zero_sig[8]; ZERO_STRUCT(zero_sig); - if (memcmp(&cli->outbuf[smb_ss_field], zero_sig, 8) != 0) { + + DEBUG(5, ("Server returned security sig:\n")); + dump_data(5, &cli->inbuf[smb_ss_field], 8); + + if (cli->sign_info.use_smb_signing) { + DEBUG(5, ("smb signing already active on connection\n")); + } else if (memcmp(&cli->inbuf[smb_ss_field], zero_sig, 8) != 0) { + + DEBUG(3, ("smb signing enabled!\n")); cli->sign_info.use_smb_signing = True; cli_calculate_mac_key(cli, pass, response); + } else { + DEBUG(5, ("smb signing NOT enabled!\n")); } } @@ -273,6 +283,7 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, uchar pword[24]; uchar ntpword[24]; char *p; + BOOL have_plaintext = False; if (passlen > sizeof(pword) || ntpasslen > sizeof(ntpword)) { return False; @@ -285,8 +296,8 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, SMBencrypt(pass,cli->secblob.data,pword); SMBNTencrypt(pass,cli->secblob.data,ntpword); + have_plaintext = True; set_temp_signing_on_cli(cli); - } else { /* pre-encrypted password supplied. Only used for security=server, can't do @@ -347,7 +358,7 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, fstrcpy(cli->user_name, user); - if (passlen != 24) { + if (have_plaintext) { /* Have plaintext orginal */ set_signing_on_cli(cli, pass, ntpword); } -- cgit From 86115eaba8f52fc91de3574e3ccc1f0e882fdc59 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Mon, 26 Aug 2002 11:24:30 +0000 Subject: Fix some small spelling etc problems in the SGML. Must also add a small tute on adding print queues dynamically with the addprinter command. (This used to be commit 5ea345f464800fa4ce70108c0285791c745243c9) --- docs/docbook/projdoc/printer_driver2.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docbook/projdoc/printer_driver2.sgml b/docs/docbook/projdoc/printer_driver2.sgml index 84a24bcdef..8146ae5616 100644 --- a/docs/docbook/projdoc/printer_driver2.sgml +++ b/docs/docbook/projdoc/printer_driver2.sgml @@ -107,7 +107,7 @@ the client. These parameters, including printer driver -file parameter, are being depreciated and should not +file parameter, are being deprecated and should not be used in new installations. For more information on this change, you should refer to the Migration section of this document. @@ -260,7 +260,7 @@ driver now? Click "No" in the error dialog and you will be presented with -the printer properties window. The way assign a driver to a +the printer properties window. The way to assign a driver to a printer is to either -- cgit From e74e0b235c3dc544e04464e5dba8cfddbc8c5fd1 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Mon, 26 Aug 2002 13:04:26 +0000 Subject: A small type and addition of an example add printer command script. (This used to be commit 7c5f94e73746fcb97e440a29e5abc7bbb0a6c250) --- docs/docbook/projdoc/printer_driver2.sgml | 56 ++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/docs/docbook/projdoc/printer_driver2.sgml b/docs/docbook/projdoc/printer_driver2.sgml index 8146ae5616..85ae0713b3 100644 --- a/docs/docbook/projdoc/printer_driver2.sgml +++ b/docs/docbook/projdoc/printer_driver2.sgml @@ -382,11 +382,65 @@ of the connected user, not necessarily a root account. -There is a complementing delete +There is a complementary delete printer command for removing entries from the "Printers..." folder. + +The following is an example add printer command script. It adds the appropriate entries to /etc/printcap.local (change that to what you need) and returns a line of 'Done' which is needed for the whole process to work. + + + +#!/bin/sh + +# Script to insert a new printer entry into printcap.local +# +# $1, printer name, used as the descriptive name +# $2, share name, used as the printer name for Linux +# $3, port name +# $4, driver name +# $5, location, used for the device file of the printer +# $6, win9x location + +# +# Make sure we use the location that RedHat uses for local printer defs +PRINTCAP=/etc/printcap.local +DATE=`date +%Y%m%d-%H%M%S` +LP=lp +RESTART="service lpd restart" + +# Keep a copy +cp $PRINTCAP $PRINTCAP.$DATE +# Add the printer to $PRINTCAP +echo "" >> $PRINTCAP +echo "$2|$1:\\" >> $PRINTCAP +echo " :sd=/var/spool/lpd/$2:\\" >> $PRINTCAP +echo " :mx=0:ml=0:sh:\\" >> $PRINTCAP +echo " :lp=/usr/local/samba/var/print/$5.prn:" >> $PRINTCAP + +touch "/usr/local/samba/var/print/$5.prn" >> /tmp/printadd.$$ 2>&1 +chown $LP "/usr/local/samba/var/print/$5.prn" >> /tmp/printadd.$$ 2>&1 + +mkdir /var/spool/lpd/$2 +chmod 700 /var/spool/lpd/$2 +chown $LP /var/spool/lpd/$2 +#echo $1 >> "/usr/local/samba/var/print/$5.prn" +#echo $2 >> "/usr/local/samba/var/print/$5.prn" +#echo $3 >> "/usr/local/samba/var/print/$5.prn" +#echo $4 >> "/usr/local/samba/var/print/$5.prn" +#echo $5 >> "/usr/local/samba/var/print/$5.prn" +#echo $6 >> "/usr/local/samba/var/print/$5.prn" +$RESTART >> "/usr/local/samba/var/print/$5.prn" +# Not sure if this is needed +touch /usr/local/samba/lib/smb.conf +# +# You need to return a value, but I am not sure what it means. +# +echo "Done" +exit 0 + + -- cgit From e6ecd43dfc2993779008df8c874fb362cbb3260a Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 26 Aug 2002 16:38:08 +0000 Subject: Reverted and tidied up the "special" files patch. Adds "hide special files" option (set to false by default). Made checking for hide unreadable/writable more efficient (less stat calls, less allocating printf calls). Jeremy. (This used to be commit 15ff5a48f94fdc6ed61fb10f063c4fbf8bb5bb2d) --- source3/param/loadparm.c | 4 ++ source3/smbd/dir.c | 140 ++++++++++++++++++++++++++++------------------- 2 files changed, 88 insertions(+), 56 deletions(-) diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 6fb8cd896a..a64df8e2f3 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -340,6 +340,7 @@ typedef struct BOOL bShortCasePreserve; BOOL bCaseMangle; BOOL bHideDotFiles; + BOOL bHideSpecialFiles; BOOL bHideUnReadable; BOOL bHideUnWriteableFiles; BOOL bBrowseable; @@ -459,6 +460,7 @@ static service sDefault = { True, /* short case preserve */ False, /* case mangle */ True, /* bHideDotFiles */ + False, /* bHideSpecialFiles */ False, /* bHideUnReadable */ False, /* bHideUnWriteableFiles */ True, /* bBrowseable */ @@ -880,6 +882,7 @@ static struct parm_struct parm_table[] = { {"mangle case", P_BOOL, P_LOCAL, &sDefault.bCaseMangle, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"mangling char", P_CHAR, P_LOCAL, &sDefault.magic_char, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"hide dot files", P_BOOL, P_LOCAL, &sDefault.bHideDotFiles, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, + {"hide special files", P_BOOL, P_LOCAL, &sDefault.bHideSpecialFiles, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"hide unreadable", P_BOOL, P_LOCAL, &sDefault.bHideUnReadable, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"hide unwriteable files", P_BOOL, P_LOCAL, &sDefault.bHideUnWriteableFiles, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"delete veto files", P_BOOL, P_LOCAL, &sDefault.bDeleteVetoFiles, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, @@ -1675,6 +1678,7 @@ FN_LOCAL_BOOL(lp_preservecase, bCasePreserve) FN_LOCAL_BOOL(lp_shortpreservecase, bShortCasePreserve) FN_LOCAL_BOOL(lp_casemangle, bCaseMangle) FN_LOCAL_BOOL(lp_hide_dot_files, bHideDotFiles) +FN_LOCAL_BOOL(lp_hide_special_files, bHideSpecialFiles) FN_LOCAL_BOOL(lp_hideunreadable, bHideUnReadable) FN_LOCAL_BOOL(lp_hideunwriteable_files, bHideUnWriteableFiles) FN_LOCAL_BOOL(lp_browseable, bBrowseable) diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c index 31bbe0dec2..0e68d89aa7 100644 --- a/source3/smbd/dir.c +++ b/source3/smbd/dir.c @@ -663,15 +663,13 @@ typedef struct char *current; } Dir; - - /******************************************************************* -check to see if a user can read a file. This is only approximate, -it is used as part of the "hide unreadable" option. Don't -use it for anything security sensitive + Check to see if a user can read a file. This is only approximate, + it is used as part of the "hide unreadable" option. Don't + use it for anything security sensitive. ********************************************************************/ -static BOOL user_can_read_file(connection_struct *conn, SMB_STRUCT_STAT *ste, char *name) +static BOOL user_can_read_file(connection_struct *conn, char *name, SMB_STRUCT_STAT *pst) { extern struct current_user current_user; SEC_DESC *psd = NULL; @@ -690,13 +688,17 @@ static BOOL user_can_read_file(connection_struct *conn, SMB_STRUCT_STAT *ste, ch if (conn->admin_user) return True; + /* If we can't stat it does not show it */ + if (!VALID_STAT(*pst) && (vfs_stat(conn, name, pst) != 0)) + return False; + /* Pseudo-open the file (note - no fd's created). */ - if(S_ISDIR(ste->st_mode)) - fsp = open_directory(conn, name, ste, 0, SET_DENY_MODE(DENY_NONE), (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), + if(S_ISDIR(pst->st_mode)) + fsp = open_directory(conn, name, pst, 0, SET_DENY_MODE(DENY_NONE), (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), unix_mode(conn,aRONLY|aDIR, name), &smb_action); else - fsp = open_file_shared1(conn, name, ste, FILE_READ_ATTRIBUTES, SET_DENY_MODE(DENY_NONE), + fsp = open_file_shared1(conn, name, pst, FILE_READ_ATTRIBUTES, SET_DENY_MODE(DENY_NONE), (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), 0, 0, &access_mode, &smb_action); if (!fsp) @@ -715,13 +717,13 @@ static BOOL user_can_read_file(connection_struct *conn, SMB_STRUCT_STAT *ste, ch } /******************************************************************* -check to see if a user can write a file (and only files, we do not -check dirs on this one). This is only approximate, -it is used as part of the "hide unwriteable" option. Don't -use it for anything security sensitive + Check to see if a user can write a file (and only files, we do not + check dirs on this one). This is only approximate, + it is used as part of the "hide unwriteable" option. Don't + use it for anything security sensitive. ********************************************************************/ -static BOOL user_can_write_file(connection_struct *conn, SMB_STRUCT_STAT *ste, char *name) +static BOOL user_can_write_file(connection_struct *conn, char *name, SMB_STRUCT_STAT *pst) { extern struct current_user current_user; SEC_DESC *psd = NULL; @@ -732,12 +734,24 @@ static BOOL user_can_write_file(connection_struct *conn, SMB_STRUCT_STAT *ste, c NTSTATUS status; uint32 access_granted; + /* + * If user is a member of the Admin group + * we never hide files from them. + */ + + if (conn->admin_user) + return True; + + /* If we can't stat it does not show it */ + if (!VALID_STAT(*pst) && (vfs_stat(conn, name, pst) != 0)) + return False; + /* Pseudo-open the file (note - no fd's created). */ - if(S_ISDIR(ste->st_mode)) + if(S_ISDIR(pst->st_mode)) return True; else - fsp = open_file_shared1(conn, name, ste, FILE_WRITE_ATTRIBUTES, SET_DENY_MODE(DENY_NONE), + fsp = open_file_shared1(conn, name, pst, FILE_WRITE_ATTRIBUTES, SET_DENY_MODE(DENY_NONE), (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), 0, 0, &access_mode, &smb_action); if (!fsp) @@ -755,6 +769,22 @@ static BOOL user_can_write_file(connection_struct *conn, SMB_STRUCT_STAT *ste, c &access_granted, &status); } +/******************************************************************* + Is a file a "special" type ? +********************************************************************/ + +static BOOL file_is_special(connection_struct *conn, char *name, SMB_STRUCT_STAT *pst) +{ + /* If we can't stat it does not show it */ + if (!VALID_STAT(*pst) && (vfs_stat(conn, name, pst) != 0)) + return False; + + if (S_ISREG(pst->st_mode) || S_ISDIR(pst->st_mode) || S_ISLNK(pst->st_mode)) + return False; + + return True; +} + /******************************************************************* Open a directory. ********************************************************************/ @@ -763,7 +793,6 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto) { Dir *dirp; char *n; - SMB_STRUCT_STAT ste; DIR *p = conn->vfs_ops.opendir(conn,name); int used=0; @@ -781,6 +810,8 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto) while (True) { int l; BOOL normal_entry = True; + SMB_STRUCT_STAT st; + char *entry = NULL; if (used == 0) { n = "."; @@ -797,57 +828,54 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto) normal_entry = True; } + ZERO_STRUCT(st); l = strlen(n)+1; - /* - * If user is a member of the Admin group - * we never hide files from them. - */ - - if (!conn->admin_user && normal_entry && conn) { - - /* If it's a vetoed file, pretend it doesn't even exist */ - if (use_veto && IS_VETO_PATH(conn, n)) - continue; - - ZERO_STRUCT(ste); - - /* If we can't stat it does not show it */ - if (vfs_stat(conn, n, &ste) != 0) - continue; + /* If it's a vetoed file, pretend it doesn't even exist */ + if (normal_entry && use_veto && conn && IS_VETO_PATH(conn, n)) + continue; - /* If it is a special file, do not show it! */ - /* FIXME: maybe we should put an option to unhide special files?? --simo */ - if (!S_ISREG(ste.st_mode) && !S_ISDIR(ste.st_mode) && !S_ISLNK(ste.st_mode)) + /* Honour _hide unreadable_ option */ + if (normal_entry && conn && lp_hideunreadable(SNUM(conn))) { + int ret=0; + + if (entry || asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) { + ret = user_can_read_file(conn, entry, &st); + } + if (!ret) { + SAFE_FREE(entry); continue; + } + } - /* Honour _hide unreadable_ option */ - if (lp_hideunreadable(SNUM(conn))) { - char *entry; - int ret=0; + /* Honour _hide unwriteable_ option */ + if (normal_entry && conn && lp_hideunwriteable_files(SNUM(conn))) { + int ret=0; - if (asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) { - ret = user_can_read_file(conn, &ste, entry); - SAFE_FREE(entry); - } - if (!ret) - continue; + if (entry || asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) { + ret = user_can_write_file(conn, entry, &st); + } + if (!ret) { + SAFE_FREE(entry); + continue; } + } - /* Honour _hide unwriteable_ option */ - if (normal_entry && conn && lp_hideunwriteable_files(SNUM(conn))) { - char *entry; - int ret=0; + /* Honour _hide_special_ option */ + if (normal_entry && conn && lp_hide_special_files(SNUM(conn))) { + int ret=0; - if (asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) { - ret = user_can_write_file(conn, &ste, entry); - SAFE_FREE(entry); - } - if (!ret) - continue; + if (entry || asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) { + ret = file_is_special(conn, entry, &st); + } + if (!ret) { + SAFE_FREE(entry); + continue; } } + SAFE_FREE(entry); + if (used + l > dirp->mallocsize) { int s = MAX(used+l,used+2000); char *r; -- cgit From 68d5ab9a656234c1605046562b63d1eaa8108132 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 26 Aug 2002 16:43:29 +0000 Subject: merge from APP_HEAD (This used to be commit 4689e7ea5e55e22e1e4293c91ba69fee53436143) --- source3/rpc_server/srv_spoolss_nt.c | 95 +++++++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 35 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 1c60e7024e..383736d1f6 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -566,7 +566,14 @@ static BOOL is_monitoring_event(Printer_entry *p, uint16 notify_type, { SPOOL_NOTIFY_OPTION *option = p->notify.option; uint32 i, j; - + + /* + * Flags should always be zero when the change notify + * is registered by the cliebnt's spooler. A user Win32 app + * might use the flags though instead of the NOTIFY_OPTION_INFO + * --jerry + */ + if (p->notify.flags) return is_monitoring_event_flags( p->notify.flags, notify_type, notify_field); @@ -826,7 +833,9 @@ done: return; } -/* Receive a notify2 message */ +/******************************************************************** + Receive a notify2 message + ********************************************************************/ static void receive_notify2_message(int msg_type, pid_t src, void *buf, size_t len) @@ -7302,7 +7311,6 @@ WERROR _spoolss_deleteform( pipes_struct *p, SPOOL_Q_DELETEFORM *q_u, SPOOL_R_DE UNISTR2 *form_name = &q_u->name; nt_forms_struct tmpForm; int count=0; - WERROR ret = WERR_OK; nt_forms_struct *list=NULL; Printer_entry *Printer = find_printer_index_by_hnd(p, handle); int snum; @@ -7316,40 +7324,49 @@ WERROR _spoolss_deleteform( pipes_struct *p, SPOOL_Q_DELETEFORM *q_u, SPOOL_R_DE return WERR_BADFID; } - if (!get_printer_snum(p, handle, &snum)) - return WERR_BADFID; + /* forms can be deleted on printer of on the print server handle */ + + if ( Printer->printer_type == PRINTER_HANDLE_IS_PRINTER ) + { + if (!get_printer_snum(p,handle, &snum)) + return WERR_BADFID; + + status = get_a_printer(&printer, 2, lp_servicename(snum)); + if (!W_ERROR_IS_OK(status)) + goto done; + } - if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) { - DEBUG(2,("_spoolss_deleteform: denied by handle permissions\n")); - return WERR_ACCESS_DENIED; + if ( !(Printer->access_granted & (PRINTER_ACCESS_ADMINISTER|SERVER_ACCESS_ADMINISTER)) ) { + DEBUG(2,("_spoolss_deleteform: denied by handle permissions.\n")); + status = WERR_ACCESS_DENIED; + goto done; } /* can't delete if builtin */ + if (get_a_builtin_ntform(form_name,&tmpForm)) { - return WERR_INVALID_PARAM; + status = WERR_INVALID_PARAM; + goto done; } count = get_ntforms(&list); - if(!delete_a_form(&list, form_name, &count, &ret)) - return WERR_INVALID_PARAM; + + if ( !delete_a_form(&list, form_name, &count, &status )) + goto done; /* - * ChangeID must always be set + * ChangeID must always be set if this is a printer */ - status = get_a_printer(&printer, 2, lp_servicename(snum)); - if (!W_ERROR_IS_OK(status)) - goto done; - - status = mod_a_printer(*printer, 2); - if (!W_ERROR_IS_OK(status)) - goto done; + if ( Printer->printer_type == PRINTER_HANDLE_IS_PRINTER ) + status = mod_a_printer(*printer, 2); done: - free_a_printer(&printer, 2); + if ( printer ) + free_a_printer(&printer, 2); SAFE_FREE(list); - return ret; + return status; } /**************************************************************************** @@ -7375,37 +7392,45 @@ WERROR _spoolss_setform(pipes_struct *p, SPOOL_Q_SETFORM *q_u, SPOOL_R_SETFORM * return WERR_BADFID; } - if (!get_printer_snum(p, handle, &snum)) - return WERR_BADFID; + /* forms can be modified on printer of on the print server handle */ + + if ( Printer->printer_type == PRINTER_HANDLE_IS_PRINTER ) + { + if (!get_printer_snum(p,handle, &snum)) + return WERR_BADFID; + + status = get_a_printer(&printer, 2, lp_servicename(snum)); + if (!W_ERROR_IS_OK(status)) + goto done; + } - if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) { + if ( !(Printer->access_granted & (PRINTER_ACCESS_ADMINISTER|SERVER_ACCESS_ADMINISTER)) ) { DEBUG(2,("_spoolss_setform: denied by handle permissions\n")); - return WERR_ACCESS_DENIED; + status = WERR_ACCESS_DENIED; + goto done; } /* can't set if builtin */ if (get_a_builtin_ntform(&form->name,&tmpForm)) { - return WERR_INVALID_PARAM; + status = WERR_INVALID_PARAM; + goto done; } - count=get_ntforms(&list); + count = get_ntforms(&list); update_a_form(&list, form, count); write_ntforms(&list, count); /* - * ChangeID must always be set + * ChangeID must always be set if this is a printer */ - status = get_a_printer(&printer, 2, lp_servicename(snum)); - if (!W_ERROR_IS_OK(status)) - goto done; + if ( Printer->printer_type == PRINTER_HANDLE_IS_PRINTER ) + status = mod_a_printer(*printer, 2); - status = mod_a_printer(*printer, 2); - if (!W_ERROR_IS_OK(status)) - goto done; done: - free_a_printer(&printer, 2); + if ( printer ) + free_a_printer(&printer, 2); SAFE_FREE(list); return WERR_OK; -- cgit From 6dad13d80124b181b35684ea25c0eb0eb28316ac Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 26 Aug 2002 16:57:35 +0000 Subject: merge from APP_HEAD (This used to be commit ebe89453b63467c87263c24f4380544fef1124a6) --- source3/rpc_server/srv_spoolss_nt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 383736d1f6..de87954fea 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -7433,7 +7433,7 @@ done: free_a_printer(&printer, 2); SAFE_FREE(list); - return WERR_OK; + return status; } /**************************************************************************** -- cgit From dc0c3e97ca90151460fdcce240de61307b49cf04 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 26 Aug 2002 20:26:25 +0000 Subject: Reformatting only before real change. Jeremy. (This used to be commit ac21f280d5030a9c49330be37bd754a1540a238a) --- source3/smbd/process.c | 255 ++++++++++++++++++++++++------------------------- 1 file changed, 124 insertions(+), 131 deletions(-) diff --git a/source3/smbd/process.c b/source3/smbd/process.c index f2b2a5c15a..e324097d50 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -609,8 +609,9 @@ const static struct smb_message_struct }; /******************************************************************* -dump a prs to a file - ********************************************************************/ + Dump a packet to a file. +********************************************************************/ + static void smb_dump(const char *name, int type, char *data, ssize_t len) { int fd, i; @@ -635,178 +636,170 @@ static void smb_dump(const char *name, int type, char *data, ssize_t len) /**************************************************************************** -do a switch on the message type, and return the response size + Do a switch on the message type, and return the response size ****************************************************************************/ + static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize) { - static pid_t pid= (pid_t)-1; - int outsize = 0; - extern uint16 global_smbpid; - - type &= 0xff; + static pid_t pid= (pid_t)-1; + int outsize = 0; + extern uint16 global_smbpid; - if (pid == (pid_t)-1) - pid = sys_getpid(); + type &= 0xff; - errno = 0; - last_message = type; + if (pid == (pid_t)-1) + pid = sys_getpid(); - /* make sure this is an SMB packet */ - if (strncmp(smb_base(inbuf),"\377SMB",4) != 0) - { - DEBUG(2,("Non-SMB packet of length %d\n",smb_len(inbuf))); - return(-1); - } + errno = 0; + last_message = type; - /* yuck! this is an interim measure before we get rid of our - current inbuf/outbuf system */ - global_smbpid = SVAL(inbuf,smb_pid); - - if (smb_messages[type].fn == NULL) - { - DEBUG(0,("Unknown message type %d!\n",type)); - smb_dump("Unknown", 1, inbuf, size); - outsize = reply_unknown(inbuf,outbuf); - } - else - { - int flags = smb_messages[type].flags; - static uint16 last_session_tag = UID_FIELD_INVALID; - /* In share mode security we must ignore the vuid. */ - uint16 session_tag = (lp_security() == SEC_SHARE) ? UID_FIELD_INVALID : SVAL(inbuf,smb_uid); - connection_struct *conn = conn_find(SVAL(inbuf,smb_tid)); - - DEBUG(3,("switch message %s (pid %d)\n",smb_fn_name(type),(int)pid)); + /* Make sure this is an SMB packet */ + if (strncmp(smb_base(inbuf),"\377SMB",4) != 0) { + DEBUG(2,("Non-SMB packet of length %d\n",smb_len(inbuf))); + return(-1); + } - smb_dump(smb_fn_name(type), 1, inbuf, size); - if(global_oplock_break) - { - if(flags & QUEUE_IN_OPLOCK) - { - /* - * Queue this message as we are the process of an oplock break. - */ - - DEBUG( 2, ( "switch_message: queueing message due to being in " ) ); - DEBUGADD( 2, ( "oplock break state.\n" ) ); - - push_oplock_pending_smb_message( inbuf, size ); - return -1; - } - } + /* yuck! this is an interim measure before we get rid of our + current inbuf/outbuf system */ + global_smbpid = SVAL(inbuf,smb_pid); + + if (smb_messages[type].fn == NULL) { + DEBUG(0,("Unknown message type %d!\n",type)); + smb_dump("Unknown", 1, inbuf, size); + outsize = reply_unknown(inbuf,outbuf); + } else { + int flags = smb_messages[type].flags; + static uint16 last_session_tag = UID_FIELD_INVALID; + /* In share mode security we must ignore the vuid. */ + uint16 session_tag = (lp_security() == SEC_SHARE) ? UID_FIELD_INVALID : SVAL(inbuf,smb_uid); + connection_struct *conn = conn_find(SVAL(inbuf,smb_tid)); + + DEBUG(3,("switch message %s (pid %d)\n",smb_fn_name(type),(int)pid)); + + smb_dump(smb_fn_name(type), 1, inbuf, size); + if(global_oplock_break) { + if(flags & QUEUE_IN_OPLOCK) { + /* + * Queue this message as we are the process of an oplock break. + */ + + DEBUG( 2, ( "switch_message: queueing message due to being in " ) ); + DEBUGADD( 2, ( "oplock break state.\n" ) ); + + push_oplock_pending_smb_message( inbuf, size ); + return -1; + } + } - /* Ensure this value is replaced in the incoming packet. */ - SSVAL(inbuf,smb_uid,session_tag); + /* Ensure this value is replaced in the incoming packet. */ + SSVAL(inbuf,smb_uid,session_tag); - /* - * Ensure the correct username is in current_user_info. - * This is a really ugly bugfix for problems with - * multiple session_setup_and_X's being done and - * allowing %U and %G substitutions to work correctly. - * There is a reason this code is done here, don't - * move it unless you know what you're doing... :-). - * JRA. - */ + /* + * Ensure the correct username is in current_user_info. + * This is a really ugly bugfix for problems with + * multiple session_setup_and_X's being done and + * allowing %U and %G substitutions to work correctly. + * There is a reason this code is done here, don't + * move it unless you know what you're doing... :-). + * JRA. + */ - if (session_tag != last_session_tag) { - user_struct *vuser = NULL; + if (session_tag != last_session_tag) { + user_struct *vuser = NULL; - last_session_tag = session_tag; - if(session_tag != UID_FIELD_INVALID) - vuser = get_valid_user_struct(session_tag); - if(vuser != NULL) - current_user_info = vuser->user; - } + last_session_tag = session_tag; + if(session_tag != UID_FIELD_INVALID) + vuser = get_valid_user_struct(session_tag); + if(vuser != NULL) + current_user_info = vuser->user; + } - /* does this protocol need to be run as root? */ - if (!(flags & AS_USER)) - change_to_root_user(); + /* does this protocol need to be run as root? */ + if (!(flags & AS_USER)) + change_to_root_user(); - /* does this protocol need a valid tree connection? */ - if ((flags & AS_USER) && !conn) { - return ERROR_DOS(ERRSRV, ERRinvnid); - } + /* does this protocol need a valid tree connection? */ + if ((flags & AS_USER) && !conn) + return ERROR_DOS(ERRSRV, ERRinvnid); - /* does this protocol need to be run as the connected user? */ - if ((flags & AS_USER) && !change_to_user(conn,session_tag)) { - if (flags & AS_GUEST) - flags &= ~AS_USER; - else - return(ERROR_DOS(ERRSRV,ERRaccess)); - } + /* does this protocol need to be run as the connected user? */ + if ((flags & AS_USER) && !change_to_user(conn,session_tag)) { + if (flags & AS_GUEST) + flags &= ~AS_USER; + else + return(ERROR_DOS(ERRSRV,ERRaccess)); + } - /* this code is to work around a bug is MS client 3 without - introducing a security hole - it needs to be able to do - print queue checks as guest if it isn't logged in properly */ - if (flags & AS_USER) - flags &= ~AS_GUEST; + /* this code is to work around a bug is MS client 3 without + introducing a security hole - it needs to be able to do + print queue checks as guest if it isn't logged in properly */ + if (flags & AS_USER) + flags &= ~AS_GUEST; - /* does it need write permission? */ - if ((flags & NEED_WRITE) && !CAN_WRITE(conn)) - return(ERROR_DOS(ERRSRV,ERRaccess)); + /* does it need write permission? */ + if ((flags & NEED_WRITE) && !CAN_WRITE(conn)) + return(ERROR_DOS(ERRSRV,ERRaccess)); - /* ipc services are limited */ - if (IS_IPC(conn) && (flags & AS_USER) && !(flags & CAN_IPC)) { - return(ERROR_DOS(ERRSRV,ERRaccess)); - } + /* ipc services are limited */ + if (IS_IPC(conn) && (flags & AS_USER) && !(flags & CAN_IPC)) + return(ERROR_DOS(ERRSRV,ERRaccess)); - /* load service specific parameters */ - if (conn && !set_current_service(conn,(flags & AS_USER)?True:False)) { - return(ERROR_DOS(ERRSRV,ERRaccess)); - } + /* load service specific parameters */ + if (conn && !set_current_service(conn,(flags & AS_USER)?True:False)) + return(ERROR_DOS(ERRSRV,ERRaccess)); - /* does this protocol need to be run as guest? */ - if ((flags & AS_GUEST) && - (!change_to_guest() || - !check_access(smbd_server_fd(), lp_hostsallow(-1), lp_hostsdeny(-1)))) { - return(ERROR_DOS(ERRSRV,ERRaccess)); - } + /* does this protocol need to be run as guest? */ + if ((flags & AS_GUEST) && (!change_to_guest() || + !check_access(smbd_server_fd(), lp_hostsallow(-1), lp_hostsdeny(-1)))) + return(ERROR_DOS(ERRSRV,ERRaccess)); - last_inbuf = inbuf; + last_inbuf = inbuf; - outsize = smb_messages[type].fn(conn, inbuf,outbuf,size,bufsize); - } + outsize = smb_messages[type].fn(conn, inbuf,outbuf,size,bufsize); + } - smb_dump(smb_fn_name(type), 0, outbuf, outsize); + smb_dump(smb_fn_name(type), 0, outbuf, outsize); - return(outsize); + return(outsize); } /**************************************************************************** - construct a reply to the incoming packet + Construct a reply to the incoming packet. ****************************************************************************/ + static int construct_reply(char *inbuf,char *outbuf,int size,int bufsize) { - int type = CVAL(inbuf,smb_com); - int outsize = 0; - int msg_type = CVAL(inbuf,0); + int type = CVAL(inbuf,smb_com); + int outsize = 0; + int msg_type = CVAL(inbuf,0); - GetTimeOfDay(&smb_last_time); + GetTimeOfDay(&smb_last_time); - chain_size = 0; - file_chain_reset(); - reset_chain_p(); + chain_size = 0; + file_chain_reset(); + reset_chain_p(); - if (msg_type != 0) - return(reply_special(inbuf,outbuf)); + if (msg_type != 0) + return(reply_special(inbuf,outbuf)); - construct_reply_common(inbuf, outbuf); + construct_reply_common(inbuf, outbuf); - outsize = switch_message(type,inbuf,outbuf,size,bufsize); + outsize = switch_message(type,inbuf,outbuf,size,bufsize); - outsize += chain_size; + outsize += chain_size; - if(outsize > 4) - smb_setlen(outbuf,outsize - 4); - return(outsize); + if(outsize > 4) + smb_setlen(outbuf,outsize - 4); + return(outsize); } /**************************************************************************** - Keep track of the number of running smbd's. This functionality is used to - 'hard' limit Samba overhead on resource constrained systems. + Keep track of the number of running smbd's. This functionality is used to + 'hard' limit Samba overhead on resource constrained systems. ****************************************************************************/ + static BOOL smbd_process_limit(void) { int32 total_smbds; -- cgit From dc40c5fb2dd21adc4939d30679e68ef845c633c1 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 26 Aug 2002 20:29:10 +0000 Subject: Correct fix for nc problem. Jeremy. (This used to be commit 1f81b177182aee7fe24e50ae3cd72d417e81b45a) --- source3/smbd/process.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source3/smbd/process.c b/source3/smbd/process.c index e324097d50..372d96e79b 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -655,7 +655,8 @@ static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize /* Make sure this is an SMB packet */ if (strncmp(smb_base(inbuf),"\377SMB",4) != 0) { - DEBUG(2,("Non-SMB packet of length %d\n",smb_len(inbuf))); + DEBUG(2,("Non-SMB packet of length %d. Terminating server\n",smb_len(inbuf))); + exit_server("Non-SMB packet"); return(-1); } -- cgit From 83c598588017c2d0d71ab44cb3f319d11a7f600e Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 27 Aug 2002 00:38:55 +0000 Subject: Pass the object name down to the enum_printers rpc. By default this is the server name and everything works as advertised. See the MSDN doco for details. (This used to be commit d6b10fe9691bfc96d5933c029990c60fd292bdc9) --- source3/rpc_client/cli_spoolss.c | 10 ++++++++-- source3/rpcclient/cmd_spoolss.c | 15 +++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index 18e17758d6..0a869e45a2 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -393,7 +393,7 @@ WERROR cli_spoolss_close_printer(struct cli_state *cli, TALLOC_CTX *mem_ctx, WERROR cli_spoolss_enum_printers(struct cli_state *cli, TALLOC_CTX *mem_ctx, uint32 offered, uint32 *needed, - uint32 flags, uint32 level, + char *name, uint32 flags, uint32 level, uint32 *num_printers, PRINTER_INFO_CTR *ctr) { prs_struct qbuf, rbuf; @@ -406,7 +406,13 @@ WERROR cli_spoolss_enum_printers(struct cli_state *cli, TALLOC_CTX *mem_ctx, ZERO_STRUCT(q); ZERO_STRUCT(r); - slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost); + /* Use server name if no object name specified */ + + if (name) + slprintf(server, sizeof(fstring) - 1, "\\\\%s", name); + else + slprintf(server, sizeof(fstring) - 1, "\\\\%s", cli->desthost); + strupper (server); /* Initialise input parameters */ diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index 22e2db41f3..8ea5ec6837 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -313,16 +313,19 @@ static NTSTATUS cmd_spoolss_enum_printers(struct cli_state *cli, uint32 info_level = 1; PRINTER_INFO_CTR ctr; uint32 i = 0, num_printers, needed; + char *name = NULL; - if (argc > 2) + if (argc > 3) { - printf("Usage: %s [level]\n", argv[0]); + printf("Usage: %s [level] [name]\n", argv[0]); return NT_STATUS_OK; } - if (argc == 2) { + if (argc == 2) info_level = atoi(argv[1]); - } + + if (argc == 3) + name = argv[2]; /* Enumerate printers -- Should we enumerate types other than PRINTER_ENUM_LOCAL? Maybe accept as a parameter? --jerry */ @@ -330,12 +333,12 @@ static NTSTATUS cmd_spoolss_enum_printers(struct cli_state *cli, ZERO_STRUCT(ctr); result = cli_spoolss_enum_printers( - cli, mem_ctx, 0, &needed, PRINTER_ENUM_LOCAL, + cli, mem_ctx, 0, &needed, name, PRINTER_ENUM_LOCAL, info_level, &num_printers, &ctr); if (W_ERROR_V(result) == ERRinsufficientbuffer) result = cli_spoolss_enum_printers( - cli, mem_ctx, needed, NULL, PRINTER_ENUM_LOCAL, + cli, mem_ctx, needed, NULL, name, PRINTER_ENUM_LOCAL, info_level, &num_printers, &ctr); if (W_ERROR_IS_OK(result)) { -- cgit From b1037bffcf07ee6d4b978faf6906e276d09c06d2 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 27 Aug 2002 00:41:06 +0000 Subject: New arguments to cli_spoolss_enum_printers() (This used to be commit 55f891016c005c1552f1c1d95dd067bbf9de8869) --- source3/python/py_spoolss_printers.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source3/python/py_spoolss_printers.c b/source3/python/py_spoolss_printers.c index 8d4cd24778..2a6d056bbf 100644 --- a/source3/python/py_spoolss_printers.c +++ b/source3/python/py_spoolss_printers.c @@ -337,13 +337,13 @@ PyObject *spoolss_enumprinters(PyObject *self, PyObject *args, PyObject *kw) /* Call rpc function */ werror = cli_spoolss_enum_printers( - cli, mem_ctx, 0, &needed, flags, level, + cli, mem_ctx, 0, &needed, name, 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); + cli, mem_ctx, needed, NULL, name, flags, + level, &num_printers, &ctr); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); -- cgit From dbbb157b2ed951336af1db4c2584cca5af234620 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 27 Aug 2002 01:48:00 +0000 Subject: Don't try to convert enumprinters name to a unc name. (This used to be commit e09007dd5d17d5f84aea3c2fed16ce79ba7be1f2) --- source3/rpc_client/cli_spoolss.c | 12 +----------- source3/rpcclient/cmd_spoolss.c | 8 ++++++-- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index 0a869e45a2..7369e5008a 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -401,20 +401,10 @@ WERROR cli_spoolss_enum_printers(struct cli_state *cli, TALLOC_CTX *mem_ctx, SPOOL_R_ENUMPRINTERS r; NEW_BUFFER buffer; WERROR result = W_ERROR(ERRgeneral); - fstring server; ZERO_STRUCT(q); ZERO_STRUCT(r); - /* Use server name if no object name specified */ - - if (name) - slprintf(server, sizeof(fstring) - 1, "\\\\%s", name); - else - slprintf(server, sizeof(fstring) - 1, "\\\\%s", cli->desthost); - - strupper (server); - /* Initialise input parameters */ init_buffer(&buffer, offered, mem_ctx); @@ -422,7 +412,7 @@ WERROR cli_spoolss_enum_printers(struct cli_state *cli, TALLOC_CTX *mem_ctx, prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); - make_spoolss_q_enumprinters(&q, flags, server, level, &buffer, + make_spoolss_q_enumprinters(&q, flags, name, level, &buffer, offered); /* Marshall data and send request */ diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index 8ea5ec6837..337c176b0a 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -313,7 +313,7 @@ static NTSTATUS cmd_spoolss_enum_printers(struct cli_state *cli, uint32 info_level = 1; PRINTER_INFO_CTR ctr; uint32 i = 0, num_printers, needed; - char *name = NULL; + fstring name; if (argc > 3) { @@ -325,7 +325,11 @@ static NTSTATUS cmd_spoolss_enum_printers(struct cli_state *cli, info_level = atoi(argv[1]); if (argc == 3) - name = argv[2]; + fstrcpy(name, argv[2]); + else { + slprintf(name, "\\\\%s", cli->desthost); + strupper(name); + } /* Enumerate printers -- Should we enumerate types other than PRINTER_ENUM_LOCAL? Maybe accept as a parameter? --jerry */ -- cgit From 7488f61d3c7e60cb7607f1b70cacd0635fe95b74 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 27 Aug 2002 01:49:51 +0000 Subject: Implemented enum_domain_groups function. (This used to be commit 9e36824d47f7d1aac14bb5aeded8da54962c90a8) --- source3/python/py_samr.c | 44 +++++++++++++++++++++++++++++++- source3/python/py_samr_conv.c | 58 +++++++++++++++++++++++++++++++++++++++++++ source3/python/setup.py.in | 1 + 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 source3/python/py_samr_conv.c diff --git a/source3/python/py_samr.c b/source3/python/py_samr.c index ce6eda99c2..917a90a2fb 100644 --- a/source3/python/py_samr.c +++ b/source3/python/py_samr.c @@ -151,8 +151,50 @@ static void py_samr_domain_hnd_dealloc(PyObject* self) PyObject_Del(self); } +static PyObject *samr_enum_dom_groups(PyObject *self, PyObject *args, + PyObject *kw) +{ + samr_domain_hnd_object *domain_hnd = (samr_domain_hnd_object *)self; + static char *kwlist[] = { NULL }; + TALLOC_CTX *mem_ctx; + uint32 desired_access = MAXIMUM_ALLOWED_ACCESS; + uint32 start_idx, size, num_dom_groups; + struct acct_info *dom_groups; + NTSTATUS result; + PyObject *py_result = NULL; + + if (!PyArg_ParseTupleAndKeywords( + args, kw, "", kwlist)) + return NULL; + + if (!(mem_ctx = talloc_init())) { + PyErr_SetString(samr_error, "unable to init talloc context"); + return NULL; + } + + start_idx = 0; + size = 0xffff; + + do { + result = cli_samr_enum_dom_groups( + domain_hnd->cli, mem_ctx, &domain_hnd->domain_pol, + &start_idx, size, &dom_groups, &num_dom_groups); + + if (NT_STATUS_IS_OK(result) || + NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)) { + py_from_acct_info(&py_result, dom_groups, + num_dom_groups); + } + + } while (NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)); + + return py_result; +} + static PyMethodDef samr_domain_methods[] = { - { NULL } + { "enum_domain_groups", (PyCFunction)samr_enum_dom_groups, + METH_VARARGS | METH_KEYWORDS, "Enumerate domain groups" }, + { NULL } }; static PyObject *py_samr_domain_hnd_getattr(PyObject *self, char *attrname) diff --git a/source3/python/py_samr_conv.c b/source3/python/py_samr_conv.c new file mode 100644 index 0000000000..fdf71641e0 --- /dev/null +++ b/source3/python/py_samr_conv.c @@ -0,0 +1,58 @@ +/* + 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" +#include "python/py_conv.h" + +/* + * Convert between acct_info and Python + */ + +BOOL py_from_acct_info(PyObject **array, struct acct_info *info, int num_accts) +{ + int i; + + *array = PyList_New(num_accts); + + for (i = 0; i < num_accts; i++) { + PyObject *obj; + + obj = PyDict_New(); + + PyDict_SetItemString( + obj, "name", PyString_FromString(info[i].acct_name)); + + PyDict_SetItemString( + obj, "description", + PyString_FromString(info[i].acct_desc)); + + PyDict_SetItemString(obj, "rid", PyInt_FromLong(info[i].rid)); + + PyList_SetItem(*array, i, obj); + } + + return True; +} + +BOOL py_to_acct_info(PRINTER_INFO_3 *info, PyObject *dict, + TALLOC_CTX *mem_ctx) +{ + return False; +} diff --git a/source3/python/setup.py.in b/source3/python/setup.py.in index c61ec2c214..9b6dc1a650 100755 --- a/source3/python/setup.py.in +++ b/source3/python/setup.py.in @@ -118,6 +118,7 @@ setup( Extension(name = "samr", sources = [samba_srcdir + "python/py_samr.c", + samba_srcdir + "python/py_samr_conv.c", samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], -- cgit From 901ffd7ca84a65d26663e64f80d800e6525e0e2f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 27 Aug 2002 05:04:16 +0000 Subject: slprintf() takes a size argument (This used to be commit 4e142ba3749d2eb45687425ff87c153fb6147056) --- source3/rpcclient/cmd_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index 337c176b0a..2ab90365a7 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -327,7 +327,7 @@ static NTSTATUS cmd_spoolss_enum_printers(struct cli_state *cli, if (argc == 3) fstrcpy(name, argv[2]); else { - slprintf(name, "\\\\%s", cli->desthost); + slprintf(name, sizeof(name)-1, "\\\\%s", cli->desthost); strupper(name); } -- cgit From 8f6c926a8f9c8ff7abe67efb0784e0a1f96ac636 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Tue, 27 Aug 2002 09:07:08 +0000 Subject: add a trivial seeking function to xfile (tseek) that does not do SEEK_CUR and add commands reget and reput to smbclient that continues a transfer that has been onterrupted. thanks to josef Zlomek that did the original patch. (This used to be commit b275547c9ecc13bede5bd21a392fa1d695a3926d) --- source3/client/client.c | 138 ++++++++++++++++++++++++++++++++++++++++-------- source3/lib/xfile.c | 34 ++++++++++++ 2 files changed, 150 insertions(+), 22 deletions(-) diff --git a/source3/client/client.c b/source3/client/client.c index 894329a5d1..8d057573f3 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -2,7 +2,7 @@ Unix SMB/CIFS implementation. SMB client Copyright (C) Andrew Tridgell 1994-1998 - Copyright (C) Simo Sorce 2001 + Copyright (C) Simo Sorce 2001-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 @@ -649,15 +649,16 @@ static int cmd_du(void) /**************************************************************************** get a file from rname to lname ****************************************************************************/ -static int do_get(char *rname,char *lname) +static int do_get(char *rname, char *lname, BOOL reget) { - int handle=0,fnum; + int handle = 0, fnum; BOOL newhandle = False; char *data; struct timeval tp_start; int read_size = io_bufsize; uint16 attr; size_t size; + off_t start = 0; off_t nread = 0; int rc = 0; @@ -677,7 +678,18 @@ static int do_get(char *rname,char *lname) if(!strcmp(lname,"-")) { handle = fileno(stdout); } else { - handle = sys_open(lname,O_WRONLY|O_CREAT|O_TRUNC,0644); + if (reget) { + handle = sys_open(lname, O_WRONLY|O_CREAT, 0644); + if (handle >= 0) { + start = sys_lseek(handle, 0, SEEK_END); + if (start == -1) { + d_printf("Error seeking local file\n"); + return 1; + } + } + } else { + handle = sys_open(lname, O_WRONLY|O_CREAT|O_TRUNC, 0644); + } newhandle = True; } if (handle < 0) { @@ -704,7 +716,7 @@ static int do_get(char *rname,char *lname) } while (1) { - int n = cli_read(cli, fnum, data, nread, read_size); + int n = cli_read(cli, fnum, data, nread + start, read_size); if (n <= 0) break; @@ -717,7 +729,7 @@ static int do_get(char *rname,char *lname) nread += n; } - if (nread < size) { + if (nread + start < size) { DEBUG (0, ("Short read when getting file %s. Only got %ld bytes.\n", rname, (long)nread)); @@ -782,7 +794,7 @@ static int cmd_get(void) next_token_nr(NULL,lname,NULL,sizeof(lname)); - return do_get(rname, lname); + return do_get(rname, lname, False); } @@ -816,7 +828,7 @@ static void do_mget(file_info *finfo) if (!(finfo->mode & aDIR)) { pstrcpy(rname,cur_dir); pstrcat(rname,finfo->name); - do_get(rname,finfo->name); + do_get(rname, finfo->name, False); return; } @@ -880,7 +892,7 @@ static int cmd_more(void) } dos_clean_name(rname); - rc = do_get(rname,lname); + rc = do_get(rname, lname, False); pager=getenv("PAGER"); @@ -1046,19 +1058,31 @@ static int cmd_altname(void) /**************************************************************************** put a single file ****************************************************************************/ -static int do_put(char *rname,char *lname) +static int do_put(char *rname, char *lname, BOOL reput) { int fnum; XFILE *f; - int nread=0; - char *buf=NULL; - int maxwrite=io_bufsize; + int start = 0; + int nread = 0; + char *buf = NULL; + int maxwrite = io_bufsize; int rc = 0; struct timeval tp_start; GetTimeOfDay(&tp_start); - fnum = cli_open(cli, rname, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE); + if (reput) { + fnum = cli_open(cli, rname, O_RDWR|O_CREAT, DENY_NONE); + if (fnum >= 0) { + if (!cli_qfileinfo(cli, fnum, NULL, &start, NULL, NULL, NULL, NULL, NULL) && + !cli_getattrE(cli, fnum, NULL, &start, NULL, NULL, NULL)) { + d_printf("getattrib: %s\n",cli_errstr(cli)); + return 1; + } + } + } else { + fnum = cli_open(cli, rname, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE); + } if (fnum == -1) { d_printf("%s opening remote file %s\n",cli_errstr(cli),rname); @@ -1075,6 +1099,12 @@ static int do_put(char *rname,char *lname) /* size of file is not known */ } else { f = x_fopen(lname,O_RDONLY, 0); + if (!f && reput) { + if (x_tseek(f, start, SEEK_SET) == -1) { + d_printf("Error seeking local file\n"); + return 1; + } + } } if (!f) { @@ -1104,7 +1134,7 @@ static int do_put(char *rname,char *lname) break; } - ret = cli_write(cli, fnum, 0, buf, nread, n); + ret = cli_write(cli, fnum, 0, buf, nread + start, n); if (n != ret) { d_printf("Error writing file: %s\n", cli_errstr(cli)); @@ -1192,7 +1222,7 @@ static int cmd_put(void) } } - return do_put(rname,lname); + return do_put(rname, lname, False); } /************************************* @@ -1384,7 +1414,7 @@ static int cmd_mput(void) dos_format(rname); - do_put(rname, lname); + do_put(rname, lname, False); } free_file_list(file_list); SAFE_FREE(quest); @@ -1456,7 +1486,7 @@ static int cmd_print(void) slprintf(rname, sizeof(rname)-1, "stdin-%d", (int)sys_getpid()); } - return do_put(rname, lname); + return do_put(rname, lname, False); } @@ -1866,8 +1896,8 @@ static int cmd_printmode(void) } /**************************************************************************** -do the lcd command -****************************************************************************/ + do the lcd command + ****************************************************************************/ static int cmd_lcd(void) { fstring buf; @@ -1881,8 +1911,70 @@ static int cmd_lcd(void) } /**************************************************************************** -list a share name -****************************************************************************/ + get a file restarting at end of local file + ****************************************************************************/ +static int cmd_reget(void) +{ + pstring local_name; + pstring remote_name; + char *p; + + pstrcpy(remote_name, cur_dir); + pstrcat(remote_name, "\\"); + + p = remote_name + strlen(remote_name); + + if (!next_token_nr(NULL, p, NULL, sizeof(remote_name) - strlen(remote_name))) { + d_printf("reget \n"); + return 1; + } + pstrcpy(local_name, p); + dos_clean_name(remote_name); + + next_token_nr(NULL, local_name, NULL, sizeof(local_name)); + + return do_get(remote_name, local_name, True); +} + +/**************************************************************************** + put a file restarting at end of local file + ****************************************************************************/ +static int cmd_reput(void) +{ + pstring local_name; + pstring remote_name; + fstring buf; + char *p = buf; + SMB_STRUCT_STAT st; + + pstrcpy(remote_name, cur_dir); + pstrcat(remote_name, "\\"); + + if (!next_token_nr(NULL, p, NULL, sizeof(buf))) { + d_printf("reput \n"); + return 1; + } + pstrcpy(local_name, p); + + if (!file_exist(local_name, &st)) { + d_printf("%s does not exist\n", local_name); + return 1; + } + + if (next_token_nr(NULL, p, NULL, sizeof(buf))) + pstrcat(remote_name, p); + else + pstrcat(remote_name, local_name); + + dos_clean_name(remote_name); + + return do_put(remote_name, local_name, True); +} + + +/**************************************************************************** + list a share name + ****************************************************************************/ static void browse_fn(const char *name, uint32 m, const char *comment, void *state) { @@ -2009,7 +2101,9 @@ static struct {"quit",cmd_quit,"logoff the server",{COMPL_NONE,COMPL_NONE}}, {"rd",cmd_rmdir," remove a directory",{COMPL_NONE,COMPL_NONE}}, {"recurse",cmd_recurse,"toggle directory recursion for mget and mput",{COMPL_NONE,COMPL_NONE}}, + {"reget",cmd_reget," [local name] get a file restarting at end of local file",{COMPL_REMOTE,COMPL_LOCAL}}, {"rename",cmd_rename," rename some files",{COMPL_REMOTE,COMPL_REMOTE}}, + {"reput",cmd_reput," [remote name] put a file restarting at end of remote file",{COMPL_LOCAL,COMPL_REMOTE}}, {"rm",cmd_del," delete all matching files",{COMPL_REMOTE,COMPL_NONE}}, {"rmdir",cmd_rmdir," remove a directory",{COMPL_NONE,COMPL_NONE}}, {"setmode",cmd_setmode,"filename change modes of file",{COMPL_REMOTE,COMPL_NONE}}, diff --git a/source3/lib/xfile.c b/source3/lib/xfile.c index b5710f3a39..7621712e9a 100644 --- a/source3/lib/xfile.c +++ b/source3/lib/xfile.c @@ -43,6 +43,7 @@ XFILE *x_stderr = &_x_stderr; #define X_FLAG_EOF 1 #define X_FLAG_ERROR 2 +#define X_FLAG_EINVAL 3 /* simulate setvbuf() */ int x_setvbuf(XFILE *f, char *buf, int mode, size_t size) @@ -341,3 +342,36 @@ char *x_fgets(char *s, int size, XFILE *stream) *s = 0; return s0; } + +/* trivial seek, works only for SEEK_SET and SEEK_END if SEEK_CUR is + * set then an error is returned */ +off_t x_tseek(XFILE *f, off_t offset, int whence) +{ + if (f->flags & X_FLAG_ERROR) + return -1; + + /* only SEEK_SET and SEEK_END are supported */ + /* SEEK_CUR needs internal offset counter */ + if (whence != SEEK_SET && whence != SEEK_END) { + f->flags |= X_FLAG_EINVAL; + errno = EINVAL; + return -1; + } + + /* empty the buffer */ + switch (f->open_flags & O_ACCMODE) { + case O_RDONLY: + f->bufused = 0; + break; + case O_WRONLY: + if (x_fflush(f) != 0) + return -1; + break; + default: + errno = EINVAL; + return -1; + } + + f->flags &= ~X_FLAG_EOF; + return (off_t)sys_lseek(f->fd, offset, whence); +} -- cgit From 7251f6b9ecf6f4c797baf4cd5390cf2bf310d179 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Tue, 27 Aug 2002 09:14:21 +0000 Subject: avoid using libtool for VFS modules change a name in block.c it was hiding a function name add a comment in configure (This used to be commit 05038f44717ff07ed7d4a3afbdd8f072a3c058cc) --- examples/VFS/Makefile.in | 34 ++++++++++------------------------ examples/VFS/README | 23 +++++++++++++++++------ examples/VFS/block/Makefile.in | 34 ++++++++++------------------------ examples/VFS/block/block.c | 21 ++++++++++----------- source3/configure | 7 +++++-- source3/configure.in | 5 ++++- 6 files changed, 56 insertions(+), 68 deletions(-) diff --git a/examples/VFS/Makefile.in b/examples/VFS/Makefile.in index 3126dfa3b8..6ae4f49434 100644 --- a/examples/VFS/Makefile.in +++ b/examples/VFS/Makefile.in @@ -1,42 +1,28 @@ -MAKEFILE = Makefile.vfs - -include $(MAKEFILE) - CC = @CC@ -LIBTOOL = libtool -CFLAGS = @CFLAGS@ $(VFS_CFLAGS) -CPPFLAGS = @CPPFLAGS@ $(VFS_CPPFLAGS) -LDFLAGS = @LDFLAGS@ $(VFS_LDFLAGS) +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ LDSHFLAGS = -shared srcdir = @builddir@ FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) +VFS_OBJS = audit.so recycle.so + # Default target default: $(VFS_OBJS) -# if file doesn't exist try to create one; -# it is possible that some variables will be -# defined correctly -Makefile.vfs: - @echo -ne "VFS_OBJS\t= " > $(MAKEFILE); \ - for i in *.c; do \ - echo -n $$i" " | sed -e 's/\(.*\)\.c\(.*\)/\1\.so\2/g' >> $(MAKEFILE); \ - done; \ - echo -ne "\nVFS_CFLAGS\t= \nVFS_CPPFLAGS\t= \nVFS_LDFLAGS\t= \n" >> $(MAKEFILE) - make - # Pattern rules -%.so: %.lo - $(LIBTOOL) $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< +%.so: %.o + $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< -%.lo: %.c - $(LIBTOOL) $(CC) $(FLAGS) -c $< +%.o: %.c + $(CC) $(FLAGS) -c $< # Misc targets clean: rm -rf .libs rm -f core *~ *% *.bak \ - $(VFS_OBJS) $(VFS_OBJS:.so=.o) $(VFS_OBJS:.so=.lo) + $(VFS_OBJ) $(VFS_OBJS) diff --git a/examples/VFS/README b/examples/VFS/README index 7a2152fc4d..1b09929059 100644 --- a/examples/VFS/README +++ b/examples/VFS/README @@ -17,15 +17,26 @@ construction. The following VFS modules are given: connect/disconnect, directory opens/create/remove, file open/close/rename/unlink/chmod. + recycle + A recycle-bin like modules. When used any unlink call + will be intercepted and files moved to the recycle + directory nstead of beeing deleted. + block A simple module to block access to certain mount points or directories. This module only hides the specified directories - and all directories beneath them. It should NOT be used to secure - directories. If the name of a file in one of those directories is - known, the file can still be opened. - -The libtool program, available from your favourite GNU software -archive, is required to compile these programs. + and all directories beneath them. It should NOT be used to + secure directories. If the name of a file in one of those + directories is known, the file can still be opened. + + netatalk + A netatalk module, that will ease co-existence of samba and + netatalk file sharing services. + Looka t the README for more informations. + +You may have problems to compile these modules, as shared libraries are +compiled and linked in different ways on different systems. +I currently tested them against GNU/linux and IRIX. To use the VFS modules, create a share similar to the one below. The important parameter is the 'vfs object' parameter which must point to diff --git a/examples/VFS/block/Makefile.in b/examples/VFS/block/Makefile.in index 3126dfa3b8..3deb17c596 100644 --- a/examples/VFS/block/Makefile.in +++ b/examples/VFS/block/Makefile.in @@ -1,42 +1,28 @@ -MAKEFILE = Makefile.vfs - -include $(MAKEFILE) - CC = @CC@ -LIBTOOL = libtool -CFLAGS = @CFLAGS@ $(VFS_CFLAGS) -CPPFLAGS = @CPPFLAGS@ $(VFS_CPPFLAGS) -LDFLAGS = @LDFLAGS@ $(VFS_LDFLAGS) +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ LDSHFLAGS = -shared srcdir = @builddir@ FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) +VFS_OBJS = block.so + # Default target default: $(VFS_OBJS) -# if file doesn't exist try to create one; -# it is possible that some variables will be -# defined correctly -Makefile.vfs: - @echo -ne "VFS_OBJS\t= " > $(MAKEFILE); \ - for i in *.c; do \ - echo -n $$i" " | sed -e 's/\(.*\)\.c\(.*\)/\1\.so\2/g' >> $(MAKEFILE); \ - done; \ - echo -ne "\nVFS_CFLAGS\t= \nVFS_CPPFLAGS\t= \nVFS_LDFLAGS\t= \n" >> $(MAKEFILE) - make - # Pattern rules -%.so: %.lo - $(LIBTOOL) $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< +%.so: %.o + $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< -%.lo: %.c - $(LIBTOOL) $(CC) $(FLAGS) -c $< +%.o: %.c + $(CC) $(FLAGS) -c $< # Misc targets clean: rm -rf .libs rm -f core *~ *% *.bak \ - $(VFS_OBJS) $(VFS_OBJS:.so=.o) $(VFS_OBJS:.so=.lo) + $(VFS_OBJ) $(VFS_OBJS) diff --git a/examples/VFS/block/block.c b/examples/VFS/block/block.c index 9478b75f0f..6566bf3d8c 100644 --- a/examples/VFS/block/block.c +++ b/examples/VFS/block/block.c @@ -87,7 +87,7 @@ static BOOL get_section(char *sect); static BOOL get_parameter_value(char *param, char *value); static BOOL load_param(void); static BOOL search(struct stat *stat_buf); -static BOOL dir_search(char *link, char *dir); +static BOOL dir_search(char *linkstr, char *dir); static BOOL enter_pblock_dir(char *dir); @@ -346,12 +346,11 @@ static DIR *block_opendir(struct connection_struct *conn, char *fname) char *dir_name = NULL; struct stat stat_buf; + size_t len; - dir_name = alloca((strlen(conn->origpath) + strlen(fname) + 2) * sizeof(char)); - - pstrcpy(dir_name,conn->origpath); - pstrcat(dir_name, "/"); - strncat(dir_name, fname, strcspn(fname,"/")); + len = strlen(conn->origpath) + 1 + strcspn(fname, "/"); + asprintf(&dir_name, "%s/%s", conn->origpath, fname); + dir_name[len] = '\0'; if((lstat(dir_name,&stat_buf)) == 0) { @@ -397,13 +396,13 @@ static BOOL search(struct stat *stat_buf) * Find dir in list to block id the starting point is link from a share */ -static BOOL dir_search(char *link, char *dir) +static BOOL dir_search(char *linkstr, char *dir) { char buf[PATH_MAX +1], *ext_path; int len = 0; struct block_dir *tmp_pblock = pblock_dir; - if((len = readlink(link,buf,sizeof(buf))) == -1) + if((len = readlink(linkstr, buf, sizeof(buf))) == -1) { return TRUE; @@ -413,9 +412,9 @@ static BOOL dir_search(char *link, char *dir) } - if((ext_path = strchr(dir,'/')) != NULL) + if((ext_path = strchr(dir, '/')) != NULL) { - pstrcat(buf,&ext_path[1]); + pstrcat(buf, &ext_path[1]); len = strlen(buf); } @@ -427,7 +426,7 @@ static BOOL dir_search(char *link, char *dir) continue; } - if((strstr(buf,tmp_pblock->dir_name)) != NULL) + if((strstr(buf, tmp_pblock->dir_name)) != NULL) { return TRUE; } diff --git a/source3/configure b/source3/configure index f95f30e393..431edcbe35 100755 --- a/source3/configure +++ b/source3/configure @@ -14018,6 +14018,9 @@ fi builddir=`pwd` +# I added make files that are outside /source directory. +# I know this is not a good solution, will work out a better +# solution soon. --simo trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure @@ -14119,7 +14122,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff --git a/source3/configure.in b/source3/configure.in index 90b07ef20a..de8da34091 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2808,7 +2808,10 @@ AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"], builddir=`pwd` AC_SUBST(builddir) -AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile) +# I added make files that are outside /source directory. +# I know this is not a good solution, will work out a better +# solution soon. --simo +AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile) ################################################# # Print very concise instructions on building/use -- cgit From 709c7c1674f43d38e38a6616c173ec87e632971f Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Tue, 27 Aug 2002 09:30:17 +0000 Subject: add the netatalk module (This used to be commit 2a156995329699c776772fe01672cfe763b3f988) --- examples/VFS/block/smb.conf | 7 - examples/VFS/netatalk/Makefile.in | 28 +++ examples/VFS/netatalk/README | 18 ++ examples/VFS/netatalk/netatalk.c | 430 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 476 insertions(+), 7 deletions(-) create mode 100644 examples/VFS/netatalk/Makefile.in create mode 100644 examples/VFS/netatalk/README create mode 100644 examples/VFS/netatalk/netatalk.c diff --git a/examples/VFS/block/smb.conf b/examples/VFS/block/smb.conf index 368155f1f8..931196f402 100644 --- a/examples/VFS/block/smb.conf +++ b/examples/VFS/block/smb.conf @@ -4,10 +4,3 @@ browseable = yes writable = yes - - - - - - - diff --git a/examples/VFS/netatalk/Makefile.in b/examples/VFS/netatalk/Makefile.in new file mode 100644 index 0000000000..a9a5d69b51 --- /dev/null +++ b/examples/VFS/netatalk/Makefile.in @@ -0,0 +1,28 @@ +CC = @CC@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LDSHFLAGS = -shared +srcdir = @builddir@ +FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) + +VFS_OBJS = netatalk.so + +# Default target + +default: $(VFS_OBJS) + +# Pattern rules + +%.so: %.o + $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< + +%.o: %.c + $(CC) $(FLAGS) -c $< + +# Misc targets + +clean: + rm -rf .libs + rm -f core *~ *% *.bak \ + $(VFS_OBJ) $(VFS_OBJS) diff --git a/examples/VFS/netatalk/README b/examples/VFS/netatalk/README new file mode 100644 index 0000000000..70f6eea316 --- /dev/null +++ b/examples/VFS/netatalk/README @@ -0,0 +1,18 @@ +There is the new netatalk module both for HEAD. +This one has some difference from previous module: + +-- it doesn't care about creating of .AppleDouble forks, just keeps ones in +sync; + +-- if share in smb.conf doesn't contain .AppleDouble item in hide or veto +list, it will be added automatically. + +To my way of thinking, module became more lightweight and speedy. + +How to compile: + +you should place proper netatalk.c into examples/VFS/ then run 'configure' +from source/ and then run 'make' from examples/VFS/. + +add string 'vfs object = /netatlk.so' to smb.conf. It may +be defined either as global or as share-specific parameter. diff --git a/examples/VFS/netatalk/netatalk.c b/examples/VFS/netatalk/netatalk.c new file mode 100644 index 0000000000..353be36e6f --- /dev/null +++ b/examples/VFS/netatalk/netatalk.c @@ -0,0 +1,430 @@ +/* + * AppleTalk VFS module for Samba-3.x + * + * Copyright (C) Alexei Kotovich, 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 "config.h" +#include +#include +#ifdef HAVE_UTIME_H +#include +#endif +#ifdef HAVE_DIRENT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#include +#include +#include +#include + +#define APPLEDOUBLE ".AppleDouble" +#define ADOUBLEMODE 0777 + +/* atalk functions */ + +static int atalk_build_paths(TALLOC_CTX *ctx, const char *path, + const char *fname, char **adbl_path, char **orig_path, + SMB_STRUCT_STAT *adbl_info, SMB_STRUCT_STAT *orig_info); + +static int atalk_unlink_file(const char *path); + +static struct vfs_ops default_vfs_ops; /* For passthrough operation */ +static struct smb_vfs_handle_struct *atalk_handle; + +static int atalk_get_path_ptr(char *path) +{ + int i = 0; + int ptr = 0; + + for (i = 0; path[i]; i ++) { + if (path[i] == '/') + ptr = i; + /* get out some 'spam';) from win32's file name */ + else if (path[i] == ':') { + path[i] = '\0'; + break; + } + } + + return ptr; +} + +static int atalk_build_paths(TALLOC_CTX *ctx, const char *path, const char *fname, + char **adbl_path, char **orig_path, + SMB_STRUCT_STAT *adbl_info, SMB_STRUCT_STAT *orig_info) +{ + int ptr0 = 0; + int ptr1 = 0; + char *dname = 0; + char *name = 0; + + if (!ctx || !path || !fname || !adbl_path || !orig_path || + !adbl_info || !orig_info) + return -1; +#if 0 + DEBUG(3, ("ATALK: PATH: %s[%s]\n", path, fname)); +#endif + if (strstr(path, APPLEDOUBLE) || strstr(fname, APPLEDOUBLE)) { + DEBUG(3, ("ATALK: path %s[%s] already contains %s\n", path, fname, APPLEDOUBLE)); + return -1; + } + + if (fname[0] == '.') ptr0 ++; + if (fname[1] == '/') ptr0 ++; + + *orig_path = talloc_asprintf(ctx, "%s/%s", path, &fname[ptr0]); + + /* get pointer to last '/' */ + ptr1 = atalk_get_path_ptr(*orig_path); + + sys_lstat(*orig_path, orig_info); + + if (S_ISDIR(orig_info->st_mode)) { + *adbl_path = talloc_asprintf(ctx, "%s/%s/%s/", + path, &fname[ptr0], APPLEDOUBLE); + } else { + dname = talloc_strdup(ctx, *orig_path); + dname[ptr1] = '\0'; + name = *orig_path; + *adbl_path = talloc_asprintf(ctx, "%s/%s/%s", + dname, APPLEDOUBLE, &name[ptr1 + 1]); + } +#if 0 + DEBUG(3, ("ATALK: DEBUG:\n%s\n%s\n", *orig_path, *adbl_path)); +#endif + sys_lstat(*adbl_path, adbl_info); + return 0; +} + +static int atalk_unlink_file(const char *path) +{ + int ret = 0; + + become_root(); + ret = unlink(path); + unbecome_root(); + + return ret; +} + +static void atalk_add_to_list(name_compare_entry **list) +{ + int i, count = 0; + name_compare_entry *new_list = 0; + name_compare_entry *cur_list = 0; + + cur_list = *list; + + if (cur_list) { + for (i = 0, count = 0; cur_list[i].name; i ++, count ++) { + if (strstr(cur_list[i].name, APPLEDOUBLE)) + return; + } + } + + if (!(new_list = calloc(1, + (count == 0 ? 1 : count + 1) * sizeof(name_compare_entry)))) + return; + + for (i = 0; i < count; i ++) { + new_list[i].name = strdup(cur_list[i].name); + new_list[i].is_wild = cur_list[i].is_wild; + } + + new_list[i].name = strdup(APPLEDOUBLE); + new_list[i].is_wild = False; + + free_namearray(*list); + + *list = new_list; + new_list = 0; + cur_list = 0; +} + +static void atalk_rrmdir(TALLOC_CTX *ctx, char *path) +{ + int n; + char *dpath; + struct dirent **namelist; + + if (!path) return; + + n = scandir(path, &namelist, 0, alphasort); + if (n < 0) { + return; + } else { + while (n --) { + if (strcmp(namelist[n]->d_name, ".") == 0 || + strcmp(namelist[n]->d_name, "..") == 0) + continue; + if (!(dpath = talloc_asprintf(ctx, "%s/%s", + path, namelist[n]->d_name))) + continue; + atalk_unlink_file(dpath); + free(namelist[n]); + } + } +} + +/* Disk operations */ + +/* Directory operations */ + +DIR *atalk_opendir(struct connection_struct *conn, const char *fname) +{ + DIR *ret = 0; + + ret = default_vfs_ops.opendir(conn, fname); + + /* + * when we try to perform delete operation upon file which has fork + * in ./.AppleDouble and this directory wasn't hidden by Samba, + * MS Windows explorer causes the error: "Cannot find the specified file" + * There is some workaround to avoid this situation, i.e. if + * connection has not .AppleDouble entry in either veto or hide + * list then it would be nice to add one. + */ + + atalk_add_to_list(&conn->hide_list); + atalk_add_to_list(&conn->veto_list); + + return ret; +} + +static int atalk_rmdir(struct connection_struct *conn, const char *path) +{ + BOOL add = False; + TALLOC_CTX *ctx = 0; + char *dpath; + + if (!conn || !conn->origpath || !path) goto exit_rmdir; + + /* due to there is no way to change bDeleteVetoFiles variable + * from this module, gotta use talloc stuff.. + */ + + strstr(path, APPLEDOUBLE) ? (add = False) : (add = True); + + if (!(ctx = talloc_init_named("remove_directory"))) + goto exit_rmdir; + + if (!(dpath = talloc_asprintf(ctx, "%s/%s%s", + conn->origpath, path, add ? "/"APPLEDOUBLE : ""))) + goto exit_rmdir; + + atalk_rrmdir(ctx, dpath); + +exit_rmdir: + talloc_destroy(ctx); + return default_vfs_ops.rmdir(conn, path); +} + +/* File operations */ + +static int atalk_rename(struct connection_struct *conn, const char *old, const char *new) +{ + int ret = 0; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.rename(conn, old, new); + + if (!conn || !old) return ret; + + if (!(ctx = talloc_init_named("rename_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, old, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (S_ISDIR(orig_info.st_mode) || S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", adbl_path)); + goto exit_rename; + } + + atalk_unlink_file(adbl_path); + +exit_rename: + talloc_destroy(ctx); + return ret; +} + +static int atalk_unlink(struct connection_struct *conn, const char *path) +{ + int ret = 0, i; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.unlink(conn, path); + + if (!conn || !path) return ret; + + /* no .AppleDouble sync if veto or hide list is empty, + * otherwise "Cannot find the specified file" error will be caused + */ + + if (!conn->veto_list) return ret; + if (!conn->hide_list) return ret; + + for (i = 0; conn->veto_list[i].name; i ++) { + if (strstr(conn->veto_list[i].name, APPLEDOUBLE)) + break; + } + + if (!conn->veto_list[i].name) { + for (i = 0; conn->hide_list[i].name; i ++) { + if (strstr(conn->hide_list[i].name, APPLEDOUBLE)) + break; + else { + DEBUG(3, ("ATALK: %s is not hidden, skipped..\n", + APPLEDOUBLE)); + return ret; + } + } + } + + if (!(ctx = talloc_init_named("unlink_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (S_ISDIR(orig_info.st_mode) || S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", adbl_path)); + goto exit_unlink; + } + + atalk_unlink_file(adbl_path); + +exit_unlink: + talloc_destroy(ctx); + return ret; +} + +static int atalk_chmod(struct connection_struct *conn, const char *path, mode_t mode) +{ + int ret = 0; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.chmod(conn, path, mode); + + if (!conn || !path) return ret; + + if (!(ctx = talloc_init_named("chmod_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", orig_path)); + goto exit_chmod; + } + + chmod(adbl_path, ADOUBLEMODE); + +exit_chmod: + talloc_destroy(ctx); + return ret; +} + +static int atalk_chown(struct connection_struct *conn, const char *path, uid_t uid, gid_t gid) +{ + int ret = 0; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.chown(conn, path, uid, gid); + + if (!conn || !path) return ret; + + if (!(ctx = talloc_init_named("chown_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", orig_path)); + goto exit_chown; + } + + chown(adbl_path, uid, gid); + +exit_chown: + talloc_destroy(ctx); + return ret; +} + +static vfs_op_tuple atalk_ops[] = { + + /* Directory operations */ + + {atalk_opendir, SMB_VFS_OP_OPENDIR, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_rmdir, SMB_VFS_OP_RMDIR, SMB_VFS_LAYER_TRANSPARENT}, + + /* File operations */ + + {atalk_rename, SMB_VFS_OP_RENAME, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_unlink, SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_chmod, SMB_VFS_OP_CHMOD, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_chown, SMB_VFS_OP_CHOWN, SMB_VFS_LAYER_TRANSPARENT}, + + /* Finish VFS operations definition */ + + {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} +}; + +/* VFS initialisation function. Return vfs_op_tuple array back to SAMBA. */ +vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, + struct smb_vfs_handle_struct *vfs_handle) +{ + *vfs_version = SMB_VFS_INTERFACE_VERSION; + memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); + + atalk_handle = vfs_handle; + + DEBUG(3, ("ATALK: vfs module loaded\n")); + return atalk_ops; +} + +/* VFS finalization function. */ +void vfs_done(connection_struct *conn) +{ + DEBUG(3, ("ATALK: vfs module unloaded\n")); +} -- cgit From 995bf62aae0329750b2fff62db4f2b113a9f93e0 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Tue, 27 Aug 2002 09:45:26 +0000 Subject: patch from metze (This used to be commit cc8e6ebc0ec840d882211c8327cafdcafbcafbd7) --- examples/VFS/recycle.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/examples/VFS/recycle.c b/examples/VFS/recycle.c index ed89e59abf..0a261c20df 100644 --- a/examples/VFS/recycle.c +++ b/examples/VFS/recycle.c @@ -57,7 +57,7 @@ static vfs_op_tuple recycle_ops[] = { /* File operations */ {recycle_unlink, SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_OPAQUE}, - + {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} }; @@ -68,6 +68,8 @@ vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, { *vfs_version = SMB_VFS_INTERFACE_VERSION; memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); + + DEBUG(5,("vfs_init: for recycle!\n")); /* Remember vfs_id for storing private information at connect */ recycle_handle = vfs_handle; @@ -78,20 +80,23 @@ vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, /* VFS finalization function. */ void vfs_done(connection_struct *conn) { - DEBUG(3,("vfs_done_recycle: called for connection %p\n",conn)); + DEBUG(5,("vfs_done_recycle: called for connection %p\n",conn)); } static int recycle_connect(struct connection_struct *conn, const char *service, const char *user) { fstring recycle_bin; - DEBUG(3,("recycle_connect: called for service %s as user %s\n", service, user)); + DEBUG(4,("recycle_connect: called for service %s as user %s\n", service, user)); fstrcpy(recycle_bin, (const char *)lp_parm_string(lp_servicename(SNUM(conn)),"vfs","recycle bin")); if (!*recycle_bin) { - DEBUG(3,("recycle_connect: No options listed (vfs:recycle bin).\n" )); + DEBUG(0,("recycle_connect: No options listed (vfs:recycle bin).\n" )); return 0; /* No options. */ } + + standard_sub_conn(conn,recycle_bin,sizeof(fstring)); + DEBUG(3,("recycle_connect: recycle name is %s\n", recycle_bin )); @@ -158,7 +163,7 @@ static int recycle_unlink(connection_struct *conn, const char *inname) fstrcpy(recycle_bin, (const char *)recycle_handle->data); if(!*recycle_bin) { - DEBUG(3, ("recycle bin: share parameter not set, purging %s...\n", fname)); + DEBUG(1, ("recycle bin: share parameter not set, purging %s...\n", fname)); return default_vfs_ops.unlink(conn,fname); } @@ -178,7 +183,7 @@ static int recycle_unlink(connection_struct *conn, const char *inname) ext = strrchr(base, '.'); pstrcat(bin, base+1); } - DEBUG(3, ("recycle bin: base %s, ext %s, fname %s, bin %s\n", base, ext, fname, bin)); + DEBUG(4, ("recycle bin: base %s, ext %s, fname %s, bin %s\n", base, ext, fname, bin)); if(strcmp(fname,bin) == 0) { DEBUG(3, ("recycle bin: file %s exists, purging...\n", fname)); @@ -202,7 +207,7 @@ static int recycle_unlink(connection_struct *conn, const char *inname) if(!recycle_directory_exist(conn,recycle_bin)) { DEBUG(3, ("recycle bin: directory %s nonexistant, creating...\n", recycle_bin)); if (default_vfs_ops.mkdir(conn,recycle_bin,dir_mask) == -1) { - DEBUG(3, ("recycle bin: unable to create directory %s. Error was %s\n", + DEBUG(0, ("recycle bin: unable to create directory %s. Error was %s\n", recycle_bin, strerror(errno) )); } } @@ -210,13 +215,13 @@ static int recycle_unlink(connection_struct *conn, const char *inname) ret = default_vfs_ops.rename(conn, fname, bin); if (ret == -1) { - DEBUG(3, ("recycle bin: move error %d (%s)\n", errno, strerror(errno) )); - DEBUG(3, ("recycle bin: move failed, purging...\n")); + DEBUG(1, ("recycle bin: move error %d (%s)\n", errno, strerror(errno) )); + DEBUG(0, ("recycle bin: move failed, purging...\n")); return default_vfs_ops.unlink(conn,fname); } return ret; } else { - DEBUG(3, ("recycle bin: move failed, purging...\n")); + DEBUG(1, ("recycle bin: move failed, purging...\n")); return default_vfs_ops.unlink(conn,fname); } } -- cgit From c53bbb55f67aacdd30cff7fb46064ce009d7794f Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 27 Aug 2002 12:43:15 +0000 Subject: merge from SAMBA_2_2 (This used to be commit b58ddacf73589870252eea52da68841e7294672d) --- source3/libsmb/libsmbclient.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/libsmb/libsmbclient.c b/source3/libsmb/libsmbclient.c index 3897851167..44cba611d2 100644 --- a/source3/libsmb/libsmbclient.c +++ b/source3/libsmb/libsmbclient.c @@ -378,7 +378,7 @@ SMBCSRV *smbc_server(SMBCCTX *context, fstring remote_name; struct in_addr rem_ip; - if (!inet_aton(server, &rem_ip)) { + if ((rem_ip.s_addr=inet_addr(server)) == INADDR_NONE) { DEBUG(4, ("Could not convert IP address %s to struct in_addr\n", server)); errno = ENOENT; return NULL; -- cgit From 797af9369bd78b5ba0e121dd88c5d11f5341479f Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 27 Aug 2002 14:16:37 +0000 Subject: Ensure we have at least smb_size bytes before processing a packet. Jeremy. (This used to be commit 0385f7d7efed48fc8121fc0fbb433e9ca0954094) --- source3/smbd/process.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 372d96e79b..6b9e184afe 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -654,7 +654,7 @@ static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize last_message = type; /* Make sure this is an SMB packet */ - if (strncmp(smb_base(inbuf),"\377SMB",4) != 0) { + if ((strncmp(smb_base(inbuf),"\377SMB",4) != 0) || (size - 4 < smb_size)) { DEBUG(2,("Non-SMB packet of length %d. Terminating server\n",smb_len(inbuf))); exit_server("Non-SMB packet"); return(-1); -- cgit From c3d707b0882044816e7626b291fccdc56df33848 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 27 Aug 2002 16:48:58 +0000 Subject: Remove strsep - non portable. Jeremy. (This used to be commit 03c49b2e519acb8cc7278ac97a203a7d122d2869) --- source3/client/smbmnt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/client/smbmnt.c b/source3/client/smbmnt.c index ba2b1e9435..ce406179cf 100644 --- a/source3/client/smbmnt.c +++ b/source3/client/smbmnt.c @@ -148,8 +148,8 @@ do_mount(char *share_name, unsigned int flags, struct smb_mount_data *data) uname(&uts); release = uts.release; - major = strsep(&release, "."); - minor = strsep(&release, "."); + major = strtok(release, "."); + minor = strtok(NULL, "."); if (major && minor && atoi(major) == 2 && atoi(minor) < 4) { /* < 2.4, assume struct */ data1 = (char *) data; -- cgit From 4896421e30c15fa9d313c319e23275bb48e333fc Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 27 Aug 2002 19:43:19 +0000 Subject: Fix typo in debug. (This used to be commit 86433a3492a3b70a051257940ae28ada8788a650) --- source3/nsswitch/winbindd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c index 256c0203c0..a3ffd1424b 100644 --- a/source3/nsswitch/winbindd.c +++ b/source3/nsswitch/winbindd.c @@ -628,7 +628,7 @@ static void process_loop(int accept_sock) if (state->read_buf_len >= sizeof(uint32) && *(uint32 *) &state->request != sizeof(state->request)) { - DEBUG(0,("process_loop: Invalid request size (%d) send, should be (%d)\n", + DEBUG(0,("process_loop: Invalid request size (%d) sent, should be (%d)\n", *(uint32 *) &state->request, sizeof(state->request))); remove_client(state); -- cgit From 16413f2d9de850dcfea135fd5ceb4cd30a115ffa Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 27 Aug 2002 20:15:35 +0000 Subject: Allow us to "lock" printer tdb entries in memory to stop them being re-used as cache. Jeremy. (This used to be commit 6f901e479dd7a0b9d1395aad5b8ef028c0514fec) --- source3/printing/printing.c | 79 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 61 insertions(+), 18 deletions(-) diff --git a/source3/printing/printing.c b/source3/printing/printing.c index cb689c05d6..61c3282196 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -132,11 +132,13 @@ static pid_t local_pid; static int get_queue_status(int, print_status_struct *); +/* There can be this many printing tdb's open, plus any locked ones. */ #define MAX_PRINT_DBS_OPEN 1 struct tdb_print_db { struct tdb_print_db *next, *prev; TDB_CONTEXT *tdb; + int locked; fstring printer_name; }; @@ -149,7 +151,7 @@ static struct tdb_print_db *print_db_head; static struct tdb_print_db *get_print_db_byname(const char *printername) { - struct tdb_print_db *p, *last_entry; + struct tdb_print_db *p = NULL, *last_entry = NULL; int num_open = 0; pstring printdb_path; @@ -161,20 +163,28 @@ static struct tdb_print_db *get_print_db_byname(const char *printername) num_open++; last_entry = p; } + /* Not found. */ if (num_open >= MAX_PRINT_DBS_OPEN) { - /* Recycle the last entry. */ + /* Try and recycle the last entry. */ DLIST_PROMOTE(print_db_head, last_entry); - if (print_db_head->tdb) { - if (tdb_close(print_db_head->tdb)) { - DEBUG(0,("get_print_db: Failed to close tdb for printer %s\n", - print_db_head->printer_name )); - return NULL; + + for (p = print_db_head; p; p = p->next) { + if (p->locked) + continue; + if (p->tdb) { + if (tdb_close(print_db_head->tdb)) { + DEBUG(0,("get_print_db: Failed to close tdb for printer %s\n", + print_db_head->printer_name )); + return NULL; + } + ZERO_STRUCTP(p); + DLIST_PROMOTE(print_db_head, p); } } - p = print_db_head; - ZERO_STRUCTP(p); - } else { + } + + if (!p) { /* Create one. */ p = (struct tdb_print_db *)malloc(sizeof(struct tdb_print_db)); if (!p) { @@ -204,6 +214,30 @@ static struct tdb_print_db *get_print_db_byname(const char *printername) return p; } +/**************************************************************************** + Lock a pdb entry by string. +****************************************************************************/ + +static int pdb_entry_lock(struct tdb_print_db *pdb, char *key) +{ + if (pdb->locked == 0) { + if (tdb_lock_bystring(pdb->tdb, key) == -1) + return -1; + } + pdb->locked++; +} + +/**************************************************************************** + Unlock a pdb entry by string. +****************************************************************************/ + +static void pdb_entry_unlock(struct tdb_print_db *pdb, char *key) +{ + pdb->locked--; + if (pdb->locked == 0) + tdb_unlock_bystring(pdb->tdb, key); +} + /**************************************************************************** Initialise the printing backend. Called once at startup. Does not survive a fork @@ -235,12 +269,15 @@ BOOL print_backend_init(void) pdb = get_print_db_byname(lp_const_servicename(snum)); if (!pdb) continue; - tdb_lock_bystring(pdb->tdb, sversion); + if (pdb_entry_lock(pdb, sversion) == -1) { + DEBUG(0,("print_backend_init: Failed to open printer %s database\n", lp_const_servicename(snum) )); + return False; + } if (tdb_fetch_int32(pdb->tdb, sversion) != PRINT_DATABASE_VERSION) { tdb_traverse(pdb->tdb, tdb_traverse_delete_fn, NULL); tdb_store_int32(pdb->tdb, sversion, PRINT_DATABASE_VERSION); } - tdb_unlock_bystring(pdb->tdb, sversion); + pdb_entry_unlock(pdb, sversion); } /* select the appropriate printing interface... */ @@ -746,7 +783,10 @@ static void print_queue_update(int snum) /* Lock the queue for the database update */ slprintf(keystr, sizeof(keystr) - 1, "LOCK/%s", printer_name); - tdb_lock_bystring(pdb->tdb, keystr); + if (pdb_entry_lock(pdb, keystr) == -1) { + DEBUG(0,("print_queue_update: Failed to lock printer %s database\n", printer_name)); + return; + } /* * Ensure that no one else got in here. @@ -758,7 +798,7 @@ static void print_queue_update(int snum) /* * Someone else is doing the update, exit. */ - tdb_unlock_bystring(pdb->tdb, keystr); + pdb_entry_unlock(pdb, keystr); return; } @@ -774,7 +814,7 @@ static void print_queue_update(int snum) * the update. */ - tdb_unlock_bystring(pdb->tdb, keystr); + pdb_entry_unlock(pdb, keystr); /* * Update the cache time FIRST ! Stops others even @@ -1335,7 +1375,10 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) fstrcpy(pjob.queuename, lp_const_servicename(snum)); /* lock the database */ - tdb_lock_bystring(pdb->tdb, "INFO/nextjob"); + if (pdb_entry_lock(pdb, "INFO/nextjob") == -1) { + DEBUG(0,("print_job_start: failed to lock printing database %s\n", printername )); + return (uint32)-1; + } next_jobid = tdb_fetch_int32(pdb->tdb, "INFO/nextjob"); if (next_jobid == -1) @@ -1378,7 +1421,7 @@ to open spool file %s.\n", pjob.filename)); pjob_store(snum, jobid, &pjob); - tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); + pdb_entry_unlock(pdb, "INFO/nextjob"); /* * If the printer is marked as postscript output a leading @@ -1397,7 +1440,7 @@ to open spool file %s.\n", pjob.filename)); if (jobid != -1) pjob_delete(snum, jobid); - tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); + pdb_entry_unlock(pdb, "INFO/nextjob"); DEBUG(3, ("print_job_start: returning fail. Error = %s\n", strerror(errno) )); return -1; -- cgit From e519e528a0858a71ad7d3b821accce4a27d5b75f Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 27 Aug 2002 20:23:12 +0000 Subject: Handle locking correctly. Jeremy. (This used to be commit 4208f027cff77142df4f984a4a8985afbe30a4f1) --- source3/printing/printing.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source3/printing/printing.c b/source3/printing/printing.c index 61c3282196..c0cd44d1ec 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -178,9 +178,13 @@ static struct tdb_print_db *get_print_db_byname(const char *printername) print_db_head->printer_name )); return NULL; } - ZERO_STRUCTP(p); - DLIST_PROMOTE(print_db_head, p); } + ZERO_STRUCTP(p); + break; + } + if (p) { + DLIST_PROMOTE(print_db_head, p); + p = print_db_head; } } -- cgit From 907bec35135e803c04717482767a953b6c5fa2cb Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 27 Aug 2002 22:34:14 +0000 Subject: add hook for MSG_PRINTER_DRVUPGRADE that numps the change_id on all printers bound to a given driver (This used to be commit e913d508d4f894eb3f0e59b9c28b0fc5b56962ec) --- source3/utils/smbcontrol.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c index 2d78b21dcc..5401755376 100644 --- a/source3/utils/smbcontrol.c +++ b/source3/utils/smbcontrol.c @@ -42,6 +42,7 @@ static struct { {"dmalloc-mark", MSG_REQ_DMALLOC_MARK }, {"dmalloc-log-changed", MSG_REQ_DMALLOC_LOG_CHANGED }, {"shutdown", MSG_SHUTDOWN }, + {"change_id", MSG_PRINTER_DRVUPGRADE}, {NULL, -1} }; @@ -553,6 +554,10 @@ static BOOL do_command(char *dest, char *msg_name, int iparams, char **params) if (!send_message(dest, MSG_SHUTDOWN, NULL, 0, False)) return False; break; + case MSG_PRINTER_DRVUPGRADE: + if (!send_message(dest, MSG_PRINTER_DRVUPGRADE, params[0], 0, False)) + return False; + break; } return (True); -- cgit From 26e92ae81ca45ec1a950fbfb43c22667c8061183 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 27 Aug 2002 22:36:26 +0000 Subject: fix 2 byte alignment/offset bug that prevented Win2k/XP clients from receiving all the printer data in EnumPrinterDataEx(). (This used to be commit 901769acc3258b6f8f33d36b0d5e3468a30ba1b0) --- source3/rpc_parse/parse_spoolss.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/source3/rpc_parse/parse_spoolss.c b/source3/rpc_parse/parse_spoolss.c index 3a7f4b57ae..b8762b35e2 100644 --- a/source3/rpc_parse/parse_spoolss.c +++ b/source3/rpc_parse/parse_spoolss.c @@ -3678,7 +3678,7 @@ uint32 spoolss_size_printer_enum_values(PRINTER_ENUM_VALUES *p) /* uint32(offset) + uint32(length) + length) */ size += (size_of_uint32(&p->value_len)*2) + p->value_len; - size += (size_of_uint32(&p->data_len)*2) + p->data_len; + size += (size_of_uint32(&p->data_len)*2) + p->data_len + (p->data_len%2) ; size += size_of_uint32(&p->type); @@ -7086,8 +7086,10 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, if (!prs_uint32("size", ps, depth, &ctr->size)) return False; - /* offset data begins at 20 bytes per structure * size_of_array. - Don't forget the uint32 at the beginning */ + /* + * offset data begins at 20 bytes per structure * size_of_array. + * Don't forget the uint32 at the beginning + * */ current_offset = basic_unit * ctr->size_of_array; @@ -7106,18 +7108,22 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, return False; data_offset = ctr->values[i].value_len + valuename_offset; + if (!prs_uint32("data_offset", ps, depth, &data_offset)) return False; if (!prs_uint32("data_len", ps, depth, &ctr->values[i].data_len)) return False; - current_offset = data_offset + ctr->values[i].data_len - basic_unit; + current_offset = data_offset + ctr->values[i].data_len - basic_unit; + /* account for 2 byte alignment */ + current_offset += (current_offset % 2); } - /* loop #2 for writing the dynamically size objects - while viewing conversations between Win2k -> Win2k, - 4-byte alignment does not seem to matter here --jerry */ + /* + * loop #2 for writing the dynamically size objects; pay + * attention to 2-byte alignment here.... + */ for (i=0; isize_of_array; i++) { @@ -7127,10 +7133,11 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, if (!prs_uint8s(False, "data", ps, depth, ctr->values[i].data, ctr->values[i].data_len)) return False; + + if ( !prs_align_uint16(ps) ) + return False; } - - return True; } -- cgit From 28a7d0f50681df15d68edeab4a9a428e1d2545d4 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 27 Aug 2002 23:59:26 +0000 Subject: Move to reference counting rather than lock counting. Jeremy. (This used to be commit e7b48224c4f8c6063e1dd850cc91f5488e65a48d) --- source3/printing/printing.c | 92 ++++++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 35 deletions(-) diff --git a/source3/printing/printing.c b/source3/printing/printing.c index c0cd44d1ec..f3ee1a0d63 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -138,7 +138,7 @@ static int get_queue_status(int, print_status_struct *); struct tdb_print_db { struct tdb_print_db *next, *prev; TDB_CONTEXT *tdb; - int locked; + int ref_count; fstring printer_name; }; @@ -158,6 +158,7 @@ static struct tdb_print_db *get_print_db_byname(const char *printername) for (p = print_db_head, last_entry = print_db_head; p; p = p->next) { if (p->tdb && strequal(p->printer_name, printername)) { DLIST_PROMOTE(print_db_head, p); + p->ref_count++; return p; } num_open++; @@ -170,7 +171,7 @@ static struct tdb_print_db *get_print_db_byname(const char *printername) DLIST_PROMOTE(print_db_head, last_entry); for (p = print_db_head; p; p = p->next) { - if (p->locked) + if (p->ref_count) continue; if (p->tdb) { if (tdb_close(print_db_head->tdb)) { @@ -215,31 +216,14 @@ static struct tdb_print_db *get_print_db_byname(const char *printername) return NULL; } fstrcpy(p->printer_name, printername); + p->ref_count++; return p; } -/**************************************************************************** - Lock a pdb entry by string. -****************************************************************************/ - -static int pdb_entry_lock(struct tdb_print_db *pdb, char *key) -{ - if (pdb->locked == 0) { - if (tdb_lock_bystring(pdb->tdb, key) == -1) - return -1; - } - pdb->locked++; -} - -/**************************************************************************** - Unlock a pdb entry by string. -****************************************************************************/ - -static void pdb_entry_unlock(struct tdb_print_db *pdb, char *key) +static void release_print_db( struct tdb_print_db *pdb) { - pdb->locked--; - if (pdb->locked == 0) - tdb_unlock_bystring(pdb->tdb, key); + pdb->ref_count--; + SMB_ASSERT(pdb->ref_count >= 0); } /**************************************************************************** @@ -273,7 +257,7 @@ BOOL print_backend_init(void) pdb = get_print_db_byname(lp_const_servicename(snum)); if (!pdb) continue; - if (pdb_entry_lock(pdb, sversion) == -1) { + if (tdb_lock_bystring(pdb->tdb, sversion) == -1) { DEBUG(0,("print_backend_init: Failed to open printer %s database\n", lp_const_servicename(snum) )); return False; } @@ -281,7 +265,7 @@ BOOL print_backend_init(void) tdb_traverse(pdb->tdb, tdb_traverse_delete_fn, NULL); tdb_store_int32(pdb->tdb, sversion, PRINT_DATABASE_VERSION); } - pdb_entry_unlock(pdb, sversion); + tdb_unlock_bystring(pdb->tdb, sversion); } /* select the appropriate printing interface... */ @@ -341,6 +325,8 @@ static struct printjob *print_job_find(int snum, uint32 jobid) return NULL; ret = tdb_fetch(pdb->tdb, print_key(jobid)); + release_print_db(pdb); + if (!ret.dptr || ret.dsize != sizeof(pjob)) return NULL; @@ -391,6 +377,7 @@ uint32 sysjob_to_jobid(int unix_jobid) pdb = get_print_db_byname(lp_const_servicename(snum)); if (pdb) tdb_traverse(pdb->tdb, unixjob_traverse_fn, &unix_jobid); + release_print_db(pdb); if (sysjob_to_jobid_value != (uint32)-1) return sysjob_to_jobid_value; } @@ -492,6 +479,8 @@ static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) new_data.dsize = sizeof(*pjob); ret = (tdb_store(pdb->tdb, print_key(jobid), new_data, TDB_REPLACE) == 0); + release_print_db(pdb); + /* Send notify updates for what has changed */ if (ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { @@ -520,6 +509,7 @@ static void pjob_delete(int snum, uint32 jobid) if (!pjob) { DEBUG(5, ("pjob_delete(): we were asked to delete nonexistent job %u\n", (unsigned int)jobid)); + release_print_db(pdb); return; } @@ -540,6 +530,7 @@ static void pjob_delete(int snum, uint32 jobid) /* Remove from printing.tdb */ tdb_delete(pdb->tdb, print_key(jobid)); + release_print_db(pdb); rap_jobid_delete(snum, jobid); } @@ -692,6 +683,7 @@ static void print_cache_flush(int snum) return; slprintf(key, sizeof(key)-1, "CACHE/%s", printername); tdb_store_int32(pdb->tdb, key, -1); + release_print_db(pdb); } /**************************************************************************** @@ -712,6 +704,7 @@ static pid_t get_updating_pid(fstring printer_name) key.dsize = strlen(keystr); data = tdb_fetch(pdb->tdb, key); + release_print_db(pdb); if (!data.dptr || data.dsize != sizeof(pid_t)) return (pid_t)-1; @@ -746,6 +739,7 @@ static void set_updating_pid(const fstring printer_name, BOOL delete) if (delete) { tdb_delete(pdb->tdb, key); + release_print_db(pdb); return; } @@ -753,6 +747,7 @@ static void set_updating_pid(const fstring printer_name, BOOL delete) data.dsize = sizeof(pid_t); tdb_store(pdb->tdb, key, data, TDB_REPLACE); + release_print_db(pdb); } /**************************************************************************** @@ -781,14 +776,17 @@ static void print_queue_update(int snum) * This is essentially a mutex on the update. */ - if (get_updating_pid(printer_name) != -1) + if (get_updating_pid(printer_name) != -1) { + release_print_db(pdb); return; + } /* Lock the queue for the database update */ slprintf(keystr, sizeof(keystr) - 1, "LOCK/%s", printer_name); - if (pdb_entry_lock(pdb, keystr) == -1) { + if (tdb_lock_bystring(pdb->tdb, keystr) == -1) { DEBUG(0,("print_queue_update: Failed to lock printer %s database\n", printer_name)); + release_print_db(pdb); return; } @@ -802,7 +800,8 @@ static void print_queue_update(int snum) /* * Someone else is doing the update, exit. */ - pdb_entry_unlock(pdb, keystr); + tdb_unlock_bystring(pdb->tdb, keystr); + release_print_db(pdb); return; } @@ -818,7 +817,7 @@ static void print_queue_update(int snum) * the update. */ - pdb_entry_unlock(pdb, keystr); + tdb_unlock_bystring(pdb->tdb, keystr); /* * Update the cache time FIRST ! Stops others even @@ -909,6 +908,7 @@ static void print_queue_update(int snum) /* Delete our pid from the db. */ set_updating_pid(printer_name, True); + release_print_db(pdb); } /**************************************************************************** @@ -918,9 +918,13 @@ static void print_queue_update(int snum) BOOL print_job_exists(int snum, uint32 jobid) { struct tdb_print_db *pdb = get_print_db_byname(lp_const_servicename(snum)); + BOOL ret; + if (!pdb) return False; - return tdb_exists(pdb->tdb, print_key(jobid)); + ret = tdb_exists(pdb->tdb, print_key(jobid)); + release_print_db(pdb); + return ret; } /**************************************************************************** @@ -1205,8 +1209,10 @@ static BOOL print_cache_expired(int snum) DEBUG(3, ("print cache expired for queue %s \ (last_qscan_time = %d, time now = %d, qcachetime = %d)\n", printername, (int)last_qscan_time, (int)time_now, (int)lp_lpqcachetime() )); + release_print_db(pdb); return True; } + release_print_db(pdb); return False; } @@ -1228,6 +1234,7 @@ static int get_queue_status(int snum, print_status_struct *status) key.dptr = keystr; key.dsize = strlen(keystr); data = tdb_fetch(pdb->tdb, key); + release_print_db(pdb); if (data.dptr) { if (data.dsize == sizeof(print_status_struct)) { memcpy(status, data.dptr, sizeof(print_status_struct)); @@ -1287,6 +1294,7 @@ static int get_total_jobs(void) jobs = tdb_fetch_int32(pdb->tdb, "INFO/total_jobs"); if (jobs > 0) total_jobs += jobs; + release_print_db(pdb); } return total_jobs; } @@ -1313,11 +1321,13 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) if (!print_access_check(user, snum, PRINTER_ACCESS_USE)) { DEBUG(3, ("print_job_start: job start denied by security descriptor\n")); + release_print_db(pdb); return (uint32)-1; } if (!print_time_access_check(snum)) { DEBUG(3, ("print_job_start: job start denied by time check\n")); + release_print_db(pdb); return (uint32)-1; } @@ -1329,6 +1339,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) if (sys_fsusage(path, &dspace, &dsize) == 0 && dspace < 2*(SMB_BIG_UINT)lp_minprintspace(snum)) { DEBUG(3, ("print_job_start: disk space check failed.\n")); + release_print_db(pdb); errno = ENOSPC; return (uint32)-1; } @@ -1337,6 +1348,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) /* for autoloaded printers, check that the printcap entry still exists */ if (lp_autoloaded(snum) && !pcap_printername_ok(lp_const_servicename(snum), NULL)) { DEBUG(3, ("print_job_start: printer name %s check failed.\n", lp_const_servicename(snum) )); + release_print_db(pdb); errno = ENOENT; return (uint32)-1; } @@ -1345,6 +1357,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) if (lp_maxprintjobs(snum) && (njobs = print_queue_length(snum,NULL)) > lp_maxprintjobs(snum)) { DEBUG(3, ("print_job_start: number of jobs (%d) larger than max printjobs per queue (%d).\n", njobs, lp_maxprintjobs(snum) )); + release_print_db(pdb); errno = ENOSPC; return (uint32)-1; } @@ -1353,6 +1366,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) if (lp_totalprintjobs() && get_total_jobs() > lp_totalprintjobs()) { DEBUG(3, ("print_job_start: number of jobs (%d) larger than max printjobs per system (%d).\n", njobs, lp_totalprintjobs() )); + release_print_db(pdb); errno = ENOSPC; return (uint32)-1; } @@ -1379,8 +1393,9 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) fstrcpy(pjob.queuename, lp_const_servicename(snum)); /* lock the database */ - if (pdb_entry_lock(pdb, "INFO/nextjob") == -1) { + if (tdb_lock_bystring(pdb->tdb, "INFO/nextjob") == -1) { DEBUG(0,("print_job_start: failed to lock printing database %s\n", printername )); + release_print_db(pdb); return (uint32)-1; } @@ -1425,7 +1440,8 @@ to open spool file %s.\n", pjob.filename)); pjob_store(snum, jobid, &pjob); - pdb_entry_unlock(pdb, "INFO/nextjob"); + tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); + release_print_db(pdb); /* * If the printer is marked as postscript output a leading @@ -1444,7 +1460,8 @@ to open spool file %s.\n", pjob.filename)); if (jobid != -1) pjob_delete(snum, jobid); - pdb_entry_unlock(pdb, "INFO/nextjob"); + tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); + release_print_db(pdb); DEBUG(3, ("print_job_start: returning fail. Error = %s\n", strerror(errno) )); return -1; @@ -1677,13 +1694,17 @@ int print_queue_status(int snum, tdb_traverse(pdb->tdb, traverse_count_fn_queue, (void *)&tsc); - if (tsc.count == 0) + if (tsc.count == 0) { + release_print_db(pdb); return 0; + } /* Allocate the queue size. */ if ((tstruct.queue = (print_queue_struct *) - malloc(sizeof(print_queue_struct)*tsc.count)) == NULL) + malloc(sizeof(print_queue_struct)*tsc.count)) == NULL) { + release_print_db(pdb); return 0; + } /* * Fill in the queue. @@ -1695,6 +1716,7 @@ int print_queue_status(int snum, tstruct.snum = snum; tdb_traverse(pdb->tdb, traverse_fn_queue, (void *)&tstruct); + release_print_db(pdb); /* Sort the queue by submission time otherwise they are displayed in hash order. */ -- cgit From b42229c2d8f505470b7b5c1e0d74cf36438d6de7 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 28 Aug 2002 00:17:11 +0000 Subject: Sync up namecache code with HEAD and APPLIANCE_HEAD. Rerun unit tests. (This used to be commit 41c2e7b162224a524a1bf4da012f383f2a6032d0) --- source3/libsmb/namecache.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c index 31341df86e..2252e8e59c 100644 --- a/source3/libsmb/namecache.c +++ b/source3/libsmb/namecache.c @@ -34,19 +34,19 @@ struct nc_value { /* Initialise namecache system */ -void namecache_enable(void) +BOOL namecache_enable(void) { /* Check if we have been here before, or name caching disabled by setting the name cache timeout to zero. */ if (done_namecache_init) - return; + return False; done_namecache_init = True; if (lp_name_cache_timeout() == 0) { DEBUG(5, ("namecache_init: disabling netbios name cache\n")); - return; + return False; } /* Open namecache tdb in read/write or readonly mode */ @@ -58,13 +58,15 @@ void namecache_enable(void) if (!namecache_tdb) { DEBUG(5, ("namecache_init: could not open %s\n", lock_path("namecache.tdb"))); - return; + return False; } DEBUG(5, ("namecache_init: enabling netbios namecache, timeout %d " "seconds\n", lp_name_cache_timeout())); enable_namecache = True; + + return True; } /* Return a key for a name and name type. The caller must free @@ -104,7 +106,7 @@ static TDB_DATA namecache_value(struct in_addr *ip_list, int num_names, value->count = num_names; if (ip_list) - memcpy(value->ip_list, ip_list, sizeof(*ip_list)); + memcpy(value->ip_list, ip_list, sizeof(struct in_addr) * num_names); retval.dptr = (char *)value; retval.dsize = size; @@ -163,6 +165,9 @@ BOOL namecache_fetch(const char *name, int name_type, struct in_addr **ip_list, time_t now; int i; + *ip_list = NULL; + *num_names = 0; + if (!enable_namecache) return False; @@ -212,20 +217,23 @@ BOOL namecache_fetch(const char *name, int name_type, struct in_addr **ip_list, /* Extract and return namelist */ - *ip_list = (struct in_addr *)malloc( - sizeof(struct in_addr) * (data->count-1)); - - memcpy(*ip_list, data->ip_list, sizeof(struct in_addr) * - (data->count-1)); + DEBUG(5, ("namecache_fetch: returning %d address%s for %s#%02x: ", + data->count, data->count == 1 ? "" : "es", name, name_type)); - *num_names = data->count; + if (data->count) { - DEBUG(5, ("namecache_fetch: returning %d address%s for %s#%02x: ", - *num_names, *num_names == 1 ? "" : "es", name, name_type)); + *ip_list = (struct in_addr *)malloc( + sizeof(struct in_addr) * data->count); + + memcpy(*ip_list, data->ip_list, sizeof(struct in_addr) * data->count); + + *num_names = data->count; + + for (i = 0; i < *num_names; i++) + DEBUGADD(5, ("%s%s", inet_ntoa((*ip_list)[i]), + i == (*num_names - 1) ? "" : ", ")); - for (i = 0; i < *num_names; i++) - DEBUGADD(5, ("%s%s", inet_ntoa((*ip_list)[i]), - i == (*num_names - 1) ? "" : ", ")); + } DEBUGADD(5, ("\n")); -- cgit From f1597ae9d1e724e33d1bd25e49f75a84beae6b89 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 28 Aug 2002 02:11:24 +0000 Subject: Some debugs for panic_action. (This used to be commit 8f065f788b3af333c7c61236e33b6571b62b0c0d) --- source3/lib/util.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source3/lib/util.c b/source3/lib/util.c index bf012b9721..377457a714 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -1140,8 +1140,18 @@ something really nasty happened - panic! void smb_panic(char *why) { char *cmd = lp_panic_action(); + int result; + if (cmd && *cmd) { - system(cmd); + DEBUG(0, ("smb_panic(): calling panic action [%s]\n", cmd)); + result = system(cmd); + + if (result == -1) + DEBUG(0, ("smb_panic(): fork failed in panic action: %s\n", + strerror(errno))); + else + DEBUG(0, ("smb_panic(): action returned status %d\n", + WEXITSTATUS(result))); } DEBUG(0,("PANIC: %s\n", why)); dbgflush(); -- cgit From 0fec2e40fc0e21501fe8075309c326d8415c9f40 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 28 Aug 2002 04:19:15 +0000 Subject: Merge from 2_2. Volker (This used to be commit 739bc21429fee6ceb7430eb6c5e63882f6d4f030) --- docs/docbook/scripts/strip-links.pl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/docbook/scripts/strip-links.pl b/docs/docbook/scripts/strip-links.pl index d89da23abe..66bc101e08 100644 --- a/docs/docbook/scripts/strip-links.pl +++ b/docs/docbook/scripts/strip-links.pl @@ -1,13 +1,15 @@ #!/usr/bin/perl -## small script to stirp the tags from +## small script to strip the tags from ## manpages generated from docbook2man. we'll leave ## the and links for now while () { chomp ($_); - $_ =~ s/\s*\s*//g; + $_ =~ s/\s*\s+/ /g; + $_ =~ s/\s*\S//g; + $_ =~ s/\s*$//g; print "$_\n"; } -- cgit From 61e4ee500f70939b95fb293ec4005e481f95076a Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 04:21:11 +0000 Subject: Make const (This used to be commit b1ab3bec8dc7c5d0873b7a4b4c6fab2d7591c9b3) --- source3/lib/util_seaccess.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/lib/util_seaccess.c b/source3/lib/util_seaccess.c index 9fdf03adfc..5aef69e554 100644 --- a/source3/lib/util_seaccess.c +++ b/source3/lib/util_seaccess.c @@ -224,7 +224,7 @@ void se_map_standard(uint32 *access_mask, struct standard_mapping *mapping) "Access-Checking" document in MSDN. *****************************************************************************/ -BOOL se_access_check(SEC_DESC *sd, NT_USER_TOKEN *token, +BOOL se_access_check(SEC_DESC *sd, const NT_USER_TOKEN *token, uint32 acc_desired, uint32 *acc_granted, NTSTATUS *status) { -- cgit From 2b2b0f7119fe043f61259579ce70e782f5f9ec5f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 04:54:43 +0000 Subject: Put in intermediate version of new SAM system. It's not stable yet, code might be ugly, etc - please don't blame me for anything but instead try to fix the code :-). Compiling of the new sam system can be enabled with the configure option --with-sam Removing passdb/passgrp.c as it's unused fix typo in utils/testparm.c (This used to be commit 4b7de5ee236c043e6169f137992baf09a95c6f2c) --- source3/Makefile.in | 14 +- source3/acconfig.h | 1 + source3/configure | 1659 +++++++++++++++++++------------------- source3/configure.in | 16 + source3/groupdb/aliasdb.c | 4 +- source3/groupdb/groupdb.c | 4 +- source3/include/config.h.in | 3 +- source3/include/debug.h | 5 +- source3/include/includes.h | 4 + source3/include/sam.h | 258 ++++++ source3/lib/debug.c | 1 + source3/lib/time.c | 6 + source3/passdb/passgrp.c | 219 ----- source3/rpc_server/srv_samr_nt.c | 4 +- source3/sam/account.c | 301 +++++++ source3/sam/get_set_domain.c | 263 ++++++ source3/sam/get_set_group.c | 123 +++ source3/sam/get_set_user.c | 903 +++++++++++++++++++++ source3/sam/interface.c | 1001 +++++++++++++++++++++++ source3/utils/testparm.c | 2 +- 20 files changed, 3741 insertions(+), 1050 deletions(-) create mode 100644 source3/include/sam.h delete mode 100644 source3/passdb/passgrp.c create mode 100644 source3/sam/account.c create mode 100644 source3/sam/get_set_domain.c create mode 100644 source3/sam/get_set_group.c create mode 100644 source3/sam/get_set_user.c create mode 100644 source3/sam/interface.c diff --git a/source3/Makefile.in b/source3/Makefile.in index 7b958d03c5..e5156d7b18 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -214,8 +214,12 @@ PASSDB_GET_SET_OBJ = passdb/pdb_get_set.o PASSDB_OBJ = $(PASSDB_GET_SET_OBJ) passdb/passdb.o passdb/pdb_interface.o \ passdb/machine_sid.o passdb/pdb_smbpasswd.o \ passdb/pdb_tdb.o passdb/pdb_ldap.o passdb/pdb_plugin.o \ - passdb/pdb_nisplus.o passdb/pdb_unix.o passdb/util_sam_sid.o \ - passdb/pdb_compat.o + passdb/pdb_unix.o passdb/util_sam_sid.o \ + passdb/pdb_compat.o passdb/pdb_nisplus.o + +SAM_OBJ = sam/account.o sam/get_set_user.o sam/get_set_group.o sam/get_set_domain.o sam/interface.o + +SAMTEST_OBJ = torture/samtest.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) $(READLINE_OBJ) GROUPDB_OBJ = groupdb/mapping.o @@ -446,7 +450,7 @@ PROTO_OBJ = $(SMBD_OBJ_MAIN) \ $(PRINTING_OBJ) $(PRINTBACKEND_OBJ) $(OPLOCK_OBJ) $(NOTIFY_OBJ) \ $(QUOTAOBJS) $(PASSDB_OBJ) $(GROUPDB_OBJ) $(MSDFS_OBJ) \ $(READLINE_OBJ) $(PROFILE_OBJ) $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \ - $(LIB_SMBD_OBJ) + $(LIB_SMBD_OBJ) $(SAM_OBJ) NSS_OBJ_0 = nsswitch/wins.o $(PARAM_OBJ) $(UBIQX_OBJ) $(LIBSMB_OBJ) \ $(LIB_OBJ) $(NSSWINS_OBJ) @@ -675,6 +679,10 @@ bin/pdbedit: $(PDBEDIT_OBJ) bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(PDBEDIT_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) @BUILD_POPT@ +bin/samtest: $(SAMTEST_OBJ) bin/.dummy + @echo Linking $@ + @$(CC) $(FLAGS) -o $@ $(SAMTEST_OBJ) $(LDFLAGS) $(DYNEXP) $(TERMLDFLAGS) $(TERMLIBS) $(DYNEXP) $(LIBS) @BUILD_POPT@ + bin/smbgroupedit: $(SMBGROUPEDIT_OBJ) bin/.dummy @echo Linking $@ @$(CC) $(FLAGS) -o $@ $(SMBGROUPEDIT_OBJ) $(LDFLAGS) $(LIBS) diff --git a/source3/acconfig.h b/source3/acconfig.h index 64fbe1d719..11db920e26 100644 --- a/source3/acconfig.h +++ b/source3/acconfig.h @@ -166,6 +166,7 @@ #undef MMAP_BLACKLIST #undef HAVE_IMMEDIATE_STRUCTURES #undef HAVE_CUPS +#undef WITH_SAM #undef WITH_LDAP_SAM #undef WITH_NISPLUS_SAM #undef WITH_TDB_SAM diff --git a/source3/configure b/source3/configure index 431edcbe35..bc494a1663 100755 --- a/source3/configure +++ b/source3/configure @@ -56,6 +56,8 @@ ac_help="$ac_help --with-pam Include PAM support (default=no)" ac_help="$ac_help --with-pam_smbpass Build a PAM module to allow other applications to use our smbpasswd file (default=no)" +ac_help="$ac_help + --with-sam Build new (experimental) SAM database (default=no)" ac_help="$ac_help --with-tdbsam Include experimental TDB SAM support (default=no)" ac_help="$ac_help @@ -814,7 +816,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:818: checking for $ac_word" >&5 +echo "configure:820: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -844,7 +846,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:848: checking for $ac_word" >&5 +echo "configure:850: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -895,7 +897,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:899: checking for $ac_word" >&5 +echo "configure:901: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -927,7 +929,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:931: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:933: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -938,12 +940,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 942 "configure" +#line 944 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -969,12 +971,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:973: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:975: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:978: checking whether we are using GNU C" >&5 +echo "configure:980: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -983,7 +985,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:987: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:989: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1002,7 +1004,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1006: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1008: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1064,7 +1066,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1068: checking for a BSD compatible install" >&5 +echo "configure:1070: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1116,12 +1118,12 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in gawk mawk nawk awk +for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1125: checking for $ac_word" >&5 +echo "configure:1127: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1153,7 +1155,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1157: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1159: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1169,7 +1171,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1173: checking for POSIXized ISC" >&5 +echo "configure:1175: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1192,10 +1194,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1196: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1198: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1199: checking whether cc understands -c and -o together" >&5 +echo "configure:1201: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1207,16 +1209,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1212: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1213: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1214: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1250,20 +1252,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1254: checking that the C compiler understands volatile" >&5 +echo "configure:1256: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1267: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1312,7 +1314,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1316: checking host system type" >&5 +echo "configure:1318: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1333,7 +1335,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1337: checking target system type" >&5 +echo "configure:1339: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1351,7 +1353,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1355: checking build system type" >&5 +echo "configure:1357: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1385,7 +1387,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1389: checking config.cache system type" >&5 +echo "configure:1391: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1413,7 +1415,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1417: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1419: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1574,14 +1576,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1578: checking for LFS support" >&5 +echo "configure:1580: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1593,7 +1595,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1624,14 +1626,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1628: checking for LFS support" >&5 +echo "configure:1630: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1669,7 +1671,7 @@ main() { } EOF -if { (eval echo configure:1673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1702,14 +1704,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1706: checking for LFS support" >&5 +echo "configure:1708: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1721,7 +1723,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1751,21 +1753,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1755: checking for inline" >&5 +echo "configure:1757: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1771: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1791,7 +1793,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1795: checking how to run the C preprocessor" >&5 +echo "configure:1797: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1806,13 +1808,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1816: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1818: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1823,13 +1825,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1840,13 +1842,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1850: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1871,12 +1873,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1875: checking for ANSI C header files" >&5 +echo "configure:1877: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1884,7 +1886,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1890: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1901,7 +1903,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1919,7 +1921,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1940,7 +1942,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1951,7 +1953,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1979,12 +1981,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1983: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1985: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1992,7 +1994,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:1996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2017,7 +2019,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2021: checking for opendir in -ldir" >&5 +echo "configure:2023: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2025,7 +2027,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2042: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2058,7 +2060,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2062: checking for opendir in -lx" >&5 +echo "configure:2064: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2066,7 +2068,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2100,12 +2102,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2104: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2106: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2114,7 +2116,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2135,12 +2137,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2139: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2141: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2156,7 +2158,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2180,17 +2182,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2184: checking for $ac_hdr" >&5 +echo "configure:2186: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2194: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2196: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2220,17 +2222,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2224: checking for $ac_hdr" >&5 +echo "configure:2226: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2234: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2236: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2260,17 +2262,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2264: checking for $ac_hdr" >&5 +echo "configure:2266: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2274: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2276: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2300,17 +2302,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2304: checking for $ac_hdr" >&5 +echo "configure:2306: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2316: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2340,17 +2342,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2344: checking for $ac_hdr" >&5 +echo "configure:2346: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2354: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2356: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2380,17 +2382,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2384: checking for $ac_hdr" >&5 +echo "configure:2386: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2394: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2396: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2420,17 +2422,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2424: checking for $ac_hdr" >&5 +echo "configure:2426: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2436: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2460,17 +2462,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2464: checking for $ac_hdr" >&5 +echo "configure:2466: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2474: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2476: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2504,14 +2506,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2533,17 +2535,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2537: checking for $ac_hdr" >&5 +echo "configure:2539: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2547: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2549: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2573,17 +2575,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2577: checking for $ac_hdr" >&5 +echo "configure:2579: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2587: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2613,17 +2615,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2617: checking for $ac_hdr" >&5 +echo "configure:2619: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2653,17 +2655,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2657: checking for $ac_hdr" >&5 +echo "configure:2659: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2667: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2693,17 +2695,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2697: checking for $ac_hdr" >&5 +echo "configure:2699: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2707: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2735,17 +2737,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2739: checking for $ac_hdr" >&5 +echo "configure:2741: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2777,17 +2779,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2781: checking for $ac_hdr" >&5 +echo "configure:2783: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2819,17 +2821,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2823: checking for $ac_hdr" >&5 +echo "configure:2825: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2857,7 +2859,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2861: checking size of int" >&5 +echo "configure:2863: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2865,18 +2867,19 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); - return(0); + exit(0); } EOF -if { (eval echo configure:2880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2896,7 +2899,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2900: checking size of long" >&5 +echo "configure:2903: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2904,18 +2907,19 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); - return(0); + exit(0); } EOF -if { (eval echo configure:2919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2935,7 +2939,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2939: checking size of short" >&5 +echo "configure:2943: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2943,18 +2947,19 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); - return(0); + exit(0); } EOF -if { (eval echo configure:2958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -2975,12 +2980,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:2979: checking for working const" >&5 +echo "configure:2984: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3038: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3050,21 +3055,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3054: checking for inline" >&5 +echo "configure:3059: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3090,14 +3095,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3094: checking whether byte ordering is bigendian" >&5 +echo "configure:3099: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3108,11 +3113,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3123,7 +3128,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3127: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3143,7 +3148,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3180,14 +3185,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3184: checking whether char is unsigned" >&5 +echo "configure:3189: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3244,12 +3249,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3248: checking return type of signal handlers" >&5 +echo "configure:3253: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3266,7 +3271,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3270: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3285,12 +3290,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3289: checking for uid_t in sys/types.h" >&5 +echo "configure:3294: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3319,12 +3324,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3323: checking for mode_t" >&5 +echo "configure:3328: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3352,12 +3357,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3356: checking for off_t" >&5 +echo "configure:3361: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3385,12 +3390,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3389: checking for size_t" >&5 +echo "configure:3394: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3418,12 +3423,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3422: checking for pid_t" >&5 +echo "configure:3427: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3451,12 +3456,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3455: checking for st_rdev in struct stat" >&5 +echo "configure:3460: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3464,7 +3469,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3468: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3473: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3485,12 +3490,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3489: checking for d_off in dirent" >&5 +echo "configure:3494: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3500,7 +3505,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3509: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3521,12 +3526,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3525: checking for ino_t" >&5 +echo "configure:3530: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3554,12 +3559,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3558: checking for loff_t" >&5 +echo "configure:3563: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3587,12 +3592,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3591: checking for offset_t" >&5 +echo "configure:3596: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3620,12 +3625,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3624: checking for ssize_t" >&5 +echo "configure:3629: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3653,12 +3658,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3657: checking for wchar_t" >&5 +echo "configure:3662: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3700,7 +3705,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3704: checking for $ac_word" >&5 +echo "configure:3709: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3749,12 +3754,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3753: checking for $ac_func" >&5 +echo "configure:3758: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3803,7 +3808,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3807: checking for dlopen in -ldl" >&5 +echo "configure:3812: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3811,7 +3816,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3852,13 +3857,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3856: checking for immediate structures" >&5 +echo "configure:3861: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3876,7 +3881,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3899,13 +3904,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3903: checking for unix domain sockets" >&5 +echo "configure:3908: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3920,7 +3925,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3942,13 +3947,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3946: checking for socklen_t type" >&5 +echo "configure:3951: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3961,7 +3966,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:3965: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -3982,13 +3987,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:3986: checking for sig_atomic_t type" >&5 +echo "configure:3991: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4001,7 +4006,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4005: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4024,20 +4029,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4028: checking for errno declaration" >&5 +echo "configure:4033: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4041: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4046: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4059,20 +4064,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4063: checking for setresuid declaration" >&5 +echo "configure:4068: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4076: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4094,20 +4099,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4098: checking for setresgid declaration" >&5 +echo "configure:4103: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4111: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4129,20 +4134,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4133: checking for asprintf declaration" >&5 +echo "configure:4138: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4146: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4151: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4164,20 +4169,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4168: checking for vasprintf declaration" >&5 +echo "configure:4173: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4181: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4199,20 +4204,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4203: checking for vsnprintf declaration" >&5 +echo "configure:4208: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4234,20 +4239,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4238: checking for snprintf declaration" >&5 +echo "configure:4243: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4251: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4271,7 +4276,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4275: checking for real setresuid" >&5 +echo "configure:4280: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4280,12 +4285,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4310,7 +4315,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4314: checking for real setresgid" >&5 +echo "configure:4319: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4319,13 +4324,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4348,7 +4353,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4352: checking for 8-bit clean memcmp" >&5 +echo "configure:4357: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4356,7 +4361,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4389,12 +4394,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4393: checking for $ac_func" >&5 +echo "configure:4398: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4443,7 +4448,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4447: checking for crypt in -lcrypt" >&5 +echo "configure:4452: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4451,7 +4456,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4495,7 +4500,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4499: checking whether to use readline" >&5 +echo "configure:4504: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4507,17 +4512,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4511: checking for $ac_hdr" >&5 +echo "configure:4516: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4521: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4526: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4547,17 +4552,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4551: checking for $ac_hdr" >&5 +echo "configure:4556: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4561: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4588,17 +4593,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4592: checking for $ac_hdr" >&5 +echo "configure:4597: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4602: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4621,7 +4626,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4625: checking for tgetent in -l${termlib}" >&5 +echo "configure:4630: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4629,7 +4634,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4662,7 +4667,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4666: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4671: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4670,7 +4675,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4732,17 +4737,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4736: checking for $ac_hdr" >&5 +echo "configure:4741: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4746: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4772,17 +4777,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4776: checking for $ac_hdr" >&5 +echo "configure:4781: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4786: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4813,17 +4818,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4817: checking for $ac_hdr" >&5 +echo "configure:4822: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4846,7 +4851,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4850: checking for tgetent in -l${termlib}" >&5 +echo "configure:4855: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4854,7 +4859,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4887,7 +4892,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4891: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4896: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4895,7 +4900,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4956,7 +4961,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:4960: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:4965: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4964,7 +4969,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5008,12 +5013,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5012: checking for $ac_func" >&5 +echo "configure:5017: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5064,7 +5069,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5068: checking for printf in -lnsl_s" >&5 +echo "configure:5073: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5072,7 +5077,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5114,7 +5119,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5118: checking for printf in -lnsl" >&5 +echo "configure:5123: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5122,7 +5127,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5164,7 +5169,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5168: checking for connect in -lsocket" >&5 +echo "configure:5173: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5172,7 +5177,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5214,7 +5219,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5218: checking for connect in -linet" >&5 +echo "configure:5223: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5222,7 +5227,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5277,12 +5282,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5281: checking for $ac_func" >&5 +echo "configure:5286: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5331,7 +5336,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5335: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5340: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5339,7 +5344,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5380,12 +5385,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5384: checking for $ac_func" >&5 +echo "configure:5389: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5441,12 +5446,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5445: checking for $ac_func" >&5 +echo "configure:5450: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5496,12 +5501,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5500: checking for $ac_func" >&5 +echo "configure:5505: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5551,12 +5556,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5555: checking for $ac_func" >&5 +echo "configure:5560: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5606,12 +5611,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5610: checking for $ac_func" >&5 +echo "configure:5615: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5661,12 +5666,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5665: checking for $ac_func" >&5 +echo "configure:5670: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5716,12 +5721,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5720: checking for $ac_func" >&5 +echo "configure:5725: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5771,12 +5776,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5775: checking for $ac_func" >&5 +echo "configure:5780: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5826,12 +5831,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5830: checking for $ac_func" >&5 +echo "configure:5835: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5881,12 +5886,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5885: checking for $ac_func" >&5 +echo "configure:5890: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5936,12 +5941,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5940: checking for $ac_func" >&5 +echo "configure:5945: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5992,12 +5997,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5996: checking for $ac_func" >&5 +echo "configure:6001: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6049,12 +6054,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6053: checking for $ac_func" >&5 +echo "configure:6058: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6105,12 +6110,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6109: checking for $ac_func" >&5 +echo "configure:6114: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6160,12 +6165,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6164: checking for $ac_func" >&5 +echo "configure:6169: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6215,12 +6220,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6219: checking for $ac_func" >&5 +echo "configure:6224: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6270,12 +6275,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6274: checking for $ac_func" >&5 +echo "configure:6279: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6325,12 +6330,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6329: checking for $ac_func" >&5 +echo "configure:6334: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6380,12 +6385,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6384: checking for $ac_func" >&5 +echo "configure:6389: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6435,12 +6440,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6439: checking for $ac_func" >&5 +echo "configure:6444: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6490,12 +6495,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6494: checking for $ac_func" >&5 +echo "configure:6499: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6545,12 +6550,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6549: checking for $ac_func" >&5 +echo "configure:6554: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6600,12 +6605,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6604: checking for $ac_func" >&5 +echo "configure:6609: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6655,12 +6660,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6659: checking for $ac_func" >&5 +echo "configure:6664: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6710,12 +6715,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6714: checking for $ac_func" >&5 +echo "configure:6719: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6765,12 +6770,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6769: checking for $ac_func" >&5 +echo "configure:6774: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6820,12 +6825,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6824: checking for $ac_func" >&5 +echo "configure:6829: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6879,9 +6884,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6883: checking for stat64 in " >&5 +echo "configure:6888: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6912,9 +6917,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6916: checking for lstat64 in " >&5 +echo "configure:6921: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6945,9 +6950,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6949: checking for fstat64 in " >&5 +echo "configure:6954: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -6979,7 +6984,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:6983: checking for dn_expand in -lresolv" >&5 +echo "configure:6988: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6987,7 +6992,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7036,12 +7041,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7040: checking for $ac_func" >&5 +echo "configure:7045: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7089,7 +7094,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7093: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7098: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7097,7 +7102,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7138,12 +7143,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7142: checking for $ac_func" >&5 +echo "configure:7147: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7197,12 +7202,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7201: checking for $ac_func" >&5 +echo "configure:7206: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7250,7 +7255,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7254: checking for putprpwnam in -lsec" >&5 +echo "configure:7259: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7258,7 +7263,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7299,12 +7304,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7303: checking for $ac_func" >&5 +echo "configure:7308: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7359,12 +7364,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7363: checking for $ac_func" >&5 +echo "configure:7368: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7412,7 +7417,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7416: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7421: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7420,7 +7425,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7461,12 +7466,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7465: checking for $ac_func" >&5 +echo "configure:7470: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7520,12 +7525,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7524: checking for $ac_func" >&5 +echo "configure:7529: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7573,7 +7578,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7577: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7582: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7581,7 +7586,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7622,12 +7627,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7626: checking for $ac_func" >&5 +echo "configure:7631: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7683,12 +7688,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7687: checking for $ac_func" >&5 +echo "configure:7692: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7736,7 +7741,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7740: checking for getspnam in -lgen" >&5 +echo "configure:7745: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7744,7 +7749,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7785,12 +7790,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7789: checking for $ac_func" >&5 +echo "configure:7794: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7845,12 +7850,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7849: checking for $ac_func" >&5 +echo "configure:7854: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7898,7 +7903,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7902: checking for getspnam in -lsecurity" >&5 +echo "configure:7907: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7906,7 +7911,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7947,12 +7952,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7951: checking for $ac_func" >&5 +echo "configure:7956: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8006,12 +8011,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8010: checking for $ac_func" >&5 +echo "configure:8015: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8059,7 +8064,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8063: checking for getspnam in -lsec" >&5 +echo "configure:8068: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8067,7 +8072,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8108,12 +8113,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8112: checking for $ac_func" >&5 +echo "configure:8117: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8168,12 +8173,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8172: checking for $ac_func" >&5 +echo "configure:8177: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8221,7 +8226,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8225: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8230: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8229,7 +8234,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8270,12 +8275,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8274: checking for $ac_func" >&5 +echo "configure:8279: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8329,12 +8334,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8333: checking for $ac_func" >&5 +echo "configure:8338: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8382,7 +8387,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8386: checking for bigcrypt in -lsec" >&5 +echo "configure:8391: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8390,7 +8395,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8431,12 +8436,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8435: checking for $ac_func" >&5 +echo "configure:8440: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8491,12 +8496,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8495: checking for $ac_func" >&5 +echo "configure:8500: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8544,7 +8549,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8548: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8553: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8552,7 +8557,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8593,12 +8598,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8597: checking for $ac_func" >&5 +echo "configure:8602: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8652,12 +8657,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8656: checking for $ac_func" >&5 +echo "configure:8661: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8705,7 +8710,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8709: checking for getprpwnam in -lsec" >&5 +echo "configure:8714: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8713,7 +8718,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8754,12 +8759,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8758: checking for $ac_func" >&5 +echo "configure:8763: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8826,7 +8831,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8830: checking ability to build shared libraries" >&5 +echo "configure:8835: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -8986,7 +8991,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8990: checking for $ac_word" >&5 +echo "configure:8995: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9043,17 +9048,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9047: checking linker flags for shared libraries" >&5 +echo "configure:9052: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9050: checking compiler flags for position-independent code" >&5 +echo "configure:9055: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9057: checking whether building shared libraries actually works" >&5 +echo "configure:9062: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9084,7 +9089,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9088: checking for long long" >&5 +echo "configure:9093: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9093,12 +9098,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9125,20 +9130,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9129: checking for LL suffix on long long integers" >&5 +echo "configure:9134: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9147: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9160,7 +9165,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9164: checking for 64 bit off_t" >&5 +echo "configure:9169: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9169,13 +9174,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9198,7 +9203,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9202: checking for off64_t" >&5 +echo "configure:9207: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9207,7 +9212,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9240,7 +9245,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9244: checking for 64 bit ino_t" >&5 +echo "configure:9249: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9249,13 +9254,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9278,7 +9283,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9282: checking for ino64_t" >&5 +echo "configure:9287: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9287,7 +9292,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9320,7 +9325,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9324: checking for dev64_t" >&5 +echo "configure:9329: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9329,7 +9334,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9362,13 +9367,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9366: checking for struct dirent64" >&5 +echo "configure:9371: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9401,7 +9406,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9405: checking for major macro" >&5 +echo "configure:9410: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9410,7 +9415,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9442,7 +9447,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9446: checking for minor macro" >&5 +echo "configure:9451: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9451,7 +9456,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9483,7 +9488,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9487: checking for unsigned char" >&5 +echo "configure:9492: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9492,12 +9497,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9520,13 +9525,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9524: checking for sin_len in sock" >&5 +echo "configure:9529: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9535,7 +9540,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9539: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9544: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9556,13 +9561,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9560: checking whether seekdir returns void" >&5 +echo "configure:9565: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9571,7 +9576,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9575: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9592,20 +9597,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9596: checking for __FILE__ macro" >&5 +echo "configure:9601: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9609: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9614: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9626,20 +9631,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9630: checking for __FUNCTION__ macro" >&5 +echo "configure:9635: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9643: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9648: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9660,7 +9665,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9664: checking if gettimeofday takes tz argument" >&5 +echo "configure:9669: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9669,14 +9674,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9699,13 +9704,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9703: checking for __va_copy" >&5 +echo "configure:9708: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9713,7 +9718,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9734,7 +9739,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9738: checking for C99 vsnprintf" >&5 +echo "configure:9743: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9743,7 +9748,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9770,7 +9775,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9793,7 +9798,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9797: checking for broken readdir" >&5 +echo "configure:9802: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9802,7 +9807,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9810,7 +9815,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9833,13 +9838,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9837: checking for utimbuf" >&5 +echo "configure:9842: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9847,7 +9852,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9856: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9871,12 +9876,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9875: checking for $ac_func" >&5 +echo "configure:9880: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9925,13 +9930,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9929: checking for ut_name in utmp" >&5 +echo "configure:9934: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9939,7 +9944,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9943: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9948: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -9960,13 +9965,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:9964: checking for ut_user in utmp" >&5 +echo "configure:9969: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9974,7 +9979,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -9995,13 +10000,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:9999: checking for ut_id in utmp" >&5 +echo "configure:10004: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10009,7 +10014,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10018: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10030,13 +10035,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10034: checking for ut_host in utmp" >&5 +echo "configure:10039: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10044,7 +10049,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10053: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10065,13 +10070,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10069: checking for ut_time in utmp" >&5 +echo "configure:10074: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10079,7 +10084,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10100,13 +10105,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10104: checking for ut_tv in utmp" >&5 +echo "configure:10109: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10114,7 +10119,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10135,13 +10140,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10139: checking for ut_type in utmp" >&5 +echo "configure:10144: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10149,7 +10154,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10170,13 +10175,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10174: checking for ut_pid in utmp" >&5 +echo "configure:10179: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10184,7 +10189,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10205,13 +10210,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10209: checking for ut_exit in utmp" >&5 +echo "configure:10214: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10219,7 +10224,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10240,13 +10245,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10244: checking for ut_addr in utmp" >&5 +echo "configure:10249: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10254,7 +10259,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10276,13 +10281,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10280: checking whether pututline returns pointer" >&5 +echo "configure:10285: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10290,7 +10295,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10299: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10312,13 +10317,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10316: checking for ut_syslen in utmpx" >&5 +echo "configure:10321: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10326,7 +10331,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10330: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10335: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10350,7 +10355,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10354: checking whether to use libiconv" >&5 +echo "configure:10359: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10363,7 +10368,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10367: checking for iconv_open in -liconv" >&5 +echo "configure:10372: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10371,7 +10376,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10425,7 +10430,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10429: checking for working iconv" >&5 +echo "configure:10434: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10434,7 +10439,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10445,7 +10450,7 @@ main() { } EOF -if { (eval echo configure:10449: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10469,7 +10474,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10473: checking for Linux kernel oplocks" >&5 +echo "configure:10478: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10478,7 +10483,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10492,7 +10497,7 @@ main() { } EOF -if { (eval echo configure:10496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10515,7 +10520,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10519: checking for kernel change notify support" >&5 +echo "configure:10524: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10524,7 +10529,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10538,7 +10543,7 @@ main() { } EOF -if { (eval echo configure:10542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10561,7 +10566,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10565: checking for kernel share modes" >&5 +echo "configure:10570: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10570,7 +10575,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10586,7 +10591,7 @@ main() { } EOF -if { (eval echo configure:10590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10612,13 +10617,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10616: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10621: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10626,7 +10631,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10630: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10647,7 +10652,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10651: checking for irix specific capabilities" >&5 +echo "configure:10656: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10656,7 +10661,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10671,7 +10676,7 @@ main() { } EOF -if { (eval echo configure:10675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10699,13 +10704,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10703: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10708: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10715,7 +10720,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10719: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10724: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10736,13 +10741,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10740: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10745: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10752,7 +10757,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10756: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10773,13 +10778,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10777: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10782: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10789,7 +10794,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10793: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10798: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10810,13 +10815,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10814: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10819: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10826,7 +10831,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10848,13 +10853,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10852: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10857: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10868,7 +10873,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10889,16 +10894,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10893: checking for test routines" >&5 +echo "configure:10898: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10912,7 +10917,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10916: checking for ftruncate extend" >&5 +echo "configure:10921: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10921,11 +10926,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10948,7 +10953,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10952: checking for AF_LOCAL socket support" >&5 +echo "configure:10957: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10957,11 +10962,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -10985,7 +10990,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:10989: checking for broken getgroups" >&5 +echo "configure:10994: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10994,11 +10999,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11021,7 +11026,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11025: checking whether getpass should be replaced" >&5 +echo "configure:11030: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11029,7 +11034,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11065,7 +11070,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11069: checking for broken inet_ntoa" >&5 +echo "configure:11074: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11074,7 +11079,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11088,7 +11093,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11111,7 +11116,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11115: checking for secure mkstemp" >&5 +echo "configure:11120: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11120,7 +11125,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11137,7 +11142,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11160,7 +11165,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11164: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11169: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11169,12 +11174,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11197,7 +11202,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11201: checking for root" >&5 +echo "configure:11206: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11206,11 +11211,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11238,7 +11243,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11242: checking for iface AIX" >&5 +echo "configure:11247: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11247,7 +11252,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11279,7 +11284,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11283: checking for iface ifconf" >&5 +echo "configure:11288: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11288,7 +11293,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11321,7 +11326,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11325: checking for iface ifreq" >&5 +echo "configure:11330: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11330,7 +11335,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11367,7 +11372,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11371: checking for setresuid" >&5 +echo "configure:11376: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11376,7 +11381,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11410,7 +11415,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11414: checking for setreuid" >&5 +echo "configure:11419: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11419,7 +11424,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11452,7 +11457,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11456: checking for seteuid" >&5 +echo "configure:11461: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11461,7 +11466,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11494,7 +11499,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11498: checking for setuidx" >&5 +echo "configure:11503: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11503,7 +11508,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11536,7 +11541,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11540: checking for working mmap" >&5 +echo "configure:11545: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11545,11 +11550,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11572,7 +11577,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11576: checking for ftruncate needs root" >&5 +echo "configure:11581: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11581,11 +11586,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11608,7 +11613,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11612: checking for fcntl locking" >&5 +echo "configure:11617: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11617,11 +11622,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11644,7 +11649,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11648: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11653: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11653,11 +11658,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11666: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11682,7 +11687,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11686: checking for 64 bit fcntl locking" >&5 +echo "configure:11691: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11691,7 +11696,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11740,13 +11745,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11744: checking for st_blocks in struct stat" >&5 +echo "configure:11749: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11755,7 +11760,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11776,13 +11781,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11780: checking for st_blksize in struct stat" >&5 +echo "configure:11785: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11791,7 +11796,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11795: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11814,13 +11819,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11818: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11823: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11857,13 +11862,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11861: checking for broken nisplus include files" >&5 +echo "configure:11866: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11873,7 +11878,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11897,7 +11902,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11901: checking whether to use smbwrapper" >&5 +echo "configure:11906: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11944,7 +11949,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11948: checking whether to use AFS clear-text auth" >&5 +echo "configure:11953: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -11970,7 +11975,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11974: checking whether to use DFS clear-text auth" >&5 +echo "configure:11979: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -11996,7 +12001,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12000: checking for /usr/kerberos" >&5 +echo "configure:12005: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12009,7 +12014,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12013: checking for kerberos 5 install path" >&5 +echo "configure:12018: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12038,17 +12043,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12042: checking for $ac_hdr" >&5 +echo "configure:12047: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12052: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12057: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12081,17 +12086,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12085: checking for $ac_hdr" >&5 +echo "configure:12090: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12095: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12100: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12121,7 +12126,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12125: checking for _et_list in -lcom_err" >&5 +echo "configure:12130: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12129,7 +12134,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12161,7 +12166,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12165: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12170: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12169,7 +12174,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12205,7 +12210,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12209: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12214: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12213,7 +12218,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12252,7 +12257,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12256: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12261: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12260,7 +12265,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12300,7 +12305,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12304: checking for ber_scanf in -llber" >&5 +echo "configure:12309: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12308,7 +12313,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12344,7 +12349,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12348: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12353: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12352,7 +12357,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12394,12 +12399,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12398: checking for $ac_func" >&5 +echo "configure:12403: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12447,13 +12452,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12451: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12456: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12462,7 +12467,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12466: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12471: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12484,7 +12489,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12488: checking whether to use AUTOMOUNT" >&5 +echo "configure:12493: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12509,7 +12514,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12513: checking whether to use SMBMOUNT" >&5 +echo "configure:12518: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12546,7 +12551,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12550: checking whether to use PAM" >&5 +echo "configure:12555: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12572,7 +12577,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12576: checking for pam_get_data in -lpam" >&5 +echo "configure:12581: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12580,7 +12585,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12618,7 +12623,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12622: checking whether to use pam_smbpass" >&5 +echo "configure:12627: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12656,12 +12661,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12660: checking for $ac_func" >&5 +echo "configure:12665: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12710,7 +12715,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12714: checking for crypt in -lcrypt" >&5 +echo "configure:12719: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12718,7 +12723,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12764,7 +12769,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12768: checking for a crypt that needs truncated salt" >&5 +echo "configure:12773: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12773,11 +12778,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12800,6 +12805,30 @@ EOF fi fi +# New experimental SAM system + +echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 +echo "configure:12812: checking whether to build the new (experimental) SAM database" >&5 +# Check whether --with-sam or --without-sam was given. +if test "${with_sam+set}" = set; then + withval="$with_sam" + case "$withval" in + yes) + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define WITH_SAM 1 +EOF + + ;; + *) + echo "$ac_t""no" 1>&6 + ;; + esac +else + echo "$ac_t""no" 1>&6 + +fi + ######################################################################################## @@ -12811,7 +12840,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12815: checking whether to use TDB SAM database" >&5 +echo "configure:12844: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12836,7 +12865,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12840: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12869: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12867,7 +12896,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12871: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12900: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12892,7 +12921,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12896: checking whether to use syslog logging" >&5 +echo "configure:12925: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12917,7 +12946,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12921: checking whether to use profiling" >&5 +echo "configure:12950: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -12945,7 +12974,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:12949: checking whether to support disk-quotas" >&5 +echo "configure:12978: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -12956,13 +12985,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:12960: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:12989: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -12974,7 +13003,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:12978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13023,7 +13052,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13027: checking whether to support utmp accounting" >&5 +echo "configure:13056: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13048,7 +13077,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13052: checking chosen man pages' language(s)" >&5 +echo "configure:13081: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13079,7 +13108,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13083: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13112: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13107,14 +13136,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13111: checking how to get filesystem space usage" >&5 +echo "configure:13140: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13118: checking statvfs64 function (SVR4)" >&5 +echo "configure:13147: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13122,7 +13151,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13169,12 +13198,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13173: checking statvfs function (SVR4)" >&5 +echo "configure:13202: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13182,7 +13211,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13207,7 +13236,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13211: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13240: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13215,7 +13244,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13228,7 +13257,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13255,7 +13284,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13259: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13288: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13263,7 +13292,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13309,7 +13338,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13313: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13342: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13317,7 +13346,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13327,7 +13356,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13354,7 +13383,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13358: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13387: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13362,7 +13391,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13378,7 +13407,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13405,7 +13434,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13409: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13438: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13413,7 +13442,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13433,7 +13462,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13466,9 +13495,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13470: checking if large file support can be enabled" >&5 +echo "configure:13499: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13546,7 +13575,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13550: checking whether to support ACLs" >&5 +echo "configure:13579: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13599,7 +13628,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13603: checking for acl_get_file in -lacl" >&5 +echo "configure:13632: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13607,7 +13636,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13646,13 +13675,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13650: checking for ACL support" >&5 +echo "configure:13679: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13660,7 +13689,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13680,13 +13709,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13684: checking for acl_get_perm_np" >&5 +echo "configure:13713: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13694,7 +13723,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13741,7 +13770,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13745: checking whether to build winbind" >&5 +echo "configure:13774: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13837,20 +13866,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13841: checking whether struct passwd has pw_comment" >&5 +echo "configure:13870: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13854: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13883: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13875,20 +13904,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13879: checking whether struct passwd has pw_age" >&5 +echo "configure:13908: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13892: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13927,7 +13956,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:13931: checking for poptGetContext in -lpopt" >&5 +echo "configure:13960: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13935,7 +13964,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13970,7 +13999,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:13974: checking whether to use included popt" >&5 +echo "configure:14003: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -13993,16 +14022,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:13997: checking configure summary" >&5 +echo "configure:14026: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source3/configure.in b/source3/configure.in index de8da34091..e4bc698257 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2138,6 +2138,22 @@ if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then fi fi +# New experimental SAM system + +AC_MSG_CHECKING([whether to build the new (experimental) SAM database]) +AC_ARG_WITH(sam, +[ --with-sam Build new (experimental) SAM database (default=no)], +[ case "$withval" in + yes) + AC_MSG_RESULT(yes) + AC_DEFINE(WITH_SAM) + ;; + *) + AC_MSG_RESULT(no) + ;; + esac ], + AC_MSG_RESULT(no) +) ######################################################################################## diff --git a/source3/groupdb/aliasdb.c b/source3/groupdb/aliasdb.c index 718bf1d7ce..05f584f980 100644 --- a/source3/groupdb/aliasdb.c +++ b/source3/groupdb/aliasdb.c @@ -41,9 +41,7 @@ BOOL initialise_alias_db(void) return True; } -#ifdef WITH_NISPLUS - aldb_ops = nisplus_initialise_alias_db(); -#elif defined(WITH_LDAP) +#ifdef WITH_LDAP aldb_ops = ldap_initialise_alias_db(); #else aldb_ops = file_initialise_alias_db(); diff --git a/source3/groupdb/groupdb.c b/source3/groupdb/groupdb.c index c18463741d..d50e4f7322 100644 --- a/source3/groupdb/groupdb.c +++ b/source3/groupdb/groupdb.c @@ -39,9 +39,7 @@ BOOL initialise_group_db(void) return True; } -#ifdef WITH_NISPLUS - gpdb_ops = nisplus_initialise_group_db(); -#elif defined(WITH_LDAP) +#ifdef WITH_LDAP gpdb_ops = ldap_initialise_group_db(); #else gpdb_ops = file_initialise_group_db(); diff --git a/source3/include/config.h.in b/source3/include/config.h.in index 8c06e25396..70c0ae2f3c 100644 --- a/source3/include/config.h.in +++ b/source3/include/config.h.in @@ -1,4 +1,4 @@ -/* include/config.h.in. Generated automatically from configure.in by autoheader. */ +/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */ /* Define if on AIX 3. System headers sometimes define this. @@ -232,6 +232,7 @@ #undef MMAP_BLACKLIST #undef HAVE_IMMEDIATE_STRUCTURES #undef HAVE_CUPS +#undef WITH_SAM #undef WITH_LDAP_SAM #undef WITH_NISPLUS_SAM #undef WITH_TDB_SAM diff --git a/source3/include/debug.h b/source3/include/debug.h index 0885827433..a926143701 100644 --- a/source3/include/debug.h +++ b/source3/include/debug.h @@ -89,8 +89,9 @@ extern int DEBUGLEVEL; #define DBGC_RPC_SRV 6 #define DBGC_RPC_CLI 7 #define DBGC_PASSDB 8 -#define DBGC_AUTH 9 -#define DBGC_WINBIND 10 +#define DBGC_SAM 9 +#define DBGC_AUTH 10 +#define DBGC_WINBIND 11 /* So you can define DBGC_CLASS before including debug.h */ diff --git a/source3/include/includes.h b/source3/include/includes.h index 9b597db78b..f7b0d76dd4 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -751,6 +751,10 @@ extern int errno; #include "passdb.h" +#ifdef WITH_SAM +#include "sam.h" +#endif + #include "session.h" #include "asn_1.h" diff --git a/source3/include/sam.h b/source3/include/sam.h new file mode 100644 index 0000000000..b279eb88a1 --- /dev/null +++ b/source3/include/sam.h @@ -0,0 +1,258 @@ +/* + Unix SMB/CIFS implementation. + SAM structures + Copyright (C) Kai Krueger 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Simo Sorce 2002 + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Jelmer Vernooij 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 _SAM_H +#define _SAM_H + +#define SAM_INTERFACE_VERSION 1 + +/* use this inside a passdb module */ +#define SAM_MODULE_VERSIONING_MAGIC \ +int sam_version(void)\ +{\ + return SAM_INTERFACE_VERSION;\ +} + +typedef struct sam_domain { + TALLOC_CTX *mem_ctx; + uint32 access_granted; + struct sam_methods *current_sam_methods; /* sam_methods creating this +handle */ + void (*free_fn)(struct sam_domain **); + struct domain_data { + DOM_SID sid; /*SID of the domain. Should not be changed */ + char *name; /* Name of the domain */ + char *servername; /* */ + NTTIME max_passwordage; /* time till next password expiration */ + NTTIME min_passwordage; /* time till password can be changed again */ + NTTIME lockout_duration; /* time till login is allowed again after +lockout*/ + NTTIME reset_count; /* time till bad login counter is reset */ + uint16 min_passwordlength; /* minimum number of characters for a password +*/ + uint16 password_history; /* number of passwords stored in history */ + uint16 lockout_count; /* number of bad login attempts before lockout */ + BOOL force_logoff; /* force logoff after logon hours have expired */ + BOOL login_pwdchange; /* Users need to logon to change their password */ + uint32 num_users; /* number of users in the domain */ + uint32 num_groups; /* number of global groups */ + uint32 num_aliases; /* number of local groups */ + } private; +} SAM_DOMAIN_HANDLE; + +typedef struct sam_user { + TALLOC_CTX *mem_ctx; + uint32 access_granted; + struct sam_methods *current_sam_methods; /* sam_methods creating this +handle */ + void (*free_fn)(struct sam_user **); + struct sam_user_data { + uint32 init_flag; + NTTIME logon_time; /* logon time */ + NTTIME logoff_time; /* logoff time */ + NTTIME kickoff_time; /* kickoff time */ + NTTIME pass_last_set_time; /* password last set time */ + NTTIME pass_can_change_time; /* password can change time */ + NTTIME pass_must_change_time; /* password must change time */ + char * username; /* username string */ + SAM_DOMAIN_HANDLE * domain; /* domain of user */ + char * full_name; /* user's full name string */ + char * unix_home_dir; /* UNIX home directory string */ + char * home_dir; /* home directory string */ + char * dir_drive; /* home directory drive string */ + char * logon_script; /* logon script string */ + char * profile_path; /* profile path string */ + char * acct_desc; /* user description string */ + char * workstations; /* login from workstations string */ + char * unknown_str; /* don't know what this is, yet. */ + char * munged_dial; /* munged path name and dial-back tel number */ + DOM_SID user_sid; /* Primary User SID */ + DOM_SID group_sid; /* Primary Group SID */ + DATA_BLOB lm_pw; /* .data is Null if no password */ + DATA_BLOB nt_pw; /* .data is Null if no password */ + DATA_BLOB plaintext_pw; /* .data is Null if not available */ + uint16 acct_ctrl; /* account info (ACB_xxxx bit-mask) */ + uint32 unknown_1; /* 0x00ff ffff */ + uint16 logon_divs; /* 168 - number of hours in a week */ + uint32 hours_len; /* normally 21 bytes */ + uint8 hours[MAX_HOURS_LEN]; + uint32 unknown_2; /* 0x0002 0000 */ + uint32 unknown_3; /* 0x0000 04ec */ + } private; +} SAM_USER_HANDLE; + +typedef struct sam_group { + TALLOC_CTX *mem_ctx; + uint32 access_granted; + struct sam_methods *current_sam_methods; /* sam_methods creating this +handle */ + void (*free_fn)(struct sam_group **); + struct sam_group_data { + char *name; + char *comment; + DOM_SID sid; + int32 flags; /* specifies if the group is a lokal group or a global group +*/ + uint32 num_members; + PRIVILEGE_SET privileges; + } private; +} SAM_GROUP_HANDLE; + + +typedef struct sam_group_member { + DOM_SID sid; + BOOL group; /* specifies if it is a group or a user */ + +} SAM_GROUP_MEMBER; + +typedef struct sam_user_enum { + DOM_SID sid; + char *username; + char *full_name; + char *user_desc; + uint16 acc_ctrl; +} SAM_USER_ENUM; + +typedef struct sam_group_enum { + DOM_SID sid; + char *groupname; + char *comment; +} SAM_GROUP_ENUM; + +typedef struct sam_context +{ + struct sam_methods *methods; + TALLOC_CTX *mem_ctx; + + /* General API */ + + NTSTATUS (*sam_get_sec_desc) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd); + NTSTATUS (*sam_set_sec_desc) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd); + + NTSTATUS (*sam_lookup_sid) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type); + NTSTATUS (*sam_lookup_name) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID **sid, uint32 *type); + + + /* Domain API */ + + NTSTATUS (*sam_update_domain) ( const struct sam_context *, SAM_DOMAIN_HANDLE *domain); + + NTSTATUS (*sam_enum_domains) ( const struct sam_context *, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char **domain_names); + NTSTATUS (*sam_lookup_domain) ( const struct sam_context *, const NT_USER_TOKEN * access_token, const char *domain, DOM_SID **domainsid); + + NTSTATUS (*sam_get_domain_by_sid) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain); + + + /* User API */ + + NTSTATUS (*sam_create_user) ( const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, DOM_SID *domainsid, SAM_USER_HANDLE **user); + NTSTATUS (*sam_add_user) ( const struct sam_context *, DOM_SID *domainsid, SAM_USER_HANDLE *user); + NTSTATUS (*sam_update_user) ( const struct sam_context *, SAM_USER_HANDLE *user); + NTSTATUS (*sam_delete_user) ( const struct sam_context *, SAM_USER_HANDLE * user); + NTSTATUS (*sam_enum_users) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domain, int32 *user_count, SAM_USER_ENUM **users); + + NTSTATUS (*sam_get_user_by_sid) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *usersid, SAM_USER_HANDLE **user); + NTSTATUS (*sam_get_user_by_name) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_USER_HANDLE **user); + + /* Group API */ + + + NTSTATUS (*sam_add_group) ( const struct sam_context *, DOM_SID *domainsid, SAM_GROUP_HANDLE *samgroup); + NTSTATUS (*sam_update_group) ( const struct sam_context *, SAM_GROUP_HANDLE *samgroup); + NTSTATUS (*sam_delete_group) ( const struct sam_context *, SAM_GROUP_HANDLE *groupsid); + NTSTATUS (*sam_enum_groups) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups); + NTSTATUS (*sam_get_group_by_sid) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_get_group_by_name) ( const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group); + + NTSTATUS (*sam_add_member_to_group) ( const struct sam_context *, SAM_GROUP_HANDLE *group, SAM_GROUP_MEMBER *member); + NTSTATUS (*sam_delete_member_from_group) ( const struct sam_context *, SAM_GROUP_HANDLE *group, SAM_GROUP_MEMBER *member); + NTSTATUS (*sam_enum_groupmembers) ( const struct sam_context *, SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members); + + NTSTATUS (*sam_get_groups_of_user) ( const struct sam_context *, SAM_USER_HANDLE *user, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups); + + void (*free_fn)(struct sam_context **); +} SAM_CONTEXT; + +typedef struct sam_methods +{ + struct sam_context *parent; + struct sam_methods *next; + struct sam_methods *prev; + const char *backendname; + struct sam_domain *domain; + void *private_data; + + /* General API */ + + NTSTATUS (*sam_get_sec_desc) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd); + NTSTATUS (*sam_set_sec_desc) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd); + + NTSTATUS (*sam_lookup_sid) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type); + NTSTATUS (*sam_lookup_name) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type); + + /* Domain API */ + + NTSTATUS (*sam_update_domain) ( const struct sam_methods *, SAM_DOMAIN_HANDLE *domain); + NTSTATUS (*sam_get_domain_handle) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_DOMAIN_HANDLE **domain); + + /* User API */ + + NTSTATUS (*sam_create_user) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_USER_HANDLE **user); + NTSTATUS (*sam_add_user) ( const struct sam_methods *, const SAM_USER_HANDLE *user); + NTSTATUS (*sam_update_user) ( const struct sam_methods *, const SAM_USER_HANDLE *user); + NTSTATUS (*sam_delete_user) ( const struct sam_methods *, const SAM_USER_HANDLE *user); + NTSTATUS (*sam_enum_users) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, int32 *user_count, SAM_USER_ENUM **users); + + NTSTATUS (*sam_get_user_by_sid) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *usersid, SAM_USER_HANDLE **user); + NTSTATUS (*sam_get_user_by_name) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_USER_HANDLE **user); + + /* Group API */ + + NTSTATUS (*sam_create_group) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_add_group) ( const struct sam_methods *, SAM_GROUP_HANDLE *samgroup); + NTSTATUS (*sam_update_group) ( const struct sam_methods *, SAM_GROUP_HANDLE *samgroup); + NTSTATUS (*sam_delete_group) ( const struct sam_methods *, SAM_GROUP_HANDLE *groupsid); + NTSTATUS (*sam_enum_groups) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups); + NTSTATUS (*sam_get_group_by_sid) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_get_group_by_name) ( const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group); + + NTSTATUS (*sam_add_member_to_group) ( const struct sam_methods *, SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); + NTSTATUS (*sam_delete_member_from_group) ( const struct sam_methods *, SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); + NTSTATUS (*sam_enum_groupmembers) ( const struct sam_methods *, SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members); + + NTSTATUS (*sam_get_groups_of_user) ( const struct sam_methods *, SAM_USER_HANDLE *user, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups); + + void (*free_private_data)(void **); +} SAM_METHODS; + +typedef NTSTATUS (*sam_init_function)( const struct sam_context *, struct sam_methods **, const char *); + +struct sam_init_function_entry { + char *name; + /* Function to create a member of the sam_methods list */ + sam_init_function init; +}; + + +#endif /* _SAM_H */ diff --git a/source3/lib/debug.c b/source3/lib/debug.c index 6dd9225bac..65cac144cc 100644 --- a/source3/lib/debug.c +++ b/source3/lib/debug.c @@ -153,6 +153,7 @@ static const char *default_classname_table[] = { "rpc_srv", /* DBGC_RPC_SRV */ "rpc_cli", /* DBGC_RPC_CLI */ "passdb", /* DBGC_PASSDB */ + "sam" /* DBGC_SAM */ "auth", /* DBGC_AUTH */ "winbind", /* DBGC_WINBIND */ NULL diff --git a/source3/lib/time.c b/source3/lib/time.c index 9d87414aea..f37380df70 100644 --- a/source3/lib/time.c +++ b/source3/lib/time.c @@ -40,6 +40,12 @@ int extra_time_offset = 0; #define TIME_T_MAX (~ (time_t) 0 - TIME_T_MIN) #endif +void get_nttime_max(NTTIME *t) +{ + /* FIXME: This is incorrect */ + unix_to_nt_time(get_time_t_max(),t); +} + /******************************************************************* External access to time_t_min and time_t_max. ********************************************************************/ diff --git a/source3/passdb/passgrp.c b/source3/passdb/passgrp.c deleted file mode 100644 index f73591793f..0000000000 --- a/source3/passdb/passgrp.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Password and authentication handling - Copyright (C) Jeremy Allison 1996-1998 - Copyright (C) Luke Kenneth Casson Leighton 1996-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. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_PASSDB - -/* - * NOTE. All these functions are abstracted into a structure - * that points to the correct function for the selected database. JRA. - * - * the API does NOT fill in the gaps if you set an API function - * to NULL: it will deliberately attempt to call the NULL function. - * - */ - -static struct passgrp_ops *pwgrp_ops; - -/*************************************************************** - Initialise the passgrp operations. -***************************************************************/ - -BOOL initialise_passgrp_db(void) -{ - if (pwgrp_ops) - { - return True; - } - -#ifdef WITH_NISPLUS - pwgrp_ops = nisplus_initialise_password_grp(); -#elif defined(WITH_LDAP) - pwgrp_ops = ldap_initialize_password_grp(); -#else - pwgrp_ops = file_initialise_password_grp(); -#endif - - return (pwgrp_ops != NULL); -} - -/* - * Functions that return/manipulate a struct smb_passwd. - */ - -/************************************************************************ - Utility function to search smb passwd by rid. -*************************************************************************/ - -struct smb_passwd *iterate_getsmbgrprid(uint32 user_rid, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - return iterate_getsmbgrpuid(pwdb_user_rid_to_uid(user_rid), - grps, num_grps, alss, num_alss); -} - -/************************************************************************ - Utility function to search smb passwd by uid. use this if your database - does not have search facilities. -*************************************************************************/ - -struct smb_passwd *iterate_getsmbgrpuid(uid_t smb_userid, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - struct smb_passwd *pwd = NULL; - void *fp = NULL; - - DEBUG(10, ("search by smb_userid: %x\n", (int)smb_userid)); - - /* Open the smb password database - not for update. */ - fp = startsmbgrpent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open smb passgrp database.\n")); - return NULL; - } - - while ((pwd = getsmbgrpent(fp, grps, num_grps, alss, num_alss)) != NULL && pwd->smb_userid != smb_userid) - ; - - if (pwd != NULL) - { - DEBUG(10, ("found by smb_userid: %x\n", (int)smb_userid)); - } - - endsmbgrpent(fp); - return pwd; -} - -/************************************************************************ - Utility function to search smb passwd by name. use this if your database - does not have search facilities. -*************************************************************************/ - -struct smb_passwd *iterate_getsmbgrpnam(char *name, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - struct smb_passwd *pwd = NULL; - void *fp = NULL; - - DEBUG(10, ("search by name: %s\n", name)); - - /* Open the passgrp file - not for update. */ - fp = startsmbgrpent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open smb passgrp database.\n")); - return NULL; - } - - while ((pwd = getsmbgrpent(fp, grps, num_grps, alss, num_alss)) != NULL && !strequal(pwd->smb_name, name)) - ; - - if (pwd != NULL) - { - DEBUG(10, ("found by name: %s\n", name)); - } - - endsmbgrpent(fp); - return pwd; -} - -/*************************************************************** - Start to enumerate the smb or sam passwd list. Returns a void pointer - to ensure no modification outside this module. - - Note that currently it is being assumed that a pointer returned - from this function may be used to enumerate struct sam_passwd - entries as well as struct smb_passwd entries. This may need - to change. JRA. - -****************************************************************/ - -void *startsmbgrpent(BOOL update) -{ - return pwgrp_ops->startsmbgrpent(update); -} - -/*************************************************************** - End enumeration of the smb or sam passwd list. - - Note that currently it is being assumed that a pointer returned - from this function may be used to enumerate struct sam_passwd - entries as well as struct smb_passwd entries. This may need - to change. JRA. - -****************************************************************/ - -void endsmbgrpent(void *vp) -{ - pwgrp_ops->endsmbgrpent(vp); -} - -/************************************************************************* - Routine to return the next entry in the smb passwd list. - *************************************************************************/ - -struct smb_passwd *getsmbgrpent(void *vp, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - return pwgrp_ops->getsmbgrpent(vp, grps, num_grps, alss, num_alss); -} - -/************************************************************************ - Routine to search smb passwd by name. -*************************************************************************/ - -struct smb_passwd *getsmbgrpnam(char *name, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - return pwgrp_ops->getsmbgrpnam(name, grps, num_grps, alss, num_alss); -} - -/************************************************************************ - Routine to search smb passwd by user rid. -*************************************************************************/ - -struct smb_passwd *getsmbgrprid(uint32 user_rid, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - return pwgrp_ops->getsmbgrprid(user_rid, grps, num_grps, alss, num_alss); -} - -/************************************************************************ - Routine to search smb passwd by uid. -*************************************************************************/ - -struct smb_passwd *getsmbgrpuid(uid_t smb_userid, - uint32 **grps, int *num_grps, - uint32 **alss, int *num_alss) -{ - return pwgrp_ops->getsmbgrpuid(smb_userid, grps, num_grps, alss, num_alss); -} diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c index a30622c600..044a904250 100644 --- a/source3/rpc_server/srv_samr_nt.c +++ b/source3/rpc_server/srv_samr_nt.c @@ -68,8 +68,6 @@ struct generic_mapping usr_generic_mapping = {USER_READ, USER_WRITE, USER_EXECUT struct generic_mapping grp_generic_mapping = {GROUP_READ, GROUP_WRITE, GROUP_EXECUTE, GROUP_ALL_ACCESS}; struct generic_mapping ali_generic_mapping = {ALIAS_READ, ALIAS_WRITE, ALIAS_EXECUTE, ALIAS_ALL_ACCESS}; -static NTSTATUS samr_make_dom_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *d_size); - /******************************************************************* Checks if access to an object should be granted, and returns that @@ -411,7 +409,7 @@ NTSTATUS _samr_get_usrdom_pwinfo(pipes_struct *p, SAMR_Q_GET_USRDOM_PWINFO *q_u, samr_make_sam_obj_sd ********************************************************************/ -static NTSTATUS samr_make_sam_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size) +NTSTATUS samr_make_sam_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size) { extern DOM_SID global_sid_World; DOM_SID adm_sid; diff --git a/source3/sam/account.c b/source3/sam/account.c new file mode 100644 index 0000000000..1fec9966f6 --- /dev/null +++ b/source3/sam/account.c @@ -0,0 +1,301 @@ +/* + Unix SMB/CIFS implementation. + Password and authentication handling + Copyright (C) Jeremy Allison 1996-2001 + Copyright (C) Luke Kenneth Casson Leighton 1996-1998 + Copyright (C) Gerald (Jerry) Carter 2000-2001 + Copyright (C) Andrew Bartlett 2001-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" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_PASSDB + +/************************************************************ + Fill the SAM_USER_HANDLE with default values. + ***********************************************************/ + +static void sam_fill_default_user(SAM_USER_HANDLE *user) +{ + ZERO_STRUCT(user->private); /* Don't touch the talloc context */ + + /* Don't change these timestamp settings without a good reason. + They are important for NT member server compatibility. */ + + user->private.init_flag = FLAG_SAM_UNINIT; + + /* FIXME: We should actually call get_nt_time_max() or sthng + * here */ + unix_to_nt_time(&(user->private.logoff_time),get_time_t_max()); + unix_to_nt_time(&(user->private.kickoff_time),get_time_t_max()); + unix_to_nt_time(&(user->private.pass_must_change_time),get_time_t_max()); + user->private.unknown_1 = 0x00ffffff; /* don't know */ + user->private.logon_divs = 168; /* hours per week */ + user->private.hours_len = 21; /* 21 times 8 bits = 168 */ + memset(user->private.hours, 0xff, user->private.hours_len); /* available at all hours */ + user->private.unknown_2 = 0x00000000; /* don't know */ + user->private.unknown_3 = 0x000004ec; /* don't know */ +} + +static void destroy_sam_talloc(SAM_USER_HANDLE **user) +{ + if (*user) { + talloc_destroy((*user)->mem_ctx); + *user = NULL; + } +} + + +/********************************************************************** + Alloc memory and initialises a SAM_USER_HANDLE on supplied mem_ctx. +***********************************************************************/ + +NTSTATUS sam_init_user_talloc(TALLOC_CTX *mem_ctx, SAM_USER_HANDLE **user) +{ + SMB_ASSERT(*user != NULL); + + if (!mem_ctx) { + DEBUG(0,("sam_init_user_talloc: mem_ctx was NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + + *user=(SAM_USER_HANDLE *)talloc(mem_ctx, sizeof(SAM_USER_HANDLE)); + + if (*user==NULL) { + DEBUG(0,("sam_init_user_talloc: error while allocating memory\n")); + return NT_STATUS_NO_MEMORY; + } + + (*user)->mem_ctx = mem_ctx; + + (*user)->free_fn = NULL; + + sam_fill_default_user(*user); + + return NT_STATUS_OK; +} + + +/************************************************************* + Alloc memory and initialises a struct sam_passwd. + ************************************************************/ + +NTSTATUS sam_init_user(SAM_USER_HANDLE **user) +{ + TALLOC_CTX *mem_ctx; + NTSTATUS nt_status; + + mem_ctx = talloc_init_named("passdb internal SAM_USER_HANDLE allocation"); + + if (!mem_ctx) { + DEBUG(0,("sam_init_user: error while doing talloc_init()\n")); + return NT_STATUS_NO_MEMORY; + } + + if (!NT_STATUS_IS_OK(nt_status = sam_init_user_talloc(mem_ctx, user))) { + talloc_destroy(mem_ctx); + return nt_status; + } + + (*user)->free_fn = destroy_sam_talloc; + + return NT_STATUS_OK; +} + +/** + * Free the contets of the SAM_USER_HANDLE, but not the structure. + * + * Also wipes the LM and NT hashes and plaintext passwrod from + * memory. + * + * @param user SAM_USER_HANDLE to free members of. + **/ + +static void sam_free_user_contents(SAM_USER_HANDLE *user) +{ + + /* Kill off sensitive data. Free()ed by the + talloc mechinism */ + + data_blob_clear_free(&(user->private.lm_pw)); + data_blob_clear_free(&(user->private.nt_pw)); + data_blob_clear_free(&(user->private.plaintext_pw)); +} + + +/************************************************************ + Reset the SAM_USER_HANDLE and free the NT/LM hashes. + ***********************************************************/ + +NTSTATUS sam_reset_sam(SAM_USER_HANDLE *user) +{ + SMB_ASSERT(user != NULL); + + sam_free_user_contents(user); + + sam_fill_default_user(user); + + return NT_STATUS_OK; +} + + +/************************************************************ + Free the SAM_USER_HANDLE and the member pointers. + ***********************************************************/ + +NTSTATUS sam_free_user(SAM_USER_HANDLE **user) +{ + SMB_ASSERT(*user != NULL); + + sam_free_user_contents(*user); + + if ((*user)->free_fn) { + (*user)->free_fn(user); + } + + return NT_STATUS_OK; +} + + +/********************************************************** + Encode the account control bits into a string. + length = length of string to encode into (including terminating + null). length *MUST BE MORE THAN 2* ! + **********************************************************/ + +char *sam_encode_acct_ctrl(uint16 acct_ctrl, size_t length) +{ + static fstring acct_str; + size_t i = 0; + + acct_str[i++] = '['; + + if (acct_ctrl & ACB_PWNOTREQ ) acct_str[i++] = 'N'; + if (acct_ctrl & ACB_DISABLED ) acct_str[i++] = 'D'; + if (acct_ctrl & ACB_HOMDIRREQ) acct_str[i++] = 'H'; + if (acct_ctrl & ACB_TEMPDUP ) acct_str[i++] = 'T'; + if (acct_ctrl & ACB_NORMAL ) acct_str[i++] = 'U'; + if (acct_ctrl & ACB_MNS ) acct_str[i++] = 'M'; + if (acct_ctrl & ACB_WSTRUST ) acct_str[i++] = 'W'; + if (acct_ctrl & ACB_SVRTRUST ) acct_str[i++] = 'S'; + if (acct_ctrl & ACB_AUTOLOCK ) acct_str[i++] = 'L'; + if (acct_ctrl & ACB_PWNOEXP ) acct_str[i++] = 'X'; + if (acct_ctrl & ACB_DOMTRUST ) acct_str[i++] = 'I'; + + for ( ; i < length - 2 ; i++ ) + acct_str[i] = ' '; + + i = length - 2; + acct_str[i++] = ']'; + acct_str[i++] = '\0'; + + return acct_str; +} + +/********************************************************** + Decode the account control bits from a string. + **********************************************************/ + +uint16 sam_decode_acct_ctrl(const char *p) +{ + uint16 acct_ctrl = 0; + BOOL finished = False; + + /* + * Check if the account type bits have been encoded after the + * NT password (in the form [NDHTUWSLXI]). + */ + + if (*p != '[') + return 0; + + for (p++; *p && !finished; p++) { + switch (*p) { + case 'N': { acct_ctrl |= ACB_PWNOTREQ ; break; /* 'N'o password. */ } + case 'D': { acct_ctrl |= ACB_DISABLED ; break; /* 'D'isabled. */ } + case 'H': { acct_ctrl |= ACB_HOMDIRREQ; break; /* 'H'omedir required. */ } + case 'T': { acct_ctrl |= ACB_TEMPDUP ; break; /* 'T'emp account. */ } + case 'U': { acct_ctrl |= ACB_NORMAL ; break; /* 'U'ser account (normal). */ } + case 'M': { acct_ctrl |= ACB_MNS ; break; /* 'M'NS logon user account. What is this ? */ } + case 'W': { acct_ctrl |= ACB_WSTRUST ; break; /* 'W'orkstation account. */ } + case 'S': { acct_ctrl |= ACB_SVRTRUST ; break; /* 'S'erver account. */ } + case 'L': { acct_ctrl |= ACB_AUTOLOCK ; break; /* 'L'ocked account. */ } + case 'X': { acct_ctrl |= ACB_PWNOEXP ; break; /* No 'X'piry on password */ } + case 'I': { acct_ctrl |= ACB_DOMTRUST ; break; /* 'I'nterdomain trust account. */ } + case ' ': { break; } + case ':': + case '\n': + case '\0': + case ']': + default: { finished = True; } + } + } + + return acct_ctrl; +} + +/************************************************************* + Routine to set 32 hex password characters from a 16 byte array. +**************************************************************/ + +void sam_sethexpwd(char *p, const unsigned char *pwd, uint16 acct_ctrl) +{ + if (pwd != NULL) { + int i; + for (i = 0; i < 16; i++) + slprintf(&p[i*2], 3, "%02X", pwd[i]); + } else { + if (acct_ctrl & ACB_PWNOTREQ) + safe_strcpy(p, "NO PASSWORDXXXXXXXXXXXXXXXXXXXXX", 33); + else + safe_strcpy(p, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 33); + } +} + +/************************************************************* + Routine to get the 32 hex characters and turn them + into a 16 byte array. +**************************************************************/ + +BOOL sam_gethexpwd(const char *p, unsigned char *pwd) +{ + int i; + unsigned char lonybble, hinybble; + char *hexchars = "0123456789ABCDEF"; + char *p1, *p2; + + if (!p) + return (False); + + for (i = 0; i < 32; i += 2) { + hinybble = toupper(p[i]); + lonybble = toupper(p[i + 1]); + + p1 = strchr(hexchars, hinybble); + p2 = strchr(hexchars, lonybble); + + if (!p1 || !p2) + return (False); + + hinybble = PTR_DIFF(p1, hexchars); + lonybble = PTR_DIFF(p2, hexchars); + + pwd[i / 2] = (hinybble << 4) | lonybble; + } + return (True); +} diff --git a/source3/sam/get_set_domain.c b/source3/sam/get_set_domain.c new file mode 100644 index 0000000000..49a63f9fae --- /dev/null +++ b/source3/sam/get_set_domain.c @@ -0,0 +1,263 @@ +/* + Unix SMB/CIFS implementation. + SAM_DOMAIN access routines + Copyright (C) Luke Kenneth Casson Leighton 1996-1998 + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jelmer Vernooij 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" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_SAM + +NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, DOM_SID **sid) +{ + if (!domain || !sid) return NT_STATUS_UNSUCCESSFUL; + + *sid = &domain->private.sid; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_num_users(SAM_DOMAIN_HANDLE *domain, uint32 *num_users) +{ + if (!domain || !num_users)return NT_STATUS_UNSUCCESSFUL; + + *num_users = domain->private.num_users; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups) +{ + if (!domain || !num_groups)return NT_STATUS_UNSUCCESSFUL; + + *num_groups = domain->private.num_groups; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_aliases) +{ + if (!domain || !num_aliases)return NT_STATUS_UNSUCCESSFUL; + + *num_aliases = domain->private.num_aliases; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, char **domain_name) +{ + if (!domain || !domain_name)return NT_STATUS_UNSUCCESSFUL; + + *domain_name = domain->private.name; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.name = talloc_strdup(domain->mem_ctx, domain_name); + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) +{ + if (!domain || !server_name)return NT_STATUS_UNSUCCESSFUL; + + *server_name = domain->private.servername; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, char *server_name) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.servername = talloc_strdup(domain->mem_ctx, server_name); + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwordage) +{ + if (!domain || !max_passwordage)return NT_STATUS_UNSUCCESSFUL; + + *max_passwordage = domain->private.max_passwordage; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwordage) +{ + if (!domain || !min_passwordage)return NT_STATUS_UNSUCCESSFUL; + + *min_passwordage = domain->private.min_passwordage; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lockout_duration) +{ + if (!domain || !lockout_duration)return NT_STATUS_UNSUCCESSFUL; + + *lockout_duration = domain->private.lockout_duration; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_lockout_count) +{ + if (!domain || !reset_lockout_count)return NT_STATUS_UNSUCCESSFUL; + + *reset_lockout_count = domain->private.reset_count; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_passwordlength) +{ + if (!domain || !min_passwordlength)return NT_STATUS_UNSUCCESSFUL; + + *min_passwordlength = domain->private.min_passwordlength; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_history) +{ + if (!domain || !password_history)return NT_STATUS_UNSUCCESSFUL; + + *password_history = domain->private.password_history; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout_count) +{ + if (!domain || !lockout_count)return NT_STATUS_UNSUCCESSFUL; + + *lockout_count = domain->private.lockout_count; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logoff) +{ + if (!domain || !force_logoff)return NT_STATUS_UNSUCCESSFUL; + + *force_logoff = domain->private.force_logoff; + + return NT_STATUS_OK; +} + + +NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_pwdchange) +{ + if (!domain || !login_pwdchange)return NT_STATUS_UNSUCCESSFUL; + + *login_pwdchange = domain->private.login_pwdchange; + + return NT_STATUS_OK; +} + +/* Set */ + +NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwordage) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.max_passwordage = max_passwordage; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwordage) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.min_passwordage = min_passwordage; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME lockout_duration) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.lockout_duration = lockout_duration; + + return NT_STATUS_OK; +} +NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lockout_count) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.reset_count = reset_lockout_count; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 min_passwordlength) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.min_passwordlength = min_passwordlength; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 password_history) +{ + if (!domain) return NT_STATUS_UNSUCCESSFUL; + + domain->private.password_history = password_history; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_count) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.lockout_count = lockout_count; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL force_logoff) +{ + if (!domain)return NT_STATUS_UNSUCCESSFUL; + + domain->private.force_logoff = force_logoff; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL login_pwdchange) +{ + if (!domain) return NT_STATUS_UNSUCCESSFUL; + + domain->private.login_pwdchange = login_pwdchange; + + return NT_STATUS_OK; +} diff --git a/source3/sam/get_set_group.c b/source3/sam/get_set_group.c new file mode 100644 index 0000000000..51f91ada82 --- /dev/null +++ b/source3/sam/get_set_group.c @@ -0,0 +1,123 @@ +/* + Unix SMB/CIFS implementation. + SAM_USER_HANDLE access routines + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jelmer Vernooij 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" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_SAM + +/* sam group get functions */ + +NTSTATUS sam_get_group_sid(const SAM_GROUP_HANDLE *group, DOM_SID **sid) +{ + if (!group || !sid) return NT_STATUS_UNSUCCESSFUL; + + *sid = &group->private.sid; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_group_typ(const SAM_GROUP_HANDLE *group, uint32 *typ) +{ + if (!group || !typ) return NT_STATUS_UNSUCCESSFUL; + + *typ = group->private.flags; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_group_name(const SAM_GROUP_HANDLE *group, char **group_name) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + *group_name = group->private.name; + + return NT_STATUS_OK; + +} +NTSTATUS sam_get_group_comment(const SAM_GROUP_HANDLE *group, char **comment) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + *comment = group->private.comment; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_group_priv_set(const SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + *priv_set = group->private.privileges; + + return NT_STATUS_OK; +} + +/* sam group set functions */ + +NTSTATUS sam_set_group_sid(SAM_GROUP_HANDLE *group, DOM_SID *sid) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + if (!sid) ZERO_STRUCT(group->private.sid); + else sid_copy(&(group->private.sid), sid); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_group_typ(SAM_GROUP_HANDLE *group, uint32 typ) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + group->private.flags = typ; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_group_name(SAM_GROUP_HANDLE *group, char *group_name) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + group->private.name = talloc_strdup(group->mem_ctx, group_name); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_group_comment(SAM_GROUP_HANDLE *group, char *comment) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + group->private.comment = talloc_strdup(group->mem_ctx, comment); + + return NT_STATUS_OK; + +} + +NTSTATUS sam_set_group_priv_set(SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set) +{ + if (!group) return NT_STATUS_UNSUCCESSFUL; + + if (!priv_set) ZERO_STRUCT(group->private.privileges); + else memcpy(&(group->private.privileges), priv_set, sizeof(PRIVILEGE_SET)); + + return NT_STATUS_OK; +} diff --git a/source3/sam/get_set_user.c b/source3/sam/get_set_user.c new file mode 100644 index 0000000000..e58afe6880 --- /dev/null +++ b/source3/sam/get_set_user.c @@ -0,0 +1,903 @@ +/* + Unix SMB/CIFS implementation. + SAM_USER_HANDLE access routines + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jelmer Vernooij 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" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_SAM + +NTSTATUS sam_get_user_domain_sid (const SAM_USER_HANDLE *sampass, DOM_SID **sid) +{ + NTSTATUS status; + SAM_DOMAIN_HANDLE *domain; + if (!sampass || !sid) return NT_STATUS_UNSUCCESSFUL; + + if (!NT_STATUS_IS_OK(status = sam_get_user_domain(sampass, &domain))){ + DEBUG(0, ("sam_get_user_domain_sid: Can't get domain for user\n")); + return status; + } + + return sam_get_domain_sid(domain, sid); +} + +NTSTATUS sam_get_user_domain_name (const SAM_USER_HANDLE *sampass, char **domain_name) +{ + NTSTATUS status; + SAM_DOMAIN_HANDLE *domain; + if (!sampass || !domain_name) return NT_STATUS_UNSUCCESSFUL; + + if (!NT_STATUS_IS_OK(status = sam_get_user_domain(sampass, &domain))){ + DEBUG(0, ("sam_get_user_domain_name: Can't get domain for user\n")); + return status; + } + + return sam_get_domain_name(domain, domain_name); +} + +NTSTATUS sam_get_user_acct_ctrl (const SAM_USER_HANDLE *sampass, uint16 *acct_ctrl) +{ + if(!sampass || !acct_ctrl)return NT_STATUS_UNSUCCESSFUL; + + *acct_ctrl = sampass->private.acct_ctrl; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_logon_time (const SAM_USER_HANDLE *sampass, NTTIME *logon_time) +{ + if(!sampass || !logon_time)return NT_STATUS_UNSUCCESSFUL; + + *logon_time = sampass->private.logon_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_logoff_time (const SAM_USER_HANDLE *sampass, NTTIME *logoff_time) +{ + if(!sampass || !logoff_time)return NT_STATUS_UNSUCCESSFUL; + + *logoff_time = sampass->private.logoff_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_kickoff_time (const SAM_USER_HANDLE *sampass, NTTIME *kickoff_time) +{ + if (!sampass || !kickoff_time)return NT_STATUS_UNSUCCESSFUL; + + *kickoff_time = sampass->private.kickoff_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_pass_last_set_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_last_set_time) +{ + if (!sampass || !pass_last_set_time)return NT_STATUS_UNSUCCESSFUL; + + *pass_last_set_time = sampass->private.pass_last_set_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_pass_can_change_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_can_change_time) +{ + if (!sampass || !pass_can_change_time)return NT_STATUS_UNSUCCESSFUL; + + *pass_can_change_time = sampass->private.pass_can_change_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_pass_must_change_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_must_change_time) +{ + if (!sampass || !pass_must_change_time)return NT_STATUS_UNSUCCESSFUL; + + *pass_must_change_time = sampass->private.pass_must_change_time; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_logon_divs (const SAM_USER_HANDLE *sampass, uint16 *logon_divs) +{ + if (!sampass || !logon_divs)return NT_STATUS_UNSUCCESSFUL; + + *logon_divs = sampass->private.logon_divs; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_hours_len (const SAM_USER_HANDLE *sampass, uint32 *hours_len) +{ + if (!sampass || !hours_len)return NT_STATUS_UNSUCCESSFUL; + + *hours_len = sampass->private.hours_len; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_hours (const SAM_USER_HANDLE *sampass, uint8 **hours) +{ + if (!sampass || !hours)return NT_STATUS_UNSUCCESSFUL; + + *hours = sampass->private.hours; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_nt_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *nt_pwd) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + SMB_ASSERT((!sampass->private.nt_pw.data) + || sampass->private.nt_pw.length == NT_HASH_LEN); + + *nt_pwd = sampass->private.nt_pw; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_lm_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *lm_pwd) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + SMB_ASSERT((!sampass->private.lm_pw.data) + || sampass->private.lm_pw.length == LM_HASH_LEN); + + *lm_pwd = sampass->private.lm_pw; + + return NT_STATUS_OK; +} + +/* Return the plaintext password if known. Most of the time + it isn't, so don't assume anything magic about this function. + + Used to pass the plaintext to sam backends that might + want to store more than just the NTLM hashes. +*/ + +NTSTATUS sam_get_user_plaintext_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB **plain_pwd) +{ + if (!sampass || !plain_pwd)return NT_STATUS_UNSUCCESSFUL; + + *plain_pwd = &(sampass->private.plaintext_pw); + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_sid(const SAM_USER_HANDLE *sampass, DOM_SID **sid) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *sid = &(sampass->private.user_sid); + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_pgroup(const SAM_USER_HANDLE *sampass, DOM_SID **sid) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *sid = &(sampass->private.group_sid); + + return NT_STATUS_OK; +} + +/** + * Get flags showing what is initalised in the SAM_USER_HANDLE + * @param sampass the SAM_USER_HANDLE in question + * @return the flags indicating the members initialised in the struct. + **/ + +NTSTATUS sam_get_user_init_flag (const SAM_USER_HANDLE *sampass, uint32 *initflag) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *initflag = sampass->private.init_flag; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_name (const SAM_USER_HANDLE *sampass, char **username) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *username = sampass->private.username; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_domain (const SAM_USER_HANDLE *sampass, SAM_DOMAIN_HANDLE **domain) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *domain = sampass->private.domain; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_fullname (const SAM_USER_HANDLE *sampass, char **fullname) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *fullname = sampass->private.full_name; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_homedir (const SAM_USER_HANDLE *sampass, char **homedir) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *homedir = sampass->private.home_dir; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_unix_home_dir (const SAM_USER_HANDLE *sampass, char **uhomedir) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *uhomedir = sampass->private.unix_home_dir; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_dir_drive (const SAM_USER_HANDLE *sampass, char **dirdrive) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *dirdrive = sampass->private.dir_drive; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_logon_script (const SAM_USER_HANDLE *sampass, char **logon_script) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *logon_script = sampass->private.logon_script; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_profile_path (const SAM_USER_HANDLE *sampass, char **profile_path) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *profile_path = sampass->private.profile_path; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_description (const SAM_USER_HANDLE *sampass, char **description) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *description = sampass->private.acct_desc; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_workstations (const SAM_USER_HANDLE *sampass, char **workstations) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *workstations = sampass->private.workstations; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_unknown_str (const SAM_USER_HANDLE *sampass, char **unknown_str) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *unknown_str = sampass->private.unknown_str; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_munged_dial (const SAM_USER_HANDLE *sampass, char **munged_dial) +{ + if (!sampass)return NT_STATUS_UNSUCCESSFUL; + + *munged_dial = sampass->private.munged_dial; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_unknown_1 (const SAM_USER_HANDLE *sampass, uint32 *unknown1) +{ + if (!sampass || !unknown1)return NT_STATUS_UNSUCCESSFUL; + + *unknown1 = sampass->private.unknown_1; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_unknown_2 (const SAM_USER_HANDLE *sampass, uint32 *unknown2) +{ + if (!sampass || !unknown2)return NT_STATUS_UNSUCCESSFUL; + + *unknown2 = sampass->private.unknown_2; + + return NT_STATUS_OK; +} + +NTSTATUS sam_get_user_unknown_3 (const SAM_USER_HANDLE *sampass, uint32 *unknown3) +{ + if (!sampass || !unknown3)return NT_STATUS_UNSUCCESSFUL; + + *unknown3 = sampass->private.unknown_3; + + return NT_STATUS_OK; +} + +/********************************************************************* + Collection of set...() functions for SAM_USER_HANDLE_INFO. + ********************************************************************/ + +NTSTATUS sam_set_user_acct_ctrl (SAM_USER_HANDLE *sampass, uint16 flags) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.acct_ctrl = flags; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_logon_time (SAM_USER_HANDLE *sampass, NTTIME mytime, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.logon_time = mytime; + + if (store) + sam_set_user_init_flag(sampass, FLAG_SAM_LOGONTIME); + + return NT_STATUS_UNSUCCESSFUL; +} + +NTSTATUS sam_set_user_logoff_time (SAM_USER_HANDLE *sampass, NTTIME mytime, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.logoff_time = mytime; + + if (store) + sam_set_user_init_flag(sampass, FLAG_SAM_LOGOFFTIME); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_kickoff_time (SAM_USER_HANDLE *sampass, NTTIME mytime, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.kickoff_time = mytime; + + if (store) + sam_set_user_init_flag(sampass, FLAG_SAM_KICKOFFTIME); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_pass_can_change_time (SAM_USER_HANDLE *sampass, NTTIME mytime, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.pass_can_change_time = mytime; + + if (store) + sam_set_user_init_flag(sampass, FLAG_SAM_CANCHANGETIME); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_pass_must_change_time (SAM_USER_HANDLE *sampass, NTTIME mytime, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.pass_must_change_time = mytime; + + if (store) + sam_set_user_init_flag(sampass, FLAG_SAM_MUSTCHANGETIME); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_pass_last_set_time (SAM_USER_HANDLE *sampass, NTTIME mytime) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.pass_last_set_time = mytime; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_hours_len (SAM_USER_HANDLE *sampass, uint32 len) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.hours_len = len; + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_logon_divs (SAM_USER_HANDLE *sampass, uint16 hours) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.logon_divs = hours; + return NT_STATUS_OK; +} + +/** + * Set flags showing what is initalised in the SAM_USER_HANDLE + * @param sampass the SAM_USER_HANDLE in question + * @param flag The *new* flag to be set. Old flags preserved + * this flag is only added. + **/ + +NTSTATUS sam_set_user_init_flag (SAM_USER_HANDLE *sampass, uint32 flag) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.init_flag |= flag; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_sid (SAM_USER_HANDLE *sampass, DOM_SID *u_sid) +{ + if (!sampass || !u_sid) + return NT_STATUS_UNSUCCESSFUL; + + sid_copy(&sampass->private.user_sid, u_sid); + + DEBUG(10, ("sam_set_user_sid: setting user sid %s\n", + sid_string_static(&sampass->private.user_sid))); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_sid_from_string (SAM_USER_HANDLE *sampass, fstring u_sid) +{ + DOM_SID new_sid; + if (!sampass || !u_sid) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_user_sid_from_string: setting user sid %s\n", + u_sid)); + + if (!string_to_sid(&new_sid, u_sid)) { + DEBUG(1, ("sam_set_user_sid_from_string: %s isn't a valid SID!\n", u_sid)); + return NT_STATUS_UNSUCCESSFUL; + } + + if (!NT_STATUS_IS_OK(sam_set_user_sid(sampass, &new_sid))) { + DEBUG(1, ("sam_set_user_sid_from_string: could not set sid %s on SAM_USER_HANDLE!\n", u_sid)); + return NT_STATUS_UNSUCCESSFUL; + } + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_pgroup_sid (SAM_USER_HANDLE *sampass, DOM_SID *g_sid) +{ + if (!sampass || !g_sid) + return NT_STATUS_UNSUCCESSFUL; + + sid_copy(&sampass->private.group_sid, g_sid); + + DEBUG(10, ("sam_set_group_sid: setting group sid %s\n", + sid_string_static(&sampass->private.group_sid))); + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_pgroup_string (SAM_USER_HANDLE *sampass, fstring g_sid) +{ + DOM_SID new_sid; + if (!sampass || !g_sid) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_group_sid_from_string: setting group sid %s\n", + g_sid)); + + if (!string_to_sid(&new_sid, g_sid)) { + DEBUG(1, ("sam_set_group_sid_from_string: %s isn't a valid SID!\n", g_sid)); + return NT_STATUS_UNSUCCESSFUL; + } + + if (!NT_STATUS_IS_OK(sam_set_user_pgroup_sid(sampass, &new_sid))) { + DEBUG(1, ("sam_set_group_sid_from_string: could not set sid %s on SAM_USER_HANDLE!\n", g_sid)); + return NT_STATUS_UNSUCCESSFUL; + } + return NT_STATUS_OK; +} + +/********************************************************************* + Set the domain name. + ********************************************************************/ + +NTSTATUS sam_set_user_domain(SAM_USER_HANDLE *sampass, SAM_DOMAIN_HANDLE *domain) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.domain = domain; + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's NT name. + ********************************************************************/ + +NTSTATUS sam_set_user_username(SAM_USER_HANDLE *sampass, const char *nt_username) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_user_username: setting nt username %s, was %s\n", nt_username, sampass->private.username)); + + sampass->private.username = talloc_strdup(sampass->mem_ctx, nt_username); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's full name. + ********************************************************************/ + +NTSTATUS sam_set_user_fullname(SAM_USER_HANDLE *sampass, const char *full_name) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_user_fullname: setting full name %s, was %s\n", full_name, sampass->private.full_name)); + + sampass->private.full_name = talloc_strdup(sampass->mem_ctx, full_name); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's logon script. + ********************************************************************/ + +NTSTATUS sam_set_user_logon_script(SAM_USER_HANDLE *sampass, const char *logon_script, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_logon_script: from %s to %s\n", logon_script, sampass->private.logon_script)); + + sampass->private.logon_script = talloc_strdup(sampass->mem_ctx, logon_script); + + sam_set_user_init_flag(sampass, FLAG_SAM_LOGONSCRIPT); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's profile path. + ********************************************************************/ + +NTSTATUS sam_set_user_profile_path (SAM_USER_HANDLE *sampass, const char *profile_path, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_profile_path: setting profile path %s, was %s\n", profile_path, sampass->private.profile_path)); + + sampass->private.profile_path = talloc_strdup(sampass->mem_ctx, profile_path); + + if (store) { + DEBUG(10, ("sam_set_profile_path: setting profile path sam flag!\n")); + sam_set_user_init_flag(sampass, FLAG_SAM_PROFILE); + } + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's directory drive. + ********************************************************************/ + +NTSTATUS sam_set_user_dir_drive (SAM_USER_HANDLE *sampass, const char *dir_drive, BOOL store) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_dir_drive: setting dir drive %s, was %s\n", dir_drive, + sampass->private.dir_drive)); + + sampass->private.dir_drive = talloc_strdup(sampass->mem_ctx, dir_drive); + + if (store) { + DEBUG(10, ("sam_set_dir_drive: setting dir drive sam flag!\n")); + sam_set_user_init_flag(sampass, FLAG_SAM_DRIVE); + } + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's home directory. + ********************************************************************/ + +NTSTATUS sam_set_user_homedir (SAM_USER_HANDLE *sampass, const char *home_dir, BOOL store) +{ + if (!sampass) return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_homedir: setting home dir %s, was %s\n", home_dir, + sampass->private.home_dir)); + + sampass->private.home_dir = talloc_strdup(sampass->mem_ctx, home_dir); + + if (store) { + DEBUG(10, ("sam_set_homedir: setting home dir sam flag!\n")); + sam_set_user_init_flag(sampass, FLAG_SAM_SMBHOME); + } + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's unix home directory. + ********************************************************************/ + +NTSTATUS sam_set_user_unix_homedir (SAM_USER_HANDLE *sampass, const char *unix_home_dir) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_unix_homedir: setting home dir %s, was %s\n", unix_home_dir, + sampass->private.unix_home_dir)); + + sampass->private.unix_home_dir = talloc_strdup(sampass->mem_ctx, unix_home_dir); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's account description. + ********************************************************************/ + +NTSTATUS sam_set_user_acct_desc (SAM_USER_HANDLE *sampass, const char *acct_desc) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.acct_desc = talloc_strdup(sampass->mem_ctx, acct_desc); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's workstation allowed list. + ********************************************************************/ + +NTSTATUS sam_set_user_workstations (SAM_USER_HANDLE *sampass, const char *workstations) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + DEBUG(10, ("sam_set_workstations: setting workstations %s, was %s\n", workstations, + sampass->private.workstations)); + + sampass->private.workstations = talloc_strdup(sampass->mem_ctx, workstations); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's 'unknown_str', whatever the heck this actually is... + ********************************************************************/ + +NTSTATUS sam_set_user_unknown_str (SAM_USER_HANDLE *sampass, const char *unknown_str) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.unknown_str = talloc_strdup(sampass->mem_ctx, unknown_str); + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's dial string. + ********************************************************************/ + +NTSTATUS sam_set_user_munged_dial (SAM_USER_HANDLE *sampass, const char *munged_dial) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.munged_dial = talloc_strdup(sampass->mem_ctx, munged_dial); + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's NT hash. + ********************************************************************/ + +NTSTATUS sam_set_user_nt_pwd (SAM_USER_HANDLE *sampass, DATA_BLOB data) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.nt_pw = data; + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's LM hash. + ********************************************************************/ + +NTSTATUS sam_set_user_lm_pwd (SAM_USER_HANDLE *sampass, DATA_BLOB data) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.lm_pw = data; + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's plaintext password only (base procedure, see helper + below) + ********************************************************************/ + +NTSTATUS sam_set_user_plaintext_pw_only (SAM_USER_HANDLE *sampass, DATA_BLOB data) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.plaintext_pw = data; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_unknown_1 (SAM_USER_HANDLE *sampass, uint32 unkn) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.unknown_1 = unkn; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_unknown_2 (SAM_USER_HANDLE *sampass, uint32 unkn) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.unknown_2 = unkn; + + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_unknown_3 (SAM_USER_HANDLE *sampass, uint32 unkn) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + sampass->private.unknown_3 = unkn; + return NT_STATUS_OK; +} + +NTSTATUS sam_set_user_hours (SAM_USER_HANDLE *sampass, const uint8 *hours) +{ + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + if (!hours) { + memset ((char *)sampass->private.hours, 0, MAX_HOURS_LEN); + return NT_STATUS_OK; + } + + memcpy (sampass->private.hours, hours, MAX_HOURS_LEN); + + return NT_STATUS_OK; +} + +/* Helpful interfaces to the above */ + +/********************************************************************* + Sets the last changed times and must change times for a normal + password change. + ********************************************************************/ + +NTSTATUS sam_set_user_pass_changed_now (SAM_USER_HANDLE *sampass) +{ + uint32 expire; + NTTIME temptime; + + if (!sampass) + return NT_STATUS_UNSUCCESSFUL; + + unix_to_nt_time(&temptime, time(NULL)); + if (!NT_STATUS_IS_OK(sam_set_user_pass_last_set_time (sampass, temptime))) + return NT_STATUS_UNSUCCESSFUL; + + if (!account_policy_get(AP_MAX_PASSWORD_AGE, &expire) + || (expire==(uint32)-1)) { + + get_nttime_max(&temptime); + if (!NT_STATUS_IS_OK(sam_set_user_pass_must_change_time (sampass, temptime, False))) + return NT_STATUS_UNSUCCESSFUL; + + } else { + /* FIXME: Add expire to temptime */ + + if (!NT_STATUS_IS_OK(sam_get_user_pass_last_set_time(sampass,&temptime)) || !NT_STATUS_IS_OK(sam_set_user_pass_must_change_time (sampass, temptime,True))) + return NT_STATUS_UNSUCCESSFUL; + } + + return NT_STATUS_OK; +} + +/********************************************************************* + Set the user's PLAINTEXT password. Used as an interface to the above. + Also sets the last change time to NOW. + ********************************************************************/ + +NTSTATUS sam_set_plaintext_passwd (SAM_USER_HANDLE *sampass, const char *plaintext) +{ + DATA_BLOB data; + uchar new_lanman_p16[16]; + uchar new_nt_p16[16]; + + if (!sampass || !plaintext) + return NT_STATUS_UNSUCCESSFUL; + + nt_lm_owf_gen (plaintext, new_nt_p16, new_lanman_p16); + + data = data_blob(new_nt_p16, 16); + if (!NT_STATUS_IS_OK(sam_set_user_nt_pwd (sampass, data))) + return NT_STATUS_UNSUCCESSFUL; + + data = data_blob(new_lanman_p16, 16); + + if (!NT_STATUS_IS_OK(sam_set_user_lm_pwd (sampass, data))) + return NT_STATUS_UNSUCCESSFUL; + + if (!NT_STATUS_IS_OK(sam_set_user_pass_changed_now (sampass))) + return NT_STATUS_UNSUCCESSFUL; + + return NT_STATUS_OK; +} + diff --git a/source3/sam/interface.c b/source3/sam/interface.c new file mode 100644 index 0000000000..6adf213d27 --- /dev/null +++ b/source3/sam/interface.c @@ -0,0 +1,1001 @@ +/* + Unix SMB/CIFS implementation. + Password and authentication handling + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Jelmer Vernooij 2002 + Copyright (C) Stefan (metze) Metzmacher 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" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_SAM + +/** List of various built-in sam modules */ + +const struct sam_init_function_entry builtin_sam_init_functions[] = { + { NULL, NULL} +}; + +/* FIXME: wrapper functions : context_* */ + +/****************************************************************** + context_sam_* functions are used to link the external SAM interface + with the internal backends. These functions lookup the appropriate + backends for the domain and pass on to the function in sam_methods + in the selected backend + *******************************************************************/ + +NTSTATUS sam_get_methods_by_sid(const struct sam_context *context, struct sam_methods **sam_method, const DOM_SID *domainsid) +{ + struct sam_methods *tmp_methods; + + DEBUG(5,("sam_get_methods_by_sid: %d\n", __LINE__)); + + if ((!context) || (!context->methods)) + { + DEBUG(2,("sam_get_methods_by_sid: invalid sam_context specified!\n")); + return NT_STATUS_INVALID_PARAMETER; + } + + tmp_methods = context->methods; + + while (tmp_methods) + { + if (sid_equal(domainsid, &tmp_methods->domain->private.sid)) + { + (*sam_method) = tmp_methods; + return NT_STATUS_OK; + } + tmp_methods = tmp_methods->next; + } + + DEBUG(3,("sam_get_methods_by_sid: There is no backend specified for domain %s\n", sid_string_static(domainsid))); + + return NT_STATUS_NO_SUCH_DOMAIN; +} + +NTSTATUS sam_get_methods_by_name(const struct sam_context *context, struct sam_methods **sam_method, const char *domainname) +{ + struct sam_methods *tmp_methods; + + DEBUG(5,("sam_get_methods_by_name: %d\n", __LINE__)); + + if ((!context) || (!context->methods)) + { + DEBUG(2,("sam_get_methods_by_sid: invalid sam_context specified!\n")); + return NT_STATUS_INVALID_PARAMETER; + } + + tmp_methods = context->methods; + + while (tmp_methods) + { + if (strcmp(domainname, tmp_methods->domain->private.name)) + { + (*sam_method) = tmp_methods; + return NT_STATUS_OK; + } + tmp_methods = tmp_methods->next; + } + + DEBUG(3,("sam_get_methods_by_sid: There is no backend specified for domain %s\n", domainname)); + + return NT_STATUS_NO_SUCH_DOMAIN; +} + +NTSTATUS context_sam_get_sec_desc(const struct sam_context *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) +{ + struct sam_methods *tmp_methods; +// DOM_SID *domainsid; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_get_sec_desc: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_sec_desc) { + DEBUG(3, ("context_sam_get_sec_desc: sam_methods of the domain did not specify sam_get_sec_desc\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_sec_desc(tmp_methods, access_token, sid, sd))) { + DEBUG(4,("context_sam_get_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_set_sec_desc(const struct sam_context *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) +{ + struct sam_methods *tmp_methods; +// DOM_SID *domainsid; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_set_sec_desc: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_set_sec_desc) { + DEBUG(3, ("context_sam_set_sec_desc: sam_methods of the domain did not specify sam_set_sec_desc\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_set_sec_desc(tmp_methods, access_token, sid, sd))) { + DEBUG(4,("context_sam_set_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + + +NTSTATUS context_sam_lookup_name(const struct sam_context *context, const NT_USER_TOKEN *access_token, const char *domain, const char *name, DOM_SID **sid, uint32 *type) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_lookup_name: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { + DEBUG(4,("sam_get_methods_by_name failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_lookup_name) { + DEBUG(3, ("context_sam_lookup_name: sam_methods of the domain did not specify sam_lookup_name\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_name(tmp_methods, access_token, name, sid, type))) { + DEBUG(4,("context_sam_lookup_name for %s\\%s in backend %s failed\n", + tmp_methods->domain->private.name, name, tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_lookup_sid(const struct sam_context *context, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) +{ + struct sam_methods *tmp_methods; + uint32 rid; + NTSTATUS nt_status; + DOM_SID domainsid; + + DEBUG(5,("context_sam_lookup_sid: %d\n", __LINE__)); + + sid_copy(&domainsid, sid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_lookup_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_lookup_sid) { + DEBUG(3, ("context_sam_lookup_sid: sam_methods of the domain did not specify sam_lookup_sid\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_sid(tmp_methods, access_token, sid, name, type))) { + DEBUG(4,("context_sam_lookup_name for %s in backend %s failed\n", + sid_string_static(sid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + + +NTSTATUS context_sam_update_domain(const struct sam_context *context, const SAM_DOMAIN_HANDLE *domain) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS context_sam_enum_domains(const struct sam_context *context, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char ***domain_names) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + SEC_DESC *sd; + size_t sd_size; + uint32 acc_granted; + int i = 0; + + DEBUG(5,("context_sam_enum_domains: %d\n", __LINE__)); + + if ((!context)|| (!context->methods)) { + DEBUG(2,("context_sam_enum_domains: invalid sam_context specified!\n")); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { + DEBUG(4,("samr_make_sam_obj_sd failed\n")); + return nt_status; + } + + if (!se_access_check(sd, access_token, SAMR_ACCESS_ENUM_DOMAINS, &acc_granted, &nt_status)) { + DEBUG(3,("context_sam_enum_domains: ACCESS DENIED\n")); + return nt_status; + } + + tmp_methods= context->methods; + + while (tmp_methods) + { + (*domain_count)++; + tmp_methods= tmp_methods->next; + } + + DEBUG(6,("context_sam_enum_domains: enumerating %d domains\n", (*domain_count))); + + tmp_methods = context->methods; + + if (((*domains) = malloc( sizeof(DOM_SID) * (*domain_count))) == NULL) { + DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain list\n")); + return NT_STATUS_NO_MEMORY; + } + + if (((*domain_names) = malloc( sizeof(char*) * (*domain_count))) == NULL) { + DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain list\n")); + SAFE_FREE((*domains)); + return NT_STATUS_NO_MEMORY; + } + + while (tmp_methods) + { + + DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain->private.name, sid_string_static(&tmp_methods->domain->private.sid))); + sid_copy(domains[i],&tmp_methods->domain->private.sid); + if(asprintf(&(*domain_names[i]),"%s",tmp_methods->domain->private.name) < 0) { + DEBUG(0,("context_sam_enum_domains: asprintf failed")); + SAFE_FREE((*domains)); + SAFE_FREE((*domain_names)); + return NT_STATUS_NO_MEMORY; + } + + i++; + tmp_methods= tmp_methods->next; + + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_lookup_domain(const struct sam_context *context, const NT_USER_TOKEN *access_token, const char *domain, DOM_SID **domainsid) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + SEC_DESC *sd; + size_t sd_size; + uint32 acc_granted; + + DEBUG(5,("context_sam_lookup_domain: %d\n", __LINE__)); + + if ((!context)|| (!context->methods)) { + DEBUG(2,("context_sam_lookup_domain: invalid sam_context specified!\n")); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { + DEBUG(4,("samr_make_sam_obj_sd failed\n")); + return nt_status; + } + + if (!se_access_check(sd, access_token, SAMR_ACCESS_OPEN_DOMAIN, &acc_granted, &nt_status)) { + DEBUG(3,("context_sam_lookup_domain: ACCESS DENIED\n")); + return nt_status; + } + + tmp_methods= context->methods; + + while (tmp_methods) + { + if (strcmp(domain, tmp_methods->domain->private.name) == 0) { + sid_copy((*domainsid), &tmp_methods->domain->private.sid); + return NT_STATUS_OK; + } + tmp_methods= tmp_methods->next; + } + + return NT_STATUS_NO_SUCH_DOMAIN; +} + + +NTSTATUS context_sam_get_domain_by_sid(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_get_domain_by_sid: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_domain_handle) { + DEBUG(3, ("context_sam_get_domain_by_sid: sam_methods of the domain did not specify sam_get_domain_handle\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_domain_handle(tmp_methods, access_token, access_desired, domain))) { + DEBUG(4,("context_sam_get_domain_by_sid for %s in backend %s failed\n", + sid_string_static(domainsid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_create_user(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, DOM_SID *domainsid, SAM_USER_HANDLE **user) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_create_user: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_create_user) { + DEBUG(3, ("context_sam_create_user: sam_methods of the domain did not specify sam_create_user\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_user(tmp_methods, access_token, access_desired, user))) { + DEBUG(4,("context_sam_create_user in backend %s failed\n", + tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_add_user(const struct sam_context *context, const SAM_USER_HANDLE *user) +{ + DOM_SID domainsid; + DOM_SID *usersid; + struct sam_methods *tmp_methods; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_user_sid(user, &usersid))) { + DEBUG(0,("Can't get user SID\n")); + return status; + } + + sid_copy(&domainsid, usersid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_user_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_add_user) { + DEBUG(3, ("context_sam_add_user: sam_methods of the domain did not specify sam_add_user\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_add_user(tmp_methods, user))){ + DEBUG(4,("context_sam_add_user in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_update_user(const struct sam_context *context, const SAM_USER_HANDLE *user) +{ + DOM_SID domainsid; + struct sam_methods *tmp_methods; + DOM_SID *usersid; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_user_sid(user, &usersid))) { + DEBUG(0,("Can't get user SID\n")); + return status; + } + + sid_copy(&domainsid, usersid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_user_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_update_user) { + DEBUG(3, ("context_sam_update_user: sam_methods of the domain did not specify sam_update_user\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_update_user(tmp_methods, user))){ + DEBUG(4,("context_sam_update_user in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_delete_user(const struct sam_context *context, SAM_USER_HANDLE *user) +{ + DOM_SID domainsid; + struct sam_methods *tmp_methods; + DOM_SID *usersid; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_user_sid(user, &usersid))) { + DEBUG(0,("Can't get user SID\n")); + return status; + } + + sid_copy(&domainsid, usersid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_user_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_delete_user) { + DEBUG(3, ("context_sam_delete_user: sam_methods of the domain did not specify sam_delete_user\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_delete_user(tmp_methods, user))){ + DEBUG(4,("context_sam_delete_user in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_enum_users(const struct sam_context *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, int32 *user_count, SAM_USER_ENUM **users) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_enum_users: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_enum_users) { + DEBUG(3, ("context_sam_enum_users: sam_methods of the domain did not specify sam_enum_users\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_users(tmp_methods, access_token, user_count, users))) { + DEBUG(4,("context_sam_enum_users for domain %s in backend %s failed\n", + tmp_methods->domain->private.name, tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + + +NTSTATUS context_sam_get_user_by_sid(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *usersid, SAM_USER_HANDLE **user) +{ + struct sam_methods *tmp_methods; + uint32 rid; + DOM_SID domainsid; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_get_user_by_sid: %d\n", __LINE__)); + + sid_copy(&domainsid, usersid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_user_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_user_by_sid) { + DEBUG(3, ("context_sam_get_user_by_sid: sam_methods of the domain did not specify sam_get_user_by_sid\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_user_by_sid(tmp_methods, access_token, access_desired, usersid, user))) { + DEBUG(4,("context_sam_get_user_by_sid for %s in backend %s failed\n", + sid_string_static(usersid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_get_user_by_name(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_USER_HANDLE **user) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_get_user_by_name: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { + DEBUG(4,("sam_get_methods_by_name failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_user_by_name) { + DEBUG(3, ("context_sam_get_user_by_name: sam_methods of the domain did not specify sam_get_user_by_name\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_user_by_name(tmp_methods, access_token, access_desired, name, user))) { + DEBUG(4,("context_sam_get_user_by_name for %s\\%s in backend %s failed\n", + domain, name, tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_create_group(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, DOM_SID *sid, SAM_GROUP_HANDLE **group) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_create_group: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_create_group) { + DEBUG(3, ("context_sam_create_group: sam_methods of the domain did not specify sam_create_group\n")); + return NT_STATUS_UNSUCCESSFUL; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, type, group))) { + DEBUG(4,("context_sam_create_group in backend %s failed\n", + tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_add_group(const struct sam_context *context, const SAM_GROUP_HANDLE *group) +{ + DOM_SID domainsid; + DOM_SID *groupsid; + struct sam_methods *tmp_methods; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_group_sid(group, &groupsid))) { + DEBUG(0,("Can't get group SID\n")); + return status; + } + + sid_copy(&domainsid, groupsid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_add_group) { + DEBUG(3, ("context_sam_add_group: sam_methods of the domain did not specify sam_add_group\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_add_group(tmp_methods, group))){ + DEBUG(4,("context_sam_add_group in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_update_group(const struct sam_context *context, const DOM_SID *domainsid, const SAM_GROUP_HANDLE *group) +{ + DOM_SID domainsid; + DOM_SID *groupsid; + struct sam_methods *tmp_methods; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_group_sid(group, &groupsid))) { + DEBUG(0,("Can't get group SID\n")); + return status; + } + + sid_copy(&domainsid, groupsid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_update_group) { + DEBUG(3, ("context_sam_update_group: sam_methods of the domain did not specify sam_update_group\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_update_group(tmp_methods, group))){ + DEBUG(4,("context_sam_update_group in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_delete_group(const struct sam_context *context, SAM_GROUP_HANDLE **groupsid) +{ + DOM_SID domainsid; + struct sam_methods *tmp_methods; + DOM_SID *groupsid; + uint32 rid; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = sam_get_group_sid(group, &groupsid))) { + DEBUG(0,("Can't get group SID\n")); + return status; + } + + sid_copy(&domainsid, groupsid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + if (!NT_STATUS_IS_OK(status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return status; + } + + if (!tmp_methods->sam_delete_group) { + DEBUG(3, ("context_sam_delete_group: sam_methods of the domain did not specify sam_delete_group\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(status = tmp_methods->sam_delete_group(tmp_methods, group))){ + DEBUG(4,("context_sam_delete_group in backend %s failed\n", + tmp_methods->backendname)); + return status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_enum_groups(const struct sam_context *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_enum_groups: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_enum_users) { + DEBUG(3, ("context_sam_enum_groups: sam_methods of the domain did not specify sam_enum_groups\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, type, groups_count, groups))) { + DEBUG(4,("context_sam_enum_groups for domain %s in backend %s failed\n", + tmp_methods->domain->private.name, tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_get_group_by_sid(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +{ + struct sam_methods *tmp_methods; + uint32 rid; + NTSTATUS nt_status; + DOM_SID domainsid; + + DEBUG(5,("context_sam_get_group_by_sid: %d\n", __LINE__)); + + sid_copy(&domainsid, groupsid); + if (!sid_split_rid(&domainsid, &rid)) { + DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); + return NT_STATUS_INVALID_SID; + } + + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { + DEBUG(4,("sam_get_methods_by_sid failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_group_by_sid) { + DEBUG(3, ("context_sam_get_group_by_sid: sam_methods of the domain did not specify sam_get_group_by_sid\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_group_by_sid(tmp_methods, access_token, access_desired, groupsid, group))) { + DEBUG(4,("context_sam_get_group_by_sid for %s in backend %s failed\n", + sid_string_static(groupsid), tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_get_group_by_name(const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group) +{ + struct sam_methods *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_get_group_by_name: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_name(context, &tmp_methods, domain))) { + DEBUG(4,("sam_get_methods_by_name failed\n")); + return nt_status; + } + + if (!tmp_methods->sam_get_group_by_name) { + DEBUG(3, ("context_sam_get_group_by_name: sam_methods of the domain did not specify sam_get_group_by_name\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_group_by_name(tmp_methods, access_token, access_desired, name, group))) { + DEBUG(4,("context_sam_get_group_by_name for %s\\%s in backend %s failed\n", + domain, name, tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; +} + +NTSTATUS context_sam_add_member_to_group(const struct sam_context *context, SAM_GROUP_HANDLE *group, SAM_GROUP_MEMBER *member) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} +NTSTATUS context_sam_delete_member_from_group(const struct sam_context *context, SAM_GROUP_HANDLE *group, SAM_GROUP_MEMBER *member) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS context_sam_enum_groupmembers(const struct sam_context *context, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS context_sam_get_groups_of_user(const struct sam_context *context, const SAM_USER_HANDLE *user, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups) +{ + return NT_STATUS_NOT_IMPLEMENTED; +} + + +/****************************************************************** + Free and cleanup a sam context, any associated data and anything + that the attached modules might have associated. + *******************************************************************/ + +void free_sam_context(struct sam_context **context) +{ + struct sam_methods *sam_selected = (*context)->methods; + + while (sam_selected){ + if (sam_selected->free_private_data) { + sam_selected->free_private_data(&(sam_selected->private_data)); + } + sam_selected = sam_selected->next; + } + + talloc_destroy((*context)->mem_ctx); + *context = NULL; +} + +/****************************************************************** + Make a sam_methods from scratch + *******************************************************************/ + +NTSTATUS make_sam_context_list(struct sam_context **context, char **selected) +{ + int i = 0; + struct sam_methods *curmethods, *tmpmethods; + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + + if (!NT_STATUS_IS_OK(nt_status = make_sam_context(context))) { + return nt_status; + } + while (selected[i]){ + /* Try to initialise sam */ + DEBUG(5,("Trying to load: %s\n", selected[i])); + if (!NT_STATUS_IS_OK(nt_status = make_sam_methods_name(&curmethods, *context, selected[i]))) { + DEBUG(1, ("Loading %s failed!\n", selected[i])); + free_sam_context(context); + return nt_status; + } + curmethods->parent = *context; + DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); + i++; + } + return NT_STATUS_OK; +} + +NTSTATUS make_sam_methods_name(struct sam_methods **methods, struct sam_context *context, const char *selected) +{ + char *module_name = smb_xstrdup(selected); + char *module_location = NULL, *p; + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + int i; + + p = strchr(module_name, ':'); + + if (p) { + *p = 0; + module_location = p+1; + trim_string(module_location, " ", " "); + } + + trim_string(module_name, " ", " "); + + DEBUG(5,("Attempting to find an sam backend to match %s (%s)\n", selected, module_name)); + for (i = 0; builtin_sam_init_functions[i].name; i++) + { + if (strequal(builtin_sam_init_functions[i].name, module_name)) + { + DEBUG(5,("Found sam backend %s (at pos %d)\n", module_name, i)); + nt_status = builtin_sam_init_functions[i].init(context, methods, module_location); + if (NT_STATUS_IS_OK(nt_status)) { + DEBUG(5,("sam backend %s has a valid init\n", selected)); + } else { + DEBUG(0,("sam backend %s did not correctly init (error was %s)\n", selected, nt_errstr(nt_status))); + } + SAFE_FREE(module_name); + return nt_status; + break; /* unreached */ + } + } + + /* No such backend found */ + SAFE_FREE(module_name); + return NT_STATUS_INVALID_PARAMETER; +} + +/****************************************************************** + Make a sam_context from scratch. + *******************************************************************/ + +NTSTATUS make_sam_context(struct sam_context **context) +{ + TALLOC_CTX *mem_ctx; + + mem_ctx = talloc_init_named("sam_context internal allocation context"); + + if (!mem_ctx) { + DEBUG(0, ("make_sam_context: talloc init failed!\n")); + return NT_STATUS_NO_MEMORY; + } + + *context = talloc(mem_ctx, sizeof(**context)); + if (!*context) { + DEBUG(0, ("make_sam_context: talloc failed!\n")); + return NT_STATUS_NO_MEMORY; + } + + ZERO_STRUCTP(*context); + + (*context)->mem_ctx = mem_ctx; + + /* FIXME */ + + (*context)->free_fn = free_sam_context; + + return NT_STATUS_OK; +} + + +/****************************************************************** + Return an already initialised sam_context, to facilitate backward + compatibility (see functions below). + *******************************************************************/ + +struct sam_context *sam_get_static_context(BOOL reload) +{ + static struct sam_context *sam_context = NULL; + + if ((sam_context) && (reload)) { + sam_context->free_fn(&sam_context); + if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { + return NULL; + } + } + + if (!sam_context) { + if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { + return NULL; + } + } + + return sam_context; +} + +/*************************************************************** + Initialize the static context (at smbd startup etc). + + If uninitialised, context will auto-init on first use. + ***************************************************************/ + +BOOL initialize_sam(BOOL reload) +{ + return (sam_get_static_context(reload) != NULL); +} + + +NTSTATUS make_sam_methods(TALLOC_CTX *mem_ctx, SAM_METHODS **methods) +{ + *methods = talloc(mem_ctx, sizeof(struct sam_methods)); + + if (!*methods) { + return NT_STATUS_NO_MEMORY; + } + + ZERO_STRUCTP(*methods); + + return NT_STATUS_OK; +} diff --git a/source3/utils/testparm.c b/source3/utils/testparm.c index 852472073b..d48cecba47 100644 --- a/source3/utils/testparm.c +++ b/source3/utils/testparm.c @@ -48,7 +48,7 @@ static int do_global_checks(void) SMB_STRUCT_STAT st; if (lp_security() >= SEC_DOMAIN && !lp_encrypted_passwords()) { - printf("ERROR: in 'security=domain' mode the 'encrypt passwords' parameter must also be set to 'true'.\n"); + printf("ERROR: in 'security=domain' mode the 'encrypt passwords' parameter must always be set to 'true'.\n"); ret = 1; } -- cgit From bbbf21310f809bd948202840d27c34b6bebe94e3 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 05:55:08 +0000 Subject: Code style + typo fixes Added Kai Krüger to copyrightholders of interface.c (This used to be commit 067ae5f81076611a0042eb064afdffa5e37f93e9) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source3/sam/account.c | 4 +-- source3/sam/get_set_domain.c | 46 ++++++++++++++++---------------- source3/sam/get_set_user.c | 62 ++++++++++++++++++++++---------------------- source3/sam/interface.c | 1 + 4 files changed, 57 insertions(+), 56 deletions(-) diff --git a/source3/sam/account.c b/source3/sam/account.c index 1fec9966f6..9953ba956c 100644 --- a/source3/sam/account.c +++ b/source3/sam/account.c @@ -118,9 +118,9 @@ NTSTATUS sam_init_user(SAM_USER_HANDLE **user) } /** - * Free the contets of the SAM_USER_HANDLE, but not the structure. + * Free the contents of the SAM_USER_HANDLE, but not the structure. * - * Also wipes the LM and NT hashes and plaintext passwrod from + * Also wipes the LM and NT hashes and plaintext password from * memory. * * @param user SAM_USER_HANDLE to free members of. diff --git a/source3/sam/get_set_domain.c b/source3/sam/get_set_domain.c index 49a63f9fae..e9e61119cd 100644 --- a/source3/sam/get_set_domain.c +++ b/source3/sam/get_set_domain.c @@ -37,7 +37,7 @@ NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, DOM_SID **sid) NTSTATUS sam_get_domain_num_users(SAM_DOMAIN_HANDLE *domain, uint32 *num_users) { - if (!domain || !num_users)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !num_users) return NT_STATUS_UNSUCCESSFUL; *num_users = domain->private.num_users; @@ -46,7 +46,7 @@ NTSTATUS sam_get_domain_num_users(SAM_DOMAIN_HANDLE *domain, uint32 *num_users) NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups) { - if (!domain || !num_groups)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !num_groups) return NT_STATUS_UNSUCCESSFUL; *num_groups = domain->private.num_groups; @@ -55,7 +55,7 @@ NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_aliases) { - if (!domain || !num_aliases)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !num_aliases) return NT_STATUS_UNSUCCESSFUL; *num_aliases = domain->private.num_aliases; @@ -64,7 +64,7 @@ NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_alias NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, char **domain_name) { - if (!domain || !domain_name)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !domain_name) return NT_STATUS_UNSUCCESSFUL; *domain_name = domain->private.name; @@ -73,7 +73,7 @@ NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, char **domain_name) NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.name = talloc_strdup(domain->mem_ctx, domain_name); @@ -82,7 +82,7 @@ NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name) NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) { - if (!domain || !server_name)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !server_name) return NT_STATUS_UNSUCCESSFUL; *server_name = domain->private.servername; @@ -91,7 +91,7 @@ NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, char *server_name) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.servername = talloc_strdup(domain->mem_ctx, server_name); @@ -100,7 +100,7 @@ NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, char *server_name) NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwordage) { - if (!domain || !max_passwordage)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !max_passwordage) return NT_STATUS_UNSUCCESSFUL; *max_passwordage = domain->private.max_passwordage; @@ -109,7 +109,7 @@ NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwo NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwordage) { - if (!domain || !min_passwordage)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !min_passwordage) return NT_STATUS_UNSUCCESSFUL; *min_passwordage = domain->private.min_passwordage; @@ -118,7 +118,7 @@ NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwo NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lockout_duration) { - if (!domain || !lockout_duration)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !lockout_duration) return NT_STATUS_UNSUCCESSFUL; *lockout_duration = domain->private.lockout_duration; @@ -127,7 +127,7 @@ NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lock NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_lockout_count) { - if (!domain || !reset_lockout_count)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !reset_lockout_count) return NT_STATUS_UNSUCCESSFUL; *reset_lockout_count = domain->private.reset_count; @@ -136,7 +136,7 @@ NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_loc NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_passwordlength) { - if (!domain || !min_passwordlength)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !min_passwordlength) return NT_STATUS_UNSUCCESSFUL; *min_passwordlength = domain->private.min_passwordlength; @@ -145,7 +145,7 @@ NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_pas NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_history) { - if (!domain || !password_history)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !password_history) return NT_STATUS_UNSUCCESSFUL; *password_history = domain->private.password_history; @@ -154,7 +154,7 @@ NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_ NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout_count) { - if (!domain || !lockout_count)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !lockout_count) return NT_STATUS_UNSUCCESSFUL; *lockout_count = domain->private.lockout_count; @@ -163,7 +163,7 @@ NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logoff) { - if (!domain || !force_logoff)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !force_logoff) return NT_STATUS_UNSUCCESSFUL; *force_logoff = domain->private.force_logoff; @@ -173,7 +173,7 @@ NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logo NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_pwdchange) { - if (!domain || !login_pwdchange)return NT_STATUS_UNSUCCESSFUL; + if (!domain || !login_pwdchange) return NT_STATUS_UNSUCCESSFUL; *login_pwdchange = domain->private.login_pwdchange; @@ -184,7 +184,7 @@ NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_p NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwordage) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.max_passwordage = max_passwordage; @@ -193,7 +193,7 @@ NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwor NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwordage) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.min_passwordage = min_passwordage; @@ -202,7 +202,7 @@ NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwor NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME lockout_duration) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.lockout_duration = lockout_duration; @@ -210,7 +210,7 @@ NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME locko } NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lockout_count) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.reset_count = reset_lockout_count; @@ -219,7 +219,7 @@ NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lock NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 min_passwordlength) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.min_passwordlength = min_passwordlength; @@ -237,7 +237,7 @@ NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 password_h NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_count) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.lockout_count = lockout_count; @@ -246,7 +246,7 @@ NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_ NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL force_logoff) { - if (!domain)return NT_STATUS_UNSUCCESSFUL; + if (!domain) return NT_STATUS_UNSUCCESSFUL; domain->private.force_logoff = force_logoff; diff --git a/source3/sam/get_set_user.c b/source3/sam/get_set_user.c index e58afe6880..753567ac06 100644 --- a/source3/sam/get_set_user.c +++ b/source3/sam/get_set_user.c @@ -55,7 +55,7 @@ NTSTATUS sam_get_user_domain_name (const SAM_USER_HANDLE *sampass, char **domain NTSTATUS sam_get_user_acct_ctrl (const SAM_USER_HANDLE *sampass, uint16 *acct_ctrl) { - if(!sampass || !acct_ctrl)return NT_STATUS_UNSUCCESSFUL; + if(!sampass || !acct_ctrl) return NT_STATUS_UNSUCCESSFUL; *acct_ctrl = sampass->private.acct_ctrl; @@ -64,7 +64,7 @@ NTSTATUS sam_get_user_acct_ctrl (const SAM_USER_HANDLE *sampass, uint16 *acct_ct NTSTATUS sam_get_user_logon_time (const SAM_USER_HANDLE *sampass, NTTIME *logon_time) { - if(!sampass || !logon_time)return NT_STATUS_UNSUCCESSFUL; + if(!sampass || !logon_time) return NT_STATUS_UNSUCCESSFUL; *logon_time = sampass->private.logon_time; @@ -73,7 +73,7 @@ NTSTATUS sam_get_user_logon_time (const SAM_USER_HANDLE *sampass, NTTIME *logon_ NTSTATUS sam_get_user_logoff_time (const SAM_USER_HANDLE *sampass, NTTIME *logoff_time) { - if(!sampass || !logoff_time)return NT_STATUS_UNSUCCESSFUL; + if(!sampass || !logoff_time) return NT_STATUS_UNSUCCESSFUL; *logoff_time = sampass->private.logoff_time; @@ -82,7 +82,7 @@ NTSTATUS sam_get_user_logoff_time (const SAM_USER_HANDLE *sampass, NTTIME *logof NTSTATUS sam_get_user_kickoff_time (const SAM_USER_HANDLE *sampass, NTTIME *kickoff_time) { - if (!sampass || !kickoff_time)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !kickoff_time) return NT_STATUS_UNSUCCESSFUL; *kickoff_time = sampass->private.kickoff_time; @@ -91,7 +91,7 @@ NTSTATUS sam_get_user_kickoff_time (const SAM_USER_HANDLE *sampass, NTTIME *kick NTSTATUS sam_get_user_pass_last_set_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_last_set_time) { - if (!sampass || !pass_last_set_time)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !pass_last_set_time) return NT_STATUS_UNSUCCESSFUL; *pass_last_set_time = sampass->private.pass_last_set_time; @@ -100,7 +100,7 @@ NTSTATUS sam_get_user_pass_last_set_time (const SAM_USER_HANDLE *sampass, NTTIME NTSTATUS sam_get_user_pass_can_change_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_can_change_time) { - if (!sampass || !pass_can_change_time)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !pass_can_change_time) return NT_STATUS_UNSUCCESSFUL; *pass_can_change_time = sampass->private.pass_can_change_time; @@ -109,7 +109,7 @@ NTSTATUS sam_get_user_pass_can_change_time (const SAM_USER_HANDLE *sampass, NTTI NTSTATUS sam_get_user_pass_must_change_time (const SAM_USER_HANDLE *sampass, NTTIME *pass_must_change_time) { - if (!sampass || !pass_must_change_time)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !pass_must_change_time) return NT_STATUS_UNSUCCESSFUL; *pass_must_change_time = sampass->private.pass_must_change_time; @@ -118,7 +118,7 @@ NTSTATUS sam_get_user_pass_must_change_time (const SAM_USER_HANDLE *sampass, NTT NTSTATUS sam_get_user_logon_divs (const SAM_USER_HANDLE *sampass, uint16 *logon_divs) { - if (!sampass || !logon_divs)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !logon_divs) return NT_STATUS_UNSUCCESSFUL; *logon_divs = sampass->private.logon_divs; @@ -127,7 +127,7 @@ NTSTATUS sam_get_user_logon_divs (const SAM_USER_HANDLE *sampass, uint16 *logon_ NTSTATUS sam_get_user_hours_len (const SAM_USER_HANDLE *sampass, uint32 *hours_len) { - if (!sampass || !hours_len)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !hours_len) return NT_STATUS_UNSUCCESSFUL; *hours_len = sampass->private.hours_len; @@ -136,7 +136,7 @@ NTSTATUS sam_get_user_hours_len (const SAM_USER_HANDLE *sampass, uint32 *hours_l NTSTATUS sam_get_user_hours (const SAM_USER_HANDLE *sampass, uint8 **hours) { - if (!sampass || !hours)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !hours) return NT_STATUS_UNSUCCESSFUL; *hours = sampass->private.hours; @@ -145,7 +145,7 @@ NTSTATUS sam_get_user_hours (const SAM_USER_HANDLE *sampass, uint8 **hours) NTSTATUS sam_get_user_nt_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *nt_pwd) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; SMB_ASSERT((!sampass->private.nt_pw.data) || sampass->private.nt_pw.length == NT_HASH_LEN); @@ -157,7 +157,7 @@ NTSTATUS sam_get_user_nt_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *nt_pwd) NTSTATUS sam_get_user_lm_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *lm_pwd) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; SMB_ASSERT((!sampass->private.lm_pw.data) || sampass->private.lm_pw.length == LM_HASH_LEN); @@ -176,7 +176,7 @@ NTSTATUS sam_get_user_lm_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB *lm_pwd) NTSTATUS sam_get_user_plaintext_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB **plain_pwd) { - if (!sampass || !plain_pwd)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !plain_pwd) return NT_STATUS_UNSUCCESSFUL; *plain_pwd = &(sampass->private.plaintext_pw); @@ -185,7 +185,7 @@ NTSTATUS sam_get_user_plaintext_pwd (const SAM_USER_HANDLE *sampass, DATA_BLOB * NTSTATUS sam_get_user_sid(const SAM_USER_HANDLE *sampass, DOM_SID **sid) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *sid = &(sampass->private.user_sid); @@ -194,7 +194,7 @@ NTSTATUS sam_get_user_sid(const SAM_USER_HANDLE *sampass, DOM_SID **sid) NTSTATUS sam_get_user_pgroup(const SAM_USER_HANDLE *sampass, DOM_SID **sid) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *sid = &(sampass->private.group_sid); @@ -209,7 +209,7 @@ NTSTATUS sam_get_user_pgroup(const SAM_USER_HANDLE *sampass, DOM_SID **sid) NTSTATUS sam_get_user_init_flag (const SAM_USER_HANDLE *sampass, uint32 *initflag) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *initflag = sampass->private.init_flag; @@ -218,7 +218,7 @@ NTSTATUS sam_get_user_init_flag (const SAM_USER_HANDLE *sampass, uint32 *initfla NTSTATUS sam_get_user_name (const SAM_USER_HANDLE *sampass, char **username) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *username = sampass->private.username; @@ -227,7 +227,7 @@ NTSTATUS sam_get_user_name (const SAM_USER_HANDLE *sampass, char **username) NTSTATUS sam_get_user_domain (const SAM_USER_HANDLE *sampass, SAM_DOMAIN_HANDLE **domain) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *domain = sampass->private.domain; @@ -236,7 +236,7 @@ NTSTATUS sam_get_user_domain (const SAM_USER_HANDLE *sampass, SAM_DOMAIN_HANDLE NTSTATUS sam_get_user_fullname (const SAM_USER_HANDLE *sampass, char **fullname) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *fullname = sampass->private.full_name; @@ -245,7 +245,7 @@ NTSTATUS sam_get_user_fullname (const SAM_USER_HANDLE *sampass, char **fullname) NTSTATUS sam_get_user_homedir (const SAM_USER_HANDLE *sampass, char **homedir) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *homedir = sampass->private.home_dir; @@ -254,7 +254,7 @@ NTSTATUS sam_get_user_homedir (const SAM_USER_HANDLE *sampass, char **homedir) NTSTATUS sam_get_user_unix_home_dir (const SAM_USER_HANDLE *sampass, char **uhomedir) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *uhomedir = sampass->private.unix_home_dir; @@ -263,7 +263,7 @@ NTSTATUS sam_get_user_unix_home_dir (const SAM_USER_HANDLE *sampass, char **uhom NTSTATUS sam_get_user_dir_drive (const SAM_USER_HANDLE *sampass, char **dirdrive) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *dirdrive = sampass->private.dir_drive; @@ -272,7 +272,7 @@ NTSTATUS sam_get_user_dir_drive (const SAM_USER_HANDLE *sampass, char **dirdrive NTSTATUS sam_get_user_logon_script (const SAM_USER_HANDLE *sampass, char **logon_script) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *logon_script = sampass->private.logon_script; @@ -281,7 +281,7 @@ NTSTATUS sam_get_user_logon_script (const SAM_USER_HANDLE *sampass, char **logon NTSTATUS sam_get_user_profile_path (const SAM_USER_HANDLE *sampass, char **profile_path) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *profile_path = sampass->private.profile_path; @@ -290,7 +290,7 @@ NTSTATUS sam_get_user_profile_path (const SAM_USER_HANDLE *sampass, char **profi NTSTATUS sam_get_user_description (const SAM_USER_HANDLE *sampass, char **description) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *description = sampass->private.acct_desc; @@ -299,7 +299,7 @@ NTSTATUS sam_get_user_description (const SAM_USER_HANDLE *sampass, char **descri NTSTATUS sam_get_user_workstations (const SAM_USER_HANDLE *sampass, char **workstations) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *workstations = sampass->private.workstations; @@ -308,7 +308,7 @@ NTSTATUS sam_get_user_workstations (const SAM_USER_HANDLE *sampass, char **works NTSTATUS sam_get_user_unknown_str (const SAM_USER_HANDLE *sampass, char **unknown_str) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *unknown_str = sampass->private.unknown_str; @@ -317,7 +317,7 @@ NTSTATUS sam_get_user_unknown_str (const SAM_USER_HANDLE *sampass, char **unknow NTSTATUS sam_get_user_munged_dial (const SAM_USER_HANDLE *sampass, char **munged_dial) { - if (!sampass)return NT_STATUS_UNSUCCESSFUL; + if (!sampass) return NT_STATUS_UNSUCCESSFUL; *munged_dial = sampass->private.munged_dial; @@ -326,7 +326,7 @@ NTSTATUS sam_get_user_munged_dial (const SAM_USER_HANDLE *sampass, char **munged NTSTATUS sam_get_user_unknown_1 (const SAM_USER_HANDLE *sampass, uint32 *unknown1) { - if (!sampass || !unknown1)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !unknown1) return NT_STATUS_UNSUCCESSFUL; *unknown1 = sampass->private.unknown_1; @@ -335,7 +335,7 @@ NTSTATUS sam_get_user_unknown_1 (const SAM_USER_HANDLE *sampass, uint32 *unknown NTSTATUS sam_get_user_unknown_2 (const SAM_USER_HANDLE *sampass, uint32 *unknown2) { - if (!sampass || !unknown2)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !unknown2) return NT_STATUS_UNSUCCESSFUL; *unknown2 = sampass->private.unknown_2; @@ -344,7 +344,7 @@ NTSTATUS sam_get_user_unknown_2 (const SAM_USER_HANDLE *sampass, uint32 *unknown NTSTATUS sam_get_user_unknown_3 (const SAM_USER_HANDLE *sampass, uint32 *unknown3) { - if (!sampass || !unknown3)return NT_STATUS_UNSUCCESSFUL; + if (!sampass || !unknown3) return NT_STATUS_UNSUCCESSFUL; *unknown3 = sampass->private.unknown_3; diff --git a/source3/sam/interface.c b/source3/sam/interface.c index 6adf213d27..e4d4868b1e 100644 --- a/source3/sam/interface.c +++ b/source3/sam/interface.c @@ -4,6 +4,7 @@ Copyright (C) Andrew Bartlett 2002 Copyright (C) Jelmer Vernooij 2002 Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Kai Krüger 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 -- cgit From 97a957107df5ba730dd6e121b7ce3e3287d0a14e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 07:51:07 +0000 Subject: Silly of me to only test this with --with-sam and not without. Doh! (This used to be commit 6395c34f2f981d59b761d8615851a8fd54c1c304) --- source3/include/includes.h | 2 -- source3/sam/account.c | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/source3/include/includes.h b/source3/include/includes.h index f7b0d76dd4..f1c8c50df4 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -751,9 +751,7 @@ extern int errno; #include "passdb.h" -#ifdef WITH_SAM #include "sam.h" -#endif #include "session.h" diff --git a/source3/sam/account.c b/source3/sam/account.c index 9953ba956c..04be8ef162 100644 --- a/source3/sam/account.c +++ b/source3/sam/account.c @@ -24,7 +24,7 @@ #include "includes.h" #undef DBGC_CLASS -#define DBGC_CLASS DBGC_PASSDB +#define DBGC_CLASS DBGC_SAM /************************************************************ Fill the SAM_USER_HANDLE with default values. -- cgit From 772e9b2ac8335b4a9604171856ad903bd7de120a Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 28 Aug 2002 08:13:29 +0000 Subject: There's no MACHINE.SID anymore... Volker (This used to be commit e9cd8fb2e3104e1f9fd27277c90e1d09e55a0cf4) --- docs/docbook/projdoc/Samba-BDC-HOWTO.sgml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml b/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml index 53a0959c39..7653e3d1c0 100644 --- a/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml +++ b/docs/docbook/projdoc/Samba-BDC-HOWTO.sgml @@ -157,10 +157,17 @@ Several things have to be done: -The file private/MACHINE.SID identifies the domain. When a samba -server is first started, it is created on the fly and must never be -changed again. This file has to be the same on the PDC and the BDC, -so the MACHINE.SID has to be copied from the PDC to the BDC. +The domain SID has to be the same on the PDC and the BDC. This used to +be stored in the file private/MACHINE.SID. This file is not created +anymore since Samba 2.2.5 or even earlier. Nowadays the domain SID is +stored in the file private/secrets.tdb. Simply copying the secrets.tdb +from the PDC to the BDC does not work, as the BDC would +generate a new SID for itself and override the domain SID with this +new BDC SID. + + +To retrieve the domain SID from the PDC or an existing BDC and store it in the +secrets.tdb, execute 'net rpc getsid' on the BDC. -- cgit From 147e2a82531b68b8964defe0ebd26f62d7531027 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 08:43:04 +0000 Subject: Adding new series of text-to-sgml converted files. Removed OS2-Client-HOWTO and put it into Other-Clients.sgml (This used to be commit 076f34af8e5af7fb2d07b724522ef77f33559c82) --- docs/docbook/Makefile.in | 11 +- docs/docbook/devdoc/NetBIOS.sgml | 154 ++++++++++++ docs/docbook/devdoc/dev-doc.sgml | 44 ++++ docs/docbook/manpages/smbtar.1.sgml | 2 +- docs/docbook/manpages/vfstest.1.sgml | 3 +- docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml | 78 ++++++ docs/docbook/projdoc/OS2-Client-HOWTO.sgml | 142 ----------- docs/docbook/projdoc/Other-Clients.sgml | 332 ++++++++++++++++++++++++++ docs/docbook/projdoc/Portability.sgml | 148 ++++++++++++ docs/docbook/projdoc/samba-doc.sgml | 8 +- 10 files changed, 773 insertions(+), 149 deletions(-) create mode 100644 docs/docbook/devdoc/NetBIOS.sgml create mode 100644 docs/docbook/devdoc/dev-doc.sgml create mode 100644 docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml delete mode 100644 docs/docbook/projdoc/OS2-Client-HOWTO.sgml create mode 100644 docs/docbook/projdoc/Other-Clients.sgml create mode 100644 docs/docbook/projdoc/Portability.sgml diff --git a/docs/docbook/Makefile.in b/docs/docbook/Makefile.in index 612c495135..f1fb97d1e2 100644 --- a/docs/docbook/Makefile.in +++ b/docs/docbook/Makefile.in @@ -50,7 +50,8 @@ all: @echo "manpages - Build manpages" @echo "ps - Build PostScript version of HOWTO Collection" @echo "pdf - Build PDF version of HOWTO Collection" - @echo "html-single - Build single HTML version of HOWTO Collection" + @echo -n "html-single - Build single file HTML version of HOWTO Collection" + @echo "and developers guide" @echo "html - Build HTML version of HOWTO Collection and manpages" @echo "txt - Build plain text version of HOWTO Collection" @@ -58,8 +59,8 @@ manpages: $(MANPAGES) pdf: ../Samba-HOWTO-Collection.pdf ps: ../Samba-HOWTO-Collection.ps txt: ../Samba-HOWTO-Collection.txt -html: $(HTMLDIR)/samba-doc.html -html-single: ../Samba-HOWTO-Collection.html $(MANPAGES_HTML) +html: $(HTMLDIR)/samba-doc.html $(MANPAGES_HTML) +html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html ../Samba-HOWTO-Collection.txt: $(SGMLDIR)/samba-doc.sgml $(DOCBOOK2TXT) -o .. $< @@ -76,6 +77,10 @@ html-single: ../Samba-HOWTO-Collection.html $(MANPAGES_HTML) $(DOCBOOK2HTML) -u -o .. $< mv ../samba-doc.html $@ +../Samba-Developers-Guide.html: devdoc/dev-doc.sgml + $(DOCBOOK2HTML) -u -o .. $< + mv ../dev-doc.html $@ + $(HTMLDIR)/samba-doc.html: $(SGMLDIR)/samba-doc.sgml $(DOCBOOK2HTML) -o $(HTMLDIR) $< diff --git a/docs/docbook/devdoc/NetBIOS.sgml b/docs/docbook/devdoc/NetBIOS.sgml new file mode 100644 index 0000000000..ec9d3af563 --- /dev/null +++ b/docs/docbook/devdoc/NetBIOS.sgml @@ -0,0 +1,154 @@ + + + + LukeLeighton + + 12 June 1997 + + +Definition of NetBIOS Protocol and Name Resolution Modes + + +NETBIOS + + +NetBIOS runs over the following tranports: TCP/IP; NetBEUI and IPX/SPX. +Samba only uses NetBIOS over TCP/IP. For details on the TCP/IP NetBIOS +Session Service NetBIOS Datagram Service, and NetBIOS Names, see +rfc1001.txt and rfc1002.txt. + + + +NetBEUI is a raw NetBIOS frame protocol implementation that allows NetBIOS +datagrams to be sent out over the 'wire' embedded within LLC frames. +NetBEUI is not required when using NetBIOS over TCP/IP protocols and it +is preferable NOT to install NetBEUI if it can be avoided. + + + +IPX/SPX is also not required when using NetBIOS over TCP/IP, and it is +preferable NOT to install the IPX/SPX transport unless you are using Novell +servers. At the very least, it is recommended that you do not install +'NetBIOS over IPX/SPX'. + + + +[When installing Windows 95, you will find that NetBEUI and IPX/SPX are +installed as the default protocols. This is because they are the simplest +to manage: no Windows 95 user-configuration is required]. + + + +NetBIOS applications (such as samba) offer their services (for example, +SMB file and print sharing) on a NetBIOS name. They must claim this name +on the network before doing so. The NetBIOS session service will then +accept connections on the application's behalf (on the NetBIOS name +claimed by the application). A NetBIOS session between the application +and the client can then commence. + + + +NetBIOS names consist of 15 characters plus a 'type' character. This is +similar, in concept, to an IP address and a TCP port number, respectively. +A NetBIOS-aware application on a host will offer different services under +different NetBIOS name types, just as a host will offer different TCP/IP +services on different port numbers. + + + +NetBIOS names must be claimed on a network, and must be defended. The use +of NetBIOS names is most suitable on a single subnet; a Local Area Network +or a Wide Area Network. + + + +NetBIOS names are either UNIQUE or GROUP. Only one application can claim a +UNIQUE NetBIOS name on a network. + + + +There are two kinds of NetBIOS Name resolution: Broadcast and Point-to-Point. + + + + + +BROADCAST NetBIOS + + +Clients can claim names, and therefore offer services on successfully claimed +names, on their broadcast-isolated subnet. One way to get NetBIOS services +(such as browsing: see ftp.microsoft.com/drg/developr/CIFS/browdiff.txt; and +SMB file/print sharing: see cifs4.txt) working on a LAN or WAN is to make +your routers forward all broadcast packets from TCP/IP ports 137, 138 and 139. + + + +This, however, is not recommended. If you have a large LAN or WAN, you will +find that some of your hosts spend 95 percent of their time dealing with +broadcast traffic. [If you have IPX/SPX on your LAN or WAN, you will find +that this is already happening: a packet analyzer will show, roughly +every twelve minutes, great swathes of broadcast traffic!]. + + + + + +NBNS NetBIOS + + +rfc1001.txt describes, amongst other things, the implementation and use +of, a 'NetBIOS Name Service'. NT/AS offers 'Windows Internet Name Service' +which is fully rfc1001/2 compliant, but has had to take specific action +with certain NetBIOS names in order to make it useful. (for example, it +deals with the registration of <1c> <1d> <1e> names all in different ways. +I recommend the reading of the Microsoft WINS Server Help files for full +details). + + + +The use of a WINS server cuts down on broadcast network traffic for +NetBIOS name resolution. It has the effect of pulling all the broadcast +isolated subnets together into a single NetBIOS scope, across your LAN +or WAN, while avoiding the use of TCP/IP broadcast packets. + + + +When you have a WINS server on your LAN, WINS clients will be able to +contact the WINS server to resolve NetBIOS names. Note that only those +WINS clients that have registered with the same WINS server will be +visible. The WINS server _can_ have static NetBIOS entries added to its +database (usually for security reasons you might want to consider putting +your domain controllers or other important servers as static entries, +but you should not rely on this as your sole means of security), but for +the most part, NetBIOS names are registered dynamically. + + + +This provides some confusion for lots of people, and is worth mentioning +here: a Browse Server is NOT a WINS Server, even if these services are +implemented in the same application. A Browse Server _needs_ a WINS server +because a Browse Server is a WINS client, which is _not_ the same thing]. + + + +Clients can claim names, and therefore offer services on successfully claimed +names, on their broadcast-isolated subnet. One way to get NetBIOS services +(such as browsing: see ftp.microsoft.com/drg/developr/CIFS/browdiff.txt; and +SMB file/print sharing: see cifs6.txt) working on a LAN or WAN is to make +your routers forward all broadcast packets from TCP/IP ports 137, 138 and 139. +You will find, however, if you do this on a large LAN or a WAN, that your +network is completely swamped by NetBIOS and browsing packets, which is why +WINS was developed to minimise the necessity of broadcast traffic. + + + +WINS Clients therefore claim names from the WINS server. If the WINS +server allows them to register a name, the client's NetBIOS session service +can then offer services on this name. Other WINS clients will then +contact the WINS server to resolve a NetBIOS name. + + + + + diff --git a/docs/docbook/devdoc/dev-doc.sgml b/docs/docbook/devdoc/dev-doc.sgml new file mode 100644 index 0000000000..f84c129f00 --- /dev/null +++ b/docs/docbook/devdoc/dev-doc.sgml @@ -0,0 +1,44 @@ + +]> + + + +SAMBA Deverlopers Guide + + + + SAMBA Team + +
samba@samba.org
+
+ + +Abstract + + +Last Update : Mon aug 26 12:41:19 CEST 2002 + + + +This book is a collection of documents that might be useful for +people developing samba or those interested in doing so. +than one person can maintain. The most recent version of this document +can be found at http://www.samba.org/ +on the "Documentation" page. Please send updates to jerry@samba.org. + + + +This documentation is distributed under the GNU General Public License (GPL) +version 2. A copy of the license is included with the Samba source +distribution. A copy can be found on-line at http://www.fsf.org/licenses/gpl.txt + + + + + +&NetBIOS; + +
diff --git a/docs/docbook/manpages/smbtar.1.sgml b/docs/docbook/manpages/smbtar.1.sgml index 4e2ee5fff0..d1585d7ca3 100644 --- a/docs/docbook/manpages/smbtar.1.sgml +++ b/docs/docbook/manpages/smbtar.1.sgml @@ -190,7 +190,7 @@ VERSION - This man page is correct for version 2.2 of + This man page is correct for version 3.0 of the Samba suite. diff --git a/docs/docbook/manpages/vfstest.1.sgml b/docs/docbook/manpages/vfstest.1.sgml index fe1d7560d0..11878c1c89 100644 --- a/docs/docbook/manpages/vfstest.1.sgml +++ b/docs/docbook/manpages/vfstest.1.sgml @@ -52,7 +52,8 @@ -d|--debug=debuglevel set the debuglevel. Debug level 0 is the lowest and 100 being the highest. This should be set to 100 if you are - planning on submitting a bug report to the Samba team (see BUGS.txt). + planning on submitting a bug report to the Samba team (see + BUGS.txt). diff --git a/docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml b/docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml new file mode 100644 index 0000000000..6d5a019fcb --- /dev/null +++ b/docs/docbook/projdoc/GROUP-MAPPING-HOWTO.sgml @@ -0,0 +1,78 @@ + + + + Jean FrançoisMicouleau + + + +Group mapping HOWTO + + +Starting with Samba 3.0 alpha 2, a new group mapping function is available. The +current method (likely to change) to manage the groups is a new command called +smbgroupedit. + + + +The first immediate reason to use the group mapping on a PDC, is that +the domain admin group of smb.conf is +now gone. This parameter was used to give the listed users local admin rights +on their workstations. It was some magic stuff that simply worked but didn't +scale very well for complex setups. + + + +Let me explain how it works on NT/W2K, to have this magic fade away. +When installing NT/W2K on a computer, the installer program creates some users +and groups. Notably the 'Administrators' group, and gives to that group some +privileges like the ability to change the date and time or to kill any process +(or close too) running on the local machine. The 'Administrator' user is a +member of the 'Administrators' group, and thus 'inherit' the 'Administrators' +group privileges. If a 'joe' user is created and become a member of the +'Administrator' group, 'joe' has exactly the same rights as 'Administrator'. + + + +When a NT/W2K machine is joined to a domain, during that phase, the "Domain +Administrators' group of the PDC is added to the 'Administrators' group of the +workstation. Every members of the 'Domain Administrators' group 'inherit' the +rights of the 'Administrators' group when logging on the workstation. + + + +You are now wondering how to make some of your samba PDC users members of the +'Domain Administrators' ? That's really easy. + + + +create a unix group (usually in /etc/group), let's call it domadm +add to this group the users that must be Administrators. For example if you want joe,john and mary, your entry in /etc/group will look like: + + +domadm:x:502:joe,john,mary + + + + +Map this domadm group to the domain admins group by running the command: + +smbgroupedit -c "Domain Admins" -u domadm + + + +You're set, joe, john and mary are domain administrators ! + + +Like the Domain Admins group, you can map any arbitrary Unix group to any NT +group. You can also make any Unix group a domain group. For example, on a domain +member machine (an NT/W2K or a samba server running winbind), you would like to +give access to a certain directory to some users who are member of a group on +your samba PDC. Flag that group as a domain group by running: + + +smbgroupedit -a unixgroup -td + +You can list the various groups in the mapping database like this +smbgroupedit -v + + diff --git a/docs/docbook/projdoc/OS2-Client-HOWTO.sgml b/docs/docbook/projdoc/OS2-Client-HOWTO.sgml deleted file mode 100644 index ca7ad6a754..0000000000 --- a/docs/docbook/projdoc/OS2-Client-HOWTO.sgml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - JimMcDonough - - IBM -
- jerry@samba.org -
-
-
- - - 5 Mar 2001 -
- -OS2 Client HOWTO - - - FAQs - - - How can I configure OS/2 Warp Connect or - OS/2 Warp 4 as a client for Samba? - - A more complete answer to this question can be - found on - http://carol.wins.uva.nl/~leeuw/samba/warp.html. - - Basically, you need three components: - - - The File and Print Client ('IBM Peer') - - TCP/IP ('Internet support') - - The "NetBIOS over TCP/IP" driver ('TCPBEUI') - - - - Installing the first two together with the base operating - system on a blank system is explained in the Warp manual. If Warp - has already been installed, but you now want to install the - networking support, use the "Selective Install for Networking" - object in the "System Setup" folder. - - Adding the "NetBIOS over TCP/IP" driver is not described - in the manual and just barely in the online documentation. Start - MPTS.EXE, click on OK, click on "Configure LAPS" and click - on "IBM OS/2 NETBIOS OVER TCP/IP" in 'Protocols'. This line - is then moved to 'Current Configuration'. Select that line, - click on "Change number" and increase it from 0 to 1. Save this - configuration. - - If the Samba server(s) is not on your local subnet, you - can optionally add IP names and addresses of these servers - to the "Names List", or specify a WINS server ('NetBIOS - Nameserver' in IBM and RFC terminology). For Warp Connect you - may need to download an update for 'IBM Peer' to bring it on - the same level as Warp 4. See the webpage mentioned above. - - - - How can I configure OS/2 Warp 3 (not Connect), - OS/2 1.2, 1.3 or 2.x for Samba? - - You can use the free Microsoft LAN Manager 2.2c Client - for OS/2 from - - ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/. - See - http://carol.wins.uva.nl/~leeuw/lanman.html for - more information on how to install and use this client. In - a nutshell, edit the file \OS2VER in the root directory of - the OS/2 boot partition and add the lines: - - - 20=setup.exe - 20=netwksta.sys - 20=netvdd.sys - - - before you install the client. Also, don't use the - included NE2000 driver because it is buggy. Try the NE2000 - or NS2000 driver from - - ftp://ftp.cdrom.com/pub/os2/network/ndis/ instead. - - - - - Are there any other issues when OS/2 (any version) - is used as a client? - - When you do a NET VIEW or use the "File and Print - Client Resource Browser", no Samba servers show up. This can - be fixed by a patch from - http://carol.wins.uva.nl/~leeuw/samba/fix.html. - The patch will be included in a later version of Samba. It also - fixes a couple of other problems, such as preserving long - filenames when objects are dragged from the Workplace Shell - to the Samba server. - - - - How do I get printer driver download working - for OS/2 clients? - - First, create a share called [PRINTDRV] that is - world-readable. Copy your OS/2 driver files there. Note - that the .EA_ files must still be separate, so you will need - to use the original install files, and not copy an installed - driver from an OS/2 system. - - Install the NT driver first for that printer. Then, - add to your smb.conf a parameter, "os2 driver map = - filename". Then, in the file - specified by filename, map the - name of the NT driver name to the OS/2 driver name as - follows: - - <nt driver name> = <os2 driver - name>.<device name>, e.g.: - HP LaserJet 5L = LASERJET.HP LaserJet 5L - - You can have multiple drivers mapped in this file. - - If you only specify the OS/2 driver name, and not the - device name, the first attempt to download the driver will - actually download the files, but the OS/2 client will tell - you the driver is not available. On the second attempt, it - will work. This is fixed simply by adding the device name - to the mapping, after which it will work on the first attempt. - - - - -
- diff --git a/docs/docbook/projdoc/Other-Clients.sgml b/docs/docbook/projdoc/Other-Clients.sgml new file mode 100644 index 0000000000..f790024c3a --- /dev/null +++ b/docs/docbook/projdoc/Other-Clients.sgml @@ -0,0 +1,332 @@ + + + + JimMcDonough + + IBM + + JelmerVernooij + + Samba Team +
jelmer@samba.org
+
+
+ + 5 Mar 2001 +
+ +Samba and other CIFS clients + +This chapter contains client-specific information. + + +Macintosh clients? + + +Yes. Thursby now have a CIFS Client / Server called DAVE - see + + + +They test it against Windows 95, Windows NT and samba for +compatibility issues. At the time of writing, DAVE was at version +1.0.1. The 1.0.0 to 1.0.1 update is available as a free download from +the Thursby web site (the speed of finder copies has been greatly +enhanced, and there are bug-fixes included). + + + +Alternatives - There are two free implementations of AppleTalk for +several kinds of UNIX machnes, and several more commercial ones. +These products allow you to run file services and print services +natively to Macintosh users, with no additional support required on +the Macintosh. The two free omplementations are +Netatalk, and +CAP. +What Samba offers MS +Windows users, these packages offer to Macs. For more info on these +packages, Samba, and Linux (and other UNIX-based systems) see +http://www.eats.com/linux_mac_win.html + + + + + +OS2 Client + + + How can I configure OS/2 Warp Connect or + OS/2 Warp 4 as a client for Samba? + + A more complete answer to this question can be + found on + http://carol.wins.uva.nl/~leeuw/samba/warp.html. + + Basically, you need three components: + + + The File and Print Client ('IBM Peer') + + TCP/IP ('Internet support') + + The "NetBIOS over TCP/IP" driver ('TCPBEUI') + + + + Installing the first two together with the base operating + system on a blank system is explained in the Warp manual. If Warp + has already been installed, but you now want to install the + networking support, use the "Selective Install for Networking" + object in the "System Setup" folder. + + Adding the "NetBIOS over TCP/IP" driver is not described + in the manual and just barely in the online documentation. Start + MPTS.EXE, click on OK, click on "Configure LAPS" and click + on "IBM OS/2 NETBIOS OVER TCP/IP" in 'Protocols'. This line + is then moved to 'Current Configuration'. Select that line, + click on "Change number" and increase it from 0 to 1. Save this + configuration. + + If the Samba server(s) is not on your local subnet, you + can optionally add IP names and addresses of these servers + to the "Names List", or specify a WINS server ('NetBIOS + Nameserver' in IBM and RFC terminology). For Warp Connect you + may need to download an update for 'IBM Peer' to bring it on + the same level as Warp 4. See the webpage mentioned above. + + + + How can I configure OS/2 Warp 3 (not Connect), + OS/2 1.2, 1.3 or 2.x for Samba? + + You can use the free Microsoft LAN Manager 2.2c Client + for OS/2 from + + ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/. + See + http://carol.wins.uva.nl/~leeuw/lanman.html for + more information on how to install and use this client. In + a nutshell, edit the file \OS2VER in the root directory of + the OS/2 boot partition and add the lines: + + + 20=setup.exe + 20=netwksta.sys + 20=netvdd.sys + + + before you install the client. Also, don't use the + included NE2000 driver because it is buggy. Try the NE2000 + or NS2000 driver from + + ftp://ftp.cdrom.com/pub/os2/network/ndis/ instead. + + + + + Are there any other issues when OS/2 (any version) + is used as a client? + + When you do a NET VIEW or use the "File and Print + Client Resource Browser", no Samba servers show up. This can + be fixed by a patch from + http://carol.wins.uva.nl/~leeuw/samba/fix.html. + The patch will be included in a later version of Samba. It also + fixes a couple of other problems, such as preserving long + filenames when objects are dragged from the Workplace Shell + to the Samba server. + + + + How do I get printer driver download working + for OS/2 clients? + + First, create a share called [PRINTDRV] that is + world-readable. Copy your OS/2 driver files there. Note + that the .EA_ files must still be separate, so you will need + to use the original install files, and not copy an installed + driver from an OS/2 system. + + Install the NT driver first for that printer. Then, + add to your smb.conf a parameter, os2 driver map = + filename". Then, in the file + specified by filename, map the + name of the NT driver name to the OS/2 driver name as + follows: + + nt driver name = os2 "driver + name"."device name", e.g.: + HP LaserJet 5L = LASERJET.HP LaserJet 5L + + You can have multiple drivers mapped in this file. + + If you only specify the OS/2 driver name, and not the + device name, the first attempt to download the driver will + actually download the files, but the OS/2 client will tell + you the driver is not available. On the second attempt, it + will work. This is fixed simply by adding the device name + to the mapping, after which it will work on the first attempt. + + + + + +Windows for Workgroups + + +Use latest TCP/IP stack from Microsoft + +Use the latest TCP/IP stack from microsoft if you use Windows +for workgroups. + +The early TCP/IP stacks had lots of bugs. + + +Microsoft has released an incremental upgrade to their TCP/IP 32-Bit +VxD drivers. The latest release can be found on their ftp site at +ftp.microsoft.com, located in /peropsys/windows/public/tcpip/wfwt32.exe. +There is an update.txt file there that describes the problems that were +fixed. New files include WINSOCK.DLL, TELNET.EXE, WSOCK.386, VNBT.386, +WSTCP.386, TRACERT.EXE, NETSTAT.EXE, and NBTSTAT.EXE. + + + + + +Delete .pwl files after password change + + +WfWg does a lousy job with passwords. I find that if I change my +password on either the unix box or the PC the safest thing to do is to +delete the .pwl files in the windows directory. The PC will complain about not finding the files, but will soon get over it, allowing you to enter the new password. + + + +If you don't do this you may find that WfWg remembers and uses the old +password, even if you told it a new one. + + + +Often WfWg will totally ignore a password you give it in a dialog box. + + + + + +Configure WfW password handling + + +There is a program call admincfg.exe +on the last disk (disk 8) of the WFW 3.11 disk set. To install it +type EXPAND A:\ADMINCFG.EX_ C:\WINDOWS\ADMINCFG.EXE Then add an icon +for it via the "Progam Manager" "New" Menu. This program allows you +to control how WFW handles passwords. ie disable Password Caching etc +for use with security = user + + + + + +Case handling of passwords + +Windows for Workgroups uppercases the password before sending it to the server. Unix passwords can be case-sensitive though. Check the smb.conf(5) information on password level to specify what characters samba should try to uppercase when checking. + + + + + + +Windows '95/'98 + + +When using Windows 95 OEM SR2 the following updates are recommended where Samba +is being used. Please NOTE that the above change will affect you once these +updates have been installed. + + + +There are more updates than the ones mentioned here. You are referred to the +Microsoft Web site for all currently available updates to your specific version +of Windows 95. + + + +Kernel Update: KRNLUPD.EXE +Ping Fix: PINGUPD.EXE +RPC Update: RPCRTUPD.EXE +TCP/IP Update: VIPUPD.EXE +Redirector Update: VRDRUPD.EXE + + + +Also, if using MS OutLook it is desirable to install the OLEUPD.EXE fix. This +fix may stop your machine from hanging for an extended period when exiting +OutLook and you may also notice a significant speedup when accessing network +neighborhood services. + + + + + +Windows 2000 Service Pack 2 + + +There are several annoyances with Windows 2000 SP2. One of which +only appears when using a Samba server to host user profiles +to Windows 2000 SP2 clients in a Windows domain. This assumes +that Samba is a member of the domain, but the problem will +likely occur if it is not. + + + +In order to server profiles successfully to Windows 2000 SP2 +clients (when not operating as a PDC), Samba must have +nt acl support = no +added to the file share which houses the roaming profiles. +If this is not done, then the Windows 2000 SP2 client will +complain about not being able to access the profile (Access +Denied) and create multiple copies of it on disk (DOMAIN.user.001, +DOMAIN.user.002, etc...). See the +smb.conf(5) man page +for more details on this option. Also note that the +nt acl support parameter was formally a global parameter in +releases prior to Samba 2.2.2. + + + +The following is a minimal profile share: + + + + [profile] + path = /export/profile + create mask = 0600 + directory mask = 0700 + nt acl support = no + read only = no + + + +The reason for this bug is that the Win2k SP2 client copies +the security descriptor for the profile which contains +the Samba server's SID, and not the domain SID. The client +compares the SID for SAMBA\user and realizes it is +different that the one assigned to DOMAIN\user. Hence the reason +for the "access denied" message. + + + +By disabling the nt acl support parameter, Samba will send +the Win2k client a response to the QuerySecurityDescriptor +trans2 call which causes the client to set a default ACL +for the profile. This default ACL includes + + +DOMAIN\user "Full Control" + +NOTE : This bug does not occur when using winbind to +create accounts on the Samba host for Domain users. + + + +
diff --git a/docs/docbook/projdoc/Portability.sgml b/docs/docbook/projdoc/Portability.sgml new file mode 100644 index 0000000000..f2fe66b9dd --- /dev/null +++ b/docs/docbook/projdoc/Portability.sgml @@ -0,0 +1,148 @@ + + + + JelmerVernooij + + + +Portability + +Samba works on a wide range of platforms but the interface all the +platforms provide is not always compatible. This chapter contains +platform-specific information about compiling and using samba. + + +HPUX + + +HP's implementation of supplementary groups is, er, non-standard (for +hysterical reasons). There are two group files, /etc/group and +/etc/logingroup; the system maps UIDs to numbers using the former, but +initgroups() reads the latter. Most system admins who know the ropes +symlink /etc/group to /etc/logingroup (hard link doesn't work for reasons +too stupid to go into here). initgroups() will complain if one of the +groups you're in in /etc/logingroup has what it considers to be an invalid +ID, which means outside the range [0..UID_MAX], where UID_MAX is (I think) +60000 currently on HP-UX. This precludes -2 and 65534, the usual 'nobody' +GIDs. + + + +If you encounter this problem, make sure that the programs that are failing +to initgroups() be run as users not in any groups with GIDs outside the +allowed range. + + +This is documented in the HP manual pages under setgroups(2) and passwd(4). + + + + + +SCO Unix + + +If you run an old version of SCO Unix then you may need to get important +TCP/IP patches for Samba to work correctly. Without the patch, you may +encounter corrupt data transfers using samba. + + + +The patch you need is UOD385 Connection Drivers SLS. It is available from +SCO (ftp.sco.com, directory SLS, files uod385a.Z and uod385a.ltr.Z). + + + + + +DNIX + + +DNIX has a problem with seteuid() and setegid(). These routines are +needed for Samba to work correctly, but they were left out of the DNIX +C library for some reason. + + + +For this reason Samba by default defines the macro NO_EID in the DNIX +section of includes.h. This works around the problem in a limited way, +but it is far from ideal, some things still won't work right. + + + +To fix the problem properly you need to assemble the following two +functions and then either add them to your C library or link them into +Samba. + + + +put this in the file setegid.s: + + + + .globl _setegid +_setegid: + moveq #47,d0 + movl #100,a0 + moveq #1,d1 + movl 4(sp),a1 + trap #9 + bccs 1$ + jmp cerror +1$: + clrl d0 + rts + + + +put this in the file seteuid.s: + + + + .globl _seteuid +_seteuid: + moveq #47,d0 + movl #100,a0 + moveq #0,d1 + movl 4(sp),a1 + trap #9 + bccs 1$ + jmp cerror +1$: + clrl d0 + rts + + + +after creating the above files you then assemble them using + + +as seteuid.s +as setegid.s + + +that should produce the files seteuid.o and +setegid.o + + + +then you need to add these to the LIBSM line in the DNIX section of +the Samba Makefile. Your LIBSM line will then look something like this: + + + +LIBSM = setegid.o seteuid.o -ln + + + +You should then remove the line: + + + +#define NO_EID + + +from the DNIX section of includes.h + + + diff --git a/docs/docbook/projdoc/samba-doc.sgml b/docs/docbook/projdoc/samba-doc.sgml index e407b622de..a50389b7f0 100644 --- a/docs/docbook/projdoc/samba-doc.sgml +++ b/docs/docbook/projdoc/samba-doc.sgml @@ -6,7 +6,6 @@ - @@ -19,6 +18,9 @@ + + + ]> @@ -78,8 +80,10 @@ Cheers, jerry &Samba-LDAP; &BROWSING; &SPEED; -&OS2-Client; +&Other-Clients; &CVS-Access; &BUGS; +&GROUP-MAPPING-HOWTO; +&Portability; -- cgit From 9785c61c899f4180290fd6feb41a764cc773fcaa Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 08:44:37 +0000 Subject: Remove yodldocs - it has been obsolete since 2.2 (This used to be commit 3b4316a7138982732fe77d42bb027a59851ee5a0) --- docs/yodldocs/README-NOW | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 docs/yodldocs/README-NOW diff --git a/docs/yodldocs/README-NOW b/docs/yodldocs/README-NOW deleted file mode 100644 index 592d38c135..0000000000 --- a/docs/yodldocs/README-NOW +++ /dev/null @@ -1,14 +0,0 @@ -!== -!== Notice of change of documentation format -!== - -Samba is no longer using yodl as the source markup -language for our documentation. As of release 2.2.0, -we are using DocBook V4.1 exclusively (assuming you are not -counting the ASCII files yet to be converted). - -Please see ../docbook/docbook.txt for more information -on this. - -jerry carter -SAMBA Team -- cgit From 826f72a7c0c6ff3f530b819f1100f5f8d20910fa Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 08:49:02 +0000 Subject: Remove obsolete text docs (This used to be commit 844d7254686b4a0429f30b4d4711387429172224) --- docs/textdocs/BROWSING.txt | 559 -------------------------------- docs/textdocs/BUGS.txt | 135 -------- docs/textdocs/DIAGNOSIS.txt | 321 ------------------ docs/textdocs/DNIX.txt | 69 ---- docs/textdocs/GROUP-MAPPING-HOWTO.txt | 60 ---- docs/textdocs/INSTALL.sambatar | 33 -- docs/textdocs/Imprints.txt | 47 --- docs/textdocs/Macintosh_Clients.txt | 23 -- docs/textdocs/NetBIOS.txt | 152 --------- docs/textdocs/Printing.txt | 255 --------------- docs/textdocs/README.sambatar | 23 -- docs/textdocs/SCO.txt | 19 -- docs/textdocs/SMBTAR.notes | 46 --- docs/textdocs/Solaris-Winbind-HOWTO.txt | 361 --------------------- docs/textdocs/Speed.txt | 338 ------------------- docs/textdocs/Speed2.txt | 57 ---- docs/textdocs/Win95.txt | 74 ----- docs/textdocs/WinNT.txt | 104 ------ docs/textdocs/security_level.txt | 100 ------ 19 files changed, 2776 deletions(-) delete mode 100644 docs/textdocs/BROWSING.txt delete mode 100644 docs/textdocs/BUGS.txt delete mode 100644 docs/textdocs/DIAGNOSIS.txt delete mode 100644 docs/textdocs/DNIX.txt delete mode 100644 docs/textdocs/GROUP-MAPPING-HOWTO.txt delete mode 100644 docs/textdocs/INSTALL.sambatar delete mode 100644 docs/textdocs/Imprints.txt delete mode 100644 docs/textdocs/Macintosh_Clients.txt delete mode 100644 docs/textdocs/NetBIOS.txt delete mode 100644 docs/textdocs/Printing.txt delete mode 100644 docs/textdocs/README.sambatar delete mode 100644 docs/textdocs/SCO.txt delete mode 100644 docs/textdocs/SMBTAR.notes delete mode 100644 docs/textdocs/Solaris-Winbind-HOWTO.txt delete mode 100644 docs/textdocs/Speed.txt delete mode 100644 docs/textdocs/Speed2.txt delete mode 100644 docs/textdocs/Win95.txt delete mode 100644 docs/textdocs/WinNT.txt delete mode 100644 docs/textdocs/security_level.txt diff --git a/docs/textdocs/BROWSING.txt b/docs/textdocs/BROWSING.txt deleted file mode 100644 index 2ca41e5624..0000000000 --- a/docs/textdocs/BROWSING.txt +++ /dev/null @@ -1,559 +0,0 @@ -Author/s: Many (Thanks to Luke, Jeremy, Andrew, etc.) -Updated: July 5, 1998 -Status: Current - For VERY Advanced Users ONLY - -Summary: This describes how to configure Samba for improved browsing. -===================================================================== - -OVERVIEW: -========= - -SMB networking provides a mechanism by which clients can access a list -of machines in a network, a so-called "browse list". This list -contains machines that are ready to offer file and/or print services -to other machines within the network. Thus it does not include -machines which aren't currently able to do server tasks. The browse -list is heavily used by all SMB clients. Configuration of SMB -browsing has been problematic for some Samba users, hence this -document. - -Browsing will NOT work if name resolution from NetBIOS names to IP -addresses does not function correctly. Use of a WINS server is highly -recommended to aid the resolution of NetBIOS (SMB) names to IP addresses. -WINS allows remote segment clients to obtain NetBIOS name_type information -that can NOT be provided by any other means of name resolution. - -===================================================================== - -BROWSING -======== -Samba now fully supports browsing. The browsing is supported by nmbd -and is also controlled by options in the smb.conf file (see smb.conf(5)). - -Samba can act as a local browse master for a workgroup and the ability -for samba to support domain logons and scripts is now available. See -DOMAIN.txt for more information on domain logons. - -Samba can also act as a domain master browser for a workgroup. This -means that it will collate lists from local browse masters into a -wide area network server list. In order for browse clients to -resolve the names they may find in this list, it is recommended that -both samba and your clients use a WINS server. - -Note that you should NOT set Samba to be the domain master for a -workgroup that has the same name as an NT Domain: on each wide area -network, you must only ever have one domain master browser per workgroup, -regardless of whether it is NT, Samba or any other type of domain master -that is providing this service. - -[Note that nmbd can be configured as a WINS server, but it is not -necessary to specifically use samba as your WINS server. NTAS can -be configured as your WINS server. In a mixed NT server and -samba environment on a Wide Area Network, it is recommended that -you use the NT server's WINS server capabilities. In a samba-only -environment, it is recommended that you use one and only one nmbd -as your WINS server]. - -To get browsing to work you need to run nmbd as usual, but will need -to use the "workgroup" option in smb.conf to control what workgroup -Samba becomes a part of. - -Samba also has a useful option for a Samba server to offer itself for -browsing on another subnet. It is recommended that this option is only -used for 'unusual' purposes: announcements over the internet, for -example. See "remote announce" in the smb.conf man page. - -If something doesn't work then hopefully the log.nmb file will help -you track down the problem. Try a debug level of 2 or 3 for finding -problems. Also note that the current browse list usually gets stored -in text form in a file called browse.dat. - -Note that if it doesn't work for you, then you should still be able to -type the server name as \\SERVER in filemanager then hit enter and -filemanager should display the list of available shares. - -Some people find browsing fails because they don't have the global -"guest account" set to a valid account. Remember that the IPC$ -connection that lists the shares is done as guest, and thus you must -have a valid guest account. - -Also, a lot of people are getting bitten by the problem of too many -parameters on the command line of nmbd in inetd.conf. This trick is to -not use spaces between the option and the parameter (eg: -d2 instead -of -d 2), and to not use the -B and -N options. New versions of nmbd -are now far more likely to correctly find your broadcast and network -address, so in most cases these aren't needed. - -The other big problem people have is that their broadcast address, -netmask or IP address is wrong (specified with the "interfaces" option -in smb.conf) - - -BROWSING ACROSS SUBNETS -======================= - -With the release of Samba 1.9.17(alpha1 and above) Samba has been -updated to enable it to support the replication of browse lists -across subnet boundaries. New code and options have been added to -achieve this. This section describes how to set this feature up -in different settings. - -To see browse lists that span TCP/IP subnets (ie. networks separated -by routers that don't pass broadcast traffic) you must set up at least -one WINS server. The WINS server acts as a DNS for NetBIOS names, allowing -NetBIOS name to IP address translation to be done by doing a direct -query of the WINS server. This is done via a directed UDP packet on -port 137 to the WINS server machine. The reason for a WINS server is -that by default, all NetBIOS name to IP address translation is done -by broadcasts from the querying machine. This means that machines -on one subnet will not be able to resolve the names of machines on -another subnet without using a WINS server. - -Remember, for browsing across subnets to work correctly, all machines, -be they Windows 95, Windows NT, or Samba servers must have the IP address -of a WINS server given to them by a DHCP server, or by manual configuration -(for Win95 and WinNT, this is in the TCP/IP Properties, under Network -settings) for Samba this is in the smb.conf file. - -How does cross subnet browsing work ? -===================================== - -Cross subnet browsing is a complicated dance, containing multiple -moving parts. It has taken Microsoft several years to get the code -that achieves this correct, and Samba lags behind in some areas. -However, with the 1.9.17 release, Samba is capable of cross subnet -browsing when configured correctly. - -Consider a network set up as follows : - - (DMB) - N1_A N1_B N1_C N1_D N1_E - | | | | | - ------------------------------------------------------- - | subnet 1 | - +---+ +---+ - |R1 | Router 1 Router 2 |R2 | - +---+ +---+ - | | - | subnet 2 subnet 3 | - -------------------------- ------------------------------------ - | | | | | | | | - N2_A N2_B N2_C N2_D N3_A N3_B N3_C N3_D - (WINS) - -Consisting of 3 subnets (1, 2, 3) conneted by two routers -(R1, R2) - these do not pass broadcasts. Subnet 1 has 5 machines -on it, subnet 2 has 4 machines, subnet 3 has 4 machines. Assume -for the moment that all these machines are configured to be in the -same workgroup (for simplicities sake). Machine N1_C on subnet 1 -is configured as Domain Master Browser (ie. it will collate the -browse lists for the workgroup). Machine N2_D is configured as -WINS server and all the other machines are configured to register -their NetBIOS names with it. - -As all these machines are booted up, elections for master browsers -will take place on each of the three subnets. Assume that machine -N1_C wins on subnet 1, N2_B wins on subnet 2, and N3_D wins on -subnet 3 - these machines are known as local master browsers for -their particular subnet. N1_C has an advantage in winning as the -local master browser on subnet 1 as it is set up as Domain Master -Browser. - -On each of the three networks, machines that are configured to -offer sharing services will broadcast that they are offering -these services. The local master browser on each subnet will -receive these broadcasts and keep a record of the fact that -the machine is offering a service. This list of records is -the basis of the browse list. For this case, assume that -all the machines are configured to offer services so all machines -will be on the browse list. - -For each network, the local master browser on that network is -considered 'authoritative' for all the names it receives via -local broadcast. This is because a machine seen by the local -master browser via a local broadcast must be on the same -network as the local master browser and thus is a 'trusted' -and 'verifiable' resource. Machines on other networks that -the local master browsers learn about when collating their -browse lists have not been directly seen - these records are -called 'non-authoritative'. - -At this point the browse lists look as follows (these are -the machines you would see in your network neighborhood if -you looked in it on a particular network right now). - -Subnet Browse Master List ------- ------------- ---- -Subnet1 N1_C N1_A, N1_B, N1_C, N1_D, N1_E - -Subnet2 N2_B N2_A, N2_B, N2_C, N2_D - -Subnet3 N3_D N3_A, N3_B, N3_C, N3_D - -Note that at this point all the subnets are separate, no -machine is seen across any of the subnets. - -Now examine subnet 2. As soon as N2_B has become the local -master browser it looks for a Domain master browser to synchronize -its browse list with. It does this by querying the WINS server -(N2_D) for the IP address associated with the NetBIOS name -WORKGROUP<1B>. This name was registerd by the Domain master -browser (N1_C) with the WINS server as soon as it was booted. - -Once N2_B knows the address of the Domain master browser it -tells it that is the local master browser for subnet 2 by -sending a MasterAnnouncement packet as a UDP port 138 packet. -It then synchronizes with it by doing a NetServerEnum2 call. This -tells the Domain Master Browser to send it all the server -names it knows about. Once the domain master browser receives -the MasterAnnouncement packet it schedules a synchronization -request to the sender of that packet. After both synchronizations -are done the browse lists look like : - -Subnet Browse Master List ------- ------------- ---- -Subnet1 N1_C N1_A, N1_B, N1_C, N1_D, N1_E, - N2_A(*), N2_B(*), N2_C(*), N2_D(*) - -Subnet2 N2_B N2_A, N2_B, N2_C, N2_D - N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*) - -Subnet3 N3_D N3_A, N3_B, N3_C, N3_D - -Servers with a (*) after them are non-authoritative names. - -At this point users looking in their network neighborhood on -subnets 1 or 2 will see all the servers on both, users on -subnet 3 will still only see the servers on their own subnet. - -The same sequence of events that occured for N2_B now occurs -for the local master browser on subnet 3 (N3_D). When it -synchronizes browse lists with the domain master browser (N1_A) -it gets both the server entries on subnet 1, and those on -subnet 2. After N3_D has synchronized with N1_C and vica-versa -the browse lists look like. - -Subnet Browse Master List ------- ------------- ---- -Subnet1 N1_C N1_A, N1_B, N1_C, N1_D, N1_E, - N2_A(*), N2_B(*), N2_C(*), N2_D(*), - N3_A(*), N3_B(*), N3_C(*), N3_D(*) - -Subnet2 N2_B N2_A, N2_B, N2_C, N2_D - N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*) - -Subnet3 N3_D N3_A, N3_B, N3_C, N3_D - N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*), - N2_A(*), N2_B(*), N2_C(*), N2_D(*) - -Servers with a (*) after them are non-authoritative names. - -At this point users looking in their network neighborhood on -subnets 1 or 3 will see all the servers on all sunbets, users on -subnet 2 will still only see the servers on subnets 1 and 2, but not 3. - -Finally, the local master browser for subnet 2 (N2_B) will sync again -with the domain master browser (N1_C) and will recieve the missing -server entries. Finally - and as a steady state (if no machines -are removed or shut off) the browse lists will look like : - -Subnet Browse Master List ------- ------------- ---- -Subnet1 N1_C N1_A, N1_B, N1_C, N1_D, N1_E, - N2_A(*), N2_B(*), N2_C(*), N2_D(*), - N3_A(*), N3_B(*), N3_C(*), N3_D(*) - -Subnet2 N2_B N2_A, N2_B, N2_C, N2_D - N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*) - N3_A(*), N3_B(*), N3_C(*), N3_D(*) - -Subnet3 N3_D N3_A, N3_B, N3_C, N3_D - N1_A(*), N1_B(*), N1_C(*), N1_D(*), N1_E(*), - N2_A(*), N2_B(*), N2_C(*), N2_D(*) - -Servers with a (*) after them are non-authoritative names. - -Synchronizations between the domain master browser and local -master browsers will continue to occur, but this should be a -steady state situation. - -If either router R1 or R2 fails the following will occur: - -1) Names of computers on each side of the inaccessible network fragments -will be maintained for as long as 36 minutes, in the network neighbourhood -lists. - -2) Attempts to connect to these inaccessible computers will fail, but the -names will not be removed from the network neighbourhood lists. - -3) If one of the fragments is cut off from the WINS server, it will only -be able to access servers on its local subnet, by using subnet-isolated -broadcast NetBIOS name resolution. The effects are similar to that of -losing access to a DNS server. - -Setting up a WINS server -======================== - -Either a Samba machine or a Windows NT Server machine may be set up -as a WINS server. To set a Samba machine to be a WINS server you must -add the following option to the smb.conf file on the selected machine : -in the [globals] section add the line - - wins support = yes - -Versions of Samba previous to 1.9.17 had this parameter default to -yes. If you have any older versions of Samba on your network it is -strongly suggested you upgrade to 1.9.17 or above, or at the very -least set the parameter to 'no' on all these machines. - -Machines with "wins support = yes" will keep a list of all NetBIOS -names registered with them, acting as a DNS for NetBIOS names. - -You should set up only ONE wins server. Do NOT set the -"wins support = yes" option on more than one Samba server. - -To set up a Windows NT Server as a WINS server you need to set up -the WINS service - see your NT documentation for details. Note that -Windows NT WINS Servers can replicate to each other, allowing more -than one to be set up in a complex subnet environment. As Microsoft -refuse to document these replication protocols Samba cannot currently -participate in these replications. It is possible in the future that -a Samba->Samba WINS replication protocol may be defined, in which -case more than one Samba machine could be set up as a WINS server -but currently only one Samba server should have the "wins support = yes" -parameter set. - -After the WINS server has been configured you must ensure that all -machines participating on the network are configured with the address -of this WINS server. If your WINS server is a Samba machine, fill in -the Samba machine IP address in the "Primary WINS Server" field of -the "Control Panel->Network->Protocols->TCP->WINS Server" dialogs -in Windows 95 or Windows NT. To tell a Samba server the IP address -of the WINS server add the following line to the [global] section of -all smb.conf files : - - wins server = - -where is either the DNS name of the WINS server -machine or its IP address. - -Note that this line MUST NOT BE SET in the smb.conf file of the Samba -server acting as the WINS server itself. If you set both the -"wins support = yes" option and the "wins server = " option then -nmbd will fail to start. - -There are two possible scenarios for setting up cross subnet browsing. -The first details setting up cross subnet browsing on a network containing -Windows 95, Samba and Windows NT machines that are not configured as -part of a Windows NT Domain. The second details setting up cross subnet -browsing on networks that contain NT Domains. - -Setting up Browsing in a WORKGROUP -================================== - -To set up cross subnet browsing on a network containing machines -in up to be in a WORKGROUP, not an NT Domain you need to set up one -Samba server to be the Domain Master Browser (note that this is *NOT* -the same as a Primary Domain Controller, although in an NT Domain the -same machine plays both roles). The role of a Domain master browser is -to collate the browse lists from local master browsers on all the -subnets that have a machine participating in the workgroup. Without -one machine configured as a domain master browser each subnet would -be an isolated workgroup, unable to see any machines on any other -subnet. It is the presense of a domain master browser that makes -cross subnet browsing possible for a workgroup. - -In an WORKGROUP environment the domain master browser must be a -Samba server, and there must only be one domain master browser per -workgroup name. To set up a Samba server as a domain master browser, -set the following option in the [global] section of the smb.conf file : - - domain master = yes - -The domain master browser should also preferrably be the local master -browser for its own subnet. In order to achieve this set the following -options in the [global] section of the smb.conf file : - - domain master = yes - local master = yes - preferred master = yes - os level = 65 - -The domain master browser may be the same machine as the WINS -server, if you require. - -Next, you should ensure that each of the subnets contains a -machine that can act as a local master browser for the -workgroup. Any NT machine should be able to do this, as will -Windows 95 machines (although these tend to get rebooted more -often, so it's not such a good idea to use these). To make a -Samba server a local master browser set the following -options in the [global] section of the smb.conf file : - - domain master = no - local master = yes - preferred master = yes - os level = 65 - -Do not do this for more than one Samba server on each subnet, -or they will war with each other over which is to be the local -master browser. - -The "local master" parameter allows Samba to act as a local master -browser. The "preferred master" causes nmbd to force a browser -election on startup and the "os level" parameter sets Samba high -enough so that it should win any browser elections. - -If you have an NT machine on the subnet that you wish to -be the local master browser then you can disable Samba from -becoming a local master browser by setting the following -options in the [global] section of the smb.conf file : - - domain master = no - local master = no - preferred master = no - os level = 0 - -Setting up Browsing in a DOMAIN -=============================== - -If you are adding Samba servers to a Windows NT Domain then -you must not set up a Samba server as a domain master browser. -By default, a Windows NT Primary Domain Controller for a Domain -name is also the Domain master browser for that name, and many -things will break if a Samba server registers the Domain master -browser NetBIOS name (DOMAIN<1B>) with WINS instead of the PDC. - -For subnets other than the one containing the Windows NT PDC -you may set up Samba servers as local master browsers as -described. To make a Samba server a local master browser set -the following options in the [global] section of the smb.conf -file : - - domain master = no - local master = yes - preferred master = yes - os level = 65 - -If you wish to have a Samba server fight the election with machines -on the same subnet you may set the "os level" parameter to lower -levels. By doing this you can tune the order of machines that -will become local master browsers if they are running. For -more details on this see the section "FORCING SAMBA TO BE THE MASTER" -below. - -If you have Windows NT machines that are members of the domain -on all subnets, and you are sure they will always be running then -you can disable Samba from taking part in browser elections and -ever becoming a local master browser by setting following options -in the [global] section of the smb.conf file : - - domain master = no - local master = no - preferred master = no - os level = 0 - -FORCING SAMBA TO BE THE MASTER -============================== - -Who becomes the "master browser" is determined by an election process -using broadcasts. Each election packet contains a number of parameters -which determine what precedence (bias) a host should have in the -election. By default Samba uses a very low precedence and thus loses -elections to just about anyone else. - -If you want Samba to win elections then just set the "os level" global -option in smb.conf to a higher number. It defaults to 0. Using 34 -would make it win all elections over every other system (except other -samba systems!) - -A "os level" of 2 would make it beat WfWg and Win95, but not NTAS. A -NTAS domain controller uses level 32. - -The maximum os level is 255 - -If you want samba to force an election on startup, then set the -"preferred master" global option in smb.conf to "yes". Samba will -then have a slight advantage over other potential master browsers -that are not preferred master browsers. Use this parameter with -care, as if you have two hosts (whether they are windows 95 or NT or -samba) on the same local subnet both set with "preferred master" to -"yes", then periodically and continually they will force an election -in order to become the local master browser. - -If you want samba to be a "domain master browser", then it is -recommended that you also set "preferred master" to "yes", because -samba will not become a domain master browser for the whole of your -LAN or WAN if it is not also a local master browser on its own -broadcast isolated subnet. - -It is possible to configure two samba servers to attempt to become -the domain master browser for a domain. The first server that comes -up will be the domain master browser. All other samba servers will -attempt to become the domain master browser every 5 minutes. They -will find that another samba server is already the domain master -browser and will fail. This provides automatic redundancy, should -the current domain master browser fail. - - -MAKING SAMBA THE DOMAIN MASTER -============================== - -The domain master is responsible for collating the browse lists of -multiple subnets so that browsing can occur between subnets. You can -make samba act as the domain master by setting "domain master = yes" -in smb.conf. By default it will not be a domain master. - -Note that you should NOT set Samba to be the domain master for a -workgroup that has the same name as an NT Domain. - -When samba is the domain master and the master browser it will listen -for master announcements (made roughly every twelve minutes) from local -master browsers on other subnets and then contact them to synchronise -browse lists. - -If you want samba to be the domain master then I suggest you also set -the "os level" high enough to make sure it wins elections, and set -"preferred master" to "yes", to get samba to force an election on -startup. - -Note that all your servers (including samba) and clients should be -using a WINS server to resolve NetBIOS names. If your clients are only -using broadcasting to resolve NetBIOS names, then two things will occur: - -a) your local master browsers will be unable to find a domain master - browser, as it will only be looking on the local subnet. - -b) if a client happens to get hold of a domain-wide browse list, and - a user attempts to access a host in that list, it will be unable to - resolve the NetBIOS name of that host. - -If, however, both samba and your clients are using a WINS server, then: - -a) your local master browsers will contact the WINS server and, as long as - samba has registered that it is a domain master browser with the WINS - server, your local master browser will receive samba's ip address - as its domain master browser. - -b) when a client receives a domain-wide browse list, and a user attempts - to access a host in that list, it will contact the WINS server to - resolve the NetBIOS name of that host. as long as that host has - registered its NetBIOS name with the same WINS server, the user will - be able to see that host. - -NOTE ABOUT BROADCAST ADDRESSES -============================== - -If your network uses a "0" based broadcast address (for example if it -ends in a 0) then you will strike problems. Windows for Workgroups -does not seem to support a 0's broadcast and you will probably find -that browsing and name lookups won't work. - - -MULTIPLE INTERFACES -=================== - -Samba now supports machines with multiple network interfaces. If you -have multiple interfaces then you will need to use the "interfaces" -option in smb.conf to configure them. See smb.conf(5) for details. - diff --git a/docs/textdocs/BUGS.txt b/docs/textdocs/BUGS.txt deleted file mode 100644 index 247998c6c7..0000000000 --- a/docs/textdocs/BUGS.txt +++ /dev/null @@ -1,135 +0,0 @@ -Contributor: Samba Team -Updated: June 27, 1997 - -Subject: This file describes how to report Samba bugs. -============================================================================ - ->> The email address for bug reports is samba@samba.org << - -Please take the time to read this file before you submit a bug -report. Also, please see if it has changed between releases, as we -may be changing the bug reporting mechanism at some time. - -Please also do as much as you can yourself to help track down the -bug. Samba is maintained by a dedicated group of people who volunteer -their time, skills and efforts. We receive far more mail about it than -we can possibly answer, so you have a much higher chance of an answer -and a fix if you send us a "developer friendly" bug report that lets -us fix it fast. - -Do not assume that if you post the bug to the comp.protocols.smb -newsgroup or the mailing list that we will read it. If you suspect that your -problem is not a bug but a configuration problem then it is better to send -it to the Samba mailing list, as there are (at last count) 5000 other users on -that list that may be able to help you. - -You may also like to look though the recent mailing list archives, -which are conveniently accessible on the Samba web pages -at http://samba.org/samba/ - - -GENERAL INFO ------------- - -Before submitting a bug report check your config for silly -errors. Look in your log files for obvious messages that tell you that -you've misconfigured something and run testparm to test your config -file for correct syntax. - -Have you run through DIAGNOSIS.txt? This is very important. - -If you include part of a log file with your bug report then be sure to -annotate it with exactly what you were doing on the client at the -time, and exactly what the results were. - - -DEBUG LEVELS ------------- - -If the bug has anything to do with Samba behaving incorrectly as a -server (like refusing to open a file) then the log files will probably -be very useful. Depending on the problem a log level of between 3 and -10 showing the problem may be appropriate. A higher level givesmore -detail, but may use too much disk space. - -To set the debug level use "log level =" in your smb.conf. You may -also find it useful to set the log level higher for just one machine -and keep separate logs for each machine. To do this use: - -log level = 10 -log file = /usr/local/samba/lib/log.%m -include = /usr/local/samba/lib/smb.conf.%m - -then create a file "/usr/local/samba/lib/smb.conf.machine" where -"machine" is the name of the client you wish to debug. In that file -put any smb.conf commands you want, for example "log level=" may be -useful. This also allows you to experiment with different security -systems, protocol levels etc on just one machine. - -The smb.conf entry "log level =" is synonymous with the entry -"debuglevel =" that has been used in older versions of Samba and -is being retained for backwards compatibility of smb.conf files. - -As the "log level =" value is increased you will record a significantly -increasing level of debugging information. For most debugging operations -you may not need a setting higher than 3. Nearly all bugs can be tracked -at a setting of 10, but be prepared for a VERY large volume of log data. - - -INTERNAL ERRORs ---------------- - -If you get a "INTERNAL ERROR" message in your log files it means that -Samba got an unexpected signal while running. It is probably a -segmentation fault and almost certainly means a bug in Samba (unless -you have faulty hardware or system software) - -If the message came from smbd then it will probably be accompanied by -a message which details the last SMB message received by smbd. This -info is often very useful in tracking down the problem so please -include it in your bug report. - -You should also detail how to reproduce the problem, if -possible. Please make this reasonably detailed. - -You may also find that a core file appeared in a "corefiles" -subdirectory of the directory where you keep your samba log -files. This file is the most useful tool for tracking down the bug. To -use it you do this: - -gdb smbd core - -adding appropriate paths to smbd and core so gdb can find them. If you -don't have gdb then try "dbx". Then within the debugger use the -command "where" to give a stack trace of where the problem -occurred. Include this in your mail. - -If you known any assembly language then do a "disass" of the routine -where the problem occurred (if its in a library routine then -disassemble the routine that called it) and try to work out exactly -where the problem is by looking at the surrounding code. Even if you -don't know assembly then incuding this info in the bug report can be -useful. - - -ATTACHING TO A RUNNING PROCESS ------------------------------- - -Unfortunately some unixes (in particular some recent linux kernels) -refuse to dump a core file if the task has changed uid (which smbd -does often). To debug with this sort of system you could try to attach -to the running process using "gdb smbd PID" where you get PID from -smbstatus. Then use "c" to continue and try to cause the core dump -using the client. The debugger should catch the fault and tell you -where it occurred. - - -PATCHES -------- - -The best sort of bug report is one that includes a fix! If you send us -patches please use "diff -u" format if your version of diff supports -it, otherwise use "diff -c4". Make sure your do the diff against a -clean version of the source and let me know exactly what version you -used. - diff --git a/docs/textdocs/DIAGNOSIS.txt b/docs/textdocs/DIAGNOSIS.txt deleted file mode 100644 index 2816610a9c..0000000000 --- a/docs/textdocs/DIAGNOSIS.txt +++ /dev/null @@ -1,321 +0,0 @@ -Contributor: Andrew Tridgell -Updated: November 1, 1999 - -Subject: DIAGNOSING YOUR SAMBA SERVER -=========================================================================== - -This file contains a list of tests you can perform to validate your -Samba server. It also tells you what the likely cause of the problem -is if it fails any one of these steps. If it passes all these tests -then it is probably working fine. - -You should do ALL the tests, in the order shown. I have tried to -carefully choose them so later tests only use capabilities verified in -the earlier tests. - -If you send me an email saying "it doesn't work" and you have not -followed this test procedure then you should not be surprised if I -ignore your email. - - -ASSUMPTIONS ------------ - -In all of the tests I assume you have a Samba server called BIGSERVER -and a PC called ACLIENT both in workgroup TESTGROUP. I also assume the -PC is running windows for workgroups with a recent copy of the -microsoft tcp/ip stack. Alternatively, your PC may be running Windows -95 or Windows NT (Workstation or Server). - -The procedure is similar for other types of clients. - -I also assume you know the name of an available share in your -smb.conf. I will assume this share is called "tmp". You can add a -"tmp" share like by adding the following to smb.conf: - -[tmp] - comment = temporary files - path = /tmp - read only = yes - - -THESE TESTS ASSUME VERSION 2.0.6 OR LATER OF THE SAMBA SUITE. SOME -COMMANDS SHOWN DID NOT EXIST IN EARLIER VERSIONS - -Please pay attention to the error messages you receive. If any error message -reports that your server is being unfriendly you should first check that you -IP name resolution is correctly set up. eg: Make sure your /etc/resolv.conf -file points to name servers that really do exist. - -Also, if you do not have DNS server access for name resolution please check -that the settings for your smb.conf file results in "dns proxy = no". The -best way to check this is with "testparm smb.conf" - - -TEST 1: -------- - -In the directory in which you store your smb.conf file, run the command -"testparm smb.conf". If it reports any errors then your smb.conf -configuration file is faulty. - -Note: Your smb.conf file may be located in: /etc - Or in: /usr/local/samba/lib - - -TEST 2: -------- - -run the command "ping BIGSERVER" from the PC and "ping ACLIENT" from -the unix box. If you don't get a valid response then your TCP/IP -software is not correctly installed. - -Note that you will need to start a "dos prompt" window on the PC to -run ping. - -If you get a message saying "host not found" or similar then your DNS -software or /etc/hosts file is not correctly setup. It is possible to -run samba without DNS entries for the server and client, but I assume -you do have correct entries for the remainder of these tests. - -Another reason why ping might fail is if your host is running firewall -software. You will need to relax the rules to let in the workstation -in question, perhaps by allowing access from another subnet (on Linux -this is done via the ipfwadm program.) - - -TEST 3: -------- - -Run the command "smbclient -L BIGSERVER" on the unix box. You -should get a list of available shares back. - -If you get a error message containing the string "Bad password" then -you probably have either an incorrect "hosts allow", "hosts deny" or -"valid users" line in your smb.conf, or your guest account is not -valid. Check what your guest account is using "testparm" and -temporarily remove any "hosts allow", "hosts deny", "valid users" or -"invalid users" lines. - -If you get a "connection refused" response then the smbd server may -not be running. If you installed it in inetd.conf then you probably edited -that file incorrectly. If you installed it as a daemon then check that -it is running, and check that the netbios-ssn port is in a LISTEN -state using "netstat -a". - -If you get a "session request failed" then the server refused the -connection. If it says "Your server software is being unfriendly" then -its probably because you have invalid command line parameters to smbd, -or a similar fatal problem with the initial startup of smbd. Also -check your config file (smb.conf) for syntax errors with "testparm" -and that the various directories where samba keeps its log and lock -files exist. - -There are a number of reasons for which smbd may refuse or decline -a session request. The most common of these involve one or more of -the following smb.conf file entries: - hosts deny = ALL - hosts allow = xxx.xxx.xxx.xxx/yy - bind interfaces only = Yes - -In the above, no allowance has been made for any session requests that -will automatically translate to the loopback adaptor address 127.0.0.1. -To solve this problem change these lines to: - hosts deny = ALL - hosts allow = xxx.xxx.xxx.xxx/yy 127. -Do NOT use the "bind interfaces only" parameter where you may wish to -use the samba password change facility, or where smbclient may need to -access local service for name resolution or for local resource -connections. (Note: the "bind interfaces only" parameter deficiency -where it will not allow connections to the loopback address will be -fixed soon). - -Another common cause of these two errors is having something already running -on port 139, such as Samba (ie: smbd is running from inetd already) or -something like Digital's Pathworks. Check your inetd.conf file before trying -to start smbd as a daemon, it can avoid a lot of frustration! - -And yet another possible cause for failure of TEST 3 is when the subnet mask -and / or broadcast address settings are incorrect. Please check that the -network interface IP Address / Broadcast Address / Subnet Mask settings are -correct and that Samba has correctly noted these in the log.nmb file. - -TEST 4: -------- - -Run the command "nmblookup -B BIGSERVER __SAMBA__". You should get the -IP address of your Samba server back. - -If you don't then nmbd is incorrectly installed. Check your inetd.conf -if you run it from there, or that the daemon is running and listening -to udp port 137. - -One common problem is that many inetd implementations can't take many -parameters on the command line. If this is the case then create a -one-line script that contains the right parameters and run that from -inetd. - - -TEST 5: -------- - -run the command "nmblookup -B ACLIENT '*'" - -You should get the PCs IP address back. If you don't then the client -software on the PC isn't installed correctly, or isn't started, or you -got the name of the PC wrong. - -If ACLIENT doesn't resolve via DNS then use the IP address of the -client in the above test. - - -TEST 6: -------- - -Run the command "nmblookup -d 2 '*'" - -This time we are trying the same as the previous test but are trying -it via a broadcast to the default broadcast address. A number of -Netbios/TCPIP hosts on the network should respond, although Samba may -not catch all of the responses in the short time it listens. You -should see "got a positive name query response" messages from several -hosts. - -If this doesn't give a similar result to the previous test then -nmblookup isn't correctly getting your broadcast address through its -automatic mechanism. In this case you should experiment use the -"interfaces" option in smb.conf to manually configure your IP -address, broadcast and netmask. - -If your PC and server aren't on the same subnet then you will need to -use the -B option to set the broadcast address to the that of the PCs -subnet. - -This test will probably fail if your subnet mask and broadcast address are -not correct. (Refer to TEST 3 notes above). - -TEST 7: -------- - -Run the command "smbclient //BIGSERVER/TMP". You should then be -prompted for a password. You should use the password of the account -you are logged into the unix box with. If you want to test with -another account then add the -U option to the end of -the command line. eg: smbclient //bigserver/tmp -Ujohndoe - -Note: It is possible to specify the password along with the username -as follows: - smbclient //bigserver/tmp -Ujohndoe%secret - -Once you enter the password you should get the "smb>" prompt. If you -don't then look at the error message. If it says "invalid network -name" then the service "tmp" is not correctly setup in your smb.conf. - -If it says "bad password" then the likely causes are: - -- you have shadow passords (or some other password system) but didn't -compile in support for them in smbd -- your "valid users" configuration is incorrect -- you have a mixed case password and you haven't enabled the "password -level" option at a high enough level -- the "path =" line in smb.conf is incorrect. Check it with testparm -- you enabled password encryption but didn't create the SMB encrypted -password file - -Once connected you should be able to use the commands "dir" "get" -"put" etc. Type "help " for instructions. You should -especially check that the amount of free disk space shown is correct -when you type "dir". - - -TEST 8: -------- - -On the PC type the command "net view \\BIGSERVER". You will need to do -this from within a "dos prompt" window. You should get back a list of -available shares on the server. - -If you get a "network name not found" or similar error then netbios -name resolution is not working. This is usually caused by a problem in -nmbd. To overcome it you could do one of the following (you only need -to choose one of them): - -- fixup the nmbd installation -- add the IP address of BIGSERVER to the "wins server" box in the -advanced tcp/ip setup on the PC. -- enable windows name resolution via DNS in the advanced section of -the tcp/ip setup -- add BIGSERVER to your lmhosts file on the PC. - -If you get a "invalid network name" or "bad password error" then the -same fixes apply as they did for the "smbclient -L" test above. In -particular, make sure your "hosts allow" line is correct (see the man -pages) - -Also, do not overlook that fact that when the workstation requests the -connection to the samba server it will attempt to connect using the -name with which you logged onto your Windows machine. You need to make -sure that an account exists on your Samba server with that exact same -name and password. - -If you get "specified computer is not receiving requests" or similar -it probably means that the host is not contactable via tcp services. -Check to see if the host is running tcp wrappers, and if so add an entry in -the hosts.allow file for your client (or subnet, etc.) - - -TEST 9: --------- - -Run the command "net use x: \\BIGSERVER\TMP". You should be prompted -for a password then you should get a "command completed successfully" -message. If not then your PC software is incorrectly installed or your -smb.conf is incorrect. make sure your "hosts allow" and other config -lines in smb.conf are correct. - -It's also possible that the server can't work out what user name to -connect you as. To see if this is the problem add the line "user = -USERNAME" to the [tmp] section of smb.conf where "USERNAME" is the -username corresponding to the password you typed. If you find this -fixes things you may need the username mapping option. - -TEST 10: --------- - -Run the command "nmblookup -M TESTGROUP" where TESTGROUP is the name -of the workgroup that your Samba server and Windows PCs belong to. You -should get back the IP address of the master browser for that -workgroup. - -If you don't then the election process has failed. Wait a minute to -see if it is just being slow then try again. If it still fails after -that then look at the browsing options you have set in smb.conf. Make -sure you have "preferred master = yes" to ensure that an election is -held at startup. - -TEST 11: --------- - -From file manager try to browse the server. Your samba server should -appear in the browse list of your local workgroup (or the one you -specified in smb.conf). You should be able to double click on the name -of the server and get a list of shares. If you get a "invalid -password" error when you do then you are probably running WinNT and it -is refusing to browse a server that has no encrypted password -capability and is in user level security mode. In this case either set -"security = server" AND "password server = Windows_NT_Machine" in your -smb.conf file, or enable encrypted passwords AFTER compiling in support -for encrypted passwords (refer to the Makefile). - - -Still having troubles? ----------------------- - -Try the mailing list or newsgroup, or use the tcpdump-smb utility to -sniff the problem. The official samba mailing list can be reached at -samba@samba.org. To find out more about samba and how to -subscribe to the mailing list check out the samba web page at - http://samba.org/samba - -Also look at the other docs in the Samba package! - diff --git a/docs/textdocs/DNIX.txt b/docs/textdocs/DNIX.txt deleted file mode 100644 index 51005e6ec8..0000000000 --- a/docs/textdocs/DNIX.txt +++ /dev/null @@ -1,69 +0,0 @@ -DNIX has a problem with seteuid() and setegid(). These routines are -needed for Samba to work correctly, but they were left out of the DNIX -C library for some reason. - -For this reason Samba by default defines the macro NO_EID in the DNIX -section of includes.h. This works around the problem in a limited way, -but it is far from ideal, some things still won't work right. - -To fix the problem properly you need to assemble the following two -functions and then either add them to your C library or link them into -Samba. - -put this in the file setegid.s: - - .globl _setegid -_setegid: - moveq #47,d0 - movl #100,a0 - moveq #1,d1 - movl 4(sp),a1 - trap #9 - bccs 1$ - jmp cerror -1$: - clrl d0 - rts - - -put this in the file seteuid.s: - - .globl _seteuid -_seteuid: - moveq #47,d0 - movl #100,a0 - moveq #0,d1 - movl 4(sp),a1 - trap #9 - bccs 1$ - jmp cerror -1$: - clrl d0 - rts - -after creating the above files you then assemble them using - -as seteuid.s -as setegid.s - -that should produce the files seteuid.o and setegid.o - -then you need to add these to the LIBSM line in the DNIX section of -the Samba Makefile. Your LIBSM line will then look something like this: - -LIBSM = setegid.o seteuid.o -ln - -You should then remove the line: - -#define NO_EID - -from the DNIX section of includes.h - -Then recompile and try it out! - -Note that this file was derived from an email from Peter Olsson -. I don't have DNIX myself, so you're probably better -off contacting Peter if you have problems. - -Andrew - diff --git a/docs/textdocs/GROUP-MAPPING-HOWTO.txt b/docs/textdocs/GROUP-MAPPING-HOWTO.txt deleted file mode 100644 index c266f56548..0000000000 --- a/docs/textdocs/GROUP-MAPPING-HOWTO.txt +++ /dev/null @@ -1,60 +0,0 @@ -Samba 3.0 prealpha guide to group mapping ---------------------------------------------------- - -Jean François Micouleau (jfm@samba.org) - -Starting with Samba 3.0 alpha 2, a new group mapping function is available. The -current method (likely to change) to manage the groups is a new command called -smbgroupedit. - -The first immediate reason to use the group mapping on a PDC, is that -the 'domain admin group' of smb.conf is now gone. This parameter was -used to give the listed users local admin rights on their -workstations. It was some magic stuff that simply worked but didn't -scale very well for complex setups. - -Let me explain how it works on NT/W2K, to have this magic fade away. -When installing NT/W2K on a computer, the installer program creates some users -and groups. Notably the 'Administrators' group, and gives to that group some -privileges like the ability to change the date and time or to kill any process -(or close too) running on the local machine. The 'Administrator' user is a -member of the 'Administrators' group, and thus 'inherit' the 'Administrators' -group privileges. If a 'joe' user is created and become a member of the -'Administrator' group, 'joe' has exactly the same rights as 'Administrator'. - -When a NT/W2K machine is joined to a domain, during that phase, the "Domain -Administrators' group of the PDC is added to the 'Administrators' group of the -workstation. Every members of the 'Domain Administrators' group 'inherit' the -rights of the 'Administrators' group when logging on the workstation. - - -You are now wondering how to make some of your samba PDC users members of the -'Domain Administrators' ? That's really easy. - -1) create a unix group (usually in /etc/group), let's call it domadm -2) add to this group the users that must be Administrators. For example if you -want joe,john and mary, your entry in /etc/group will look like: - - domadm:x:502:joe,john,mary - -3) map this domadm group to the 'domain admins' group by running the command: - - smbgroupedit -c "Domain Admins" -u domadm - -you're set, joe, john and mary are domain administrators ! - - - -Like the Domain Admins group, you can map any arbitrary Unix group to any NT -group. You can also make any Unix group a domain group. For example, on a domain -member machine (an NT/W2K or a samba server running winbind), you would like to -give access to a certain directory to some users who are member of a group on -your samba PDC. Flag that group as a domain group by running: - - smbgroupedit -a unixgroup -td - - -You can list the various groups in the mapping database like this - - smbgroupedit -v - diff --git a/docs/textdocs/INSTALL.sambatar b/docs/textdocs/INSTALL.sambatar deleted file mode 100644 index 413f54d3c6..0000000000 --- a/docs/textdocs/INSTALL.sambatar +++ /dev/null @@ -1,33 +0,0 @@ -Contributor: Ricky Poulten -Date: Unknown -Status: Current - -Subject: Using smbtar -============================================================================= - -Please see the readme and the man page for general info. - -1) Follow the samba installation instructions. - -2) If all goes well, test it out by creating a share on your PC (called -backup for example) then doing something like, - - ./smbtar -s mypc -t /dev/rmt/0ubn -x backup - -substituting whatever your tape drive is for the -t option, or set your -tape environmental variable. - -If all does not go well, feel free to mail the author (poultenr@logica.co.uk) -about bug reports / help / money / pizza / etc. - -3) Read the man page and the NOTES file for more information - -4) Work smbtar into your usual nightly backup scheme (presuming you -have one :-}). - - -NOTE: - -If you have problems with smbtar then it's probably best to contact the -author Ricky Poulten (poultenr@logica.co.uk). - diff --git a/docs/textdocs/Imprints.txt b/docs/textdocs/Imprints.txt deleted file mode 100644 index 4ea9782bd3..0000000000 --- a/docs/textdocs/Imprints.txt +++ /dev/null @@ -1,47 +0,0 @@ -================================================================== - - -Imprints (Installation Manager of Printer driver -Retreival and Installation for Samba) is a project to -implement a UNIX equivalent of the Windows NT APW. -It has been taken on in part by the Samba Team, VA Linux -Systems and Hewlett-Packard. The Imprints toolset seeks -to provide central repository for users and administrators -to locate, download, and install all variations Window -95/98/NT printer drivers on Samba print servers. - -The server portion of Imprints is composed of a database -server which contains information and locations of various -printer driver packages. This server can be queried over -standard HTTP get requests and should therefore be available -to most administrators behind firewalls. The server's -database consists of records containing data about each -known printer driver package. For example, each driver -record contains a URL from which the Imprints installation -client can download the package as well as a public key which -can be used to verify the package's integrity. - -Once downloaded, the installation client will attempt to -install the printer driver on the defined remote server -using the username and password provided by the administrator. -If the username/password pair can be authenticated by the -remote server (and has the appropriate authorization), then -the printer driver(s) is (are) installed and the new Printer -is created. - -From Samba's point of view, the process of creating a new -printer via the Imprints installation client is identical to -that of using the Windows NT APW. In fact, Imprints utilizes -Samba's rpcclient and smbclient tools to issue the same MS-RPC -and file copy operations as an NT client. This means that -Imprints can also be used to install printers on remote Windows -NT print servers. - -For more information on Imprints, visit the project homepage -at - - http://imprints.sourceforge.net/. - - - - diff --git a/docs/textdocs/Macintosh_Clients.txt b/docs/textdocs/Macintosh_Clients.txt deleted file mode 100644 index dfac97e1aa..0000000000 --- a/docs/textdocs/Macintosh_Clients.txt +++ /dev/null @@ -1,23 +0,0 @@ -> Are there any Macintosh clients for Samba? - -Yes. Thursby now have a CIFS Client / Server called DAVE - see -http://www.thursby.com/ - -They test it against Windows 95, Windows NT and samba for -compatibility issues. At the time of writing, DAVE was at version -1.0.1. The 1.0.0 to 1.0.1 update is available as a free download from -the Thursby web site (the speed of finder copies has been greatly -enhanced, and there are bug-fixes included). - -Alternatives - There are two free implementations of AppleTalk for -several kinds of UNIX machnes, and several more commercial ones. -These products allow you to run file services and print services -natively to Macintosh users, with no additional support required on -the Macintosh. The two free omplementations are Netatalk, -http://www.umich.edu/~rsug/netatalk/, and CAP, -http://www.cs.mu.oz.au/appletalk/atalk.html. What Samba offers MS -Windows users, these packages offer to Macs. For more info on these -packages, Samba, and Linux (and other UNIX-based systems) see -http://www.eats.com/linux_mac_win.html - - diff --git a/docs/textdocs/NetBIOS.txt b/docs/textdocs/NetBIOS.txt deleted file mode 100644 index ca0dcc84b7..0000000000 --- a/docs/textdocs/NetBIOS.txt +++ /dev/null @@ -1,152 +0,0 @@ -Contributor: lkcl - samba@samba.org - Copyright 1997 Luke Kenneth Casson Leighton -Date: March 1997 -Status: Current -Updated: 12jun97 - -Subject: Definition of NetBIOS Protocol and Name Resolution Modes -============================================================================= - -======= -NETBIOS -======= - -NetBIOS runs over the following tranports: TCP/IP; NetBEUI and IPX/SPX. -Samba only uses NetBIOS over TCP/IP. For details on the TCP/IP NetBIOS -Session Service NetBIOS Datagram Service, and NetBIOS Names, see -rfc1001.txt and rfc1002.txt. - -NetBEUI is a raw NetBIOS frame protocol implementation that allows NetBIOS -datagrams to be sent out over the 'wire' embedded within LLC frames. -NetBEUI is not required when using NetBIOS over TCP/IP protocols and it -is preferable NOT to install NetBEUI if it can be avoided. - -IPX/SPX is also not required when using NetBIOS over TCP/IP, and it is -preferable NOT to install the IPX/SPX transport unless you are using Novell -servers. At the very least, it is recommended that you do not install -'NetBIOS over IPX/SPX'. - -[When installing Windows 95, you will find that NetBEUI and IPX/SPX are -installed as the default protocols. This is because they are the simplest -to manage: no Windows 95 user-configuration is required]. - - -NetBIOS applications (such as samba) offer their services (for example, -SMB file and print sharing) on a NetBIOS name. They must claim this name -on the network before doing so. The NetBIOS session service will then -accept connections on the application's behalf (on the NetBIOS name -claimed by the application). A NetBIOS session between the application -and the client can then commence. - -NetBIOS names consist of 15 characters plus a 'type' character. This is -similar, in concept, to an IP address and a TCP port number, respectively. -A NetBIOS-aware application on a host will offer different services under -different NetBIOS name types, just as a host will offer different TCP/IP -services on different port numbers. - -NetBIOS names must be claimed on a network, and must be defended. The use -of NetBIOS names is most suitable on a single subnet; a Local Area Network -or a Wide Area Network. - -NetBIOS names are either UNIQUE or GROUP. Only one application can claim a -UNIQUE NetBIOS name on a network. - -There are two kinds of NetBIOS Name resolution: Broadcast and Point-to-Point. - - -================= -BROADCAST NetBIOS -================= - -Clients can claim names, and therefore offer services on successfully claimed -names, on their broadcast-isolated subnet. One way to get NetBIOS services -(such as browsing: see ftp.microsoft.com/drg/developr/CIFS/browdiff.txt; and -SMB file/print sharing: see cifs4.txt) working on a LAN or WAN is to make -your routers forward all broadcast packets from TCP/IP ports 137, 138 and 139. - -This, however, is not recommended. If you have a large LAN or WAN, you will -find that some of your hosts spend 95 percent of their time dealing with -broadcast traffic. [If you have IPX/SPX on your LAN or WAN, you will find -that this is already happening: a packet analyzer will show, roughly -every twelve minutes, great swathes of broadcast traffic!]. - - -============ -NBNS NetBIOS -============ - -rfc1001.txt describes, amongst other things, the implementation and use -of, a 'NetBIOS Name Service'. NT/AS offers 'Windows Internet Name Service' -which is fully rfc1001/2 compliant, but has had to take specific action -with certain NetBIOS names in order to make it useful. (for example, it -deals with the registration of <1c> <1d> <1e> names all in different ways. -I recommend the reading of the Microsoft WINS Server Help files for full -details). - -Samba also offers WINS server capabilities. Samba does not interact -with NT/AS (WINS replication), so if you have a mixed NT server and -Samba server environment, it is recommended that you use the NT server's -WINS capabilities, instead of samba's WINS server capabilities. - -The use of a WINS server cuts down on broadcast network traffic for -NetBIOS name resolution. It has the effect of pulling all the broadcast -isolated subnets together into a single NetBIOS scope, across your LAN -or WAN, while avoiding the use of TCP/IP broadcast packets. - -When you have a WINS server on your LAN, WINS clients will be able to -contact the WINS server to resolve NetBIOS names. Note that only those -WINS clients that have registered with the same WINS server will be -visible. The WINS server _can_ have static NetBIOS entries added to its -database (usually for security reasons you might want to consider putting -your domain controllers or other important servers as static entries, -but you should not rely on this as your sole means of security), but for -the most part, NetBIOS names are registered dynamically. - -[It is important to mention that samba's browsing capabilities (as a WINS -client) must have access to a WINS server. if you are using samba also -as a WINS server, then it will have a direct short-cut into the WINS -database. - -This provides some confusion for lots of people, and is worth mentioning -here: a Browse Server is NOT a WINS Server, even if these services are -implemented in the same application. A Browse Server _needs_ a WINS server -because a Browse Server is a WINS client, which is _not_ the same thing]. - -Clients can claim names, and therefore offer services on successfully claimed -names, on their broadcast-isolated subnet. One way to get NetBIOS services -(such as browsing: see ftp.microsoft.com/drg/developr/CIFS/browdiff.txt; and -SMB file/print sharing: see cifs6.txt) working on a LAN or WAN is to make -your routers forward all broadcast packets from TCP/IP ports 137, 138 and 139. -You will find, however, if you do this on a large LAN or a WAN, that your -network is completely swamped by NetBIOS and browsing packets, which is why -WINS was developed to minimise the necessity of broadcast traffic. - -WINS Clients therefore claim names from the WINS server. If the WINS -server allows them to register a name, the client's NetBIOS session service -can then offer services on this name. Other WINS clients will then -contact the WINS server to resolve a NetBIOS name. - - -======================= -Samba WINS Capabilities -======================= - -To configure samba as a WINS server, you must add "wins support = yes" to -the [global] section of your smb.conf file. This will enable WINS server -capabilities in nmbd. - -To configure samba as a WINS client, you must add "wins server = x.x.x.x" -to the [global] section of your smb.conf file, where x.x.x.x is the TCP/IP -address of your WINS server. The browsing capabilities in nmbd will then -register (and resolve) WAN-wide NetBIOS names with this WINS server. - -Note that if samba has "wins support = yes", then the browsing capabilities -will _not_ use the "wins server" option to resolve NetBIOS names: it will -go directly to the internal WINS database for NetBIOS name resolution. It -is therefore invalid to have both "wins support = yes" and -"wins server = x.x.x.x". Note, in particular, that if you configure the -"wins server" parameter to be the ip address of your samba server itself -(as might one intuitively think), that you will run into difficulties. -Do not use both parameters! - - diff --git a/docs/textdocs/Printing.txt b/docs/textdocs/Printing.txt deleted file mode 100644 index 2c50e5f4fe..0000000000 --- a/docs/textdocs/Printing.txt +++ /dev/null @@ -1,255 +0,0 @@ -Contributor: Unknown -Revised by: Patrick Powell -Date: August 11, 2000 -Status: Current - -Subject: Debugging Printing Problems -============================================================================= - -This is a short description of how to debug printing problems with -Samba. This describes how to debug problems with printing from a SMB -client to a Samba server, not the other way around. For the reverse -see the examples/printing directory. - -Please send enhancements to this file to samba@samba.org - -Ok, so you want to print to a Samba server from your PC. The first -thing you need to understand is that Samba does not actually do any -printing itself, it just acts as a middleman between your PC client -and your Unix printing subsystem. Samba receives the file from the PC -then passes the file to a external "print command". What print command -you use is up to you. - -The whole things is controlled using options in smb.conf. The most -relevant options (which you should look up in the smb.conf man page) -are: - [global] - print command - send a file to a spooler - lpq command - get spool queue status - lprm command - remove a job - [printers] - path = /var/spool/lpd/samba - -The following are nice to know about: - - queuepause command - stop a printer or print queue - queueresume command - start a printer or print queue - -Example: - print command = /usr/bin/lpr -r -P%p %s - lpq command = /usr/bin/lpq -P%p %s - lprm command = /usr/bin/lprm -P%p %j - queuepause command = /usr/sbin/lpc -P%p stop - queuepause command = /usr/sbin/lpc -P%p start - -Samba should set reasonable defaults for these depending on your -system type, but it isn't clairvoyant. It is not uncommon that you -have to tweak these for local conditions. The commands should -always have fully specified pathnames, as the smdb may not have -the correct PATH values. - -When you send a job to Samba to be printed, it will make a temporary -copy of it in the directory specified in the [printers] section. -and it should be periodically cleaned out. The lpr -r option -requests that the temporary copy be removed after printing; If -printing fails then you might find leftover files in this directory, -and it should be periodically cleaned out. Samba used the lpq -command to determine the "job number" assigned to your print job -by the spooler. - -The % are "macros" that get dynamically replaced with appropriate -values when they are used. The %s gets replaced with the name of the spool -file that Samba creates and the %p gets replaced with the name of the -printer. The %j gets replaced with the "job number" which comes from -the lpq output. - -DEBUGGING PRINTER PROBLEMS - -One way to debug printing problems is to start by replacing these -command with shell scripts that record the arguments and the contents -of the print file. A simple example of this kind of things might -be: - - print command = /tmp/saveprint %p %s - - #!/bin/saveprint - # we make sure that we are the right user - /usr/bin/id -p >/tmp/tmp.print - # we run the command and save the error messages - # replace the command with the one appropriate for your system - /usr/bin/lpr -r -P$1 $2 2>>&/tmp/tmp.print - -Then you print a file and try removing it. You may find that the -print queue needs to be stopped in order to see the queue status -and remove the job: - -h4: {42} % echo hi >/tmp/hi -h4: {43} % smbclient //localhost/lw4 -added interface ip=10.0.0.4 bcast=10.0.0.255 nmask=255.255.255.0 -Password: -Domain=[ASTART] OS=[Unix] Server=[Samba 2.0.7] -smb: \> print /tmp/hi -putting file /tmp/hi as hi-17534 (0.0 kb/s) (average 0.0 kb/s) -smb: \> queue -1049 3 hi-17534 -smb: \> cancel 1049 -Error cancelling job 1049 : code 0 -smb: \> cancel 1049 -Job 1049 cancelled -smb: \> queue -smb: \> exit - -The 'code 0' indicates that the job was removed. The comment -by the smbclient is a bit misleading on this. -You can observe the command output and then and look at the -/tmp/tmp.print file to see what the results are. You can quickly -find out if the problem is with your printing system. Often people -have problems with their /etc/printcap file or permissions on -various print queues. - -WHAT PRINTERS DO I HAVE - -You can use the 'testprns' program to check to see if the printer -name you are using is recognized by Samba. For example, you can -use: - - testprns printer /etc/printcap - -Samba can get its printcap information from a file or from a program. -You can try the following to see the format of the extracted -information: - - testprns -a printer /etc/printcap - - testprns -a printer '|/bin/cat printcap' - -SETTING UP PRINTCAP AND PRINT SERVERS - -You may need to set up some printcaps for your Samba system to use. -It is strongly recommended that you use the facilities provided by -the print spooler to set up queues and printcap information. - -Samba requires either a printcap or program to deliver printcap -information. This printcap information has the format: - - name|alias1|alias2...:option=value:... - -For almost all printing systems, the printer 'name' must be composed -only of alphanumeric or underscore '_' characters. Some systems also -allow hyphens ('-') as well. An alias is an alternative name for the -printer, and an alias with a space in it is used as a 'comment' -about the printer. The printcap format optionally uses a \ at the end of lines -to extend the printcap to multiple lines. - - -Here are some examples of printcap files: - -pr just printer name -pr|alias printer name and alias -pr|My Printer printer name, alias used as comment -pr:sh:\ Same as pr:sh:cm= testing - :cm= \ - testing -pr:sh Same as pr:sh:cm= testing - :cm= testing - -Samba reads the printcap information when first started. If you make -changes in the printcap information, then you must do the following: - -a) make sure that the print spooler is aware of these changes. - The LPRng system uses the 'lpc reread' command to do this. - -b) make sure that the spool queues, etc., exist and have the - correct permissions. The LPRng system uses the 'checkpc -f' - command to do this. - -c) You now should send a SIGHUP signal to the smbd server to have - it reread the printcap information. - -JOB SENT, NO OUTPUT - -This is the most frustrating part of printing. You may have sent the -job, verified that the job was forwarded, set up a wrapper around -the command to send the file, but there was no output from the printer. - -First, check to make sure that the job REALLY is getting to the -right print queue. If you are using a BSD or LPRng print spooler, -you can temporarily stop the printing of jobs. Jobs can still be -submitted, but they will not be printed. Use: - - lpc -Pprinter stop - -Now submit a print job and then use 'lpq -Pprinter' to see if the -job is in the print queue. If it is not in the print queue then -you will have to find out why it is not being accepted for printing. - -Next, you may want to check to see what the format of the job really -was. With the assistance of the system administrator you can view -the submitted jobs files. You may be surprised to find that these -are not in what you would expect to call a printable format. -You can use the UNIX 'file' utitily to determine what the job -format actually is: - - cd /var/spool/lpd/printer # spool directory of print jobs - ls # find job files - file dfA001myhost - -You should make sure that your printer supports this format OR that -your system administrator has installed a 'print filter' that will -convert the file to a format appropriate for your printer. - -JOB SENT, STRANGE OUTPUT - -Once you have the job printing, you can then start worrying about -making it print nicely. - -The most common problem is extra pages of output: banner pages -OR blank pages at the end. - -If you are getting banner pages, check and make sure that the -printcap option or printer option is configured for no banners. -If you have a printcap, this is the :sh (suppress header or banner -page) option. You should have the following in your printer. - - printer: ... :sh - -If you have this option and are still getting banner pages, there -is a strong chance that your printer is generating them for you -automatically. You should make sure that banner printing is disabled -for the printer. This usually requires using the printer setup software -or procedures supplied by the printer manufacturer. - -If you get an extra page of output, this could be due to problems -with your job format, or if you are generating PostScript jobs, -incorrect setting on your printer driver on the MicroSoft client. -For example, under Win95 there is a option: - - Printers|Printer Name|(Right Click)Properties|Postscript|Advanced| - -that allows you to choose if a Ctrl-D is appended to all jobs. -This is a very bad thing to do, as most spooling systems will -automatically add a ^D to the end of the job if it is detected as -PostScript. The multiple ^D may cause an additional page of output. - -RAW POSTSCRIPT PRINTED - -This is a problem that is usually caused by either the print spooling -system putting information at the start of the print job that makes -the printer think the job is a text file, or your printer simply -does not support PostScript. You may need to enable 'Automatic -Format Detection' on your printer. - -ADVANCED PRINTING - -Note that you can do some pretty magic things by using your -imagination with the "print command" option and some shell scripts. -Doing print accounting is easy by passing the %U option to a print -command shell script. You could even make the print command detect -the type of output and its size and send it to an appropriate -printer. - -DEBUGGING - -If the above debug tips don't help, then maybe you need to bring in -the bug guns, system tracing. See Tracing.txt in this directory. ------------------------------------------------------------------------------ diff --git a/docs/textdocs/README.sambatar b/docs/textdocs/README.sambatar deleted file mode 100644 index af7250c2a4..0000000000 --- a/docs/textdocs/README.sambatar +++ /dev/null @@ -1,23 +0,0 @@ -Contributor/s: Martin.Kraemer - and Ricky Poulten (ricky@logcam.co.uk) -Date: Unknown - circa 1994 -Status: Obsoleted - smbtar has been a stable part of Samba - since samba-1.9.13 - -Subject: Sambatar (now smbtar) -============================================================================= - -This is version 1.4 of my small extension to samba that allows PC shares -to be backed up directly to a UNIX tape. It only has been tested under -Solaris 2.3, Linux 1.1.59 and DG/UX 5.4r3.10 with version 1.9.13 of samba. - -See the file INSTALL for installation instructions, and -the man page and NOTES file for some basic usage. Please let me know if you -have any problems getting it to work under your flavour of Unix. - -This is only (yet another) intermediate version of sambatar. -This version also comes with an extra gift, zen.bas, written in -microsoft qbasic by a colleague. It is (apparently) based on a 70s -British sci-fi series known as Blake's 7. If you have any questions -about this program, or any suggestions (e.g. what about servillan.bas -?), feel free to mail the author (of zen.bas) greenm@lilhd.logica.com. diff --git a/docs/textdocs/SCO.txt b/docs/textdocs/SCO.txt deleted file mode 100644 index 7c01aa57c6..0000000000 --- a/docs/textdocs/SCO.txt +++ /dev/null @@ -1,19 +0,0 @@ -Contributor: Geza Makay -Date: Unknown -Status: Obsolete - Dates to SCO Unix v3.2.4 approx. - -Subject: TCP/IP Bug in SCO Unix -============================================================================ - -There is an annoying TCPIP bug in SCO Unix. This causes corruption when -transferring files with Samba. - -Geza Makay (makayg@math.u-szeged.hu) sends this information: - -The patch you need is UOD385 Connection Drivers SLS. It is available from -SCO (ftp.sco.com, directory SLS, files uod385a.Z and uod385a.ltr.Z). - -You do not need anything else but the above patch. It installs in seconds, -and corrected the Excel problem. We also had some other minor problems (not -only with Samba) that disappeared by installing this patch. - diff --git a/docs/textdocs/SMBTAR.notes b/docs/textdocs/SMBTAR.notes deleted file mode 100644 index 679d776f56..0000000000 --- a/docs/textdocs/SMBTAR.notes +++ /dev/null @@ -1,46 +0,0 @@ -Contributor: Unknown -Date: 1994 -Status: Mostly Current - refer man page - -Subject: Smbtar -============================================================================ - -Intro ------ - -sambatar is just a small extension to the smbclient program distributed with -samba. A basic front end shell script, smbtar, is provided as an interface -to the smbclient extensions. - -Extensions ----------- - -This release adds the following extensions to smbclient, - -tar [c|x] filename - creates or restores from a tar file. The tar file may be a tape -or a unix tar file. tar's behaviour is modified with the newer and tarmode -commands. - -tarmode [full|inc|reset|noreset] - With no arguments, tarmode prints the current tar mode (by default full, -noreset). In full mode, every file is backed up during a tar command. -In incremental, only files with the dos archive bit set are backed up. -The archive bit is reset if in reset mode, or left untouched if in noreset. -In reset mode, the share has to be writable, which makes sambatar even -less secure. An alternative might be to use tarmode inc noreset which -would implement an "expanding incremental" backup (which some may prefer -anyway). - -setmode filename - This is a "freebie" - nothing really to do with sambatar. This -is a crude attrib like command (only the other way around). Setmode string -is a combination of +-rhsa. So for example -rh would reset the read only -bit on filename. - -newer filename - This is in fact part of the 1.9.13 samba distribution, but comes -into its own with sambatar. This causes tar (or get, mget, etc) to -only copy files newer than the specified file name. Could be used -against the previous nights (or whatever) log file to implement incremental -backups. diff --git a/docs/textdocs/Solaris-Winbind-HOWTO.txt b/docs/textdocs/Solaris-Winbind-HOWTO.txt deleted file mode 100644 index a81bacf486..0000000000 --- a/docs/textdocs/Solaris-Winbind-HOWTO.txt +++ /dev/null @@ -1,361 +0,0 @@ -!== -!== Solaris-Winbind-HOWTO.txt -!== -Contributors: Naag Mummaneni -Updated: May 2, 2002 -Status: Current - -Subject: Installing and Configuring Winbind on Solaris -============================================================================= - -Installation and Configuration of Winbind on Solaris. ------------------------------------------------------ - -This HOWTO describes how to get winbind services up and running to control -access and authenticate users on your Solaris box using the winbind services -which come with SAMBA 2.2.x latest CVS Checkout.Make sure you are using the -latest Samba 2.2.x cvs checkout as other versions come with a lots of bugs -regarding winbind .And even the Latest Samba Stable Release is also not an -exception to this. - -Introduction ------------- - -This HOWTO describes the procedures used to get winbind up and running on a -Solaris system. Winbind is capable of providing access and authentication -control for Windows Domain users through an NT or Win2K PDC for 'regular' -services, such as telnet and ftp, as well for SAMBA services. - -Why should I to this? - -This allows the SAMBA administrator to rely on the authentication mechanisms -on the NT/Win2K PDC for the authentication of domain members. NT/Win2K users -no longer need to have separate accounts on the SAMBA server. - -Who should be reading this document? - -This HOWTO is designed for system administrators. If you are implementing -SAMBA on a file server and wish to (fairly easily) integrate existing -NT/Win2K users from your PDC onto the SAMBA server, this HOWTO is for you. - -Requirements ------------- - -If you have a samba configuration file that you are currently using... BACK -IT UP! If your system already uses PAM, back up the /etc/pam.conf file ! If -you haven't already made a boot disk, MAKEONE NOW! Messing with the pam -configuration file can make it nearly impossible to log in to yourmachine. -That's why you want to be able to boot back into your machine in single user -mode and restore your /etc/pam.conf back to the original state they were in -if you get frustrated with the way things are going. ;-) Please refer to the -main SAMBA web page or, better yet, your closest SAMBA mirror site for -instructions on downloading the source code of Samba 2.2.x from the SAMBA -CVS repository. To allow Domain users the ability to access SAMBA shares and -files, as well as potentially other services provided by your SAMBA machine, -PAM (pluggable authentication modules) must be setup properly on your -machine. In order to compile the winbind modules, you should have at least -the pam libraries resident on your system. Solaris 7/8 has its pam modules -coming with the distribution itself. - -Testing Things Out ------------------- - -Before starting, it is probably best to kill off all the SAMBA related -daemons running on your server. Kill off all smbd, nmbd, and winbindd -processes that may be running. - - -Configure and compile SAMBA ---------------------------- - -The configuration and compilation of SAMBA is pretty straightforward. The -first three steps may not be necessary depending upon whether or not you -have previously built the Samba binaries. - -root# autoconf -root# make clean -root# rm config.cache -root# ./configure --with-winbind --with-pam -root# make -root# make install - -This will, by default, install SAMBA in /usr/local/samba. See the main SAMBA -documentation if you want to install SAMBA somewhere else. It will also -build the winbindd executable and libraries. - -Configure nsswitch.conf and the winbind libraries -------------------------------------------------- - -The libraries needed to run the winbindd daemon through nsswitch need to be -copied to their proper locations, so - -root# cp ../samba/source/nsswitch/libnss_winbind.so /usr/lib - -I also found it necessary to make the following symbolic links: - -root# ln -s /usr/lib/libnss_winbind.so /usr/lib/libnss_winbind.so.1 -root# ln -s /usr/lib/libnss_winbind.so /usr/lib/libnss_winbind.so.2 -root# ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.1 -root# ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.2 - -Now, as root you need to edit /etc/nsswitch.conf to allow user and group -entries to be visible from the winbindd daemon. My /etc/nsswitch.conf file -look like this after editing: - - passwd: files winbind - group: files winbind - - -Configure smb.conf ------------------- - -Several parameters are needed in the smb.conf file to control the behavior -of winbindd. Configure smb.conf These are described in more detail in the -winbindd(8) man page. My smb.conf file was modified to include the following -entries in the [global] section: - -[global] - <...> - # The previous documentation says to - # as the "winbind seperator " directive also but - # it is no longer supported. - - # use uids from 10000 to 20000 for domain users - winbind uid = 10000-20000 - - # use gids from 10000 to 20000 for domain groups - winbind gid = 10000-20000 - - # allow enumeration of winbind users and groups - winbind enum users = yes - winbind enum groups = yes - - # give winbind users a real shell (only needed if - # they have telnet access) - template homedir = /home/winnt/%D/%U - template shell = /bin/bash - - -Join the SAMBA server to the PDC domain ---------------------------------------- - -Enter the following command to make the SAMBA server join the PDC domain, -where DOMAIN is the name of your Windows domain and Administrator is a -domain user who has administrative privileges in the domain. - -root# /usr/local/samba/bin/smbpasswd -j DOMAIN -r PDC -U Administrator - -The proper response to the command should be: "Joined the domain DOMAIN" -where DOMAIN is your DOMAIN name. - -Start up the winbindd daemon and test it! - -Eventually, you will want to modify your smb startup script to automatically -invoke the winbindd daemon when the other parts of SAMBA start, but it is -possible to test out just the winbind portion first. To start up winbind -services, enter the following command as root: - -root# /usr/local/samba/bin/winbindd - -I'm always paranoid and like to make sure the daemon is really running... - -root# ps -ae | grep winbindd - -This command should produce output like this, if the daemon is running - - 3025 ? 00:00:00 winbindd - -Now... for the real test, try to get some information about the users on -your PDC - -root# /usr/local/samba/bin/wbinfo -u - -This should echo back a list of users on your Windows users on your PDC. For -example, I get the following response: - -CEO\Administrator -CEO\burdell -CEO\Guest -CEO\jt-ad -CEO\krbtgt -CEO\TsInternetUser - -root# /usr/local/samba/bin/wbinfo -g - -CEO\Domain Admins -CEO\Domain Users -CEO\Domain Guests -CEO\Domain Computers -CEO\Domain Controllers -CEO\Cert Publishers -CEO\Schema Admins -CEO\Enterprise Admins -CEO\Group Policy Creator Owners - -The function 'getent' can now be used to get unified lists of both local and -PDC users and groups. Try the following command: - -root# getent passwd - -You should get a list that looks like your /etc/passwd list followed by the domain users with their new -uids, gids, home directories and default shells. - -The same thing can be done for groups with the command - -root# getent group - -Fix the /etc/rc.d/init.d/samba.server startup files The winbindd daemon -needs to start up after the smbd and nmbd daemons are running. To accomplish -this task, you need to modify the /etc/init.d/samba.server script to add -commands to invoke this daemon in the proper sequence. My -/etc/init.d/samba.server file starts up smbd, nmbd, and winbindd from the -/usr/local/samba/bin directory directly. - -## -## samba.server -## - -if [ ! -d /usr/bin ] -then # /usr not mounted - exit -fi - -killproc() { # kill the named process(es) - pid=`/usr/bin/ps -e | - /usr/bin/grep -w $1 | - /usr/bin/sed -e 's/^ *//' -e 's/ .*//'` - [ "$pid" != "" ] && kill $pid -} - -# Start/stop processes required for samba server - -case "$1" in - -'start') -# -# Edit these lines to suit your installation (paths, workgroup, host) -# -echo Starting SMBD - /usr/local/samba/bin/smbd -D -s \ - /usr/local/samba/smb.conf - -echo Starting NMBD - /usr/local/samba/bin/nmbd -D -l \ - /usr/local/samba/var/log -s /usr/local/samba/smb.conf - -echo Starting Winbind Daemon - /usr/local/samba/bin/winbindd - ;; - -'stop') - killproc nmbd - killproc smbd - killproc winbindd - ;; - -*) - echo "Usage: /etc/init.d/samba.server { start | stop }" - ;; -esac - -If you restart the smbd, nmbd, and winbindd daemons at this point, you -should be able to connect to the samba server as a domain member just as if -you were a local user. - - -Configure Winbind and PAM -------------------------- - -If you have made it this far, you know that winbindd and samba are working -together. If you want to use winbind to provide authentication for other -services, keep reading. The pam configuration file need to be altered in -this step. (Did you remember to make backups of your original /etc/pam.conf -file? If not, do it now.) You will need a pam module to use winbindd with -these other services. This module will be compiled in the ../source/nsswitch -directory by default when we used ./configure --with-pam option. - -root# make nsswitch/pam_winbind.so - -from the ../source directory. The pam_winbind.so file should be copied to -the location of your other pam security modules. On my Solaris 8, this was -the /usr/lib/security directory. - -root# cp ../samba/source/nsswitch/pam_winbind.so /usr/lib/security - -The /etc/pam.conf need to be changed. I changed this file so that my Domain -users can logon both locally as well as telnet.The following are the changes -that I made.You can customize the pam.conf file as per your requirements,but -be sure of those changes because in the worst case it will leave your system -nearly impossible to boot. - -# -#ident "@(#)pam.conf 1.14 99/09/16 SMI" -# -# Copyright (c) 1996-1999, Sun Microsystems, Inc. -# All Rights Reserved. -# -# PAM configuration -# -# Authentication management -# -login auth required /usr/lib/security/pam_winbind.so -login auth required /usr/lib/security/$ISA/pam_unix.so.1 try_first_pass -login auth required /usr/lib/security/$ISA/pam_dial_auth.so.1 try_first_pass -# -rlogin auth sufficient /usr/lib/security/pam_winbind.so -rlogin auth sufficient /usr/lib/security/$ISA/pam_rhosts_auth.so.1 -rlogin auth required /usr/lib/security/$ISA/pam_unix.so.1 try_first_pass -# -dtlogin auth sufficient /usr/lib/security/pam_winbind.so -dtlogin auth required /usr/lib/security/$ISA/pam_unix.so.1 try_first_pass -# -rsh auth required /usr/lib/security/$ISA/pam_rhosts_auth.so.1 -other auth sufficient /usr/lib/security/pam_winbind.so -other auth required /usr/lib/security/$ISA/pam_unix.so.1 try_first_pass -# -# Account management -# -login account sufficient /usr/lib/security/pam_winbind.so -login account requisite /usr/lib/security/$ISA/pam_roles.so.1 -login account required /usr/lib/security/$ISA/pam_unix.so.1 -# -dtlogin account sufficient /usr/lib/security/pam_winbind.so -dtlogin account requisite /usr/lib/security/$ISA/pam_roles.so.1 -dtlogin account required /usr/lib/security/$ISA/pam_unix.so.1 -# -other account sufficient /usr/lib/security/pam_winbind.so -other account requisite /usr/lib/security/$ISA/pam_roles.so.1 -other account required /usr/lib/security/$ISA/pam_unix.so.1 -# -# Session management -# -other session required /usr/lib/security/$ISA/pam_unix.so.1 -# -# Password management -# -#other password sufficient /usr/lib/security/pam_winbind.so -other password required /usr/lib/security/$ISA/pam_unix.so.1 -dtsession auth required /usr/lib/security/$ISA/pam_unix.so.1 -# -# Support for Kerberos V5 authentication (uncomment to use Kerberos) -# -#rlogin auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass -#login auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass -#dtlogin auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass -#other auth optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass -#dtlogin account optional /usr/lib/security/$ISA/pam_krb5.so.1 -#other account optional /usr/lib/security/$ISA/pam_krb5.so.1 -#other session optional /usr/lib/security/$ISA/pam_krb5.so.1 -#other password optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass - -I also added a try_first_pass line after the winbind.so line to get rid of -annoying double prompts for passwords. - -Now restart your Samba & try connecting through your application that you -configured in the pam.conf. - - - -!== -!== end of Solaris-Winbind-HOWTO.txt -!== diff --git a/docs/textdocs/Speed.txt b/docs/textdocs/Speed.txt deleted file mode 100644 index b82db8f8f4..0000000000 --- a/docs/textdocs/Speed.txt +++ /dev/null @@ -1,338 +0,0 @@ - -Subject: Samba performance issues -============================================================================ - -This file tries to outline the ways to improve the speed of a Samba server. - -COMPARISONS ------------ - -The Samba server uses TCP to talk to the client. Thus if you are -trying to see if it performs well you should really compare it to -programs that use the same protocol. The most readily available -programs for file transfer that use TCP are ftp or another TCP based -SMB server. - -If you want to test against something like a NT or WfWg server then -you will have to disable all but TCP on either the client or -server. Otherwise you may well be using a totally different protocol -(such as Netbeui) and comparisons may not be valid. - -Generally you should find that Samba performs similarly to ftp at raw -transfer speed. It should perform quite a bit faster than NFS, -although this very much depends on your system. - -Several people have done comparisons between Samba and Novell, NFS or -WinNT. In some cases Samba performed the best, in others the worst. I -suspect the biggest factor is not Samba vs some other system but the -hardware and drivers used on the various systems. Given similar -hardware Samba should certainly be competitive in speed with other -systems. - - -OPLOCKS -------- - -Oplocks are the way that SMB clients get permission from a server to -locally cache file operations. If a server grants an oplock -(opportunistic lock) then the client is free to assume that it is the -only one accessing the file and it will agressively cache file -data. With some oplock types the client may even cache file open/close -operations. This can give enormous performance benefits. - -With the release of Samba 1.9.18 we now correctly support opportunistic -locks. This is turned on by default, and can be turned off on a share- -by-share basis by setting the parameter : - -oplocks = False - -We recommend that you leave oplocks on however, as current benchmark -tests with NetBench seem to give approximately a 30% improvement in -speed with them on. This is on average however, and the actual -improvement seen can be orders of magnitude greater, depending on -what the client redirector is doing. - -Previous to Samba 1.9.18 there was a 'fake oplocks' option. This -option has been left in the code for backwards compatibility reasons -but it's use is now deprecated. A short summary of what the old -code did follows. - -LEVEL2 OPLOCKS --------------- - -With Samba 2.0.5 a new capability - level2 (read only) oplocks is -supported (although the option is off by default - see the smb.conf -man page for details). Turning on level2 oplocks (on a share-by-share basis) -by setting the parameter : - -level2 oplocks = true - -should speed concurrent access to files that are not commonly written -to, such as application serving shares (ie. shares that contain common -.EXE files - such as a Microsoft Office share) as it allows clients to -read-ahread cache copies of these files. - -Old 'fake oplocks' option - deprecated. ---------------------------------------- - -Samba can also fake oplocks, by granting a oplock whenever a client -asks for one. This is controlled using the smb.conf option "fake -oplocks". If you set "fake oplocks = yes" then you are telling the -client that it may agressively cache the file data for all opens. - -Enabling 'fake oplocks' on all read-only shares or shares that you know -will only be accessed from one client at a time you will see a big -performance improvement on many operations. If you enable this option -on shares where multiple clients may be accessing the files read-write -at the same time you can get data corruption. - -SOCKET OPTIONS --------------- - -There are a number of socket options that can greatly affect the -performance of a TCP based server like Samba. - -The socket options that Samba uses are settable both on the command -line with the -O option, or in the smb.conf file. - -The "socket options" section of the smb.conf manual page describes how -to set these and gives recommendations. - -Getting the socket options right can make a big difference to your -performance, but getting them wrong can degrade it by just as -much. The correct settings are very dependent on your local network. - -The socket option TCP_NODELAY is the one that seems to make the -biggest single difference for most networks. Many people report that -adding "socket options = TCP_NODELAY" doubles the read performance of -a Samba drive. The best explanation I have seen for this is that the -Microsoft TCP/IP stack is slow in sending tcp ACKs. - - -READ SIZE ---------- - -The option "read size" affects the overlap of disk reads/writes with -network reads/writes. If the amount of data being transferred in -several of the SMB commands (currently SMBwrite, SMBwriteX and -SMBreadbraw) is larger than this value then the server begins writing -the data before it has received the whole packet from the network, or -in the case of SMBreadbraw, it begins writing to the network before -all the data has been read from disk. - -This overlapping works best when the speeds of disk and network access -are similar, having very little effect when the speed of one is much -greater than the other. - -The default value is 16384, but very little experimentation has been -done yet to determine the optimal value, and it is likely that the best -value will vary greatly between systems anyway. A value over 65536 is -pointless and will cause you to allocate memory unnecessarily. - - -MAX XMIT --------- - -At startup the client and server negotiate a "maximum transmit" size, -which limits the size of nearly all SMB commands. You can set the -maximum size that Samba will negotiate using the "max xmit = " option -in smb.conf. Note that this is the maximum size of SMB request that -Samba will accept, but not the maximum size that the *client* will accept. -The client maximum receive size is sent to Samba by the client and Samba -honours this limit. - -It defaults to 65536 bytes (the maximum), but it is possible that some -clients may perform better with a smaller transmit unit. Trying values -of less than 2048 is likely to cause severe problems. - -In most cases the default is the best option. - - -LOCKING -------- - -By default Samba does not implement strict locking on each read/write -call (although it did in previous versions). If you enable strict -locking (using "strict locking = yes") then you may find that you -suffer a severe performance hit on some systems. - -The performance hit will probably be greater on NFS mounted -filesystems, but could be quite high even on local disks. - - -SHARE MODES ------------ - -Some people find that opening files is very slow. This is often -because of the "share modes" code needed to fully implement the dos -share modes stuff. You can disable this code using "share modes = -no". This will gain you a lot in opening and closing files but will -mean that (in some cases) the system won't force a second user of a -file to open the file read-only if the first has it open -read-write. For many applications that do their own locking this -doesn't matter, but for some it may. Most Windows applications -depend heavily on "share modes" working correctly and it is -recommended that the Samba share mode support be left at the -default of "on". - -The share mode code in Samba has been re-written in the 1.9.17 -release following tests with the Ziff-Davis NetBench PC Benchmarking -tool. It is now believed that Samba 1.9.17 implements share modes -similarly to Windows NT. - -NOTE: In the most recent versions of Samba there is an option to use -shared memory via mmap() to implement the share modes. This makes -things much faster. See the Makefile for how to enable this. - - -LOG LEVEL ---------- - -If you set the log level (also known as "debug level") higher than 2 -then you may suffer a large drop in performance. This is because the -server flushes the log file after each operation, which can be very -expensive. - - -WIDE LINKS ----------- - -The "wide links" option is now enabled by default, but if you disable -it (for better security) then you may suffer a performance hit in -resolving filenames. The performance loss is lessened if you have -"getwd cache = yes", which is now the default. - - -READ RAW --------- - -The "read raw" operation is designed to be an optimised, low-latency -file read operation. A server may choose to not support it, -however. and Samba makes support for "read raw" optional, with it -being enabled by default. - -In some cases clients don't handle "read raw" very well and actually -get lower performance using it than they get using the conventional -read operations. - -So you might like to try "read raw = no" and see what happens on your -network. It might lower, raise or not affect your performance. Only -testing can really tell. - - -WRITE RAW ---------- - -The "write raw" operation is designed to be an optimised, low-latency -file write operation. A server may choose to not support it, -however. and Samba makes support for "write raw" optional, with it -being enabled by default. - -Some machines may find "write raw" slower than normal write, in which -case you may wish to change this option. - -READ PREDICTION ---------------- - -Samba can do read prediction on some of the SMB commands. Read -prediction means that Samba reads some extra data on the last file it -read while waiting for the next SMB command to arrive. It can then -respond more quickly when the next read request arrives. - -This is disabled by default. You can enable it by using "read -prediction = yes". - -Note that read prediction is only used on files that were opened read -only. - -Read prediction should particularly help for those silly clients (such -as "Write" under NT) which do lots of very small reads on a file. - -Samba will not read ahead more data than the amount specified in the -"read size" option. It always reads ahead on 1k block boundaries. - - -MEMORY MAPPING --------------- - -Samba supports reading files via memory mapping them. One some -machines this can give a large boost to performance, on others it -makes not difference at all, and on some it may reduce performance. - -To enable you you have to recompile Samba with the -DUSE_MMAP option -on the FLAGS line of the Makefile. - -Note that memory mapping is only used on files opened read only, and -is not used by the "read raw" operation. Thus you may find memory -mapping is more effective if you disable "read raw" using "read raw = -no". - - -SLOW CLIENTS ------------- - -One person has reported that setting the protocol to COREPLUS rather -than LANMAN2 gave a dramatic speed improvement (from 10k/s to 150k/s). - -I suspect that his PC's (386sx16 based) were asking for more data than -they could chew. I suspect a similar speed could be had by setting -"read raw = no" and "max xmit = 2048", instead of changing the -protocol. Lowering the "read size" might also help. - - -SLOW LOGINS ------------ - -Slow logins are almost always due to the password checking time. Using -the lowest practical "password level" will improve things a lot. You -could also enable the "UFC crypt" option in the Makefile. - -CLIENT TUNING -------------- - -Often a speed problem can be traced to the client. The client (for -example Windows for Workgroups) can often be tuned for better TCP -performance. - -See your client docs for details. In particular, I have heard rumours -that the WfWg options TCPWINDOWSIZE and TCPSEGMENTSIZE can have a -large impact on performance. - -Also note that some people have found that setting DefaultRcvWindow in -the [MSTCP] section of the SYSTEM.INI file under WfWg to 3072 gives a -big improvement. I don't know why. - -My own experience wth DefaultRcvWindow is that I get much better -performance with a large value (16384 or larger). Other people have -reported that anything over 3072 slows things down enourmously. One -person even reported a speed drop of a factor of 30 when he went from -3072 to 8192. I don't know why. - -It probably depends a lot on your hardware, and the type of unix box -you have at the other end of the link. - - -MY RESULTS ----------- - -Some people want to see real numbers in a document like this, so here -they are. I have a 486sx33 client running WfWg 3.11 with the 3.11b -tcp/ip stack. It has a slow IDE drive and 20Mb of ram. It has a SMC -Elite-16 ISA bus ethernet card. The only WfWg tuning I've done is to -set DefaultRcvWindow in the [MSTCP] section of system.ini to 16384. My -server is a 486dx3-66 running Linux. It also has 20Mb of ram and a SMC -Elite-16 card. You can see my server config in the examples/tridge/ -subdirectory of the distribution. - -I get 490k/s on reading a 8Mb file with copy. -I get 441k/s writing the same file to the samba server. - -Of course, there's a lot more to benchmarks than 2 raw throughput -figures, but it gives you a ballpark figure. - -I've also tested Win95 and WinNT, and found WinNT gave me the best -speed as a samba client. The fastest client of all (for me) is -smbclient running on another linux box. Maybe I'll add those results -here someday ... - - diff --git a/docs/textdocs/Speed2.txt b/docs/textdocs/Speed2.txt deleted file mode 100644 index a8c3e7381f..0000000000 --- a/docs/textdocs/Speed2.txt +++ /dev/null @@ -1,57 +0,0 @@ -Contributor: Paul Cochrane -Organization: Dundee Limb Fitting Centre -Date: Fri, 10 Apr 1998 -Subject: Samba SPEED.TXT comment -============================================================================= - -This might be relevant to Client Tuning. I have been trying various methods -of getting win95 to talk to Samba quicker. The results I have come up with -are: - -1. Install the W2setup.exe file from www.microsoft.com. This is an -update for the winsock stack and utilities which improve performance. - -2. Configure the win95 TCPIP registry settings to give better -perfomance. I use a program called MTUSPEED.exe which I got off the -net. There are various other utilities of this type freely available. -The setting which give the best performance for me are: - -(a) MaxMTU Remove -(b) RWIN Remove -(c) MTUAutoDiscover Disable -(d) MTUBlackHoleDetect Disable -(e) Time To Live Enabled -(f) Time To Live - HOPS 32 -(g) NDI Cache Size 0 - -3. I tried virtually all of the items mentioned in the document and -the only one which made a difference to me was the socket options. It -turned out I was better off without any!!!!! - -In terms of overall speed of transfer, between various win95 clients -and a DX2-66 20MB server with a crappy NE2000 compatible and old IDE -drive (Kernel 2.0.30). The transfer rate was reasonable for 10 baseT. - -The figures are: Put Get -P166 client 3Com card: 420-440kB/s 500-520kB/s -P100 client 3Com card: 390-410kB/s 490-510kB/s -DX4-75 client NE2000: 370-380kB/s 330-350kB/s - -I based these test on transfer two files a 4.5MB text file and a 15MB -textfile. The results arn't bad considering the hardware Samba is -running on. It's a crap machine!!!! - -The updates mentioned in 1 and 2 brought up the transfer rates from -just over 100kB/s in some clients. - -A new client is a P333 connected via a 100MB/s card and hub. The -transfer rates from this were good: 450-500kB/s on put and 600+kB/s -on get. - -Looking at standard FTP throughput, Samba is a bit slower (100kB/s -upwards). I suppose there is more going on in the samba protocol, but -if it could get up to the rate of FTP the perfomance would be quite -staggering. - -Paul Cochrane - diff --git a/docs/textdocs/Win95.txt b/docs/textdocs/Win95.txt deleted file mode 100644 index 69330c512d..0000000000 --- a/docs/textdocs/Win95.txt +++ /dev/null @@ -1,74 +0,0 @@ -Copyright (C) 1997 - Samba-Team -Contributed Date: August 20, 1997 -Last Update: August 20, 1997 - -Subject: Windows 95 and Samba Interoperability -=============================================================================== - -Password Handling: ------------------- -Microsoft periodically release updates to all their operating systems. Some of -these are welcomed while others cause us to change the way we do things. Few -people like change, particularly if the change is unexpected. The best advice -always is to read the documentation provided BEFORE applying an update. - -One of the recent Win95 updates (VRDRUPD.EXE) disables plain text (also called -clear text) password authentication. The effects of this updates are desirable -where MS Windows NT is providing the password authentication service. This -update is most undesirable where Samba must provide the authentication service -unless Samba has been specifically configured to use encrypted passwords _AND_ -has been linked with the libdes library. - -If the above conditions have not been complied with, and you are using Samba, -then Windows 95 clients will NOT be able to authenticate to a Samba server. - -To re-enable plain text password capabilities AFTER applying this update -you must create a new value in the Windows 95 registry. - -Either foillow the following procedure or just double click on the -file Win95_PlainPassword.reg for an easier way to do this. - -Procedure: -1) Launch the Registry Editor as follows: - Click on: /Start/Run - Type "regedit" and press enter. - -2) Double click on: HKEY_LOCAL_MACHINE - -3) Locate the following Key: - /HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP - -4) From the menu bar select Edit/New/DWORD Value - -5) Rename the entry from "New Value #1" to: - EnablePlainTextPassword - -6) Press Enter, then double click on the new entry. - A dialog box will pop up and enable you to set a value. - You must set this value to 1. - -------------------------------------------------------------------------------- - -Windows 95 Updates: -------------------- -When using Windows 95 OEM SR2 the following updates are recommended where Samba -is being used. Please NOTE that the above change will affect you once these -updates have been installed. - -There are more updates than the ones mentioned here. You are referred to the -Microsoft Web site for all currently available updates to your specific version -of Windows 95. - -Kernel Update: KRNLUPD.EXE -Ping Fix: PINGUPD.EXE -RPC Update: RPCRTUPD.EXE -TCP/IP Update: VIPUPD.EXE -Redirector Update: VRDRUPD.EXE - -Also, if using MS OutLook it is desirable to install the OLEUPD.EXE fix. This -fix may stop your machine from hanging for an extended period when exiting -OutLook and you may also notice a significant speedup when accessing network -neighborhood services. - -------------------------------------------------------------------------------- -The above password information was provided by: Jochen Huppertz diff --git a/docs/textdocs/WinNT.txt b/docs/textdocs/WinNT.txt deleted file mode 100644 index 5c72fb08aa..0000000000 --- a/docs/textdocs/WinNT.txt +++ /dev/null @@ -1,104 +0,0 @@ -Contributors: Various - Password Section - Copyright (C) 1997 - John H Terpstra - Printing Section - Copyright (C) 1997 - Matthew Harrell - Priting Info - Copyright (C) 1997 - Frank Varnavas -Updated: October 16, 1997 -Status: Current - -Subject: Samba and Windows NT Password Handling -============================================================================= - -There are some particular issues with Samba and Windows NT. - -Passwords: -========== -One of the most annoying problems with WinNT is that NT refuses to -connect to a server that is in user level security mode and that -doesn't support password encryption unless it first prompts the user -for a password. - -This means even if you have the same password on the NT box and the -Samba server you will get prompted for a password. Entering the -correct password will get you connected only if Windows NT can -communicate with Samba using a compatible mode of password security. - -All versions of Windows NT prior to 4.0 Service Pack 3 could negotiate -plain text (clear text) passwords. Windows NT 4.0 Service Pack 3 changed -this default behaviour so it now will only handle encrypted passwords. -The following registry entry change will re-enable clear text password -handling: - -Run regedt32.exe and locate the hive key entry: -HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Rdr\Parameters\ - -Add the following value: - EnablePlainTextPassword:REG_DWORD=1 - -Alternatively, use the NT4_PlainPassword.reg file in this directory (either -by double clicking on it, or run regedt32.exe and select "Import Registry -File" from the "Registry" Menu). - -The other major ramification of this feature of NT is that it can't -browse a user level non-encrypted server unless it already has a -connection open. This is because there is no spot for a password -prompt in the browser window. It works fine if you already have a -drive mounted (for example, one auto mounted on startup). -===================================================================== - -Printing: -========= -When you mount a printer using the print manager in NT you may find -the following info from Matthew Harrell -useful: - ------------- - I noticed in your change-log you noted that some people were -still unable to use print manager under NT. If this is the same problem -that I encountered, it's caused by the length of time it takes NT to -determine if the printer is ready. - -The problem occurs when you double-click on a printer to connect it to -the NT machine. Because it's unable to determine if the printer is ready -in the short span of time it has, it assumes it isn't and gives some -strange error about not having enough resources (I forget what the error -is). A solution to this that seems to work fine for us is to click -once on the printer, look at the bottom of the window and wait until -it says it's ready, then clilck on "OK". - -By the way, this problem probably occurs in our group because the -Samba server doesn't actually have the printers - it queues them to -remote printers either on other machines or using their own network -cards. Because of this "middle layer", it takes an extra amount of -time for the NT machine to get verification that the printer queue -actually exists. - -I hope this helped in some way... - -===================================================================== -Printing Info: --------------- - -From: Frank Varnavas -Subject: RE: Samba as a print server - -When an NT client attempts to connect to a printer on a non-NT print -server the attempt is failed with an error, something like: - - "You have insufficient access to your computer to perform the - operation because a driver needs to be installed" - -This is because domain users must have 'Power User' status on the -desktop to connect to printers on a non-NT print server. - -This error occurs regardless of whether the driver in question is -already installed or not. What it really means is that the server is -a non-NT server and the client does not have permission to create -printers locally. Apparently when a connection to a non-NT print -server is made the printer is defined locally. Such an action can be -performed by either a local administrator or a Power User. -Unfortunately there is no way to limit the powers of a Power User, nor -is there any way to grant the Printer Creation right to another group. - -This permission policy is documented in PSS database WINNT, ID Q101874 - -Frank Varnavas (varnavas@ny.ubs.com) diff --git a/docs/textdocs/security_level.txt b/docs/textdocs/security_level.txt deleted file mode 100644 index f4e0df7139..0000000000 --- a/docs/textdocs/security_level.txt +++ /dev/null @@ -1,100 +0,0 @@ -Contributor: Andrew Tridgell -Updated: June 27, 1997 -Status: Current - -Subject: Description of SMB security levels. -=========================================================================== - -Samba supports the following options to the global smb.conf parameter -"security =": - share, user, server - -Note: Samba-2.0.0 now adds the "domain" security mode. Please refer to -the smb.conf man page for usage information and to the document -docs/textdocs/DOMAIN_MEMBER.txt for further background details. - -Of the above, "security = server" means that Samba reports to clients that -it is running in "user mode" but actually passes off all authentication -requests to another "user mode" server. This requires an additional -parameter "password server =" that points to the real authentication server. -That real authentication server can be another Samba server or can be a -Windows NT server, the later natively capable of encrypted password support. - -Below is a more complete description of security levels. -=========================================================================== - -A SMB server tells the client at startup what "security level" it is -running. There are two options "share level" and "user level". Which -of these two the client receives affects the way the client then tries -to authenticate itself. It does not directly affect (to any great -extent) the way the Samba server does security. I know this is -strange, but it fits in with the client/server approach of SMB. In SMB -everything is initiated and controlled by the client, and the server -can only tell the client what is available and whether an action is -allowed. - -I'll describe user level security first, as its simpler. In user level -security the client will send a "session setup" command directly after -the protocol negotiation. This contains a username and password. The -server can either accept or reject that username/password -combination. Note that at this stage the server has no idea what -share the client will eventually try to connect to, so it can't base -the "accept/reject" on anything other than: - -- the username/password -- the machine that the client is coming from - -If the server accepts the username/password then the client expects to -be able to mount any share (using a "tree connection") without -specifying a password. It expects that all access rights will be as -the username/password specified in the "session setup". - -It is also possible for a client to send multiple "session setup" -requests. When the server responds it gives the client a "uid" to use -as an authentication tag for that username/password. The client can -maintain multiple authentication contexts in this way (WinDD is an -example of an application that does this) - - -Ok, now for share level security. In share level security the client -authenticates itself separately for each share. It will send a -password along with each "tree connection" (share mount). It does not -explicitly send a username with this operation. The client is -expecting a password to be associated with each share, independent of -the user. This means that samba has to work out what username the -client probably wants to use. It is never explicitly sent the -username. Some commercial SMB servers such as NT actually associate -passwords directly with shares in share level security, but samba -always uses the unix authentication scheme where it is a -username/password that is authenticated, not a "share/password". - -Many clients send a "session setup" even if the server is in share -level security. They normally send a valid username but no -password. Samba records this username in a list of "possible -usernames". When the client then does a "tree connection" it also adds -to this list the name of the share they try to connect to (useful for -home directories) and any users listed in the "user =" smb.conf -line. The password is then checked in turn against these "possible -usernames". If a match is found then the client is authenticated as -that user. - -Finally "server level" security. In server level security the samba -server reports to the client that it is in user level security. The -client then does a "session setup" as described earlier. The samba -server takes the username/password that the client sends and attempts -to login to the "password server" by sending exactly the same -username/password that it got from the client. If that server is in -user level security and accepts the password then samba accepts the -clients connection. This allows the samba server to use another SMB -server as the "password server". - -You should also note that at the very start of all this, where the -server tells the client what security level it is in, it also tells -the client if it supports encryption. If it does then it supplies the -client with a random "cryptkey". The client will then send all -passwords in encrypted form. You have to compile samba with encryption -enabled to support this feature, and you have to maintain a separate -smbpasswd file with SMB style encrypted passwords. It is -cryptographically impossible to translate from unix style encryption -to SMB style encryption, although there are some fairly simple management -schemes by which the two could be kept in sync. -- cgit From fdf9a8d39e1ed591377e512080c7c819a1a9c856 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 09:02:38 +0000 Subject: Remove obsolete files Update generated docs (This used to be commit 24103c2c20cd0727792be7efeb868ae988ffbd9b) --- docs/README.Win2kSP2 | 56 - docs/Samba-HOWTO-Collection.pdf | 8519 ++++++++++++++++++----------------- docs/docbook/stylesheets/ldp.dsl.in | 256 -- docs/manpages/findsmb.1 | 36 +- docs/manpages/smbclient.1 | 164 +- 5 files changed, 4466 insertions(+), 4565 deletions(-) delete mode 100644 docs/README.Win2kSP2 delete mode 100644 docs/docbook/stylesheets/ldp.dsl.in diff --git a/docs/README.Win2kSP2 b/docs/README.Win2kSP2 deleted file mode 100644 index 49a8fbf4ae..0000000000 --- a/docs/README.Win2kSP2 +++ /dev/null @@ -1,56 +0,0 @@ -!== -!== README.Win2kSP2 -!== - -Author: Gerald (Jerry) Carter - -================================================================== - -There are several annoyances with Windows 2000 SP2. One of which -only appears when using a Samba server to host user profiles -to Windows 2000 SP2 clients in a Windows domain. This assumes -that Samba is a member of the domain, but the problem will -likely occur if it is not. - -In order to server profiles successfully to Windows 2000 SP2 -clients (when not operating as a PDC), Samba must have - - nt acl support = no - -added to the file share which houses the roaming profiles. -If this is not done, then the Windows 2000 SP2 client will -complain about not being able to access the profile (Access -Denied) and create multiple copies of it on disk (DOMAIN.user.001, -DOMAIN.user.002, etc...). See the smb.conf(5) man page -for more details on this option. Also note that the "nt acl support" -parameter was formally a global parameter in releases prior -to Samba 2.2.2. - -The following is a minimal profile share - - [profile] - path = /export/profile - create mask = 0600 - directory mask = 0700 - nt acl support = no - read only = no - -The reason for this bug is that the Win2k SP2 client copies -the security descriptor for the profile which contains -the Samba server's SID, and not the domain SID. The client -compares the SID for SAMBA\user and realizes it is -different that the one assigned to DOMAIN\user. Hence the reason -for the "access denied" message. - -By disabling the "nt acl support" parameter, Samba will send -the Win2k client a response to the QuerySecurityDescriptor -trans2 call which causes the client to set a default ACL -for the profile. This default ACL includes - - DOMAIN\user "Full Control" - - -NOTE : This bug does not occur when using winbind to -create accounts on the Samba host for Domain users. - - diff --git a/docs/Samba-HOWTO-Collection.pdf b/docs/Samba-HOWTO-Collection.pdf index e47621a0b8..85326c8b8c 100644 --- a/docs/Samba-HOWTO-Collection.pdf +++ b/docs/Samba-HOWTO-Collection.pdf @@ -1,6 +1,6 @@ -%PDF-1.2 +%PDF-1.3 %âÏÓ -1 0 obj<>endobj +1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj 4 0 obj<>endobj @@ -9,528 +9,686 @@ 7 0 obj<>endobj 8 0 obj<>endobj 9 0 obj<>endobj -10 0 obj<>endobj -11 0 obj<>endobj -12 0 obj<>endobj -13 0 obj<>endobj -14 0 obj<>endobj -15 0 obj<>endobj -16 0 obj<>endobj -17 0 obj<>endobj -18 0 obj<>endobj -19 0 obj[14 0 R +10 0 obj<>endobj +11 0 obj<>endobj +12 0 obj<>endobj +13 0 obj<>endobj +14 0 obj<>endobj +15 0 obj<>endobj +16 0 obj<>endobj +17 0 obj<>endobj +18 0 obj<>endobj +19 0 obj<>endobj +20 0 obj<>endobj +21 0 obj<>endobj +22 0 obj<>endobj +23 0 obj<>endobj +24 0 obj<>endobj +25 0 obj<>endobj +26 0 obj<>endobj +27 0 obj<>endobj +28 0 obj<>endobj +29 0 obj<>endobj +30 0 obj<>endobj +31 0 obj<>endobj +32 0 obj<>endobj +33 0 obj<>endobj +34 0 obj<>endobj +35 0 obj<>endobj +36 0 obj<>endobj +37 0 obj<>endobj +38 0 obj<>endobj +39 0 obj<>endobj +40 0 obj<>endobj +41 0 obj<>endobj +42 0 obj<>endobj +43 0 obj<>endobj +44 0 obj<>endobj +45 0 obj<>endobj +46 0 obj<>endobj +47 0 obj<>endobj +48 0 obj<>endobj +49 0 obj<>endobj +50 0 obj<>endobj +51 0 obj<>endobj +52 0 obj<>endobj +53 0 obj<>endobj +54 0 obj<>endobj +55 0 obj<>endobj +56 0 obj<>endobj +57 0 obj<>endobj +58 0 obj[14 0 R +15 0 R 16 0 R +17 0 R 18 0 R -]endobj -20 0 obj<>endobj -21 0 obj<>endobj -22 0 obj[21 0 R -]endobj -23 0 obj<>endobj -24 0 obj<>endobj -25 0 obj<>endobj -26 0 obj<>endobj -27 0 obj[24 0 R +19 0 R +20 0 R +21 0 R +22 0 R +23 0 R +24 0 R +25 0 R 26 0 R -]endobj -28 0 obj<>endobj -29 0 obj<>endobj -30 0 obj<>endobj -31 0 obj<>endobj -32 0 obj<>endobj -33 0 obj<>endobj -34 0 obj[29 0 R +27 0 R +28 0 R +29 0 R +30 0 R 31 0 R +32 0 R 33 0 R -]endobj -35 0 obj<>endobj -36 0 obj<>endobj -37 0 obj<>endobj -38 0 obj<>endobj -39 0 obj[36 0 R +34 0 R +35 0 R +36 0 R +37 0 R 38 0 R -]endobj -40 0 obj<>endobj -41 0 obj<>endobj -42 0 obj[41 0 R -]endobj -43 0 obj<>endobj -44 0 obj<>endobj -45 0 obj<>endobj -46 0 obj<>endobj -47 0 obj[44 0 R +39 0 R +40 0 R +41 0 R +42 0 R +43 0 R +44 0 R +45 0 R 46 0 R -]endobj -48 0 obj<>endobj -49 0 obj<>endobj -50 0 obj<>endobj -51 0 obj<>endobj -52 0 obj<>endobj -53 0 obj<>endobj -54 0 obj[49 0 R +47 0 R +48 0 R +49 0 R +50 0 R 51 0 R +52 0 R 53 0 R -]endobj -55 0 obj<>endobj -56 0 obj<>endobj -57 0 obj[56 0 R -]endobj -58 0 obj<>endobj -59 0 obj<>endobj -60 0 obj<>endobj -61 0 obj<>endobj -62 0 obj<>endobj -63 0 obj<>endobj -64 0 obj<>endobj -65 0 obj<>endobj -66 0 obj<>endobj -67 0 obj<>endobj -68 0 obj<>endobj -69 0 obj<>endobj -70 0 obj[59 0 R +54 0 R +55 0 R +56 0 R +57 0 R]endobj +59 0 obj<>endobj +60 0 obj<>endobj +61 0 obj<>endobj +62 0 obj<>endobj +63 0 obj<>endobj +64 0 obj<>endobj +65 0 obj<>endobj +66 0 obj<>endobj +67 0 obj<>endobj +68 0 obj<>endobj +69 0 obj<>endobj +70 0 obj<>endobj +71 0 obj<>endobj +72 0 obj<>endobj +73 0 obj<>endobj +74 0 obj<>endobj +75 0 obj<>endobj +76 0 obj<>endobj +77 0 obj<>endobj +78 0 obj<>endobj +79 0 obj<>endobj +80 0 obj<>endobj +81 0 obj<>endobj +82 0 obj<>endobj +83 0 obj<>endobj +84 0 obj<>endobj +85 0 obj<>endobj +86 0 obj<>endobj +87 0 obj<>endobj +88 0 obj<>endobj +89 0 obj<>endobj +90 0 obj<>endobj +91 0 obj<>endobj +92 0 obj<>endobj +93 0 obj<>endobj +94 0 obj<>endobj +95 0 obj<>endobj +96 0 obj<>endobj +97 0 obj<>endobj +98 0 obj<>endobj +99 0 obj<>endobj +100 0 obj<>endobj +101 0 obj<>endobj +102 0 obj<>endobj +103 0 obj[59 0 R +60 0 R 61 0 R +62 0 R 63 0 R +64 0 R 65 0 R +66 0 R 67 0 R +68 0 R 69 0 R -]endobj -71 0 obj<>endobj -72 0 obj<>endobj -73 0 obj<>endobj -74 0 obj<>endobj -75 0 obj<>endobj -76 0 obj<>endobj -77 0 obj[72 0 R +70 0 R +71 0 R +72 0 R +73 0 R 74 0 R +75 0 R 76 0 R -]endobj -78 0 obj<>endobj -79 0 obj<>endobj -80 0 obj<>endobj -81 0 obj<>endobj -82 0 obj<>endobj -83 0 obj<>endobj -84 0 obj<>endobj -85 0 obj<>endobj -86 0 obj<>endobj -87 0 obj<>endobj -88 0 obj<>endobj -89 0 obj[78 0 R +77 0 R +78 0 R +79 0 R 80 0 R +81 0 R 82 0 R +83 0 R 84 0 R +85 0 R 86 0 R +87 0 R 88 0 R -]endobj -90 0 obj<>endobj -91 0 obj<>endobj -92 0 obj[91 0 R -]endobj -93 0 obj<>endobj -94 0 obj<>endobj -95 0 obj<>endobj -96 0 obj<>endobj -97 0 obj<>endobj -98 0 obj<>endobj -99 0 obj<>endobj -100 0 obj<>endobj -101 0 obj[94 0 R +89 0 R +90 0 R +91 0 R +92 0 R +93 0 R +94 0 R +95 0 R 96 0 R +97 0 R 98 0 R +99 0 R 100 0 R -]endobj -102 0 obj<>endobj -103 0 obj<>endobj -104 0 obj<>endobj -105 0 obj<>endobj -106 0 obj<>endobj -107 0 obj<>endobj -108 0 obj<>endobj -109 0 obj<>endobj -110 0 obj[103 0 R +101 0 R +102 0 R]endobj +104 0 obj<>endobj +105 0 obj<>endobj +106 0 obj<>endobj +107 0 obj<>endobj +108 0 obj<>endobj +109 0 obj<>endobj +110 0 obj<>endobj +111 0 obj<>endobj +112 0 obj<>endobj +113 0 obj<>endobj +114 0 obj<>endobj +115 0 obj<>endobj +116 0 obj<>endobj +117 0 obj<>endobj +118 0 obj<>endobj +119 0 obj<>endobj +120 0 obj<>endobj +121 0 obj<>endobj +122 0 obj<>endobj +123 0 obj<>endobj +124 0 obj<>endobj +125 0 obj<>endobj +126 0 obj<>endobj +127 0 obj<>endobj +128 0 obj<>endobj +129 0 obj<>endobj +130 0 obj<>endobj +131 0 obj<>endobj +132 0 obj<>endobj +133 0 obj<>endobj +134 0 obj<>endobj +135 0 obj<>endobj +136 0 obj<>endobj +137 0 obj<>endobj +138 0 obj<>endobj +139 0 obj<>endobj +140 0 obj<>endobj +141 0 obj<>endobj +142 0 obj<>endobj +143 0 obj<>endobj +144 0 obj<>endobj +145 0 obj<>endobj +146 0 obj<>endobj +147 0 obj[104 0 R 105 0 R +106 0 R 107 0 R +108 0 R 109 0 R -]endobj -111 0 obj<>endobj -112 0 obj<>endobj -113 0 obj[112 0 R -]endobj -114 0 obj<>endobj -115 0 obj<>endobj -116 0 obj<>endobj -117 0 obj<>endobj -118 0 obj<>endobj -119 0 obj<>endobj -120 0 obj[115 0 R +110 0 R +111 0 R +112 0 R +113 0 R +114 0 R +115 0 R +116 0 R 117 0 R +118 0 R 119 0 R -]endobj -121 0 obj<>endobj -122 0 obj<>endobj -123 0 obj<>endobj -124 0 obj<>endobj -125 0 obj<>endobj -126 0 obj<>endobj -127 0 obj[122 0 R +120 0 R +121 0 R +122 0 R +123 0 R 124 0 R +125 0 R 126 0 R -]endobj -128 0 obj<>endobj -129 0 obj<>endobj -130 0 obj<>endobj -131 0 obj<>endobj -132 0 obj<>endobj -133 0 obj<>endobj -134 0 obj[129 0 R +127 0 R +128 0 R +129 0 R +130 0 R 131 0 R +132 0 R 133 0 R -]endobj -135 0 obj<>endobj -136 0 obj<>endobj -137 0 obj<>endobj -138 0 obj<>endobj -139 0 obj<>endobj -140 0 obj<>endobj -141 0 obj<>endobj -142 0 obj<>endobj -143 0 obj[136 0 R +134 0 R +135 0 R +136 0 R +137 0 R 138 0 R +139 0 R 140 0 R +141 0 R 142 0 R -]endobj -144 0 obj<>endobj -145 0 obj<>endobj -146 0 obj[145 0 R -]endobj -147 0 obj<>endobj -148 0 obj<>endobj -149 0 obj[148 0 R -]endobj -150 0 obj<>endobj -151 0 obj<>endobj -152 0 obj[151 0 R -]endobj -153 0 obj<>endobj -154 0 obj<>endobj -155 0 obj<>endobj -156 0 obj<>endobj -157 0 obj<>endobj -158 0 obj<>endobj -159 0 obj<>endobj -160 0 obj<>endobj -161 0 obj<>endobj -162 0 obj<>endobj -163 0 obj<>endobj -164 0 obj<>endobj -165 0 obj<>endobj -166 0 obj<>endobj -167 0 obj[154 0 R +143 0 R +144 0 R +145 0 R +146 0 R]endobj +148 0 obj<>endobj +149 0 obj<>endobj +150 0 obj<>endobj +151 0 obj<>endobj +152 0 obj<>endobj +153 0 obj<>endobj +154 0 obj<>endobj +155 0 obj<>endobj +156 0 obj<>endobj +157 0 obj<>endobj +158 0 obj<>endobj +159 0 obj<>endobj +160 0 obj<>endobj +161 0 obj<>endobj +162 0 obj<>endobj +163 0 obj<>endobj +164 0 obj<>endobj +165 0 obj<>endobj +166 0 obj<>endobj +167 0 obj<>endobj +168 0 obj<>endobj +169 0 obj<>endobj +170 0 obj<>endobj +171 0 obj<>endobj +172 0 obj<>endobj +173 0 obj<>endobj +174 0 obj<>endobj +175 0 obj<>endobj +176 0 obj<>endobj +177 0 obj<>endobj +178 0 obj<>endobj +179 0 obj<>endobj +180 0 obj<>endobj +181 0 obj<>endobj +182 0 obj<>endobj +183 0 obj<>endobj +184 0 obj<>endobj +185 0 obj<>endobj +186 0 obj<>endobj +187 0 obj<>endobj +188 0 obj<>endobj +189 0 obj<>endobj +190 0 obj<>endobj +191 0 obj<>endobj +192 0 obj[148 0 R +149 0 R +150 0 R +151 0 R +152 0 R +153 0 R +154 0 R +155 0 R 156 0 R +157 0 R 158 0 R +159 0 R 160 0 R +161 0 R 162 0 R +163 0 R 164 0 R +165 0 R 166 0 R -]endobj -168 0 obj<>endobj -169 0 obj<>endobj -170 0 obj<>endobj -171 0 obj<>endobj -172 0 obj<>endobj -173 0 obj<>endobj -174 0 obj<>endobj -175 0 obj<>endobj -176 0 obj[169 0 R +167 0 R +168 0 R +169 0 R +170 0 R 171 0 R +172 0 R 173 0 R +174 0 R 175 0 R -]endobj -177 0 obj<>endobj -178 0 obj<>endobj -179 0 obj<>endobj -180 0 obj<>endobj -181 0 obj<>endobj -182 0 obj<>endobj -183 0 obj<>endobj -184 0 obj<>endobj -185 0 obj<>endobj -186 0 obj<>endobj -187 0 obj<>endobj -188 0 obj<>endobj -189 0 obj<>endobj -190 0 obj<>endobj -191 0 obj<>endobj -192 0 obj<>endobj -193 0 obj<>endobj -194 0 obj<>endobj -195 0 obj<>endobj -196 0 obj<>endobj -197 0 obj<>endobj -198 0 obj<>endobj -199 0 obj<>endobj -200 0 obj<>endobj -201 0 obj<>endobj -202 0 obj<>endobj -203 0 obj<>endobj -204 0 obj<>endobj -205 0 obj<>endobj -206 0 obj<>endobj -207 0 obj<>endobj -208 0 obj<>endobj -209 0 obj<>endobj -210 0 obj<>endobj -211 0 obj<>endobj -212 0 obj<>endobj -213 0 obj<>endobj -214 0 obj<>endobj -215 0 obj<>endobj -216 0 obj<>endobj -217 0 obj<>endobj -218 0 obj<>endobj -219 0 obj<>endobj -220 0 obj<>endobj -221 0 obj[178 0 R +176 0 R +177 0 R +178 0 R +179 0 R 180 0 R +181 0 R 182 0 R +183 0 R 184 0 R +185 0 R 186 0 R +187 0 R 188 0 R +189 0 R 190 0 R -192 0 R +191 0 R]endobj +193 0 obj<>endobj +194 0 obj<>endobj +195 0 obj<>endobj +196 0 obj<>endobj +197 0 obj<>endobj +198 0 obj<>endobj +199 0 obj<>endobj +200 0 obj<>endobj +201 0 obj<>endobj +202 0 obj<>endobj +203 0 obj<>endobj +204 0 obj<>endobj +205 0 obj<>endobj +206 0 obj<>endobj +207 0 obj<>endobj +208 0 obj<>endobj +209 0 obj<>endobj +210 0 obj<>endobj +211 0 obj<>endobj +212 0 obj<>endobj +213 0 obj<>endobj +214 0 obj<>endobj +215 0 obj<>endobj +216 0 obj<>endobj +217 0 obj<>endobj +218 0 obj<>endobj +219 0 obj<>endobj +220 0 obj<>endobj +221 0 obj<>endobj +222 0 obj<>endobj +223 0 obj<>endobj +224 0 obj<>endobj +225 0 obj<>endobj +226 0 obj<>endobj +227 0 obj<>endobj +228 0 obj<>endobj +229 0 obj<>endobj +230 0 obj<>endobj +231 0 obj<>endobj +232 0 obj<>endobj +233 0 obj[193 0 R 194 0 R +195 0 R 196 0 R +197 0 R 198 0 R +199 0 R 200 0 R +201 0 R 202 0 R +203 0 R 204 0 R +205 0 R 206 0 R +207 0 R 208 0 R +209 0 R 210 0 R +211 0 R 212 0 R +213 0 R 214 0 R +215 0 R 216 0 R +217 0 R 218 0 R +219 0 R 220 0 R -]endobj -222 0 obj<>endobj -223 0 obj<>endobj -224 0 obj<>endobj -225 0 obj<>endobj -226 0 obj<>endobj -227 0 obj<>endobj -228 0 obj[223 0 R +221 0 R +222 0 R +223 0 R +224 0 R 225 0 R +226 0 R 227 0 R -]endobj -229 0 obj<>endobj -230 0 obj<>endobj -231 0 obj<>endobj -232 0 obj<>endobj -233 0 obj[230 0 R -232 0 R -]endobj -234 0 obj<>endobj -235 0 obj<>endobj -236 0 obj[235 0 R -]endobj -237 0 obj<>endobj -238 0 obj<>endobj -239 0 obj<>endobj -240 0 obj<>endobj -241 0 obj<>endobj -242 0 obj<>endobj -243 0 obj<>endobj -244 0 obj<>endobj -245 0 obj[238 0 R +228 0 R +229 0 R +230 0 R +231 0 R +232 0 R]endobj +234 0 obj<>endobj +235 0 obj<>endobj +236 0 obj<>endobj +237 0 obj<>endobj +238 0 obj<>endobj +239 0 obj<>endobj +240 0 obj<>endobj +241 0 obj<>endobj +242 0 obj<>endobj +243 0 obj<>endobj +244 0 obj<>endobj +245 0 obj<>endobj +246 0 obj<>endobj +247 0 obj<>endobj +248 0 obj<>endobj +249 0 obj<>endobj +250 0 obj<>endobj +251 0 obj<>endobj +252 0 obj<>endobj +253 0 obj<>endobj +254 0 obj<>endobj +255 0 obj<>endobj +256 0 obj<>endobj +257 0 obj<>endobj +258 0 obj<>endobj +259 0 obj<>endobj +260 0 obj<>endobj +261 0 obj<>endobj +262 0 obj<>endobj +263 0 obj<>endobj +264 0 obj<>endobj +265 0 obj<>endobj +266 0 obj<>endobj +267 0 obj<>endobj +268 0 obj<>endobj +269 0 obj<>endobj +270 0 obj<>endobj +271 0 obj<>endobj +272 0 obj<>endobj +273 0 obj<>endobj +274 0 obj[235 0 R +237 0 R +239 0 R 240 0 R +241 0 R 242 0 R +243 0 R 244 0 R -]endobj -246 0 obj<>endobj -247 0 obj<>endobj -248 0 obj<>endobj -249 0 obj<>endobj -250 0 obj<>endobj -251 0 obj<>endobj -252 0 obj<>endobj -253 0 obj<>endobj -254 0 obj<>endobj -255 0 obj<>endobj -256 0 obj<>endobj -257 0 obj<>endobj -258 0 obj<>endobj -259 0 obj<>endobj -260 0 obj<>endobj -261 0 obj<>endobj -262 0 obj[247 0 R +245 0 R +246 0 R +247 0 R +248 0 R 249 0 R +250 0 R 251 0 R +252 0 R 253 0 R +254 0 R 255 0 R +256 0 R 257 0 R +258 0 R 259 0 R +260 0 R 261 0 R -]endobj -263 0 obj<>endobj -264 0 obj<>endobj -265 0 obj<>endobj -266 0 obj<>endobj -267 0 obj[264 0 R +262 0 R +263 0 R +264 0 R +265 0 R 266 0 R -]endobj -268 0 obj<>endobj -269 0 obj<>endobj -270 0 obj[269 0 R -]endobj -271 0 obj<>endobj -272 0 obj<>endobj -273 0 obj<>endobj -274 0 obj<>endobj -275 0 obj<>endobj -276 0 obj<>endobj -277 0 obj<>endobj -278 0 obj<>endobj -279 0 obj<>endobj -280 0 obj<>endobj -281 0 obj<>endobj -282 0 obj<>endobj -283 0 obj[272 0 R -274 0 R +267 0 R +268 0 R +269 0 R +270 0 R +271 0 R +272 0 R +273 0 R]endobj +275 0 obj<>endobj +276 0 obj<>endobj +277 0 obj<>endobj +278 0 obj<>endobj +279 0 obj<>endobj +280 0 obj<>endobj +281 0 obj<>endobj +282 0 obj<>endobj +283 0 obj<>endobj +284 0 obj<>endobj +285 0 obj<>endobj +286 0 obj<>endobj +287 0 obj<>endobj +288 0 obj<>endobj +289 0 obj<>endobj +290 0 obj<>endobj +291 0 obj<>endobj +292 0 obj<>endobj +293 0 obj<>endobj +294 0 obj<>endobj +295 0 obj<>endobj +296 0 obj<>endobj +297 0 obj<>endobj +298 0 obj<>endobj +299 0 obj<>endobj +300 0 obj<>endobj +301 0 obj<>endobj +302 0 obj<>endobj +303 0 obj<>endobj +304 0 obj<>endobj +305 0 obj<>endobj +306 0 obj<>endobj +307 0 obj<>endobj +308 0 obj<>endobj +309 0 obj<>endobj +310 0 obj<>endobj +311 0 obj<>endobj +312 0 obj<>endobj +313 0 obj<>endobj +314 0 obj<>endobj +315 0 obj<>endobj +316 0 obj<>endobj +317 0 obj<>endobj +318 0 obj<>endobj +319 0 obj<>endobj +320 0 obj<>endobj +321 0 obj<>endobj +322 0 obj<>endobj +323 0 obj<>endobj +324 0 obj<>endobj +325 0 obj<>endobj +326 0 obj[275 0 R 276 0 R +277 0 R 278 0 R +279 0 R 280 0 R +281 0 R 282 0 R -]endobj -284 0 obj<>endobj -285 0 obj<>endobj -286 0 obj<>endobj -287 0 obj<>endobj -288 0 obj<>endobj -289 0 obj<>endobj -290 0 obj<>endobj -291 0 obj<>endobj -292 0 obj[285 0 R +283 0 R +284 0 R +285 0 R +286 0 R 287 0 R +288 0 R 289 0 R +290 0 R 291 0 R -]endobj -293 0 obj<>endobj -294 0 obj<>endobj -295 0 obj<>endobj -296 0 obj<>endobj -297 0 obj<>endobj -298 0 obj<>endobj -299 0 obj<>endobj -300 0 obj<>endobj -301 0 obj<>endobj -302 0 obj<>endobj -303 0 obj<>endobj -304 0 obj<>endobj -305 0 obj<>endobj -306 0 obj<>endobj -307 0 obj[294 0 R +292 0 R +293 0 R +294 0 R +295 0 R 296 0 R +297 0 R 298 0 R +299 0 R 300 0 R +301 0 R 302 0 R +303 0 R 304 0 R +305 0 R 306 0 R -]endobj -308 0 obj<>endobj -309 0 obj<>endobj -310 0 obj[309 0 R -]endobj -311 0 obj<>endobj -312 0 obj<>endobj -313 0 obj[312 0 R -]endobj -314 0 obj<>endobj -315 0 obj<>endobj -316 0 obj[315 0 R -]endobj -317 0 obj<>endobj -318 0 obj<>endobj -319 0 obj<>endobj -320 0 obj<>endobj -321 0 obj<>endobj -322 0 obj<>endobj -323 0 obj<>endobj -324 0 obj<>endobj -325 0 obj[318 0 R +307 0 R +308 0 R +309 0 R +310 0 R +311 0 R +312 0 R +313 0 R +314 0 R +315 0 R +316 0 R +317 0 R +318 0 R +319 0 R 320 0 R +321 0 R 322 0 R +323 0 R 324 0 R -]endobj -326 0 obj<>endobj -327 0 obj<>endobj -328 0 obj[327 0 R -]endobj -329 0 obj<>endobj -330 0 obj<>endobj -331 0 obj<>endobj -332 0 obj<>endobj -333 0 obj<>endobj -334 0 obj<>endobj -335 0 obj[330 0 R +325 0 R]endobj +327 0 obj<>endobj +328 0 obj<>endobj +329 0 obj<>endobj +330 0 obj<>endobj +331 0 obj<>endobj +332 0 obj<>endobj +333 0 obj<>endobj +334 0 obj<>endobj +335 0 obj<>endobj +336 0 obj<>endobj +337 0 obj<>endobj +338 0 obj<>endobj +339 0 obj<>endobj +340 0 obj<>endobj +341 0 obj<>endobj +342 0 obj<>endobj +343 0 obj<>endobj +344 0 obj<>endobj +345 0 obj<>endobj +346 0 obj<>endobj +347 0 obj<>endobj +348 0 obj<>endobj +349 0 obj<>endobj +350 0 obj<>endobj +351 0 obj<>endobj +352 0 obj<>endobj +353 0 obj<>endobj +354 0 obj<>endobj +355 0 obj<>endobj +356 0 obj<>endobj +357 0 obj<>endobj +358 0 obj<>endobj +359 0 obj<>endobj +360 0 obj<>endobj +361 0 obj<>endobj +362 0 obj<>endobj +363 0 obj<>endobj +364 0 obj<>endobj +365 0 obj<>endobj +366 0 obj<>endobj +367 0 obj<>endobj +368 0 obj<>endobj +369 0 obj<>endobj +370 0 obj<>endobj +371 0 obj<>endobj +372 0 obj<>endobj +373 0 obj<>endobj +374 0 obj<>endobj +375 0 obj<>endobj +376 0 obj<>endobj +377 0 obj<>endobj +378 0 obj[327 0 R +328 0 R +329 0 R +330 0 R +331 0 R 332 0 R +333 0 R 334 0 R -]endobj -336 0 obj<>endobj -337 0 obj<>endobj -338 0 obj[337 0 R -]endobj -339 0 obj<>endobj -340 0 obj<>endobj -341 0 obj[340 0 R -]endobj -342 0 obj<>endobj -343 0 obj<>endobj -344 0 obj<>endobj -345 0 obj<>endobj -346 0 obj<>endobj -347 0 obj<>endobj -348 0 obj<>endobj -349 0 obj<>endobj -350 0 obj<>endobj -351 0 obj<>endobj -352 0 obj<>endobj -353 0 obj<>endobj -354 0 obj<>endobj -355 0 obj<>endobj -356 0 obj<>endobj -357 0 obj<>endobj -358 0 obj<>endobj -359 0 obj<>endobj -360 0 obj<>endobj -361 0 obj<>endobj -362 0 obj<>endobj -363 0 obj<>endobj -364 0 obj<>endobj -365 0 obj<>endobj -366 0 obj<>endobj -367 0 obj<>endobj -368 0 obj<>endobj -369 0 obj<>endobj -370 0 obj<>endobj -371 0 obj<>endobj -372 0 obj<>endobj -373 0 obj<>endobj -374 0 obj<>endobj -375 0 obj<>endobj -376 0 obj<>endobj -377 0 obj<>endobj -378 0 obj<>endobj -379 0 obj<>endobj -380 0 obj<>endobj -381 0 obj<>endobj -382 0 obj<>endobj -383 0 obj<>endobj -384 0 obj<>endobj -385 0 obj<>endobj -386 0 obj<>endobj -387 0 obj<>endobj -388 0 obj[342 0 R +335 0 R +336 0 R +337 0 R +338 0 R +339 0 R +340 0 R +341 0 R +342 0 R 343 0 R 344 0 R 345 0 R @@ -565,9 +723,59 @@ 374 0 R 375 0 R 376 0 R -377 0 R -378 0 R -379 0 R +377 0 R]endobj +379 0 obj<>endobj +380 0 obj<>endobj +381 0 obj<>endobj +382 0 obj<>endobj +383 0 obj<>endobj +384 0 obj<>endobj +385 0 obj<>endobj +386 0 obj<>endobj +387 0 obj<>endobj +388 0 obj<>endobj +389 0 obj<>endobj +390 0 obj<>endobj +391 0 obj<>endobj +392 0 obj<>endobj +393 0 obj<>endobj +394 0 obj<>endobj +395 0 obj<>endobj +396 0 obj<>endobj +397 0 obj<>endobj +398 0 obj<>endobj +399 0 obj<>endobj +400 0 obj<>endobj +401 0 obj<>endobj +402 0 obj<>endobj +403 0 obj<>endobj +404 0 obj<>endobj +405 0 obj<>endobj +406 0 obj<>endobj +407 0 obj<>endobj +408 0 obj<>endobj +409 0 obj<>endobj +410 0 obj<>endobj +411 0 obj<>endobj +412 0 obj<>endobj +413 0 obj<>endobj +414 0 obj<>endobj +415 0 obj<>endobj +416 0 obj<>endobj +417 0 obj<>endobj +418 0 obj<>endobj +419 0 obj<>endobj +420 0 obj<>endobj +421 0 obj<>endobj +422 0 obj<>endobj +423 0 obj<>endobj +424 0 obj<>endobj +425 0 obj<>endobj +426 0 obj<>endobj +427 0 obj<>endobj +428 0 obj<>endobj +429 0 obj<>endobj +430 0 obj[379 0 R 380 0 R 381 0 R 382 0 R @@ -576,51 +784,8 @@ 385 0 R 386 0 R 387 0 R -]endobj -389 0 obj<>endobj -390 0 obj<>endobj -391 0 obj<>endobj -392 0 obj<>endobj -393 0 obj<>endobj -394 0 obj<>endobj -395 0 obj<>endobj -396 0 obj<>endobj -397 0 obj<>endobj -398 0 obj<>endobj -399 0 obj<>endobj -400 0 obj<>endobj -401 0 obj<>endobj -402 0 obj<>endobj -403 0 obj<>endobj -404 0 obj<>endobj -405 0 obj<>endobj -406 0 obj<>endobj -407 0 obj<>endobj -408 0 obj<>endobj -409 0 obj<>endobj -410 0 obj<>endobj -411 0 obj<>endobj -412 0 obj<>endobj -413 0 obj<>endobj -414 0 obj<>endobj -415 0 obj<>endobj -416 0 obj<>endobj -417 0 obj<>endobj -418 0 obj<>endobj -419 0 obj<>endobj -420 0 obj<>endobj -421 0 obj<>endobj -422 0 obj<>endobj -423 0 obj<>endobj -424 0 obj<>endobj -425 0 obj<>endobj -426 0 obj<>endobj -427 0 obj<>endobj -428 0 obj<>endobj -429 0 obj<>endobj -430 0 obj<>endobj -431 0 obj<>endobj -432 0 obj[389 0 R +388 0 R +389 0 R 390 0 R 391 0 R 392 0 R @@ -660,55 +825,31 @@ 426 0 R 427 0 R 428 0 R -429 0 R -430 0 R -431 0 R -]endobj -433 0 obj<>endobj -434 0 obj<>endobj -435 0 obj<>endobj -436 0 obj<>endobj -437 0 obj<>endobj -438 0 obj<>endobj -439 0 obj<>endobj -440 0 obj<>endobj -441 0 obj<>endobj -442 0 obj<>endobj -443 0 obj<>endobj -444 0 obj<>endobj -445 0 obj<>endobj -446 0 obj<>endobj -447 0 obj<>endobj -448 0 obj<>endobj -449 0 obj<>endobj -450 0 obj<>endobj -451 0 obj<>endobj -452 0 obj<>endobj -453 0 obj<>endobj -454 0 obj<>endobj -455 0 obj<>endobj -456 0 obj<>endobj -457 0 obj<>endobj -458 0 obj<>endobj -459 0 obj<>endobj -460 0 obj<>endobj -461 0 obj<>endobj -462 0 obj<>endobj -463 0 obj<>endobj -464 0 obj<>endobj -465 0 obj<>endobj -466 0 obj<>endobj -467 0 obj<>endobj -468 0 obj<>endobj -469 0 obj<>endobj -470 0 obj<>endobj -471 0 obj<>endobj -472 0 obj<>endobj -473 0 obj<>endobj -474 0 obj<>endobj -475 0 obj<>endobj -476 0 obj<>endobj -477 0 obj[433 0 R +429 0 R]endobj +431 0 obj<>endobj +432 0 obj<>endobj +433 0 obj<>endobj +434 0 obj<>endobj +435 0 obj<>endobj +436 0 obj<>endobj +437 0 obj<>endobj +438 0 obj<>endobj +439 0 obj<>endobj +440 0 obj<>endobj +441 0 obj<>endobj +442 0 obj<>endobj +443 0 obj<>endobj +444 0 obj<>endobj +445 0 obj<>endobj +446 0 obj<>endobj +447 0 obj<>endobj +448 0 obj<>endobj +449 0 obj<>endobj +450 0 obj<>endobj +451 0 obj<>endobj +452 0 obj[431 0 R +432 0 R +433 0 R 434 0 R 435 0 R 436 0 R @@ -726,3678 +867,3764 @@ 448 0 R 449 0 R 450 0 R -451 0 R -452 0 R -453 0 R -454 0 R -455 0 R -456 0 R -457 0 R -458 0 R -459 0 R -460 0 R -461 0 R -462 0 R -463 0 R +451 0 R]endobj +453 0 obj<>endobj +454 0 obj<>endobj +455 0 obj[454 0 R]endobj +456 0 obj<>endobj +457 0 obj<>endobj +458 0 obj<>endobj +459 0 obj<>endobj +460 0 obj[457 0 R +459 0 R]endobj +461 0 obj<>endobj +462 0 obj<>endobj +463 0 obj<>endobj +464 0 obj<>endobj +465 0 obj<>endobj +466 0 obj<>endobj +467 0 obj[462 0 R 464 0 R -465 0 R -466 0 R -467 0 R -468 0 R -469 0 R -470 0 R -471 0 R -472 0 R -473 0 R -474 0 R -475 0 R -476 0 R -]endobj -478 0 obj<>endobj -479 0 obj<>endobj -480 0 obj<>endobj -481 0 obj<>endobj -482 0 obj<>endobj -483 0 obj<>endobj -484 0 obj<>endobj -485 0 obj<>endobj -486 0 obj<>endobj -487 0 obj<>endobj -488 0 obj<>endobj -489 0 obj<>endobj -490 0 obj<>endobj -491 0 obj<>endobj -492 0 obj<>endobj -493 0 obj<>endobj -494 0 obj<>endobj -495 0 obj<>endobj -496 0 obj<>endobj -497 0 obj<>endobj -498 0 obj<>endobj -499 0 obj<>endobj -500 0 obj<>endobj -501 0 obj<>endobj -502 0 obj<>endobj -503 0 obj<>endobj -504 0 obj<>endobj -505 0 obj<>endobj -506 0 obj<>endobj -507 0 obj<>endobj -508 0 obj<>endobj -509 0 obj<>endobj -510 0 obj<>endobj -511 0 obj<>endobj -512 0 obj<>endobj -513 0 obj<>endobj -514 0 obj<>endobj -515 0 obj<>endobj -516 0 obj<>endobj -517 0 obj<>endobj -518 0 obj<>endobj -519 0 obj<>endobj -520 0 obj<>endobj -521 0 obj<>endobj -522 0 obj[478 0 R -479 0 R -480 0 R -481 0 R -482 0 R -483 0 R +466 0 R]endobj +468 0 obj<>endobj +469 0 obj<>endobj +470 0 obj<>endobj +471 0 obj<>endobj +472 0 obj[469 0 R +471 0 R]endobj +473 0 obj<>endobj +474 0 obj<>endobj +475 0 obj[474 0 R]endobj +476 0 obj<>endobj +477 0 obj<>endobj +478 0 obj<>endobj +479 0 obj<>endobj +480 0 obj[477 0 R +479 0 R]endobj +481 0 obj<>endobj +482 0 obj<>endobj +483 0 obj<>endobj +484 0 obj<>endobj +485 0 obj<>endobj +486 0 obj<>endobj +487 0 obj[482 0 R 484 0 R -485 0 R -486 0 R -487 0 R -488 0 R -489 0 R -490 0 R -491 0 R -492 0 R -493 0 R +486 0 R]endobj +488 0 obj<>endobj +489 0 obj<>endobj +490 0 obj[489 0 R]endobj +491 0 obj<>endobj +492 0 obj<>endobj +493 0 obj<>endobj +494 0 obj<>endobj +495 0 obj<>endobj +496 0 obj<>endobj +497 0 obj<>endobj +498 0 obj<>endobj +499 0 obj<>endobj +500 0 obj<>endobj +501 0 obj<>endobj +502 0 obj<>endobj +503 0 obj[492 0 R 494 0 R -495 0 R 496 0 R -497 0 R 498 0 R -499 0 R 500 0 R -501 0 R -502 0 R -503 0 R -504 0 R -505 0 R -506 0 R +502 0 R]endobj +504 0 obj<>endobj +505 0 obj<>endobj +506 0 obj<>endobj +507 0 obj<>endobj +508 0 obj<>endobj +509 0 obj<>endobj +510 0 obj<>endobj +511 0 obj[505 0 R 507 0 R -508 0 R 509 0 R -510 0 R -511 0 R -512 0 R -513 0 R +510 0 R]endobj +512 0 obj<>endobj +513 0 obj<>endobj +514 0 obj<>endobj +515 0 obj<>endobj +516 0 obj<>endobj +517 0 obj<>endobj +518 0 obj<>endobj +519 0 obj<>endobj +520 0 obj<>endobj +521 0 obj<>endobj +522 0 obj<>endobj +523 0 obj[512 0 R 514 0 R -515 0 R 516 0 R -517 0 R 518 0 R -519 0 R 520 0 R -521 0 R -]endobj -523 0 obj<>endobj -524 0 obj<>endobj -525 0 obj<>endobj -526 0 obj<>endobj -527 0 obj<>endobj -528 0 obj<>endobj -529 0 obj<>endobj -530 0 obj<>endobj -531 0 obj<>endobj -532 0 obj<>endobj -533 0 obj<>endobj -534 0 obj<>endobj -535 0 obj<>endobj -536 0 obj<>endobj -537 0 obj<>endobj -538 0 obj<>endobj -539 0 obj<>endobj -540 0 obj<>endobj -541 0 obj<>endobj -542 0 obj<>endobj -543 0 obj<>endobj -544 0 obj<>endobj -545 0 obj<>endobj -546 0 obj<>endobj -547 0 obj<>endobj -548 0 obj<>endobj -549 0 obj<>endobj -550 0 obj<>endobj -551 0 obj<>endobj -552 0 obj<>endobj -553 0 obj<>endobj -554 0 obj<>endobj -555 0 obj[523 0 R -524 0 R -525 0 R -526 0 R -527 0 R -528 0 R -529 0 R +522 0 R]endobj +524 0 obj<>endobj +525 0 obj<>endobj +526 0 obj[525 0 R]endobj +527 0 obj<>endobj +528 0 obj<>endobj +529 0 obj<>endobj +530 0 obj<>endobj +531 0 obj<>endobj +532 0 obj<>endobj +533 0 obj<>endobj +534 0 obj<>endobj +535 0 obj<>endobj +536 0 obj<>endobj +537 0 obj[528 0 R 530 0 R -531 0 R 532 0 R -533 0 R 534 0 R -535 0 R -536 0 R -537 0 R -538 0 R -539 0 R -540 0 R +536 0 R]endobj +538 0 obj<>endobj +539 0 obj<>endobj +540 0 obj<>endobj +541 0 obj<>endobj +542 0 obj<>endobj +543 0 obj<>endobj +544 0 obj[539 0 R 541 0 R -542 0 R -543 0 R -544 0 R -545 0 R -546 0 R -547 0 R -548 0 R -549 0 R -550 0 R +543 0 R]endobj +545 0 obj<>endobj +546 0 obj<>endobj +547 0 obj[546 0 R]endobj +548 0 obj<>endobj +549 0 obj<>endobj +550 0 obj<>endobj +551 0 obj<>endobj +552 0 obj<>endobj +553 0 obj<>endobj +554 0 obj[549 0 R 551 0 R -552 0 R -553 0 R -554 0 R -]endobj -556 0 obj<>endobj -557 0 obj<>endobj -558 0 obj<>endobj -559 0 obj<>endobj -560 0 obj<>endobj -561 0 obj<>endobj -562 0 obj<>endobj -563 0 obj<>endobj -564 0 obj<>endobj -565 0 obj<>endobj -566 0 obj<>endobj -567 0 obj<>endobj -568 0 obj<>endobj -569 0 obj<>endobj -570 0 obj<>endobj -571 0 obj<>endobj -572 0 obj<>endobj -573 0 obj<>endobj -574 0 obj<>endobj -575 0 obj<>endobj -576 0 obj<>endobj -577 0 obj<>endobj -578 0 obj<>endobj -579 0 obj<>endobj -580 0 obj<>endobj -581 0 obj<>endobj -582 0 obj<>endobj -583 0 obj<>endobj -584 0 obj<>endobj -585 0 obj<>endobj -586 0 obj<>endobj -587 0 obj<>endobj -588 0 obj<>endobj -589 0 obj<>endobj -590 0 obj<>endobj -591 0 obj<>endobj -592 0 obj<>endobj -593 0 obj<>endobj -594 0 obj<>endobj -595 0 obj<>endobj -596 0 obj<>endobj -597 0 obj<>endobj -598 0 obj<>endobj -599 0 obj<>endobj -600 0 obj<>endobj -601 0 obj<>endobj -602 0 obj<>endobj -603 0 obj<>endobj -604 0 obj<>endobj -605 0 obj<>endobj -606 0 obj<>endobj -607 0 obj<>endobj -608 0 obj<>endobj -609 0 obj<>endobj -610 0 obj<>endobj -611 0 obj<>endobj -612 0 obj<>endobj -613 0 obj<>endobj -614 0 obj<>endobj -615 0 obj<>endobj -616 0 obj<>endobj -617 0 obj<>endobj -618 0 obj<>endobj -619 0 obj<>endobj -620 0 obj<>endobj -621 0 obj<>endobj -622 0 obj<>endobj -623 0 obj<>endobj -624 0 obj<>endobj -625 0 obj<>endobj -626 0 obj<>endobj -627 0 obj<>endobj -628 0 obj<>endobj -629 0 obj<>endobj -630 0 obj<>endobj -631 0 obj<>endobj -632 0 obj<>endobj -633 0 obj<>endobj -634 0 obj<>endobj -635 0 obj<>endobj -636 0 obj<>endobj -637 0 obj<>endobj -638 0 obj<>endobj -639 0 obj<>endobj -640 0 obj<>endobj -641 0 obj<>endobj -642 0 obj<>endobj -643 0 obj<>endobj -644 0 obj<>endobj -645 0 obj<>endobj -646 0 obj<>endobj -647 0 obj<>endobj -648 0 obj<>endobj -649 0 obj<>endobj -650 0 obj<>endobj -651 0 obj<>endobj -652 0 obj<>endobj -653 0 obj<>endobj -654 0 obj<>endobj -655 0 obj<>endobj -656 0 obj<>endobj -657 0 obj<>endobj -658 0 obj<>endobj -659 0 obj<>endobj -660 0 obj<>endobj -661 0 obj<>endobj -662 0 obj<>endobj -663 0 obj<>endobj -664 0 obj<>endobj -665 0 obj<>endobj -666 0 obj<>endobj -667 0 obj<>endobj -668 0 obj<>endobj -669 0 obj<>endobj -670 0 obj<>endobj -671 0 obj<>endobj -672 0 obj<>endobj -673 0 obj<>endobj -674 0 obj<>endobj -675 0 obj<>endobj -676 0 obj<>endobj -677 0 obj<>endobj -678 0 obj<>endobj -679 0 obj<>endobj -680 0 obj<>endobj -681 0 obj<>endobj -682 0 obj<>endobj -683 0 obj<>endobj -684 0 obj<>endobj -685 0 obj<>endobj -686 0 obj<>endobj -687 0 obj<>endobj -688 0 obj<>endobj -689 0 obj<>endobj -690 0 obj<>endobj -691 0 obj<>endobj -692 0 obj<>endobj -693 0 obj<>endobj -694 0 obj<>endobj -695 0 obj<>endobj -696 0 obj<>endobj -697 0 obj<>endobj -698 0 obj<>endobj -699 0 obj<>endobj -700 0 obj<>endobj -701 0 obj<>endobj -702 0 obj<>endobj -703 0 obj<>endobj -704 0 obj<>endobj -705 0 obj<>endobj -706 0 obj<>endobj -707 0 obj<>endobj -708 0 obj<>endobj -709 0 obj<>endobj -710 0 obj<>endobj -711 0 obj<>endobj -712 0 obj<>endobj -713 0 obj<>endobj -714 0 obj<>endobj -715 0 obj<>endobj -716 0 obj<>endobj -717 0 obj<>endobj -718 0 obj<>endobj -719 0 obj<>endobj -720 0 obj<>endobj -721 0 obj<>endobj -722 0 obj<>endobj -723 0 obj<>endobj -724 0 obj<>endobj -725 0 obj<>endobj -726 0 obj<>endobj -727 0 obj<>endobj -728 0 obj<>endobj -729 0 obj<>endobj -730 0 obj<>endobj -731 0 obj<>endobj -732 0 obj<>endobj -733 0 obj<>endobj -734 0 obj<>endobj -735 0 obj<>endobj -736 0 obj<>endobj -737 0 obj<>endobj -738 0 obj<>endobj -739 0 obj<>endobj -740 0 obj<>endobj -741 0 obj<>endobj -742 0 obj<>endobj -743 0 obj<>endobj -744 0 obj<>endobj -745 0 obj<>endobj -746 0 obj<>endobj -747 0 obj<>endobj -748 0 obj<>endobj -749 0 obj<>endobj -750 0 obj<>endobj -751 0 obj<>endobj -752 0 obj<>endobj -753 0 obj<>endobj -754 0 obj<>endobj -755 0 obj<>endobj -756 0 obj<>endobj -757 0 obj<>endobj -758 0 obj<>endobj -759 0 obj<>endobj -760 0 obj<>endobj -761 0 obj<>endobj -762 0 obj<>endobj -763 0 obj<>endobj -764 0 obj<>endobj -765 0 obj<>endobj -766 0 obj<>endobj -767 0 obj<>endobj -768 0 obj<>endobj -769 0 obj<>endobj -770 0 obj<>endobj -771 0 obj<>endobj -772 0 obj<>endobj -773 0 obj<>endobj -774 0 obj<>endobj -775 0 obj<>endobj -776 0 obj<>endobj -777 0 obj<>endobj -778 0 obj<>endobj -779 0 obj<>endobj -780 0 obj<>endobj -781 0 obj<>endobj -782 0 obj<>endobj -783 0 obj<>endobj -784 0 obj<>endobj -785 0 obj<>endobj -786 0 obj<>endobj -787 0 obj<>endobj -788 0 obj<>endobj -789 0 obj<>endobj -790 0 obj<>endobj -791 0 obj<>endobj -792 0 obj<>endobj -793 0 obj<>endobj -794 0 obj<>endobj +556 0 obj<>endobj +557 0 obj<>endobj +558 0 obj<>endobj +559 0 obj<>endobj +560 0 obj<>endobj +561 0 obj[556 0 R +558 0 R +560 0 R]endobj +562 0 obj<>endobj +563 0 obj<>endobj +564 0 obj<>endobj +565 0 obj<>endobj +566 0 obj<>endobj +567 0 obj<>endobj +568 0 obj<>endobj +569 0 obj<>endobj +570 0 obj[563 0 R +565 0 R +567 0 R +569 0 R]endobj +571 0 obj<>endobj +572 0 obj<>endobj +573 0 obj<>endobj +574 0 obj<>endobj +575 0 obj<>endobj +576 0 obj<>endobj +577 0 obj[572 0 R +574 0 R +576 0 R]endobj +578 0 obj<>endobj +579 0 obj<>endobj +580 0 obj[579 0 R]endobj +581 0 obj<>endobj +582 0 obj<>endobj +583 0 obj[582 0 R]endobj +584 0 obj<>endobj +585 0 obj<>endobj +586 0 obj<>endobj +587 0 obj<>endobj +588 0 obj<>endobj +589 0 obj<>endobj +590 0 obj<>endobj +591 0 obj<>endobj +592 0 obj<>endobj +593 0 obj<>endobj +594 0 obj<>endobj +595 0 obj<>endobj +596 0 obj<>endobj +597 0 obj<>endobj +598 0 obj<>endobj +599 0 obj<>endobj +600 0 obj[585 0 R +587 0 R +589 0 R +591 0 R +593 0 R +595 0 R +597 0 R +599 0 R]endobj +601 0 obj<>endobj +602 0 obj<>endobj +603 0 obj<>endobj +604 0 obj<>endobj +605 0 obj<>endobj +606 0 obj<>endobj +607 0 obj<>endobj +608 0 obj<>endobj +609 0 obj[602 0 R +604 0 R +606 0 R +608 0 R]endobj +610 0 obj<>endobj +611 0 obj<>endobj +612 0 obj<>endobj +613 0 obj<>endobj +614 0 obj<>endobj +615 0 obj<>endobj +616 0 obj<>endobj +617 0 obj<>endobj +618 0 obj<>endobj +619 0 obj<>endobj +620 0 obj<>endobj +621 0 obj<>endobj +622 0 obj<>endobj +623 0 obj<>endobj +624 0 obj<>endobj +625 0 obj<>endobj +626 0 obj<>endobj +627 0 obj<>endobj +628 0 obj<>endobj +629 0 obj<>endobj +630 0 obj<>endobj +631 0 obj<>endobj +632 0 obj<>endobj +633 0 obj<>endobj +634 0 obj<>endobj +635 0 obj<>endobj +636 0 obj<>endobj +637 0 obj<>endobj +638 0 obj<>endobj +639 0 obj<>endobj +640 0 obj<>endobj +641 0 obj<>endobj +642 0 obj<>endobj +643 0 obj<>endobj +644 0 obj<>endobj +645 0 obj<>endobj +646 0 obj<>endobj +647 0 obj<>endobj +648 0 obj<>endobj +649 0 obj<>endobj +650 0 obj<>endobj +651 0 obj<>endobj +652 0 obj<>endobj +653 0 obj<>endobj +654 0 obj<>endobj +655 0 obj<>endobj +656 0 obj[611 0 R +613 0 R +615 0 R +617 0 R +619 0 R +621 0 R +623 0 R +625 0 R +627 0 R +629 0 R +631 0 R +633 0 R +635 0 R +637 0 R +639 0 R +641 0 R +643 0 R +645 0 R +647 0 R +649 0 R +651 0 R +653 0 R +655 0 R]endobj +657 0 obj<>endobj +658 0 obj<>endobj +659 0 obj<>endobj +660 0 obj<>endobj +661 0 obj[658 0 R +660 0 R]endobj +662 0 obj<>endobj +663 0 obj<>endobj +664 0 obj<>endobj +665 0 obj<>endobj +666 0 obj[663 0 R +665 0 R]endobj +667 0 obj<>endobj +668 0 obj<>endobj +669 0 obj[668 0 R]endobj +670 0 obj<>endobj +671 0 obj<>endobj +672 0 obj<>endobj +673 0 obj<>endobj +674 0 obj[671 0 R +673 0 R]endobj +675 0 obj<>endobj +676 0 obj<>endobj +677 0 obj<>endobj +678 0 obj<>endobj +679 0 obj[676 0 R +678 0 R]endobj +680 0 obj<>endobj +681 0 obj<>endobj +682 0 obj<>endobj +683 0 obj<>endobj +684 0 obj<>endobj +685 0 obj<>endobj +686 0 obj<>endobj +687 0 obj<>endobj +688 0 obj<>endobj +689 0 obj<>endobj +690 0 obj<>endobj +691 0 obj<>endobj +692 0 obj<>endobj +693 0 obj<>endobj +694 0 obj<>endobj +695 0 obj<>endobj +696 0 obj[681 0 R +683 0 R +685 0 R +687 0 R +689 0 R +691 0 R +693 0 R +695 0 R]endobj +697 0 obj<>endobj +698 0 obj<>endobj +699 0 obj<>endobj +700 0 obj<>endobj +701 0 obj[698 0 R +700 0 R]endobj +702 0 obj<>endobj +703 0 obj<>endobj +704 0 obj[703 0 R]endobj +705 0 obj<>endobj +706 0 obj<>endobj +707 0 obj<>endobj +708 0 obj<>endobj +709 0 obj<>endobj +710 0 obj<>endobj +711 0 obj<>endobj +712 0 obj<>endobj +713 0 obj<>endobj +714 0 obj<>endobj +715 0 obj<>endobj +716 0 obj<>endobj +717 0 obj[706 0 R +708 0 R +710 0 R +712 0 R +714 0 R +716 0 R]endobj +718 0 obj<>endobj +719 0 obj<>endobj +720 0 obj<>endobj +721 0 obj<>endobj +722 0 obj<>endobj +723 0 obj<>endobj +724 0 obj<>endobj +725 0 obj<>endobj +726 0 obj[719 0 R +721 0 R +723 0 R +725 0 R]endobj +727 0 obj<>endobj +728 0 obj<>endobj +729 0 obj[728 0 R]endobj +730 0 obj<>endobj +731 0 obj<>endobj +732 0 obj<>endobj +733 0 obj<>endobj +734 0 obj<>endobj +735 0 obj<>endobj +736 0 obj<>endobj +737 0 obj<>endobj +738 0 obj<>endobj +739 0 obj<>endobj +740 0 obj<>endobj +741 0 obj<>endobj +742 0 obj[731 0 R +733 0 R +735 0 R +737 0 R +739 0 R +741 0 R]endobj +743 0 obj<>endobj +744 0 obj<>endobj +745 0 obj[744 0 R]endobj +746 0 obj<>endobj +747 0 obj<>endobj +748 0 obj[747 0 R]endobj +749 0 obj<>endobj +750 0 obj<>endobj +751 0 obj[750 0 R]endobj +752 0 obj<>endobj +753 0 obj<>endobj +754 0 obj<>endobj +755 0 obj<>endobj +756 0 obj<>endobj +757 0 obj<>endobj +758 0 obj<>endobj +759 0 obj<>endobj +760 0 obj[753 0 R +755 0 R +757 0 R +759 0 R]endobj +761 0 obj<>endobj +762 0 obj<>endobj +763 0 obj[762 0 R]endobj +764 0 obj<>endobj +765 0 obj<>endobj +766 0 obj<>endobj +767 0 obj<>endobj +768 0 obj<>endobj +769 0 obj<>endobj +770 0 obj[765 0 R +767 0 R +769 0 R]endobj +771 0 obj<>endobj +772 0 obj<>endobj +773 0 obj[772 0 R]endobj +774 0 obj<>endobj +775 0 obj<>endobj +776 0 obj<>endobj +777 0 obj<>endobj +778 0 obj<>endobj +779 0 obj<>endobj +780 0 obj<>endobj +781 0 obj<>endobj +782 0 obj<>endobj +783 0 obj<>endobj +784 0 obj<>endobj +785 0 obj<>endobj +786 0 obj<>endobj +787 0 obj<>endobj +788 0 obj<>endobj +789 0 obj<>endobj +790 0 obj<>endobj +791 0 obj<>endobj +792 0 obj<>endobj +793 0 obj<>endobj +794 0 obj<>endobj +795 0 obj<>endobj +796 0 obj<>endobj +797 0 obj<>endobj +798 0 obj<>endobj +799 0 obj<>endobj +800 0 obj<>endobj +801 0 obj<>endobj +802 0 obj<>endobj +803 0 obj<>endobj +804 0 obj<>endobj +805 0 obj<>endobj +806 0 obj<>endobj +807 0 obj<>endobj +808 0 obj<>endobj +809 0 obj<>endobj +810 0 obj<>endobj +811 0 obj<>endobj +812 0 obj<>endobj +813 0 obj<>endobj +814 0 obj<>endobj +815 0 obj<>endobj +816 0 obj<>endobj +817 0 obj<>endobj +818 0 obj<>endobj +819 0 obj<>endobj +820 0 obj<>endobj +821 0 obj<>endobj +822 0 obj<>endobj +823 0 obj<>endobj +824 0 obj<>endobj +825 0 obj<>endobj +826 0 obj<>endobj +827 0 obj<>endobj +828 0 obj<>endobj +829 0 obj<>endobj +830 0 obj<>endobj +831 0 obj<>endobj +832 0 obj<>endobj +833 0 obj<>endobj +834 0 obj<>endobj +835 0 obj<>endobj +836 0 obj<>endobj +837 0 obj<>endobj +838 0 obj<>endobj +839 0 obj<>endobj +840 0 obj<>endobj +841 0 obj<>endobj +842 0 obj<>endobj +843 0 obj<>endobj +844 0 obj<>endobj +845 0 obj<>endobj +846 0 obj<>endobj +847 0 obj<>endobj +848 0 obj<>endobj +849 0 obj<>endobj +850 0 obj<>endobj +851 0 obj<>endobj +852 0 obj<>endobj +853 0 obj<>endobj +854 0 obj<>endobj +855 0 obj<>endobj +856 0 obj<>endobj +857 0 obj<>endobj +858 0 obj<>endobj +859 0 obj<>endobj +860 0 obj<>endobj +861 0 obj<>endobj +862 0 obj<>endobj +863 0 obj<>endobj +864 0 obj<>endobj +865 0 obj<>endobj +866 0 obj<>endobj +867 0 obj<>endobj +868 0 obj<>endobj +869 0 obj<>endobj +870 0 obj<>endobj +871 0 obj<>endobj +872 0 obj<>endobj +873 0 obj<>endobj +874 0 obj<>endobj +875 0 obj<>endobj +876 0 obj<>endobj +877 0 obj<>endobj +878 0 obj<>endobj +879 0 obj<>endobj +880 0 obj<>endobj +881 0 obj<>endobj +882 0 obj<>endobj +883 0 obj<>endobj +884 0 obj<>endobj +885 0 obj<>endobj +886 0 obj<>endobj +887 0 obj<>endobj +888 0 obj<>endobj +889 0 obj<>endobj +890 0 obj<>endobj +891 0 obj<>endobj +892 0 obj<>endobj +893 0 obj<>endobj +894 0 obj<>endobj +895 0 obj<>endobj +896 0 obj<>endobj +897 0 obj<>endobj +898 0 obj<>endobj +899 0 obj<>endobj +900 0 obj<>endobj +901 0 obj<>endobj +902 0 obj<>endobj +903 0 obj<>endobj +904 0 obj<>endobj +905 0 obj<>endobj +906 0 obj<>endobj +907 0 obj<>endobj +908 0 obj<>endobj +909 0 obj<>endobj +910 0 obj<>endobj +911 0 obj<>endobj +912 0 obj<>endobj +913 0 obj<>endobj +914 0 obj<>endobj +915 0 obj<>endobj +916 0 obj<>endobj +917 0 obj<>endobj +918 0 obj<>endobj +919 0 obj<>endobj +920 0 obj<>endobj +921 0 obj<>endobj +922 0 obj<>endobj +923 0 obj<>endobj +924 0 obj<>endobj +925 0 obj<>endobj +926 0 obj<>endobj +927 0 obj<>endobj +928 0 obj<>endobj +929 0 obj<>endobj +930 0 obj<>endobj +931 0 obj<>endobj +932 0 obj<>endobj +933 0 obj<>endobj +934 0 obj<>endobj +935 0 obj<>endobj +936 0 obj<>endobj +937 0 obj<>endobj +938 0 obj<>endobj +939 0 obj<>endobj +940 0 obj<>endobj +941 0 obj<>endobj +942 0 obj<>endobj +943 0 obj<>endobj +944 0 obj<>endobj +945 0 obj<>endobj +946 0 obj<>endobj +947 0 obj<>endobj +948 0 obj<>endobj +949 0 obj<>endobj +950 0 obj<>endobj +951 0 obj<>endobj +952 0 obj<>endobj +953 0 obj<>endobj +954 0 obj<>endobj +955 0 obj<>endobj +956 0 obj<>endobj +957 0 obj<>endobj +958 0 obj<>endobj +959 0 obj<>endobj +960 0 obj<>endobj +961 0 obj<>endobj +962 0 obj<>endobj +963 0 obj<>endobj +964 0 obj<>endobj +965 0 obj<>endobj +966 0 obj<>endobj +967 0 obj<>endobj +968 0 obj<>endobj +969 0 obj<>endobj +970 0 obj<>endobj +971 0 obj<>endobj +972 0 obj<>endobj +973 0 obj<>endobj +974 0 obj<>endobj +975 0 obj<>endobj +976 0 obj<>endobj +977 0 obj<>endobj +978 0 obj<>endobj +979 0 obj<>endobj +980 0 obj<>endobj +981 0 obj<>endobj +982 0 obj<>endobj +983 0 obj<>endobj +984 0 obj<>endobj +985 0 obj<>endobj +986 0 obj<>endobj +987 0 obj<>endobj +988 0 obj<>endobj +989 0 obj<>endobj +990 0 obj<>endobj +991 0 obj<>endobj +992 0 obj<>endobj +993 0 obj<>endobj +994 0 obj<>endobj +995 0 obj<>endobj +996 0 obj<>endobj +997 0 obj<>endobj +998 0 obj<>endobj +999 0 obj<>endobj +1000 0 obj<>endobj +1001 0 obj<>endobj +1002 0 obj<>endobj +1003 0 obj<>endobj +1004 0 obj<>endobj +1005 0 obj<>endobj +1006 0 obj<>endobj +1007 0 obj<>endobj +1008 0 obj<>endobj +1009 0 obj<>endobj +1010 0 obj<>endobj +1011 0 obj<>endobj -795 0 obj<>>>/Annots 19 0 R>>endobj -796 0 obj<>stream -x}SMsÚ0½ó+vr"3‰ħlc§’¤IÚ8ÓK.²-°İmQI.ċß÷I6i‡Á kwġôsÀÈLJÑ$ 0ĤĴÜ&ƒÑ‡ -|JVĜ‰ˆ’œ|Ï÷ñ&>Í?ßÎiİäFd†îeÖÖ˘1ܔ²ıL6•Ħĥ^O|oŠĉ'ĵĥ%ï“ĤÑx̰M'ĝàĞ­ş0öâó3TÑMìFqÍSmÏL"&ĈzÁÔ ,ˆ =osnDWġ5CšQR´4o×ÄĈĂY4EcşğO ‚Ĝj bÏ*1LŠRS*ċÂ/§LV”}’+úĝĝ=yÄë<9IOĵN9ċ§*‘ü%™B^p=úDFímħht LÁ ñŞêÏea‡Ÿc+k•‚ÚW”ĥ†´Ĵ…)kĦŬ0Ĥâjá™Ú)@ÔÚ -.²ĉ%Ĵ*@XP-Ħˆ&0鞃A{vçÒë‰ÙÇ·Ċ€1+CÄ"È_SÀ&ÖC·ŞèÉfÇÇr|ĉ́ż‘ÂgÙ69£h'ÏPkĈlg£Ñn·ó´“j=z[ël-8:ŝo˘xA[àıĴׂ´À­3rÉ#=Š|†´Ġ4qĵÜâÀä/`àĉ¨>½ĦÔŝŬ+Ì ôÜû³dq—ÇĤ)/‘áŜ"ĵ\ÒĞ}(ϑÉíŜĤ!ëÏ=„͇•MVµ6ĤğÒNÂ.ĴZĥ*G,HĊq¨MÑЁ²ıJ$ŒğK×_ë0šşh0\ïşĠ £›³°œ˜żÒ+g}ZÖÛÊ3żŬq.ǢprGï -<_‘3§7ûëà0c¸endstream -endobj -797 0 obj -652 -endobj -798 0 obj<>>>/Annots 22 0 R>>endobj -799 0 obj<>stream -xV]sÛ6|ׯ¸Ĥ‰:cS˘>,Éov§Nófë ЍH€À(šéïŜ‘´ċ4êԏeK{ğ{ ŝ5JiŠŸ”V3šßPVî·£É†fSÚĝĉfµĤmNÓd:Ċ'Ùĝ§R5Q{JúĊ):zoCTUEÊĉ´Ġ!ÒŬŻ÷w?n˙”:é˘Ğs=O“*Ó[£nhzKµÊ)–šjeİQ{ş} JÓ~ßlĊğĥçk(7!z³k£ÎéhbÙI™³QKTıÈÔ]´[8œ˘"hİІïu¤“k =*%Dï ŝ€!Lé:w€sgßF:Xt[v{Fŭ„˜ñ[ŠŝD\­ciìž*s·]/`÷İ—›tä¨û*íż[ıf¨wy²Ĥżİv^ËşŸ·#Ĥ_4ïĝïğÑl³J6´\ΰĥĤùf“Lûw=v">“¸\Îħì\Ĉ큷ġ™ޘ#_Ğhœ%…ƒg,Ó žhwU½StÔ; -&ê+Ħé%.ż§1•16·“ÉñxLïHœßóÚmHCXŽż´\ÌñşXŻ:/N/öYN7˘Ĉ³a§ŜGé-Ŭ·ĤʙwöÒ½ħʛËVr”³L¸˘ÂxÖ·ïö^Ġ½8ËAœdcfßözLfǰ–ì숄/½Î˘ó§„ĥ¨OĦtm•“j£cj3Œ \òTM|6ZÇ/d`zröĜ„ĤÂ)D]'½=İTŸ4µĥ ­ŞˆĴÖy`VÌ\Ğ\J}u>ûнsñû/mxŜéġµÌIW`hc1ë=ÜQ‡S‚Ötäá -Î ı†]NGkĞv•Ĉxm¤ŝĴ³–Ûz´ZôE,2ÖĈ2j‘c×; Ħ6Ódâ[hÑf°z@tԍİào‰¨èÙĝżd1"è/áwĝé—ĵ&a‰ig%öú£>á5`^Ú:Gžó§ ßÄĉPdġEe„úëu*3ċÌüĉD,ĝĈHêJê´ P™Ç@a"ġ'Ú@Ÿ´MœêŬœ°pµÙ—Q²–í.-1Ïì0xŭ.ıTÎ5^Ş!ŝÙi$Uġp§(z“ È86j˧w"‰]öŽv*;ħ]r|“oo íj/“ÖSUܵœ`C‡  -w˘BLĝïĝĜ.k)­‘š˙Ĵ›…ÜIçÁ:ïƒuvË#K|ı›şq>*‹)ÇĠŭoQċ’‹(ŒÄ^wiÔ"^ ³’ßú ĞP‘€EÔ€ÄìyʽħÙ …hêĥ’ìK蝎‚L³çÇ ĥŜ0†3M‡Qñb žhıŒMë Êâq!;œĦ#‚sŜïM'ÉP¤DÒ×"{èòĥŻsȆšp¨¤M—ğrâÁ4ì,N~°$ċ&ë³û%×Ğ˘ëi²Áƒ?:ġÒŝ>úµĥè!endstream -endobj -800 0 obj -1091 -endobj -801 0 obj<>>>>>endobj -802 0 obj<>stream -xV]oÓH}ïŻ¸Ë A˘ÎG“4İ´ÀŞÛĤÚEtµÛc{¨=fĈ-ù÷{îŒŬÓò° BZ_ßÏsνߎĤ4Áß)ÎèdIYsôrsôzs4IV+ÚĜ?Lh^&+šŻNñŭ”żZIl'q˙ÑÙ.WëdŜÙÎ`Lá|üfMÓ9m -„].ɒ6yx{B›l4Mĉ ]zı“3ze’|%É5)eFŞl­Êh*T-“g›Żp8§é4:<žÂŬhSI„ĝçD³­ċŻ:R:x–߃‰#rmš++3oìš+ç­J[™9lÊR:O;Ó˘"‘³‹†³˜ñô$™qô ‹ĥwäL0̄&'%Uĉ.„4[vç¨4äM)áÂr<ÚZ‘y•ItÖ\vƒ7·˘D—%Qׇ݇âvĥDŸcÑä—‹üZÇ)G‹ıuV>”Ú”˜£$cûT;T< >!áÂÙ FŒş}0éÂd˘pœôÁ ĦÂKѤ‚”.,r*"X^^|üëòüÛÄ÷ƒÀ \zĦjwŭĴE‡™}T~0~³è˜4jĦ´óèP|ԓl„ĈˆÚĝŝ9:DÑBˆ8]ĤëĠ@Zú òh)ACYä¸òÄTħNÖ¨ˆ_;@ö{NĈµ 3ÓnÛĈĈô1‚ô|ß%mkÎc·•™*bEşòdϜÓ0Ïë³/—…hkԉ‘ÂtÍM—YOuî-R‡ïqëì¸6™¨ÇH)ZA”ëgC -żğĈ Náı‰B'RƒŠÌZĞ<4Ezàı œ%u$"Wħâ˙ÂIpĦ`XBa¸“µÔCd\}8˙ûßËׯ.Î7Ÿ9!Ÿ ŝ:™­ïµŝ1ŭž­‡ê½èÔ{~F›N'm§BqNUäñ ĝ Êıç(7[c½ñîyôüZ(èVÔ*çn˜"ÀfĜ~Ŝ°c.7ĤÏÒkJ+š„èĵĜ˙ÖĥÚ &ŝñ' yê5DHİ6"Ì:^;,‹‚"K:ËRŬb'i’Öò˜sö!öPGO(4ïpŸSî8ÍsF‹K.• `Mr#‘HŬÛ, 2ô„´á‰[Ô/ğ0ƒŒş+&Ħ Ë3o#•µµŬY†0ˆ°ŽVR€9ÊĜÇIĴ_¸Fżħy”Ĵˆ‘¸é˜‘šï Ŭ |•sĦ‡apa‰ -v°:6hU#à\䷐> !9vċ~T ËA£Äf?#~t )¸ 1İY "œAv_€ƒIÇ]AMVş­Š\­Êʎ Ëà[вü€–·J+ŻD8íş£…EàI‡ò½˜?ÂöU·£§ËӄÏ~œŬ÷÷ċ‹÷/_'kâ ħâŜ‹ˆs=ŽoÇ×ŝϵ>_M’5N3öuúóè?ĊĴendstream -endobj -803 0 obj -1435 -endobj -804 0 obj<>>>>>endobj -805 0 obj<>stream -x•WaO8ŭÎŻ¸×ĠÒ´iK[¸OĴvıCşe9èiµÒJ'7qZC÷l‡ĥ˙ŝŜĜM[²ôX@ -EħÇ÷Ŝĵ™ŝ{Sż1zÔRR}˜}šu£ñ˜v3?]÷˘1 Ĉ#| ˘I–âżáîMż „ÂKÄß>§suNñ€&ŽŽñ!ġïğ4IZq4Œâˆî\™¸Àaœ*g”]*K£D—ÙğÉQçj@qâ´{#ÄiŬ|™|ú&sdó\/yçRċ9M%*ˤ‘#•­uE••ts}Oڟ÷ä4YgÔ´r2%+͓J¤B,lÄ'vİŬâÖ8éO­I8Žc(d}6­ŽtI§Ŝŭ<ÓVDôuŽ}ÊR*3\(ċ( mĊŭóŽK]gTj7çä÷–‘›Ë’DŠ ”c#r“U܏zœ6ًpbĵ‡Í&g 7UÚĥ­-İ>íyz{´ŞPı0ùPĴuŞtáa³s]ċ)ÍĊ“$Q5kŸÌë'—ĥŽtÜır$Sġ?’A é ä–ÚcdÉêB(.`¸¨KçĴœžNİñ³d!EAàÜ,Ò3Z;êTÖtrˆĵcE1İ*;ĥ˜B=ü¨éA1=ĝTXҙAx†ĝ•à%Çġçĥq‘/–ż\‰Ä‘]—NĴHg/*ô0ŒOÂ(è~*ŬRBsUİVÒFTkB$èSÏ=ŻTċ^m’WŒ¨ï‘ĉĴRİlV×+Šm!‘çtÔĊÒ➺ X˙,úŜB0›ĵ/•Ĉ&ÚÈïï8€ÊÏÖâ7]5ò,* ŭİp=–Დ4–“7ƒPs -á…) ‚³Yŭ2P_J,.×à‹ -ëĞħkè6‚HlhŒ ¨ÒI“ ¸× é…Sš bMz÷äµv!•­ŭúë[#­m€ÁġÜ aYEŜìvĦ#şĞjÀÏjóSû³šj‡FiÚP10_öŜT—ż:zD-ђŭÓž-ÒDĜğŽ?ptêC`Sµq%4 -˘a7—@Ħ`Ż8Ä ]rސ§‹§L¨Ü a“ĜŞü^­L>>>>>endobj -808 0 obj<>stream -x­VaOFŭÎŻ˜J­$â$&$!*ŬwÒIw6nQĠôĈ^'Kì]Ÿw äß÷Í]BôC v=óŜÌ{³ûídDC|hÓù„Òòä}r2ĝ4Ĥш’+“Ù”’Œ†Ñp8¤$í%†ĥŞ(H9²Rg$ÂGĞÖZä ı¤Ş6İ´VZ:Mîî˘ ×#]²ż.EÂì³ÇÛ"Ŝ2¤~<‰Ĉ@ÔğI>ÎésN;ÓPcOĵĝŭ×1Y·+$)ÍwÖɒ—4ùĜQĦĥĜm¨0fKÂñjH:´Ĵû£ó(ĉ,òQ”U!íÀŜ×u˘vMuHÀĤµŞÇP)z!ʕ é•öAŽÄsĝ˜œ š49ŸDÏĤxŽñSKÊCñ/i†ĝ8š=+˙(šF´p²˘Éœ’šÉX§ôÚ³·Q£ĉâ^¨BĴP£™tMhU}/ë#–1÷ĥ÷}[ŭQ×%T?-”ÔŽú_ÚµónÍÜë´(Û²uÜkÎè‰Ŭ˜ĤÈh-­DŠJ{ĴdrĴ @Ψkkfô?šĴ)Û0SeQ×ÔÔµL]ħ5t¤G×ĥkXıĜÏŻšŒRĦIÖJ²b2’xc Šíy ôQÓĦż --Öx µħ´ìÙ&Ŭ°­2ğä·ùízyÚAêôÚ*5Ŭħ"}M…ĵ—¤M­Ü.¨”ĠÌ"Í\(=Ġò[#­C{İÖ>˜:Ü.”öÀžd-p”<YD´W,ż`ĥ@éP×%êU2! eÒAV6mĈ苉˙§>=ğİMŜòAĦĉ{ww€LdY§]S9ıöûĦ"İ) C`-#J6è£gİ èšzKĝè6¤î‡ -ñĜċ)gi]6¸Ä¸xÛeĝNÜr£hÖşl\–­!7ë“r­[-„Â퍏5VxÉUƒµóĠ@0•n°dWİT˙SCΣûĦB˘Î˘=TŽM {ìa6$?sn8ABOÜ_1ìŠ& žFĝK³íédġŠ—9ôà_ŽˆaÑùEhvħçëSoĽ„ÜàdWzaWá0DèI~È.Wks‘k\ĉIŞpNÜ5 é úsƒ‘b˙b˙yé!U×eكĝJC‚OÚƒBF``™ĝâBÀ+ Êx_aÖàڀĠĵa.~h’ÛUr~İ›'oLíÁÀçĝx 5C<‹q޽m†x<óçëӉ?Š.[3̎̐×Ĥ„ŻngÄcż•|ô“3âñöŒ1p5'ŝ4ëŬ,ñI—FQôÌALù$ñGw²4öÎ˔ŬbŝÈġëEù0_.o?__ŬÜ.–ËŸÏ5£ˆo -ٜ–ĝ -ó‚ċžá·ö}íuƒ‘T5t̀˙CQıќŽqTĈÏÌż§Ĉġo³ô(q~Ò+?èFd!WµpòŒ [™4´jÖ¸ŒTĤvßíig‚™ĝ˘tfíÔMĤ_#qKÜğ..Ŝ}}˙Ž~Í\FW&mJÜ+ŽƒCüV?ĵÖûÏ·›ñl]â֊[͸˙ËÉß°œ6‚endstream -endobj -809 0 obj -1189 -endobj -810 0 obj<>>>>>endobj -811 0 obj<>stream -xWÛnÛ8}ÏW òpT_â\ -,Îma qÓÚ cĵPm³ĦHW¤âĝï{†”GmÑEÀ‘HΙ3gÎßúÔOŸÎ4<Ĵ8¸œ|ĵ½ ŝ ͗xszŽ9ġ’^ŻGóĴÓOú½„kái²¤ùZ™•£kkŽ<-lùô÷‡ù7ì?Ħ~?î?œakġĵšĥXĉH˜œvĥ"çEéÉ[â—Ot¸][ږÖKâ'Ž6JK²KòpëC<“†&äŞĠJ:NÈ-‘X eèħƒ³FŽûdÀá›Çä•ÖaS&tAıŬš¤^98M8ÑΜ0°B­ÖžJ)rJKĈq=˙3ŭ<›Ì˙âC -üŠnÇ_fƒ·‰R‡qʞ"`_îÂ!…Pš) -ĜmÙiäÖ­J[m‚ĥö‰ Ÿ˙ġf|}CK[R.=Žpš‰"´ŽR È $ˤsËJëv‚W­eN¨“_ÛʁÇ<:ċkFEtUı쒳Tˆ]Фœ-¤5’¤v2„YĞÀwI›ÒĤZ!ŽoŸe™a5)Ÿà ³•Ή„Ĉivs‹Ċ˘•‘pá]& \)ç*PòÇ çŠ ŬÒ˘İÒR½„Lw7Ù 9 y'AĠ&H:Š ™ċ6Ğ -iĵʲ\ÀгU™IÏ%TĜž-ÌF˘îY:lÜr‘— -@ Iá”,â 7óô gÔÉù> e,Ûíur1LNn°~B×JĴŒu,—‡Hx(ÛŻ{‹•·Ï(A,|L­&™3]+de·èĝŸ÷’fo:1–yrUšê‡ŠÔ‰žŒFÉùŸp#ĥ|dgv#irŭğä.wŭRTÚ׊‡ à”jğpġÈĦâÂ8^hò%2èqtˆ}ÁĤ˘B×QŞŜÑŞóä:ĦĤ£aÜR[a‚Oħ ÌÌż‡IĉBa‘è>0×4À‘‘>UÖEÌGäŠ4ÉĴYĥ"Û ĞÑÇMW.ٜ׉KïY$lÀ”=–ݳíByèOH>%Ìí×o8:ûcŭ†ƒ_́aBWkEʀ To3ĞéN>Kŭ^Mp8 -ĉX8ğżd!ĊĊì!…0(´ZfŜáÔŞ,ÑĦ ½şĞ6G£.ÁğÙÙ>½é†żw˙Îşt7žŜ§ŭn‹ĝÙOçŭĥ“ż‚eœ‡¤-÷}!^TQoÁh €SŽÉ½öÑ~5÷;ˆÇ‹SŞbġô@4ĜOF“òt’2­Ï˙â›-•ß½šx;“‰!ĞsYìĜACÁH”`UÂÖ£E,mU{–‘<1DìpÖ)SÊdFÄZ*š$#RfŬÛżArA’…u\ħ0ŽàË2‡CzĈnħ×9̽'‰á0Ĉu½ßYaŜ›ĤœŠ5z׊[JLSÊù3zSĴ`NpM‘W f°İË*˜0šŭ{ħ\ĴPbédù wLg,àp=”·'e˜È(X£Ŭ.#ù<§ Ñ ĠŸ˜òĦÚP0ĉ$ÀÛŻ!@ r#›é´ÒDŭ‹.qçÊĴí™Êas -ĝEÇŭuHÑ?X!篭–#“·Çrn5 -ó׈ž)$mÙe g# -ä°U~]Ç -½ê0IċêûZ´qQ›ñtŽ:•„/F|‘İn.`3/ MG=v° -pM%˜4T™ÑÌX}j§7ĊíñÍßzvS*x÷÷JV\|ö‘†JnŠ0Âß4Ŭ5úöüêáäP^nf5ĊoU** È*Ħ[` ¨ĊĤâíPKÒSLYİöı|`@)ö„‹#dö+àÖ´"‡@n‡[pïĴ›Ž•]"Eż‰¨ġ´ZŞêİ=ŭĉvr^_ú§g 1À½opÏĈ÷—cvúo°jÜü÷îR ë8î:ŽÛŝ×ׅ“ó^rŻ¸}ĝàûrìñrendstream -endobj -812 0 obj -1505 -endobj -813 0 obj<>>>>>endobj -814 0 obj<>stream -x•WÛnÛ8}ÏW ò²)hm'q’‡>äV Ĝ6é&nğ‚.h‰ŞÙJ˘JRqġ÷{fH9ÒĊbQP,q.gΙ~ߙÒ˙Ĥt2£9ċġÎĊbç÷Wg4=˘E‰7óS<4É&“ -ò½i6dG½sĤ ĤùB³5½żyŭKŠ.+£›@ï._,ÂM§ÑÁì†ö–:ŻñaË´£°RŒ'ġ¨L–•ĤG£Ŝ×˃òş òÚ=âKñ¤¨kÌZY¨·­MUQ£ñÜçĥn ,„•f÷:˜f3v kyŒĴuö‹SuFŸp6›ÓĤñAÁ~$Ÿ;Ó˘]”Hw3şÓ -^’?t]Œm̑Ê'TZGµuc߅HÍg”bšÍ3ĈtoħÒĈzċşûO÷ȇ $÷‚Maµ§şËW#S5'È爉ŝ3ßûnj^àÀe·#ġğż^젔t|vˆŽNO<ÄQŽ+||–ÍŸ×ŝ8£76˙˙˙RáÛċuZÑze´·µĤFıBċ=g;.3Ż˘!‰ ĊúĜ °ĥú§l9|ì5_j˘V;`_‹eÏ@½HœÉ SiĜğNçÖƒŬIbÀĠQJ„Ż8NüàTóEs$Ë> $”^‘mÁ ¤ËH|yxh -vĈLÙ-tӃ…öğĝLçĴ|ĞsS]<ó[JĴ[`Ûclî~ÊiÖ -:Ì=dQ@#ïY8 -½ôD…)Kp zíüœ}:ñÑ4òÍèƒvŒö„ GŬĞzİhݲ_f´R(ŽC -,;4gÛ¨`;•yއ½‡QĞ eµ°•ż6u[隃‚Q9OŠ2Teä{İZ—§\b4ħ:ˆ{ħBı‚Ž- :”]Uġ€ƒá@E‡à,€$Ş‚3ċ‘d$†—XÀĦ^ÊÈĴ%˜RÀ$ĝ!ĵH,éZö:û|8#t…ÙçùÑ>-Xıh XbŬŜK<#ÏÒè’Dp9ùm­ ~Ë -/žĜĠ4£{à+Tg0Zë½aİ!’A•|É:‰ĵvú{§ŭ8mµ´(e4 - ĦîÌ\éŒ§M=rí÷áÀĈw„ -T/ˆù‹ÇRIô²a„¸0d-½ÒA#nTcĉ@ƒŒŸpêQ‹"ĠKR#4Y³İ6R.İëV  ˙Jµ¨lİäy€9….wQ˙“FeŸb&+¤3hÈĵ IS3òž,ˆ<‡ ÏaÛ“:ÀÈ@b è™òhf’@_Ğŝ’_Ìv#ż²]UPÒhY<8Y&j—X=‹Ĝ˙µ3@…çS2ĥž MC93îkVl!¤-Ż­ƒÓàFĊIA&ô`§}ì‹äÚ<È -™W˘&žUÍs]U°Í­Ñ`—WùWĵLs€& •uÁĞ`Ŝ˘ ‚ŻĠ71ŽÉscÀÇ h™ÌÓ¤1~äL2è¸ì qÑC×ê*t‘H ‘*;Ŝ ¸äyÍۆŝÑV&7R8˙ 1³)[1}ZvPpÉÛÍÈğ× ‰”}“ÓKêli(_ÖĦ§Ĵ#†]ŝÁ€gĞ ïF\FÙL -e/CQ<ħn%qb°—ŬáĠKtcĴLқQ]LteácÀêrĴP7ĉ‚7žÂ6ż…ĦÓmÒ‘ ûHôaÏóJÄL(°ú‡`R“„˜coLĊ(˘^:× £`o­#ŒY "}ùРͤ[t 8EN·Œı€,ÒüÏ+Şo--8ÀAl/Òóh¤0jË,ĉ-MĊĈ [Ŝx%áE|ĊŒSğÚ`ïÂ웍IċĴŸĦ'@“HÎÁ9 >V5Úv>I3ƒEV:&KWyi$#ŸW×7Ÿŝı½ıŜ'yĵğ>żJï^/ħE¸ĝĉüÍÉ4Ħ”l@˜Ĉĵ°#ÓİLH{ÒÈOÚq£İW—"Ĝĝ×Ĉ&vÚéì8;ŭöŒ/£ËÌ<£·ÀœĞú7ûµÈŝ—ŒsÈö󴏀ÜñÔ0Öß]r3ae£âÒÁÓ csKR`ĥĊN‰b1+Pn;ŜJmËTÀzyݚ…}?’YòÄVa%ċ>?Ü2ĥ9šbµ˙Ġ’šneÓùIĈW?ÜìĥPı?{qŽ žŭÊûӕÍ;Ŝքlü ž:ˆÇŝ߅èt’áV‰ÛÏ<úçÎ?´Lendstream -endobj -815 0 obj -1723 -endobj -816 0 obj<>>>>>endobj -817 0 obj<>stream -x•VMoÛF½ûW |iĔDɒ Ċ–ĥäšLÓ éaE.Ċ­É]v—´˘ß7KÒqĜ @a°´³óñĉ½™ŭûdBcüLhÒtNIyò>>YĊ'àâ‚˙ħ{|S¸X!Í.ĝ6 fd%e|‡póüĉ£›K -Çg>_\Pœús|“ĵşÊEUKKa@×JìµqJïéhKN”;ANÚ'i_ǝ°›ÉĴus6 zœ -ƒI@k][“6I­Œn-g4™t–á‚íâ\9ÊT!)1şJ;T(W“ɨ–v”Ħİ’63ĥ¤Ú“(T*jÙ&½HAk…3¸\íċC.jŞsÉ)Œél2mS,Ô£,ŽpŬ8é£ċ’*kv…, IİŒTM™P"ô‘Œî­`îjY9Äò6•pN¨(8 -NÛĵñżfĊnĊ828ûȰfJË ; çè€ù‚Ş]nš"Ôòö–}·žßÒŝ“ħ)ZЃF.”‹'XX%SĈ(VfMÁĉĈpV9 -0€³]ŽFġKD%vŞPµB]h³ÊĜiU -[¨Ŝ0m ÂŭrR§TJG²„ ͑+=İ‘N˙RW -‹ÔßÉkÄMQ˜×ÀÔ`(DĤ ˜ì1E€AP|}‡ĉ4ĥ²ÊqĈ`Q`/â–m“ñ9{é|<Ŝ­\BHĤWËKRÏĉ—Áüu„tħt)+ĉĥtF7˙"÷Z{R0“ûŜ!°4 “/ZK£oEÔ߯?DЇßV!A÷WŭÉòêv½ÚÄ´3uŽž  `T÷Ö4ĊĞ(ŝ°ŭtÏܒè"s2ptm£5·ċ tj˘ħ-Ŝ×ˆ €I"u VPŻe³T‰5ÎdPYRTyˆä`šµz‚Ŝ´@àRıM}Ï]ËsBĝŝ -üúê3Ё/Ĉgƒ¨‘Ÿ@__)·:îƒ**U!ĴŻ˜1uˆZ0Y×nèâGĵ¸SÚ|µ@ïpÌO`6d Ĉċë“Ì•ğÓ,cÜ -SáwNĤ5u]75ÖeuDä‘'Òĝû/ğ‹<´hwän·²Œ˙d¨ŭ–nĈtÉvBgáy;Wŝ@„?û¨Ĝ{˘ġ=yöYéLÑĝ,á41Ġ¸ïdMMÜż;ž`ĥsos$ëdä½ùùê` RĊ½5#ê:ä*É[–àĞn£ġÙzŜPġĵeEójŭIYž¸ĜS¨>3š;LKán˘ñ#-SûĈĥ#ÙżÛ`&ŭѓbtsñŭ‰7 ŭŜü?ÉÙĊ8¸Ä{0-:ü=ùÀtuendstream -endobj -818 0 obj -1398 -endobj -819 0 obj<>>>>>endobj -820 0 obj<>stream -x½WMOH½ó+JlF‡„a¤9ĴX–˘•FâÒĥÛIĥÛÓm“äßïĞj›33Ç%"¸]Żê½*˙8˜1^:ŸÒÉċÁĠâàfqpÏç´{sK|8Ĉ‰xF³ù9ŝN99M9ŽâŝÉïáÊÉI|À.ÂŝëìŒżÌpœ9ܞÍÏi‘ÉġcZ¤£{ÛèôÍĥŽ|™Äİ­rÊMĦİT[J46UÎÈTéâûÁĝ ğf[£ħnÒUo~D🝤qëŬ˜McŻÊD “­’6‚:?‹§}–ÈJ’D*/4™uÏĤ@b?ôi|OcZhßôm Çt4ċé¨}ÂÖö%ìWԆ~…úÓÑŬ>Ċ;ìÌ{´S‘Qhú ÉQjġ‚Š)n>żA‡Y'*}~×oĜ£CSö‚˜6è#[úm˔şRĠèMT „‘†/ï-Ikj4ĵ45 -Ùµé BMêĤzÊtµ–FA†Z°GT -!:Ô ŭ!³YYr§pG€äÂBfĵˆézÓçïu§DŽŜŬÙzI’ùR+WFÂËF—µuʤrYpOUÛ>fiÉA -HHüwé îÈTï2ôż•ĥġ¨ ´Ì§s˜üoeZÊT&YŻ)< - Ž´Żú˙ŞĠd˜ƒ8w“…iúÀ:3.nîyž`ÖteÄaŝLG*ú=ĥZ€Ġíc|%{5¨t<ùíë!Y#LOĝ‰)Îï ËĉĉFkĞ Ê -t½ĝ2:ŻTJtŞPgBĞiú}@x>Un@™§¨ż0Cġ“nà8WÒâ£L&ÉDo .Èö,QxÒ(à°À ı›EU[&a†QĤïzeҕd)ëb¨-‹JĤĦÄP@ĝĥ/ éˆµä‚K€vĥù A$ƒŠĦPĥ€L aIµ# cÀԏ°ğ€e·|d{ĵĤ^â8Áuv(ê~ÂbÂBIŸèòî÷Ŭ›W­·ÇD›pn³ÙÄ{żíö·%X=ş)W°Hš÷‰…i²›cGݽpyĈ·J Œ‡œ êŞJ5†ĤĥĈˆ(U†ĠP°pPEßrÈŜ ÚĈ–X°kqTċ &46 ÛŬ-Ĵ…µ5O5R™ŞÑ4ĝ›A=MĤxâÀk‚‚aĊ”RÈ*ÀÔâĥOWŞÂšŠĊµfîü_KxĦÌóîidrvOt3‘Mbôxù×Ġ%=8ûd Ï6Ċ"bħöó}G“³s?:Ÿâ!(½{’˜Í <-áڜÏc™ùçà?,;Z/endstream -endobj -821 0 obj -1601 -endobj -822 0 obj<>>>>>endobj -823 0 obj<>stream -xWÛNI}ç+jyĴ` ï·Ĵâ ÖJ+!Ħž™ĥŬĦ§ÛéîÁñßïİîۘ„]EAÁžİË9§NUt݃?]ġ¨?¤˘:¸šœ}P·KÓ^ŒhZR'ët:4-Žo,Ŭ™Rí%……¤\™’” ÒÍD!=Y£×‡´NTÒj!¤µ­İkZ)ż `7Ż{QċO{ż²¤b!Ì\~˜~;èi·Ÿġúq•Va}Bĥ çĞĵJšƒ)K* -àIÛBhòÒ½¨BÒ /ÔBNzĞë Ĵá8üqz?Ż]ħŸµ°ĈȂ÷=ßÛ ˙ĝ—rĤ -W ŬĜĵ -è[k26Úh'8 ÷zÖÖ.sQ<“(KèS€í¨hÖ[k?dÍK½a6` .‘ ½Şe!˜$;ÌÖʒtÎ:OÊÓBĵ(3G °´à í¤(×äjcĝwIKëuûòuħ áéùÚĞġñXPĝÍû3g+èB†² ŭĝßfÔêYҍšĞ ô‘§‰ ˆàp_/$Z‡f\АŻZ×û0ċ<˘5·ĉ’¤%ÇZP­ RH@qB  †Ä‹U¨Ìfĉjœ`’{ƒeIk L—Ö{•kÙ Êò™ kdG éí”úÜ>7Q&ÎÑ<ôéA"F䌛ϝe!<â&^÷ ô2t‚ÊW™Â: f4ÑR€Â"â"Ĉπm§î&tÙĉŒ6ÉĥŸ=¤Ş>£Ş÷R7‰cá1]ä˘ñWĴIŻYÎÜ~ŭûö+===\~ş|z:Ì蘑_ĜZ—4E老k' t²òöàI°İ`Àx2÷‡ï.F5G1¤!T'b#0S -ĠZ–żıJa0…ĴÙ8D<Ó2š_Ëü^mIäğÇHhċƒŒ£Ì~[.ÛiíWŝĊ@YÉ2–ÎB˜[T 2@Ê5óĞj‰o`ıq\ ˜áĝÔĈñyDL[J4´9[OZ°èD ?F"˜\(HŒ¨5ò”ß$_8µdHQ| `;5_„íĤÁ k.>şġŸ]!ö‡,Á÷…Ĝï§ĊóZˆçÏ!Ĕ8!Ʌ¤ÇΛ=züJ–—ןînï§tôûÑÛh™˙D¤“kż+Ô¨BzĞğhڎŜΊ½¤Ħdr j™·÷¤´™î¨·ôlôTYĈO04‡yrޏUÓz!^9kĉYìËğŬI(Żíĥ´2ĉŽ‹ĝEҋts˙ÀħÌĉ x=ˆ;­4#r‹W,a—Ö^oŒĝ>­Ŭñy6|uʰż Z‡o‰ĝİżüšÖ’zï:e½…Kd}ƒ“vkJœAĝ,Ézé䋲5~aßËkìŠí†Mìl’t?Qkĵşŝ³½etIĤr¸¨ğ—!W֟MŻ'~a}ĜLoğ\£iKk ĦĴsH§@şż ˆB´ŜKÛè#½îq6<",u„=%ŻÂĉßQ½—¸.Yk¸­WA÷(ıïµt¸SbA^R…ûHÌßË ÀKĝ5ÁĜZkB;ڌ&Ô -sÎ)yU)-g`@|_Ó5ğé4(›ááµÂ{<0˙Áôï"  -à‹:Ĝ -[ +>†•Ż2şcKƒx˘Kò6œÈKé (œÁ›s|{‰’]ĈkW™=dp‹ -­Áğk°ĥfkİ9ß3Èàv|ĉd+İè°5iÒÏ>^4ׅ³vi8ꤣ=n[š8û  ŬĜ˘Ŝìĉ4=~:êá?ċñ›M?¸èdcĝnÌώĝëà_=0endstream -endobj -824 0 obj -1469 -endobj -825 0 obj<>>>>>endobj -826 0 obj<>stream -x}VaoÛ6ŭž_q00Ìŭ`9vÛ-şM–ù6KÜò…’(‹Dj˘dÇ˙~ï(R–Ŭn-¤6É{wïŬğûçbF—ĝ;£Ġœ–””7›‹é§Íf´ÉÍr½˘MJ—Ñċċ%m’ñ}FÓÖôpKB§de½“5‰Zê_2šš\’%~´ħ– ˙_ó ÚĞ˘ -eJĦÖJwrrCĤjß3x˧¸6"M„mŜl_\Òdv́a,Ò´–ÖòQŽÒä3÷û­ġ#iŒ|i“+ܐĥéTµ‰E\(Ş ċ“ñXKa_\V= -1‘ iÓPbêZ&MDÏG™!s€ÙÜ=mèŠż–örlvòùu·ı@i9ż²Ċz…ßçĝ‡‡³èoiÈ\ôëġÛhyRöyt­"Úp"+2äh2gŽĈmWŝĔ%sÓğöTŽm'…’şĦéôĉŝ§ğÇżî§›Ï§Ï#útÙÜ´EJ\]Mħ$Ĵ°—M•°voêÔ>KÚ_ ‡£+‘$Ĥ -—µ0Û-ŜUÚóÚjġJħyaMQ'8Ú \á•M˘ ÀĠgÁë7Ĝsò˜|£ŝ mˆŽ•$Q,/¤PğBiÉíğó2R_dzÈÓiĴĥ]?L›²˘É·ï&×İ‘§ġ… ƒ6ż@1ïè!H´2ÖŞ¸€ĴÑ•LTvpûê‰Âè­Ğ‰ûĠ­9”…ÙÛ öHÁĝ ĥ3ä=Ò_ĴLjéúîT_™êD:Ŝ "Ö>j×c:=ó[ßÈ#ĝ0òÒé™L […§0 ×u½Ĵk(ĞDƒ‹­ ]Z"P |ċ`i¤ôN*…—4Pà qFŬ{ ˆP€9#ì mÑ÷0™ĥ‚Ĝ:À(1: ñ3xħHû,q -ġ"ñ^"À„e!żŞÂC{zı"ıĜR.R³w e,ĵ™Zòœ‚û×Él#Ëç7· *ċBÁrÊJAÀlÛŞ2uzı–ĝŒƒN&‰ŒşÎŸÀÁCùf‘S1>‚ĞiÔU’µdG¤3µmká •SÚ۝ğÍb¤ùñµ OUPİ^ÑͰï6ĜÂÎIjx0O5êD…ÜÉbšş”Ğm~ĤVİMğÍğ=°äêˆ-péƒÀ1~÷µĞ¤'žÒ§Ñm.“–{óšJÔeĊż8†Q9·SŸŽÔI}è†Û€Nô—hşá÷ôù·Ü!Ô⨂ŒÙvĵ†Š_w!'óë#A™Ĉ8Âu†àÛnÍċe' ìmÍşg§Ÿú™‘ĠÄíZµg]?&Ù$pÀÍĦêÀ nċ²¨èƒó=#=şĊ˜ĊyĈ˜ÒĥİۄeeOĤ‹tN' -î#Wy7ә0QşWÎj)“ÙV}$÷ši Ú܇ £ÔLÈoHô èp(Ïkì˙?”ç³…[)ŽğċµÊëÓ×ÙċŬPŝÚÍdĴK Ï)>̘SĴcŜ–vJîéú}úĴÎn—ê—İ”÷!$ˆv…SSĊMí?2¨Ċ^a,íO˜` ÄÚ„Á’Ê‹v$§$6Ż~½s;ßO,“5È!ĝœgà3EoĝT‰gkê dkĥòXhˆdŠ6xğ7ÛĵÒ[TšÓTçKVkÛNBlĊ)Ċà=ŻpIŽˆĞ†°ŠĠ¨=úż[>°†`Aġ <ÁÏ˙n”"LšÓ1Úô[ëY“ܘÜñ2Œû‡İWŒV4€ĠĜX;‡ċ÷zSXtp•°½Ü?ôk(PöÊpÛ(èÄöëHıĊ üsDÜÚ LlĝlRMUċgŸ_Òn½İ“ù‰­wžMħ^~¤g§ŭŝċ‰ŭÔġl‡-ÂÑ´î‹“'Yìz˜ġIŽ ĦĤ˘Ìm qöĈ˙ÊÀ;óôÓÚïĵ³Ċ<šÑrıpÛôĝé盏ôP›ïHż›¤-ħÈ82:TËŽOVs?ĉÎVîĊj­ğ8ğä Ĝè˙ĵĝĠ|Pendstream -endobj -827 0 obj -1527 -endobj -828 0 obj<>>>>>endobj -829 0 obj<>stream -xWÛnÛF}÷W ô°Iƒ“Ĝ…ÚumAQÁŠ\JLÈ]f—”Ĵżï™YR˘è j†Dr.;sΙá÷ƒ1;Ĥó ŸQ\ĵŸĵğ=Ħñ˜Ĥ)îœ]œÓ4ĦQ4hïRÚĜšş"EƒÌĴTž%dtµĥîUèYGƒıJ¨TŜrBÚ9ëT-µáäñًö¤Ê2ߐò|}C |0Ǘ·ÓŻ#:G$0ĝbç™6ŭWÚ#ı]éˆî "ı*‹ë\ıC*Ô7D¨ĉD‘ÉÒú -qòÜ”gFSĉ)ĥÎ鸢Ùk-9ŠŬ,´Ÿ½mBO΢}{{H‰%c+BD—[û 6Ş˘TÁ‡|Z·g:ĝJU™5äô÷‰ÊáÒ„ä땕(\‘×>)ĞhċyïĜŞŞtQ"†míİö™Yˆ½”VĠ’ÖË,^JgrğXè„Ĵ‰àsfğö¨KĵÄé#ú ŭ3Ïà .V/¤”N΄Š¨8ĥ5j_2>rŸÏŬÌ%1/\é.#”ف êUµ¤/uœRŠmQÖ—KıÑ$­ĝÀm-^>+24›‹V:;Ws`¨ÊpÑĈ·½ñÒ; Q!OiZeŠŞ¸”&dħö}XêŬµ¸¤¤{\mŒkèjçċ”x[RI‚oş e‚ġ^lc$`£]Jڀ{6Ä_ÏÁ¨CÒU8ŜL@A:==&O.Îñy‚?€< Œ½¤1Àʌ=Gg{œDÇÑeDSĉÌ%'Ô%ĝф >|Ş5Ñ0!ĦĜi£C¤àizù…fĝy÷ëóÍӟ7O³Ùôŝqßċ0 Ì/m'DsÍ-†Ñ]>ĴÚÉÚ$xêĠ¨ħl$ĤMˆ‘‘kö‚òÄh•Oë<ß wïÁ[è@*i½:zü€Ĥ¤ĠZĦLÀSfÖç›^Ä̀ħyßm7 6p’îÙE?ׂExÇ\M³…¨ Ç­;¤Ò‹ŬäôŠĠ-€Ş´ŜgŒĠ-´Ċˆ•yÑ`Ŭµ5>0òÑ#dĦ£À耚ët‰ ”뢗C™i$‚9·Wô M¸żŝûğ*ÊÀ” k$hë=DĠ;‹&{bm腓*ĝҚDĝĵoç Ú”:‘&󷢆üà4Œ|4 /X¨M#oHż ‡Î•%酵%ëħÔaĜñĊçç ;> “a7™aQCħñˆ£üŽsž,uIG÷4½yžŝúôû§>ıf.ìî~ÛF\t€›Ĉ˜X8 OŒ™Ŝ™EmöœùNí˜xüàÁÙÜòŒħ{TfB΋#BÜ=²Ú9pš (ħgċž;LízQTB·ı½B|Ĝ,˨Fˆ G:oÀ˜2éi‰]!UN€á³ÂPTd3££Ù¸ -d|­Ħws̀òŝO(³Z¨Ì0”z9ÂÌW˜ÁâìKù8-ë ÉĜoĤ‹’=ä-Ġ -›ŞÔa|D÷Ŭ}éŻûïn[mí,9Ó)v%èPSË+ÚhżĤ!ŸS›Ŭ”–‰ÓV Ç^jÈ.҄¤ıŞ.ğàžL.˙s|Œ/O0>ĈÜŭt} ·ù0Ò0? Ç¨J\4A¸TrŬ˘Ñ|İ<ÖCïËЃL€›ÛXġ—¤-¤°ÎAÀžkëÄn³èôdövטP² ×ÄÖĴ´˜Ċ€9/jpĠ!V/á8"ûaXµ™ú%t‚ÛÙq:Ër+kƒ°3£e òŠ)¸çÄyfµĞM/lğ…€ħS‰4ğáĥèÛíRPÌÔ1 žĜmd·™PĴJ5ÏòĴ9 @ÊĊÚÙ ë•ÎYïkÇÏ6 û·(qĴ° hl£è=³ …9íĈê -wyċ ÷ÛW!]?|ìÛìv…ĤÖW½„Ġúò0ŭröÛWD€³Lĵvò ×FÚŝşžo§7O²Œ˘(`9ƒ§.Këúbʲö#³ĦP™ñÏb à¸@ç×̚ó 0íG£ĉ˘YğĈgçżšáÍĞó -ö|}˙ŝšŭÊo0m\Ĝ8ċƒĞ£`6|µüœŸDĜħô…ÌÈĉƒŻÄ{êendstream -endobj -830 0 obj -1609 -endobj -831 0 obj<>>>/Annots 27 0 R>>endobj -832 0 obj<>stream -x…RÛ²“0}ç+–ouĈĤR hÏxyrFOùÈ) ÁŽïN@­·qÂNöe­Öç(ALO‚œcŸAöÑCíŜ‘¤(kÊdÄ,Žc”rYÊpvşëŠ/zhàĴ™ĞNMŻž—OԚ"I–Ö-ÏİuSÚŻp­B/tçë;=9‹AŬĤ†zÇ~7O*T)*µJt˜ C;j5˜]×!;ZCP=CIM]kİİt}%Ï÷,Ŝ–‘'X#ñÑûèx`$'ċĴ@$/èğì:œ½jŸÜÓá½ÚÀUŠ•ħ’­ş@8xŒßlƒMàñ:ĴÌĜĉתPïЈĵA­‡ `f‡ŜXQùpÑ!(Ӛ[>W“´šÀéîîpĠ˜d; G–‘$žsĈ×ŬOIû˜’Jj•ĵ.ĝ~ì|SFÑ›*DëÜĝr·ûĦq‰ŝ4Ĉ–gÌÛgsê&ƒÎ˜ĞŸí -#'è!œœO…ĵ…gĞBş4Ž{’9Ċœ^şzqiħZ-ÉrĉL½sêùôáᄏÖ<)éĈÈıWƒN›ÁOß.]ÛíNó”Ĵá6 _É}Š–ĦèŸendstream -endobj -833 0 obj -445 -endobj -834 0 obj<>>>>>endobj -835 0 obj<>stream -xV]sê6}çWì#™)66&ĵÑ´™Ŝ™&sÛKçäEĜÔĜ’k ˙gċ0éĥsLléh÷œŬ³úkÑŸˆÒ˜fsÊÊяëÑÏëÑ4X,èòŻŜá–ó`AÉ"Ċ÷8Ĉ×ZҖwà%`úX>=P<ġèótAëܿǓlü¸•“5Íú¤ÜĠÂ)½£ç/ôUéÜĵ[ÒÒ½›úÍÒğrûğġŸ£)Mâ /˘Ü~ÂDxÄLfQóÛY´ÚI·kŠ˘vMœòе!•KíÔöLn/éMži{™SF‹‚J™í…Vĥ´dĥ˙ÇIΐÔbSHËŞ0ç˜ĵQE³&*aIYh*Oñ1yhj‹U!² -^Öa<ĞiS˜Ŭ9舘žŠŻôɓ(•–K~ 'qûŝE”ĜÖΎ”FĠšŭĦĠ)üUé‰ÖŸOŸ Um´Oƒ&à bċcÊżñ³ÏçùĴ̽X8äJÇNHÎm€DŭĊĵÓĤ†úĵ¸“ÌéœöxÒĤÉ:ϽƒG,6kÑï=x/ÄPÔÛm*WħZ™jċÎd*Ĥkp2eFoĠŽıkp·ÍJYÒZÛ1Hd™|<ħBÉcuW0$ìr¸ġٚ¤=WœıÎ'˘0ZâôúˆjΛ˘"ĵZ˘=‘ôz­šĵĴÑx§0A÷)çĤP”ċĤÇlġß|Ìx˘@k$qDHq­úĠ ?5ÀÈÚĠĤ(z>àĴ÷–3-“tƒ;ınöYúÌQ™?A›ä‹ò÷İv˜J‘3eáÓGghŬ “şQhĞ 1äרppäöÊ2q^?Q7m>Á½Ñ\7`(]îuĥ92k×LRX§—ë5ž§^ żë•ó…Çġ]8É÷£hkaÊÙŝż!µşĈéŭep|C×8a ŞÚšOĝµ^?ċôƒŒ\j¨eĥ\´‹SÊzk†Í­òlZ(Êĥ˘a6 ıóÖÉ<Ĵ€ÓĊ÷ĊRûĊyĝDíïÂd˘`>İ˙ĝoM#ħLì˙ lĦ=ÊCDófTƒ³Qğ9€Êe-@hÙĴlžšL ›`ɰb'àĵ-k-,½2V²™4 ğZü&YcB £mĞÚ1 A•çâzXôƒĴAÍ Ço)7¤ƒ­£œéòlç\-[!P-:ŞoÇÖK3ÛİٛtˆƒÁÑHh*Ħlj<˜ĞŭÙ*PӍr5hejGTˆ3VŻò ħĈIÔQ‰ÁÁ´9¸Û k¤Â3†Oy–9vÑ*ËĜÈ[›êb˙àòÏĞÇî7+ƒBÌ5Â.ÎD³˜6 -ùÀ# -İwŭ½ż â8Mw8/lİP‹Ĝ *1A·ĉPÓë8y½œËT‰ÌIĜU·%ìĜœĦZ)^Dz’µ2ùë/fò5ĈµDmŝŬ•€“ıô…×6Q{˜9`´Ûc,.)}¸/.h”Нr´Ç¤ ıĝ†v+ŻÂÎp™ÑMÛ%ÓċB.§bĊËY²ĵŸóÎiqıĥa˘…ŝç•ñr KÒ¤3ÛhĈàp¤ßFyû=)endstream -endobj -836 0 obj -1212 -endobj -837 0 obj<>>>>>endobj -838 0 obj<>stream -xWÉrÛ8½û+şrÊ˘ے’99[UŞ&Ž'Qj.@$("&-ëïç5ÀML25–,[$€^Ŝë×Í šµ ġ’V”Voĥï·ód³ĦŝîñËĉŻ’]oÖĝıL6d%ċĵ7qL÷ċ³×´X6ÇéĞ͚ĥY¸?§m:y˙$퉴ôGcIi/mnE*İŞ§BŬ%‘eV:—­s&UÂˌŽÊDbxŸ|!áJ%N´“d4~íËí÷‹9MWÉĈ'•Á‚÷í‰gn&ċèî3!’Rxe´+Ô‡ĝ£”š½è·à[vnö’DY’Ğӂ„sjŻ+ݽ°+ìNy˜LıÔJ6Ċ”&-|m%BôU9Ĝ §R*ċ“,ƒ.YİİŞZĞ4úJ^cC³. ÄÁŞŠ!êğġȃ7ŻnO€/`8×V(`ĉE·_îqíPžZ÷—ĞäšÙùOÁl„p‰0nRŸŽŒ"o¨^Ĉ -ÚàH Ò§…BÁĥy“š’Tu(CÒQ™ÇĈÔ ²_/ÚC´¨ä öàEÁ47ù;BÄfS>!¸r^MÀ š0žW§F{kÊëiwbÏF™Û½Ÿ!ŻX—Ğ}m£“Í.ĴlÊ3üKĵwöêädB3éÓûâé…fÂĤŝP‘|Ê/ÓÌ÷˜2ùJ&W(EÔeÏ\h‘ŽÀ÷ĦRÍ9Eeà -p}apá0ä,VĴòS„iP–­}È^"yA Q4œç>>>>>endobj -841 0 obj<>stream -xWÛn6}ÏW ܇zÑDĥĵŜ8ğoIÛè^ŠèK€‚’h‹‰TIʎ˙gHÉV”¸ÛHli8sĉvfĝÏEJsüĤ´ZÛkÊë‹ğġĊïë‹yrsC§?v‹/sZĤi² ċÍ -Ÿé -Ÿ­¤ Á[è9ŝüì{J—´Ŝ@ŭġ >áŭœÖùôm²H– ½Yż˜}L;ħéLú|ĤÛ+Ÿ—Inô& -,)M£žĞĊ -zĤëR9Ú¨J„ĵ5•#_JıoEEZÔ¸œİZ݌&/ìVz—2ñ˜?4*Uu R¸(ğ“–Lö]ĉž\#sµw$˜ÓU -Ĝl~cŞÊìŬ‡ˆnNï\JW‹w ğ9îç'zŬ#V…>íMŒŸÓöĉ^ڝÊñ?„†½Ŝ¨mkÀàQrî|÷|‘&×C{@˜‹=RhĴáÏ)ĦÛÊKĞan'I"âJ"ŝĈRPclA˘E´ïbFÂʝ×<‡Žĥ£ċà„#ĵV…hhŻtĤtq+Eaö˙ŭ֚ĥ9É>wu—Ò8ïÂ\dVĦe"GçÂÚ^”Ĉĉıŭh–C`œ_¨D]Ğ‚ŠĴósè´ô{cNqˆzÏT‡D2íñëá̙|4Öx“£ ğÈmœ‘·M>ˆñġğXŝ½úçxf{~¸âĵŽ=úuƒµÖÉK’"/Él˜"œ¤ZĉÀšûŝŸV(FĝÈ \iĴž™BäŞRžk]èb†rïqp}C½µ`‹ê;ÙħCߜ²è›˜/|µ”Ĥ­ -Ê$ie-·E#Ôċ*“ÎÏj<[`nQG8Ú_Òú×o³Oßzi‡BĠ>A§V#<4úĴnġ€Ô\ ġ0JWçŞs"Hà>ñ¨ô–Œ;îÑÔ°“3{ûs/êLˆÓ1Í.Àés4nU‘( -úCéö‰\Û4Ĉú@òÉK͢¸Ħï@Ġ]T)ò>)½ħÂyۂÍÙ1‚4rŞ -ÚóJÁir€D†™ċ&óBéá€kŸïé/p -˜›H÷éë}è̀á¤Û˘@18ɓ–x š‘ċMĞsž q -eÔórQPù’Ä ˘0‡s ˆ¨FŞĊc8P£èaŞä‡n$ë&Ŝ”%Fú9ĞT†Ïƒ*]â KZaú&Î;xÔVž -q‹$ö%È4Ç Ç=F!‡e;AşSĥ3RNÚ&÷ÚyeÂ8&#Ĵ°_˜(˘SˆP\ú1“HyàÓ &j‹O~°L¤[nc\c”ö¤<'ġ˜cĜçTW+ Gè°>jPÉPòóİ^ħĝ‚ ÷’k³2|e -éß'_éQ88çLĈa$…&Ĝ— -ä”T -żtĦ£z5[~:(ÜŝU&ÙphȰĴĊuìĤ_͈ŭb6\ÒkĜÛ$.ƒu δù‰ wô„x=ŻLù¸— €žd‰óaeÁÔµ"3m$Ûüœ{ŻXt‹CsíâsÀ˙GmöšvÂ*Óş„û0ċ@À,ʁcÀÉo8)!zîÈ6Ô ’6ı¤IoŽĠó÷ÖÁ£L™ˆ"4ı˙|7Jf „KPŽqRKÁŒ²Bú·‘ĝ™|ÊeÖQ0Q0yÒšċ*ÈqtÚ³^ì63²gÙ ’0šĜĤfÖâ#ħû#°Éħĉ&Ħ_'Q_P$V†=ĝ; §jFŠĠ@g)냈ô`—49ÏÌ"†9ğ+ò Ë9ôĤ¸b” …Èw;ĤÖ֗mzíˑĞGa. )ĥBxêqr "?f·,f÷NT-§= Ĉ•çúé “;Y^`ƒ­ğ:Fpd|èG§ŒAlıÈPpö8HúhK!²8Àŭ8yéGî!ĉÈ2|"²S̓ࠐŬ8ìf!v<Š×ÈHĵ–6ƒÙîŠsDÈ ‡ùìF`ñÑ_fn:ÖOŻWIŠk[Ż)÷·Ÿïné›5á~ô›É ħcäWQüjµÀíèowŻ_~–Ğ%tıôŭyñ/1&wÊendstream -endobj -842 0 obj -1574 -endobj -843 0 obj<>>>>>endobj -844 0 obj<>stream -xX]S7}çWÜÉéÔĈ6ԐNÚ Nê)ŠÍ¤ĵÈğ²­°+m$-†ßsĠÚlfšfš0lé~œ{îıwùz0¤ŝétDÇcÊʃ‹ĊÁdq0蟝ÑîĊñˀ~9=ëÉÙ)^‡#~ÇJZñü ;í Î};ZĴ`{ [‹<|< EvHÍż{­Ö’ż˜ŜÌéZ”Òŭúvñċ`@½!œR{6Ŭ™_ŝ1½ž\ŸÏ&ïƒßé7šKû$mĝĤ2Iʑ­µVzMFÓŜñ1|̆?I-­Êh&²ÒˆñÑa -Wׇ·?`u½z&tŠÚ!ĝ˙ġç›ğ??ŬŬÜß.9ĉĤ -i çÉ…5[xhb û}H?YSW˙ ġ›Á+h$Vğ“9-_H•²\JëÈĴ¨½ù Úsï‡Ù^"—F{kŠ‚­1S -³FYcÍŬ·™³Í+“‰˘ƒÍĜlcޑݖ>²áN:S€}ÁÊÑÇ™ò½!ġFŝˆÑžzrSG’6(ù§D22 Ìm Äİ,™­&bž9Ž*Tï“Xš'Ù§ĊTç/MO(wÂâ8şÍ8ĵMŜâòöhzK8é<Ê#ĵ2ÚÑvƒ’ċŠßÀ/Áĵ{A1Kyİ4êj…7–ĥ -e\"yĵ.Óáì‘ôÙÑĈ8ßÂĜ¸Ç•ĉȇë9ċ‹p>‘yLˆĵ çLĤƒ²U~C@BynsŭÄÜq˙„ħĵçUm‚Ê(í™aY!ĴZİ,¤ĠĊúç&›a=ŠĠ9|ġl‡´R‚Ò\"Iı•™ħı£Üpí¨²ĉIċ²ƒ5NääÈżT ÑÊĜ2F{H|6§ÏJçèI­¤ö°++ w 4êT€Ÿ·a.X@rIĝ~Çk)^(pJÊ\ĉ}:×$ŸEY!\ô ;âQÁM(ıFzßB´Î.”YJ:NcûqTÒö Ü^!Ħè,…šàcĈ5uä€DÈ%PP4@‚½žEÔf°X´`0Ĥ‡'%HtH8/­y‚?ĵ%\%İëR‚Ğ`rĈ*”ş*€żO’Ú ]ˆ~lĞġë@„wLÇİ•˜Sè%tŠ£‘ ¨Ĵ]÷ĝŠO‘O ék¨Džš E‡w -ôG¸cıt}úĵQ`>IÀÚñŬd -.ZY9M`Ž# Ád˜:ğa°|ÓB œYżÙû¸ĉ†€ß›Xî7” M X‘UíĜ4^0]ámLLv†#'§Ö:´ 1ĞN`HèN lŒ(ÄĴĥʃÄÂbÀz™³†ğrŸ˘P[Ž•@€h?öĈ:0 èw|sŒ•U°/H{ßAcÄyRÖè’K"C]AJi{Ŝôĝ;•“ċÑ@ğĦĈ*ŜñĜ²Žġ "VAkĠMÉ,eü]Oé˙ôfÍğFŜĠ Bú#*T pd†j`ĜèK *t;£‚˜§ó¨yr`dÌ˙8ż›ìĉ¤5ù6$QB´Q7_7Ó êïĞ”„Żà<Î9ŜΙßn S„Gô^j-ql8Qz!S…ž ÔÑĤ‡€7b‚l+"\H7ĥìŭ|rRè½èuIö -Êê_s7~­•ċ<ÀX]Î&6땀XxŜò֔`ìΞ=ñŜ&0.*l?i8ĥJ­Û <&2 2_„Ş[Yb!HBĠÉS߉5è‹ş"°H´ş7FüP+Mçq ž5—.0KÁ„ùì%§ù‹'³—bgsċ:Ż›•ĵuÖ^îBş;ñTWµ§›Úó·yĜ˜XéĞˇԙ¨\•£ġvuu‰¸Ìší+İYùvë½Ç:ş  ÉG ı­Ñ[uáCÉ(H݁ƒ™ÜOá ?íĊ=yöPM™wò½g6ÄŬn%2ĴġŻS…3œ,ğ—…x˙ ÓidûÇ­ÈħÒä9Û½†™] -hĈP²ċKÇġ5 ‚ó3#ކb£żì1şl–¸„‰£.(ߤë÷bÁşÏ@-â–Ä?òsXÈ0şû—&h›iĦ2ĵz†–[ì%İ0dP#SÔa(—’AQÄ´£y&[\„HF}VEKĈğv³6„Ċ&G`™mĉ=·ÁžJ†0,BôáaĞßx€Ċ8>şŽö\>£!–Ë?cgç=s÷¤zÜ?îcç%tye¸Äjzf·~ÏÏgçtkÍl>>>>>endobj -847 0 obj<>stream -x•WmO8ŝÎŻ•/ ÑÒ–7­NâÜU‚.G³·ZİÒÉM\ê%ħ³ħSèŭú{ĈNÚÒSà¤RÛ3óÌó̌îô¨‹ßöéè„âlç*ÚD;ŬÎÙ­?Š'üÓ~Çg§üùéĵÓ§BҌwà%ŽY}`ùáí1ġzÍpúÉÙ)E‰ß(Ŝ:ĦYZÚıÄßÂdäĉ’bÏċĠDB“pNfı#gHĈsĦŸ$ ʤµß^”›c­p”aŸÒü$Mi*ɖÓ2v„ûя.µ{G4JöœÊd۔Ž™ŠíêÈÎ %-2IʒқX‹ŝU!­IK§ |Ky.ó`ϖq,er@SËQÔŜÄBoY×Ĉ.›t(šÖ°€ ´Né'š™‚J+ KmĤrì– PˆĜÉBY§b23o-/Œ3ħI;•­ŝIç˜#àÉŭ˜)˜Kp†ÀÖ:ê İÁ“ğû?Œ£1ÍT*ÙĦMĉµûÌ<àWĝ=ğSÚ-‘ÇX8†œo`5Šè^ Ôï‚ÔÊçñİĜĵâÓġĊdòm8E“Éĝû8Üġ'“›Çá_ƒÇñd2ˆßz³V'í„Ò@†é2| Ë$-cĵÜdP ¤£„‘lA U€Áœ‰`öo*<ĥûsY€a™:×Ŝ -k žˆÊ“Lä9sÑ -İ”É6ğ† ú2WÌ FÑ<[JĠ³ĵ¨9ç¤ġ¨Ŭ˙ĜHĠÏ.]›|Y¨§ı£É^<Ù§ŜùùŬи0ÖÌ^ym Ĵ8Ô­6×l?ZB^Y‘ċÈñ&!XL M™ûÄÊ”aé:ċĝàJF£³Eׇ8 ÄÏ^¨•ÎϚv6=>ûŒĴĝr,ŸuB¤ċ˜ħÉò5€“fÏ^Ċ_ŭÊÑE’lħ$;7e -H$=K”WÈe…B-Ta •Z6&ÁníÙĈay*â &dv:ĝ›–™T\rViht<6EU ™}›Á˘×üĴ•Â+*4Ï\GkeŽʂ7R)à˘Aç°9\gĊ;1 –Zğ­uĊm<œ{’Z^žgHS"Q览RĝJˆòm²,pÍÊ= £ú6'r*Ûdż1Ž½)wŒÊüÂMs-‚ğËŬ vZPżóZ1œÒlnĴkv‹iʕ™Í¸Sù„ûsŜäĞ“Úr` p˙Ŭ–l£^ìğƒVÜ|ıżĝœ˜ …ô·–G×w_oô™Ŭf9|´ájûpô÷ċ]4x]Fy2Ŭüßµ“I÷Uk”mt;/”ö ĠĜ1¸äı)Üdż)˘Ĥçtğ_èe%ój’ñ5Ĥ–0cĠS„Ü -SL,ÀŜĈÓ9½Ħt€Ŝ(y^ŠÄ‹Oĝµï"~`èĠ˜‰2u~›b²ÍÇó\´:2 RXN+Wn£ÑcÄ 2§d 3˜}ĵħl&Tj]$› Uñ­pjín2Ĵ…֚XĦŠpĜˆ´V§˘˘ÌÈXÍT(@5{ıŜpbÌĦsóòîÉÓ³°à˜š'oü·P10žÊıX`ÀѵŽ^¨Âh;<)˜ċF·9“,ŭ€*Ô$Ô †$àt@a*Ġv­@O DÊÓr’j(ÜV=1x)Ûñ]Ĉw“ ?çĤ/ÌkG”HÚĠӜ-úliôŸ‡¨é…ïoyɧ/”DúuĤŒ}â–\ÜZğ˙­'•ˆ0WĦ‹°ĠÇÛëĠ|…f|5Kšxîya´†gÀš)ëŞċSîEÁX\UfùŽ´xÂM;QX·,A_G×íİ`ħ¨7:ÇٜĘÉ-Rġ6U"LÖ à’Ìó-Ŝòdáé)‹FÌqùbŸ.ï]~ÓBánƒ‰ÄßùŞy”ïFŒïĈün.Œ`q@-(ĥĵ50ŻÎ`ĵzĜÍpaÑ[LMTMŞĊ;Ó!&‰żCħcċUR+/§İŠ[,E~Ê7-K};'o@…—žß Ö<ŝ§¸ôñHĜ•i:†ĉ]ÇlËz#ĤH$£‡‰ĥş„òĜÈoÏŞËKïä¤Ó£“ó^ç„gëñċŭĠ%=Ĉ_˜oL\rħwBŜ×byû´[{²÷ΕëĝôÓş_Ġ;ċ­¸Ûŭıó/OŜĈ*endstream -endobj -848 0 obj -1741 -endobj -849 0 obj<>>>>>endobj -850 0 obj<>stream -x•W]OÛH}çW\%›• $!ċ£o@Ân$HYânµ’jbÉ´öŒ;cù÷{îĜqZïBiilïçıçžü8Ò?C:ÑÉ)EÙÁUp0 ŭósÚŝ²¸Éè˘Jó3ŝ|zŜ“•”+x -;Í/œ? lŸÂVûÇ -˘Ġş´”$–ݤÂÀ’ˆİXIJ³•q…£Dá+£H:—”işîS°RŽË5áżRÇÒŝ|;ёŽá0ÌD´RZ†Ħ[ğBfa•ÖJ]DFÖ¤Nx$퓂ŭ0L…΄ĉki0Vd²O4\;„ Œv+akġİ´ßÊGċ -‹p*ËÓ5‰8ĤN^.Su8SŸ$ŽPb_ZÙo³ÚvµÔ½šŝ1›%3Ŭé|òġò6˜>Ì/ƒ)WéÙĜĜ‘HSóLY™*GAğ³ùġíçÉ´Ġ+ʅB9Ž z´ĤÌ%â4’cíÓ^“SúqŻ?¤t”–ħl5üĴҔ"Q:´ħ{³ì·XĈïŻÀÒHn}HÚè£Ü*] &Š$qïàLs2[Ê8FhP&ò§-×­&Ê˘9páŝ°MŽw.‹ĞÙ§i ƒ-ŭ( *Ċ¨8äçšJ. l5†ƒ­nġ˘O>—‘J€ZÉzi‰2׿NêŭU -{bž|À$HÓ EĞ=BÈ$9Z#_ -İ=Ĝ?ĥċÑvŸ†ƒQ˙¸żg~Ä-&lĤş÷SêN>Ŭ}Ô²8żs@ÔĊE†ßMß`nĜf­ôÍ ëpÜií|è:.°H ‡İï·x°Üäe*ìŽı*‡½Δ6Qyêx‹íĦŻMj"‘:û´cË×gçšK#· tç˙&ĴĠyM 9´ĴÉ%Ö‚=wáNĊÌo{Ŭ÷ŝïîÑW›‹ĥû4иW,ÍcĜƒÜÏe“NŬ"â ”îİGĞĠ†Kxà‘ñV›­ÁÑñäÛÙĞñÂ'áÂĥ³Anejú{èMpƒ;h{6xĠù0$8ƒ06ĵ&[CħĤ˜nÛ>ҍÀê–)4ĥÄ?˜Ü[·ÊÓmÓiµ_mĠj‹'ĦRŜïg§ı)xˆÂüyeÀM~ñ#mladX£žı"2Yµ˜Œ&‰ġNİ1ßËü°=Hƒ=(™½y]bXĉşĈÊ$(SZeeF~Cag[Q.-ĉ˘ jO‹—°•8†Ù,¸ vĴû'ċ6ŞĈm%À^Ħı -½ hMAbµ{r†u.Œ/ħh,džb•áÓFŒß\pÌÚk@#ˆµÑžú:éóŭùi,ĵIö}|3Ĥá°zċhtĈbʋ­M/JWzà0Î ßş[cóìhŝAS£t Ò•IèʍÉ቏˘wŭ1 żÌĉó ˙,‚éŬÉ( '³ż§‹0œž˙·Áôüh4ëğ8ğ§Ë8†xUò‰p‹5f5g˘ˆVÛÙ¨]ç{½O³f~°ħ‘Ér]aƒ×:Œš´äŽ+°!˨(ı½z'ßCŠeŽĈĝŭ…³+,ßàúŝxvżieíVê'efà2BK˘a2ċìĤÂ@êsMÏ˘ -Iŝ(żX­gúĴĠËñ­Òċ íW¸w,‹èĜëĉŭnö~Íhpħüß žŝ™qŸ&óŬú‘Ûw™HäbİRUx™Í—k¸­Ĝ¸(s&HħyPĞjjäċ%"òÖş„¤ĉɊÑù×eÖ3•@Ûé¤C%Ĥ˜¸ü•‚Ž )h-|Qäç•­(WġWpċ5nÖôTKÀWžç&Fë×9ìm6ì7:š™ĥçàh@™Ä÷ † 5Òriħ" ŽÂ(ÈÒçÉk45GÂß}:^Şz×Ô])"ϨH—³tċò›Œ<† *ĉmòûÌWĠ·ş9uŠŝÜĞ<#0ôMÖpw ‡5ŸDŜŜU܂ŜBËè;c½CÇYòîâĵ–ÎbS‚W.÷Wċàà[UúŽg£"P"ʂ^†ñ=³ävݳ]V<½ġph³?ꉍ5eĤÍë(—y—~?\´°ïyÍ{Ó³>³Ĉ—Ŝoż‹ËğĞKş·Ĉweb˘’ıÁcÓ?ŞŜ:Ş^ëŭ’­ÇgcÌ0›í Ïù%,„żŝħ£•Ôendstream -endobj -851 0 obj -1653 -endobj -852 0 obj<>>>>>endobj -853 0 obj<>stream -xWßOÛ:}çŻĝ´§N‚´)…I{€ħiHpĠ^MWâĊM\â‘ĜYìPúßßóÙNI3&]ŬĦUmì|?Ï9Ÿŭë( ŝRZLétNYutµ:úĵ:š$ççôúÑ<âDŽÎÒY2£Ùùß§ÓäœIìĊÊbŽŸa%â_-,ÂÁŝ†Ĉ_.(Ñjżós|Éŭú„VÙè49MÎúqsğ¤oĈ<µġûĠÏ£ñ—ixdşÀ£Ë°çaôCéÜl-Ŭh'-ŬŠJÒR6ϲyxO_T&IYr…$ùĞUÏBjGfP³ÉÒÉ$cJĥ–™Ú(™ÓíĠí’]Oè$=MĤìòat+ŬĠÍŬòEB1v%²Î4Ғ·‹%Ħsşı'‘çX°xà -áH B|TqázG‚b2ÇYİ8bR!äĠ§û1ÌYéښ -ai-ĤGġŒOĜ-°HOËPĦP öü'ÑútŽV"­•ĦÌèzlRTkAÎÀ&‡mˆiqġ6Ĥ,ÍVéGŞEƒÔ9i)sÎ6ĵ’çHßywè°ċ;7²Ġ:aGáq×mT)?t{/¸É)LÏBp˙Áİ%ÛÖµi}¤¤=4sÂïÌCŸŜN¨µ˙1#ô …y!}.]˙+Ú[Á2’@(.ùaV6éċċ%éŭ˙s‚Ûˆ‰ċvċí½ÉVßuĝ…!u è5ÙC“B³ĊĊ+Ġ{|î³w6;KĉH¨ÏßYB_Í–Ö HÉHÙ´:sÊ }LƒK€G.ëÒì@ħ.Ñ,#İsŝŬ‹ĊÚ[j½=ìPÙ( -Àˆmkó,éû²£U"+”ù:Îq_UC§Uéa¤™|MŻ/û IĜè˘‹˘é‹ÛĠMĤ–à|Ħ=Fs8,µ5T˘´ĉ˜@×½*½ˆÌĝT/ÛBeB€hyß!ä`wà߉'äT—"h\ΜĴg´“à(B×Ĉùœz ²2ŽüŝMIúì8JvL@bßÁ·ï_ï–Ğ%•^ı!X–¤ĉ–ĉÇôë‚•ìWħĤlıhoH— µê&°1 s`ğ÷êM?`eù{í€AHĠVb _|iC¨ó9‹&tĝïëûAÂÀ ÈáĠ%´â( œEŭ˘ö•&%k‰tL­.!üԕ F^'KÈżĠG8r3ô ĤŒVıÖÌFÉóĴrD$€#ĥ!”(àH’ġş[íŻÄŽEÍÈÔşÜ Vú§Ì˜HJnj< Ħ‹>b OĴ+dŸcHvkš'(p•ħŭ.nZH|÷:;ŜûûwópÄjż _Ú*t“Ċ]Ñ´â6ħĈìyUŽÉĉá ÏP‘„–\ÔZdOÒYʄĉÒ4Ĥċ -xyrEk,>nD^î ‡Ò‘ȃvÇ÷cQì0×ëĥa}äÀĵJ`˜£‰ŝe‰ú3#|~ÌòHr8Ê Ħ ĴBĈ`y萧97ŒO^”ĜŸ;,_½„îà -ŞöJÈĜB€èǀŠĝ p_“ ĞÜTòwJ`Ë äqç^Öùƒ0!Î(FƒAÊh„ÊÊ 5r;<óĈqzp) ħ€ŞpġŜt=pêû"…ɳ­AvÙ­Ż@¨ċ @yĜ†™}âÍ~^BÂ6İ:JCì1Ä>ċKVŭÈf˘üŝçċú,%ĵ0†ĥúˆô-Ôc!ÁíĥvŞÂpGàià2ĜaVXœÉLIÈԂKŝ \éüa„ħ~àxyχ7q5dñ'6·°`;Çf÷Šj€ż,Rŝց²ŠÓşevZÂáG²†xŞkU2ĝ=T›r0Hġ bŸ˜Ĥ¸Ċ8\ĝßŬ:Ĉ½!ít€K½ÛßüLA)pXC5ž~:à|ŒÚî鋳*ÉʵdĦßq² ßL2Ái#_¤PD Ò×(ôÏŸğր˜,½ -§‡PlІ:û‹ vAXÇ_ÎI8/’”ĉó4Ü –—߯.é1<èÚdmFù<9˜“°ŭd1Ċŭ3˙ŭsĥ˜á,ê7¤üÎÈŭ Â3ínendstream -endobj -854 0 obj -1696 -endobj -855 0 obj<>>>/Annots 34 0 R>>endobj -856 0 obj<>stream -xXÛnÈ}÷WĉI X´n–äò0Žg’ĈžMĴĊ$Àĵ´ÈĤÔk’­í&ċQ>§Ş›s7$@‡ÍêS眪֯Wsšáߜ6 Z)-ŻîwWvW³dğŝÇ ‹ħÚnıX$[ršr~ϰK÷Ġ7W4ŸÓ.Çĉëí†v™<ŸÑ.<ĞrŻÈ7§“uµ'EıVuƒ½ê£ŞI…}ġ”[—êŒüJĥ2^ĠĈVD6§½sM…ñürêĴ÷älScuëWë^<5ŜTì§Ĝŭr5£é|™,äÓ­5µ›öï褜*u­™Š_"_î“ÔV9ċĤ íŽĈSŞŻ=…äİĥ„µJkyĦ°İ*¨Tž7 şQhdݘ„y’Ş2⭜ŝµÑn³â£…“ğîè1 ç:­ÍYĴ6Ù)ŬA…VÀÖk>%ƒ´ż¸œç=:Ŝnaé,Ġ jÒxȑT–âx´Wž^xÉÛ˘‘şXG_?==âŝîÚkÚ75h›éhŞP’,TŸÑ˙OE:9{6>`Â(²ĤĤj&j™`SĦvı³e8 Ş ² G™şs]3!Ĵ @ VĉŻ™—8ç›=à–”„{–ò!˜µİuUCÉpl„'DÑUm@™@ù“•:=* d¤âѳ„„”£àŭÒ´…öl=<=_/½ù‹('7şNoŽ -ZµNI ò–l•31ƒŬn—|Ô>ôßJ˙ĉÍWAè··÷@èËä6ĦÇgújŞŒ5íuÚ8S_Ȟ¨ü?ÚרĤÜĜ˘Ät{ĵ5"Cĵ^ë²à™ŞÖ{ĵÍJ_°×LAÓÂkqFFWİğœ˜p'ċ½T•”g¨Ù]. -]éƒNHT“jÀ”, >TÚLmzÑ[MTò’¨„žvŸÏóo?¨;³•ĉŻiĦ•£ZġkŽˆÉ‘7ċİ@ec2Q`£€ } -ĈiU˜èl”éŠOz~ĵ'&LmSËDÄ90°g¨›Ÿµ–ÏÄ?ŠŭFúşĊ-šEßC(²?ŒÎÊÀċj/ĴâJ­&›|°ŭî`ÈÊP“9âġÚkĵ…×`¸XOC`5<ÜvÀß^ĠĊ˙Èù˘ÇußWôĝ°"ìväÊó??}ú—‡íŸ]ĜXħ(;ñRÙW8ş—מv²KU–F•M7 .KbòmħŜć­ÒĝYחv£ê · 0⊖(q,¸/x$’AĤ¨ìŠ ˆòı´Äwx¤¸żÔÖşV`š˜ż5*™ÂÎï"¤ı ŻòáŸ~ŝü™uàà´ Bġ§ö…ìÀzğĤ=ŝïá3½è °°-ô¤FĦŜ•ê`k·„ÎŞhYAdM?>ûqöâ²\ÏŞzTĠż·ċP‡opĞ8ŒÌy"ùëŸĉ³À^ĜGJ@t—lâ_=óü2œV–+ÌĈŝn›ĥY9³^ĴTOˆxŭ°ûŬ6YżŬ½Œ$!LGmBH?µ&!ˆ-\ż|.L,N,àŸż|Ŭ}A§s…ĤŞ´PĤke -?—ĴMUiqÖiÈ˘ ONìJħp-´+½ğ…Ÿè)Dv6)ÛIúBóëĦCà­s_&ß]˙ -m7ï/Á½blƒÉƒ–Ù[À[+Nè}QôAħr°¸ELcĝ0ò.½ÊŽ -£>8—Ŭݵ¸Îpĉ -tğĜ jÛqŽêŒĈò²FXĉìéÄ4o½ĥ„ŝ¤HžXˆġâk&CGàÎgTš -³-Ê×µĜoB ‰²XÄŭT]ëò„~ÇBeù ‚Ê3‡Á‘çÖ*r䭛J~:ğ–WÂ!FĦĝSĠ*À ëúŬ§*="\jOhġÁX[ǰIò†'*›×ÌjgAĉ­Ŭžİ ÉĦ %ÖµĊbĴ$,ۆìÚ×è].Á"K­0ŠŻlĴÛéFDwaÚuwÜÚôxbžê -Hìr-ۘTĈM’ Ħ`¨\\hĤWu§Šĵ a-†eš >ÏC$k†rȚ ¤2–›Ċ[qŒÎÂ3‹ÚĦwèu­½şëp>ƒŞ˜ÊÔ|˙à-Ĵ͸â3u¨Œ"ÀébtáÑ£}“1 ɤ6ĤÈġĉâvġàYĊ31H.­áÄÌ` •Œ²ġxG;Ŝ}1ú–Ê[²nĝBÓ:_{Yäé´-%cP“YJSKğBôÁ xڊĝJ5ƒ3ßÛÊÈ!ıyÀe².i˗kùğRoûmßàŝŽgí9mı ğg*,×C)@w#ïûĈâ²Md– !Ĥ³Y"’6kô1ùŝߤ³áQżâ·ŝÏıôy:—‰Mï÷ŭĈK‚èîVó|$uïbǒEqQĞÂڗĉÔ-lVKñu••,—ùŭWû?7àf…ÛDB÷Z~à‰ño=ƒĜ\Ï|O°îpż -òCH>ȳ­ÄÏ8ÖÍÇmœçëM2Ǐ&·a<~~˙x˙ž~rö˜6=Ĝ´) ğüLòéf!ƒĉ˙{ċ‡˙’µÚ0á$ĈbĈ ƒ-ıú'ıäÜendstream -endobj -857 0 obj -2022 -endobj -858 0 obj<>>>>>endobj -859 0 obj<>stream -x½W]OÛH}çW\ċ)TĊÄIH`%ÊR´<ş"¨ğšĜdÀö¸3cBŝŭž;c;ÄPiµÛVԉgîÇıçž{ùyÓcši2£¤8¸X|]Œ˘ÓSÚŭ0+|ÀħÉ$šÑôtŽçé4š’‘”á,>hÜĵñ‡üĜÂK8è~ÀñĠ˜â˜üÎNç´Hŭû-’am)E!)—/2?\<_M›ÓCŞ„Á;' )KF™o çJ*Leñùgˆl‘˙ĵ5ŸqÏڍ6)é’îo˙"ğµN–tĉpğϒàİPŻ2DàS²†ğŜlD´Xe!EiÉ­…#U "’L›Ĉm<p+Ĝ–a_‚~¨2ĠKgŻ”äJ–ŽœĤD—Lü£ ;Q,á"ĊEUpR -CN:µ[–J„Sşü ߒ*-†6ı^XÔÖÑR÷ÎÖ -ñŞŠş ².–uFuUáÁCKÇhoÖ*Y7~gm5]çiˆeW!ğˆX‰u w£ô¸ġ‚Ä9ŽĦÉŝöŽ‘ _9#RĊ9‹œ.żŜħĝÄñ%f[ı‡áĦ‡ƒQŝ"“Ni£òäµuÎìEċSW•E/²ËYY ÊdF]qıÜGĵe‘[½3Oı.W€1×+Ĉİ9Ż|ÏġZĜu HQĠ3x—Ĥ¨'3Ö#֝Ĵ3LQĤDÎlùeêIZnŭ5ȓ˘B8”xç\Ċ†ï‰ L],UÙ8˄Êûmµ@Ċ–DÒˆ)žÙ:že)–9j -i¸?•Żĵĥq[İ$4‚´é\’i„^7hï8nm$ÚR—™ZĠĈÇH•ĥV-UŽBUï­ġ ¨>püġ7˘“IÌÒċċlŒ§V³ŽŻÎ(†„°BMÏĉ­w5‰N˘8˘{HÄ·ğŽ7 İ÷Zĥá6;Ŭ)këŜ°Q·Ö)hĝ˘ó—†ŝ" ìï -žé<×.u'‚H—éÄŭS,#†…2•KŸàñĠˆÎ8N‚Ró§ċM-Îéoi[°!úZ{Úʤ6ÊméüM*H îk+Û6ó9 n¤ğ¸½{dAÔÙ÷Ëßû@qx³ ›]ĠÉm4mÄÖçR–żl˙ƒ1Èe¨ÔFݳ~ZxúwTBA³P‘+ˆ?Ñ-ş‚ġM´‘kÈ -£D• +…I]ŭßè*Ĝä`{èĵ^yÑËV ­Q£|­} ìè‰E—#”ĈĵëıD§ò£Ô(,"~ÑNzùÛ?÷È0¨€ÁZ -š‘ÂjÌĴ0eĵ6AÖRӃĦCŻcAK½Ş>’#™ShżíNó—* cdÁ2ßÜgízpŸü´C˜­­žo6ÒYôĠC|è$üË1XŽ ÂF áD3ù_èP¸NE~!hx¨{ç˘çŠĝLşF° ¤˜HZk79pĦW{áXT9ŜögŠÏ•ĠöĤmżÄ÷aÛ÷ÚÂöĴ§ä1òg­ KL'üÔ<ĵĦu€L`Ħı/Ġ+‰³ĞK-“Qf"ĤĉU/È’£cŠnex‘r<£˜/<=Ĝ'Ĵàì™ [LȧQÑñÉ´[ŭ~˘ñȋŠŽ#úĈğW`'†”lw}§ÖN†R] 6œżĠSŻau`tzJÊûŬ˙Ĵ£ğ>QìİÏ+£ë -‚;â~€pÉëç·şîişïœ>íCÔSZĉHPIƒO ÛU]4ëé gl˜cŭşÊŒ ‹„'\ˆ'³3˜S  şG°†÷ˆ'°Î`àbàHÓ= kÊ{ËF¸{”ğYôğçúÍòxŽß -x†Â*çMR5x/Ŝ铆qöü–ÔïùĊKˆêOŠ6DL„@"ÛÌÚÓf'Žgó(ĤÙlîŬ—o_èğÑ^˙.uâ!ö2Ċ¸…Gó1~ġI‡˙u­˜Î§˜ĜŜÄ8fğhË?ŝœ#fgendstream -endobj -860 0 obj -1525 -endobj -861 0 obj<>>>/Annots 39 0 R>>endobj -862 0 obj<>stream -xVïoÛ6ŭîżâ|ñ€Z²äŸí–I“tğ›C7 ´DÛl%Ñi;ŝï÷Ž”,ÇHV` àXyĵ{÷Ŝ;~oEÔĊoD£˜zCJòÖġĵu;ouƒñ˜šr…‡.ûAŸú‡ĝ(%-ħ´Kñɛ¨‡}ŝbá-8~ Px×§(˘ù’ŽG4OŬ‚.͓ö´ ğ–t?£ÏŞHġŜdNİ΅*(х-u–É’ĥF+rKg²Üá?÷˘+üiJ‚r‘ĴU!I$‰Ŝ––şäĊ?ÍżĥşÔ‰zAŒSÛ3‘/ ~Ŝ%UnЍŝGĠû:w~Ŭ‰‡À&òÑ&ís˙¨Ší#™ƒħ2'ù(“­•oĞŬƒ*z›LĜcö)uJútóîŸÉĠŭ-uÒÍôŝêÄ=>“@JÛϤӉǨ阃‘¤—(YÊuêÄV%Â*¤šjiï[….â jZH|ĈŠ"eJ…z<àgôC—)X}†*ŞRĞQĥ*&‰‹~ ²‡Hĵoґ)-™Ìµ•ÇŜßĵ ˆĉ\DŬÈDĜ~vâ"ÓÉ7Aŝ›RîP$ez œt Ò\˘cç ­’La[”Š•!³Mք쌴–Ù…ġŞĜ‰ U˜µÌ2.ıâPxÉ8 -Ÿ°)”6 }O}jŞ´ '•‡€˙ë¤U+"bYüñĠï ƒ74ŽÂœú£XċŸ2šħ ğxäŝž*ċ -fV–Úıs½óÀsên £Qkˆ;f˜Ÿ‚È“>—ù¨xîpiE_Ĥ#l£[—*ÄÛFÈ”ÙÔBƒA€ĵ{œĥ{hÒ ž$=…TwJî]ĤàŽáà”ĴĊ5ùĠoÓÏó)„Ñ'ÌÚ iïïFqmF+ĵ{Cdı„Ż ˘Shc0½`ôz§‹ZmAzúŽ~Ÿp’%âÑyÚL4 <œ•›kô5•V¨ìĜjǗUĤ"ûû,U?šG, ]ҟò•ú+ZJ7:ÙBäÖ]9ïŽßĠñÛÚ˙oNöG}äĉ.İqÌQ‘òï­,VPendstream -endobj -863 0 obj -1423 -endobj -864 0 obj<>>>>>endobj -865 0 obj<>stream -x•TMoÛ0 ½çWŬ0ˉ8É1mWìҏ-z)0(²œ¨µT’“ġߏ´ì$: ³ĥD>ò=>½ F0Ä{ÓÒ D=¸ÊßòÁÍfp|Ĝ5~ a2Ÿħ1ŒgS|OS–•PR.bš·Ç·s /1{6›B^´ëCÈĊeÊ&,e ƒğ%<)]˜½ƒûî¸Ĝ(-a!„i´w_ò—A|;>¤‰’ Ñóâ2ßH'#¸•o²²£ĞwĜo¤†%ŻW”ƒĈáî€Caj4€0Ú[SUÒ2€Ÿ²”ĵż‘!(zĵıŽ?<ċPKèCˆFX(aÖá -éıŞ • aNŭ J&Ħ0èOnyQ@ä ^)—ĵ’£âBîbŬT\ÔĦß_š×òâùùsˆ´â1ٖ;·Ç\˙êUĈ!ŞÏŞU5Í/h𠽤­€H7 8™dgf U”Ñ(E‚_)ĥÖìT!Iˆ²’żĠŞ’PK‘oĥȓG1c-­8„°ô\Ż Ž2şCĊ"¸7àĥR(^ñIm-ezƒA9QÖ ×”^XIÙI ÜĈŠfí9ïT'îr€vÌî÷ĈBeÖGğ”îkۇÒkÂóé‰}Ñbâ VÖržbû8kġqHÂŞñ ´ó’˜öµí ̸)ÓÊS널ŭF‰ 1QÌ„Á>C;ñP?Îsâ/m3 íñ­èMq0Ò9Úµ|N²i·Ŝ;’–£IĤuĦOKB7§ìw<ĈyrR4Vù÷Ŝ…µĴWdÀ°pĝ;PoD╗Vcé;¤ĜJ}ÒĜ 4ܤ|˙OĜÎcôôÇĥ˜uôŒ²)£s“Ş>žmËĊŬĠ­y‘Âc˘İ4t˘˘֝„dR­´^° ZĜfƒBkŻD+R7F”d<cm-[IJ?°ĉƒ?ȤФendstream -endobj -866 0 obj -736 -endobj -867 0 obj<>>>>>endobj -868 0 obj<>stream -xW[oÛ6~ÏŻ8@6ÌùçÒ{hğġi:Ä{ Ñms•H—¤â¸ż~ß!EIV4,› -(5ĊsûÎwżÍi†sş]Ġ ċĠهĠÙŻĞ³YvwGŬËnñcF7 ĵ–w·xϗóì†Ĵ¤ öÎhħĵÊéÓġ"[ĈOP†Ż° iúé--f´ÚÀÍí­Š+ùäNì½´´Ìè£Ñµ­­Ò[úòŝ3mŒB9oĠşö² ĵßĴŝ:›Ñċb “\joEY‰*ĦĊ[DíwXUıÊhŜÍĥçĜÎĥ/Żĉ’ËlžÑ½¨Ö‚„.ĜXÜş¤ùĵÙş¸ċïI×Ġî™ ŭĦĠ3ı£ó²rô0‘Ûwt_kş7°Ê=ĵı áè ˒˙ ˘g<îĦ¨ĵdSż)]?_6޽*ĠwÉ[›°ĉ )Ĵ~)ëíVĴKIïOâ!úlŠş”l>?ĵĉJü‘ĵĦ½5OސD8\PX0V}¸OĴtĤĥùvnŞ)ÉIû¤ré2úb!&ĊŸ‹:g|ĝÀݐırĵ„}µƒ~ ŻŸ£Ħ ᣽pî`l1ˆğ^Ĵ¤&1`]ÈÇd*}> RAfú)ejè`ê²˙Ġ -üd7Á¸ĜsÄR1BĜħµ™ô;á[ìvúÀ³û:ß!Ŝ|g€NcYé'S"ÊЧf€cÉÖĴpï(y‚,ÍV5œmğnŠĜ Qxħ ŝ^èL³fiqƒfĉĦìBH&¨’ùNhċވŠô2÷àHT‚Ğ‹‹6ÖvIµ.¤-¨ĉŬÓ"òώšJoĴ@̓aµ•`’,”ç¤tĦPQµ(ƒ†*+  \QşIO2›ˆZe ‘^Ħ)KsĤ€ĥ&ù,Ş=Ş>:9˘s:F‘›XیEF´Úµ¤p'Az³ç²u´–2£‡R­sSU蝖|сŽèTš÷5ċÉy‘uÜrlšÁŠ:ÑŻC÷‰!îhnS—ĜĊa…ށ–1`S%„Ċ6Y"£_&Z;ğŬ³’Ĥµäc]*ˆóĠ8Î8BYEĤöˆ<—{x˜CrgNQí…ĠŝPĴ3×ìié’Ĉ¤z˧ÂÏuĴ“óÁËËy6KÁàääú9î2p6ĥKJh=íŸ!ܟR‹Şüĉò ŜÓ´9„ö>”ĦôŝĜ„ÀÁ5½F\›àÑKáópn$K”Zì‰íyŞ÷˙.ı‡Zêù] U”|ËMȁÚ8KĞâz\ÏsSkߘ °9ċq,‡‡aóŞ’#ĉOäĈƒîчµ{ù LÏXŞĈ%ÏA†ìX%Ú"òôÒáóö<†ÇÌĉE[*ĉ8²èíñçĞ`éL~…óÔğÓĝ’KäĤb¸QyĉàÂ@€sĜÊ})òJŞ8Çd(Óˆ>=AäblĤó².ä;vxĴ éZé)Š|ЧéLz_ġJpƒx˜ÏÌM!ǵRUʧMĦ÷RÌB:ß?2Gƒ$/XáŬéްÎԘ–~F‚/[œg}oXs‰ñ74ôàäHD]é6YcĵùÚĊZ>>>/Annots 42 0 R>>endobj -871 0 obj<>stream -xĠXÛnÛF}÷W PQ‹”]ì}pàşPi­hWäR܄ä2ğ¤dġë{f—)*6ŒZeqwgfÎèËĊ”&ĝÒjFo–ċïÖ?/&ÁĠu/f‹&4›ż f4żZáŭj\‘‘”àì„Ŝ\-ñúµ'‹é"Xž=\ƒê T„w°dJë-ŻV´ŽŬó ­£Q)ò?l)…µĠŻ×Ÿ.ÂğyszDûTE)ĠVZŞRI"ߢXTb#ĴlGş¨„*ü‘{muRÑŭíœd™CYɘXÁ^›˜5LhÈŜû ÒáL> -=ĦğşÀ`E£FCÍEŒGš‡¸;AÇ×Í[ıA7˜ê*"—Ö6&Í ĉÊÇdR‘ë!=Ô ÌZ…¨é,&‘Ħì1 œV–Èàâ -`ôֈœDÓŜĈÓÚâ -†Tv†ĥDA9éQ*Š-şNmÛİÓ¨huüżŜ8ú˘ŽùB ŭ·à}î £§ÒC§Oƒ˙]É·:Ô0OÑgFĉç)F)—ŒesKP´cÏRctl¸`´ƒĉ)AĜ0—•CžÊ‡ÛyŞÔèz‹AŒóB>Ví3Ï Üigb@2ɜÙÈlĥıqÊ&P/ƒpôŻ7#<ŭ£ŻĊXÂîÌBüVÇ4Ù"ÏÍPÒ nĜ¨ S\ħb7œÊ͓i‘ĊN]0ÉA™ë\6ƒ‰•™W-*½ċ’Î}Ÿµ–ĞyRĊÙ9GmŞTTü]8?HgSú-ïsğ îHekÈ(·y†?eŽĴR÷L˃ÙvÛí‚.SKċıgò¤‡+êè ·>¤[!Ġ"ÎPó‹£0] ‰ŭ&m| ”İ„4꒐™⒋Ïĵ4öħN rŞyQ@Ó=^€YñDˆ]V\ĤÏpFImCİÌʤ†%IvÍÓíŞÈċìú¸ÎÎ-ĤX2ğkš‚}òJy½pì§Û)çĜèĥèÓ7'¤m@ŜŒWÒÑxĥŞ+üéB†8î"e¤ÈÔ_ WFçЍ8ƒœ·‘*‚Ÿ ÷˘SNzŞ|tyĥŻ€şAX|ĥ=òĜò—ÛŬĤW3ĈŠˆŸú°5û7(ù„~ûéb~\ÓbŽċ4]L‚7ŝŸŒĝ[ŽJ‚Żhħ@0şXÒÇŻ,ğÛé`,ö£´ŞÊ·aèÔnlÚlÓÓîŸŝĝÚÇò8pI˘7m2eS.l×BÛJÊ€S!0e/ğ-ÄW/Ğn…ħ0 m~½ï8…+^[J€snċdÜ;P~Éí[ß\`™Ĝ €Ğáh ˘,³†p4_8Ç:ĠÂ&Îx·šĤbÇt£ċÔp˘D 5ïPpÇşŬŞÀA¸ -€˜Ħ'vß]ÜD•‚¤Ûv;c½áŬU³ÔN—+ìĊËëİßżnîßŬ£?a•£Ûŝ‚È÷Ĉŝĝx5.ñèĊ1_ÍħÁıÓ3GŞ_/ŝĴÄ1endstream -endobj -872 0 obj -1701 -endobj -873 0 obj<>>>/Annots 47 0 R>>endobj -874 0 obj<>stream -xUÁnÛ8ĵû+Ŝ­P1’,ËÎ.zpšĥ§m- —\h‰²ĜJ¤KRqŭ÷Rr,¸vÄM“3óŜÌÓŻYB1ŝZ´Èİìf÷ĊìöcFIBE|½˘˘˘˜ĊqLE9ß -ó,KAOóÍö醤"Ğİĉ†¸%2˘êK'µ"]ÓQV‚¸œ”pGm~ï]#”“%żq†×µ,ÙMñcöĦ˜ƒòUÎRÊÖ+<§ĝ7‚êÒ%ÙH)K'¤2ĥ`ôeóHïµŞċ7ŭž[·c%ĵ@@.´Pâ?}š%ı̓ Wv”ÜĊl1ZÚŝUŒdy…\4%ɇ j‚J%o[Qш>½½£4ñd5]c7ÙŬdm ĵ/ä͞ÎäŻYé8сw(ŸuF†ŽXOârExÂsFTëĥĠGİö^LmtGhiµR jD{ÀO ”á˘h€Ž’ŞWTó‹öí÷MñoÀ˘(ÍCıĉßÑuÚònÇÑÔÔ#ĝžĝF rš„âğV„ÚŝpĈÁ^’  -wûŬ -nœSk"HóŸÎŸnŜnPmx'œ0°_ےrF·#Ħ3Ŭc# Ï)íFjĥÑ}[Q(ÌôM-KŬ+GènEVXëŬqĊ÷˘ƒİ’F ¸Ï²PÄJÔĵoíDŸ6W¨ µ½¤úr–­@rœĝí³ĦU{ -°8ArŻ4JĊ)á߄}Ö%m¸óÈTşò_.–ĝìh‘Äl5F{ÇXúL4tŠ·G~BĤpÚ9_…v÷N)9d!ô#î ¸Ë;Äj`áq§kìĉëŽaw²Ĉî:E.g_ ÂYĉµXĞ4§ƒƒ-ĴĊŞ,½£“ĝ,`dY4Ú·kĴd4ĵĜŬϚNW}+`eĵ‡ÎÎ Ċh|îĠ^Ü"€­Pšë²u˘l¸’ĥpfÄXÇN€´Żċ•{ĥ÷ô˘, †R_Òö0¸Ÿ1=Ësz^ -¨‡ÒcÓ0(ƒaòWzĵ'ÉWÌż/:˜Œàíĉñ~C_ŒŝDƒ.{Ÿ0‡ŭí˜ŝT4›˙ż­2ĥĈ;ó%ÍGŽ_gÜçMendstream -endobj -875 0 obj -822 -endobj -876 0 obj<>>>/Annots 54 0 R>>endobj -877 0 obj<>stream -xWÛnÛF}÷W ‡*€D‹ş;@ -ĜIĠä!(ZĞŠŞKr%nBrU.)Eß3C.))M‹ à˜ÜÙıž93üë.¤1ŝ…´œtAq~÷´ıûqs7V+ê•{<Œi2›3š­–ĝûa…?KM;C¨é~Aü~ŭ@“1mvXh“È9Ŝă×İ:Tş¤y@o­ĞLħ'EïM\Zgw½1*MTW:ĦµÉô‹ÍÇğ1&3(<Ÿ]sŞJ­ÉôĴòHħÛ !ÁöFÓ0˜°<zW@]WĈ‘œQĥ’“%ËmRŭ…Uj-mĥ¤7;·}A‡ÒM˘ĵ͵*Ù‘ÓU* ˘‚šÌîMĴ2:}âóÀ…"ĦĔ:li´¸7if•ŞŠj§KÇêÒÒ"B(SqUC×!=;QšÙ–k†€Ó¨€³u²Áw¨ĠɖŸxE*ËìÉÑ!¤fŸê²Í·ĴŽÊd*2™İÎCrıµPQ’ƒ›jŻI> LS E*SEÌÓUzs ˜&rñTdkqç†pnm•eĞ*’ĦòëOŒšÏçHCN³Eĥ=ß]<ĉ¨WÌ/Ż 'ÊĦXHF{¨ġ¨Jl\纨ÄIICW. jó3YÜ ÈßätdÊ ûİ=!*üçbµ£˘ß -ó™(Wqj -MÛç#uRHTœĝyKQ‰ÒhÀŞvHèMa×Á­7–tĦ˘LÓóû§Q¤äÍúYÊ+†Ûbgö5—¤˘“İRÁëı_OZĜh4â£Qî’ŬMK Èaŭ\̢ÚdĠ1ö†:N–ó`E³ċĠËiΙä‰ ÇµÁ#7V_€û(ÄŞ H#; À-‰k˘3_u]´Ï, FY›ĦÓ¤,0|i -†gLA׆ğšzPôa{ŻŻkŠĜe˘ç0Šûµ§‹q§çšİË4ÍÖ$ü)|2pypĝµ¸ àz‚lÁŬù’³&OmžzŬÈĜbŠËœ1uôğ­ œcö…Ş8i.e)&!^‰–m$•nN)ÓG}‘½ àÎj†^ır§ŝËìMсË­“$İ7­]ŝ5=vŜó506ĞïÑsċ™Y­ÁžÊÉ­ÌŸœ/ÓĦ;ç‘ÍLLÍİpêÁš˘"nĥ–×…!.ŭYċ‡LŬâxoüJ“@ï~Ŭ•˜>օ̒Ñù˖+íVr²²vó˘2}`àvÔLÀ³…ôz}Ó{Šŝê‚ZéDU˜ƒ‡ŠƒS1ĝżÑäµH†ĴüLŒ—R7–Á|ƒz’÷C\%¨6·)Ñ i‹ŸÛX·/ĵ·ž09žÍ2Ž„“ˆ‡QCE˜F‘x*,Uħç‰ÒŒ½ĤHxd=ÌÙÏÉx<5ñV—ú{İàcİ Tż%úö…_T‹ 3(r>bĞ`òÓGÎIÛÀ2ĥ_z\`b‘?Vúóĉ5µ?˜ğ‘ħŽ -P½˘çÇ÷O_•ÁÑ4AôÜmî6•ìÜ×ìXŭŬcÙ²ş‡$sÀW,ġŬÙÛéÑ9BĤ²½kĝìFi·³œé„äh0́°nŒú>³tŬ\~ñk;Ö÷ïqíleŻżkÛ+ô '˙Ĝ7ÜÇh.Rĵ‰ċŭHs›r>˙îd\C‘ž(‘˜Ä%…íöê ĉżtQ ŭÔ)6Ŭ½QıŸbx´¸ÔÖYâkËĵpeno}ÍŜŠ„b3M *u—%HLĥ÷žĈdı:ĉĊ[­-²³‡fğív TÔ,½ĵÄĈ|bÔe°$‹ebvg1Ĝ Xˆ“#s– - ĦĈèšO¤ïœKĜĉĈ2va]2›hv,v™ÉM³‚Jсġœ“Ş#,ŝ u´&Ÿ%H°GÏ -°gċ‘ÁD–,áÒ½pE óĤ%›U nd~Ú²Í7~ùoOjâ7[ÎÀMĝ¨J“%żÀÖñËŬ߂:!}endstream -endobj -878 0 obj -1534 -endobj -879 0 obj<>>>>>endobj -880 0 obj<>stream -xuTËnÛ0ĵû+ĉVˆUKqü8&MskÑ".zñ…&鈉EŞ$eAßĦ$'¨‘Z0 ˆ\ÎÎcùg’cÎ'ÇŞÀͲšÜo'ŸÈsl\YWĜ*̳ù|Ž­œ>+ŽÇAG45bİşjïŽFâhìk@t¨ħ1½¤eX[ç_Jáu@ç´ÂĈkĞ˘O˘Ú‹ìjû2™cV,³1§ż‚öÎâáf˘e1äÑh¤°°ĊŜğ6膛½&+n&ûô'í!"vü…„³ÛİCÈp'ÁĜg èùMV$ôDFÀù~qŬ´-,!êZ ž Œ×2:oÈi¤:´·ğ˘xċçĤg0l¤f.á]퍈Ôndhù˘ƒQ·^–ŻÛ -À²¸Ħ6‹ġŠï˙”ä08ĥANђc·ëMĥüdzÛ,çƒï.ê0Ŝŭċ³"<ŭmĴ˘–o -[­UjxŻ ²w,U€9@ öúd\H¨rM ÖÙ5ĜÀTBinMßàYL/ȝŒÔ 3A ˘ÄH—ZÑjÂ2?Ŝ݆{D -P;SQZĈ‹'€t~†—s;[ekœÜËĠ¸~ÎuZ~ËٗĈ{Ĥ*TjŻ?b2¨ÑMï ÓS…ž ³ž‚+*úJ×8I§£kµ—"èğáô¨é˙Z9·úÈĵ-ob‡şñµ :\TǸu€`_Œ-3˜4ô=ôïç!;+ĊIµ–:—ĤfU>ÔÚW†cà,épĤCZòu–z(̳eNĠċ4wt]™C/Öċè›aòΓÑ}(ęë›cĥ› ŭQĥieċËU–nŞ$ċûôt÷íŝ?ĵ{á8âÁÉĤ˘›"Y—¸Î†ŞÙP6½œ…ĊjÁ,ôĉ봟ŬüœüĴúendstream -endobj -881 0 obj -687 -endobj -882 0 obj<>>>/Annots 57 0 R>>endobj -883 0 obj<>stream -x•XMoÛF½ûW rb›–dEŠ{s ; P$iì$=ĝ²"Wĉ6ä.³$­êß÷Í,—˘hEaÀEr>ß{3ĞŸ'sšáoNë]Ĵ(ĞNŜŬŸœß^ÒbF÷[ÜY­ßÒ}N³t67Yr]¨şĠžV)}ŭĝá/úĴ}ešĈ8KïLې²9}76wğ†>Ŝż˙ûdFg‹%l$WYĤ›†m½+éÓ´ ?Àîĉx‚Ŭ]ÌÓ?ĵJç)}3zgì£Í -eùBÜփۆş†żn ‡DÎ:oÚ}ïzJ9$7Şt½ż%Íç½żĊšï~Ô;2VlÜİj£h‘ÎÒ%y]jĠh2ÜRSÂ2mrdŸYi´Eî­C,š5žĴj͓ÂÁ‡ĥEœòœ_„ëştÂiÌŭ„G aÏCù£G|wĵïv³äù6f1Ìb]e6†⚕ĵĵWĊñ~ Y€Ğpı@§˘°@żˆÙŽšúê˜Ù;Ğ' MĤé1WBhÑJrŻ~húô2“HP3ĴKAŒ„È2,–Òn! ¸ATB²ÂC Żotı‡D6— ^0£sÓÔš§˟NJ…s@Ğß`_, Xêh¤—ƒĝµp-Èĝ4Á)ldUOÉâêxœ°BÈĦNĥĦ,|N6z”mœB8éĉ+†*/baĈȀ>$­ž”)Ġ†7Fž}ÀĦ?B睓]Œ3Î=+xċ E²µÇşl|▁ŠÍ²Ş9OÍŭï8‡Ihħyœl?‹£ûòb–ċí·ċÀ€·_™ƒ°IÛ¸˜˜˜ËóÛ·ŭ@ Zşâëġ˙ú=~ġÂrÍS żPäÉâ’S‘íϓ/]$3endstream -endobj -884 0 obj -1797 -endobj -885 0 obj<>>>>>endobj -886 0 obj<>stream -x•XMoÛ8½çW t‰ -¸Š?R'ŬË"I“EmÚmĵírĦ%*f#‰Z’Žŝú}CJĥ$· -'¤É™7oŜ<ĉߣ ñoBgSšÍ)-.G'7§4™"ÇÊüüŒ“ñxL‹4^Ĵ¤‘¤,‰Šî”ôĤ˘T—¨2r+áh£Š‚6Ú<á“[ѽ(—‚°=#QzC‚ÖVš°x‘•ŞRÖá´ĦÚ¨gUÈGùjñíhLŻ'³dŠËTW•LÌˆœĈ÷‘ÓdœœŽzĈi’ÑÚñzşĠ£D,’›4vjÒ9Q޳-銖q *t* -$qs–ĥÖɒ´Ündݝ¤RŻ+ÁïÇ&Š 1˄+@¨< Uˆe!9˘ZÇ7s(|èÉÍĵÁ5—iĦ–Ío[´cFÔÊtm”Û֍0[Úà''ġvĜŸ¨Dı‹˘PYqŠ|S@g!E9ꄓ]úċR¨ŞÙ“ğšĴr2ჯG(2ÍgódN§çgĝ „ ĊÎ'ŜÒä´áÄxšœ÷X1ONú˘äFUL(SUÓHĦ–ĤTÖ*]ـC›1ŠLż9Ĝ§Ö^lQ +‹|CÙÚößû†og˙°ğ£µÂÁ5½lfŸ']rŝz@ÊşmÑ!šâJáĝ ڙDòE¤lž8CËö›M‘—vĵŜ °è"…F;OÑKtjĝ=›Öä×^àtrsŜĠÉü,™àOì|ıżĝpyAŸŒŝ†qDïtşfƒ!¸ÉĦĵÛ_ŸMñ…,ŝoÇÓ³Sĵ=ŭgc> ïÖżŽŝÄ6Ĥendstream -endobj -887 0 obj -1782 -endobj -888 0 obj<>>>>>endobj -889 0 obj<>stream -x•WÁrÛ6½û+vtRfْmÉéÍİ›i&MÜ6ê´_ ”“Ĥġ÷}ğ€$ -r:ÓñĜֈÀâí·ËïgSşÄϔ3şšSV½_ž]|¸Ĥ锖žÌo´ÌérryyIËlĵÜhò:³uŽ-قrtÖZ·FğÊxolíi£<Ġ–œV%UZĠĤ^™šZì˙ëËÇŽ÷֕9)ÄtşqÚëşġo–ßÎ.éíôj2€1ïŻ.>ÜDlc™z£iu> -v°ÇGÑۍj|K…)5e€„ԛv<dü ‡Ŝv€O"ˆÙ|rÍ ŞjÈok ñĈkÏéx½[ލÖї%­ĥ„´ÚÎI PUó×w?˙öZ1’´+›k,¨Ö}HaŸBH– ‹<üF9M!°˘Í³–~YžAšÏÈġíŸgĝĊÚ"ŝŽĤȐ żı}7™Q>ŸÜLè³ÍMħeŠHíUŜy3–Ï8ÙÍLżş*äMĠ€*ŝ˜mT½ĉcYıñMİĥI£Şr£JğNê·²/ç",ÊJ“=í˜{%=|:Ĉ=ĤU×ĥĥžŻĥ×Ïڝóñ¨W—JS™Vµ"óHMçµ?:‡",­°°çĥ‡ĞÒÛ˜İ[íT˘ˆ%Cߢ6Êċ‘׃œ¨Rŝ‰µ“SÓp"è½û‡Ż¨RÛ:À"G(…q0 >X’ƒ[ġ¤k(–d™íê6UùÇB 4ÊİJeìğÙïjˆ1+ÉwMc]›VŽUc@ĝĉ"V2.€GÀìeÌĠқHBWìíì1ZûĜTzS–T(S&9q/s[…÷´Žî²L{O÷ş6ˆĝĝ`Şuè–jìò%”VçċY8Y‹.çvG}Y‰''ċ§4n˘  ‘KƒĜ`UÙC£#ѝcӆ=kt/Ĝ­“dµs舝¤XżÓCnœÍtŜAŠ™Šƒ6DEıÉ•~A[:è› -ÙRĜĵcâ[Û!NMĥ.· ¨ -ßt%œUÊîL\2ĵX;Û5Á‚öR  &ÌÍÍŭKèĜx2ş£ê-üÌAúß;8=ġşLهK€Ĝ0·“#ĴXx“kgÔ+ÂWƒm„ĥbzkè }À|“¤sNà@Rz|ƒ{ÍKÁŸ‘Mál% v$3ŽN÷˙ħYñĉšzŝı¤ä>|J™Š^Ċ ĝîô\Ò¨ q˘Ĥ)Ħ~öÒ.äœê$gHaĵÉġ„û`9!WѳÁŭ!H­ULê$8ĝÇL ê‡aiċÄÏ9ò?Ië$Ğ˘Tk¸'îfí3ĝ›ÎTjeqğ‘ÂëJÛ{Ĉ.ΗßÄ+•=É÷Ż\^ĥΠŜ¸Qè7nĉ8Ğ@ĤJ΍ŞÈlĠĜIĤ*şóaÀ‰ŝèƒ9ӨI˙^F´2-ܐƒ‘î\ĊöF8°yßeğtDŬë~hb{8ŭàñ]Ĉóâ ۑÜQf][‡'˘5P$2$„ä8êh‡Û/Ío—nÙ‡jÀf5¸Ĝ9ç8+òrÎt¸Nôw½°w>‰N½TÒO[?%&t/*à7,÷ eş‹E):5gÚk:¨EŠ˘ĥíoc֛żr&Œvò„")ü „Ü^'U Wċ9œÛ‰R¸2‡H…Żœ üÈ7:mqB³MìĦŻqÉnLsrĉ78üa²„œŝtt€2÷ċıgìéí o,˙=cOŻoċ…âZ5ŸÌ!ÑL(*– -&ax}‘ih?˘‰ĉŞŭÜŭ…‡ıüdD:Ì7bc‹(lÇk?° nKĴDË ĉĠ Átw÷íOĦXğáp0F퍋'×ÈÊnĂẇxËIVì;w°*ĈıĝpgÊé|1™Ò|ħ˜ÜÊëÙŬç÷wôğ³ß`yto³‚“ȤÎÑ߆ċo3ĵÉĉ˙ûZs½¸Ĉ1²ġjÊñ@ĝg˙ÁĜÓbendstream -endobj -890 0 obj -1613 -endobj -891 0 obj<>>>/Annots 70 0 R>>endobj -892 0 obj<>stream -xXMÛ6½ïŻä²°Ğ•ü½zH¤Š4mc.\™^3+‰Ž$Ż×ùġ}3¤$Jv˘E€$’Èá|ĵyóèoW Ċĝ“bL“9ùĠÛĠĠŬû1% ­6ĝ2_.hµĤ8Š˜VéhcËTÓڔ:­my¤J§ûÒÔGÊíZż^}Ċĉiğùv<ĤĜ>úT`“˘}KJ3“>UäÖÎüÚÑĞOż½êoQmIívّê­&Úé27UelQÑg•?(ÊĠ’oĉY½ĤàÍl0ĤÛdÙ >ŝîħ´ûŬŬÁ–Ùš¨ĵ;ܽP]š]ĤJ}CŞX³É‚&Ë(ŬêôIŽH·ŞxÔëŜ!È‚˘Áfġ¨LQĠ²öÁÔ[#S°ïVWœ>É!%üżż~½Jĉi>aÏrZŽÛ‡Œ>s ĝÉTĵîRÏYö‚ 9%ñ2š{[Íöŝyċ#u5ġ'­•TĠ“d5"Ĥĥ#ÚİRċşÖeDoŠ#IÌġVĠD]jdÎċK^)ĵ(l-9A]“k¤İ2Ug†xQĤ75}+Nĥ…S™-€Ù£]4Dâ,µ`{WUş¨Ê² }×uÎùŬĵ¸KĈ¨ŻşïО˘Ó‰V5 *Ԝ‹k7MÚÑ8óԈٽéÒŻìfjë½nÀéĉÈÑJB9'ġÖVüwwJg§9jp1^Σ{šÍĤQ XMŻÄ?5ÀÀĴ×6miô˽ijé¸^mÀ!£vìG…ÂÓ³Êö€}EòŠƒÎqŝ|~r~‹)i„0çûŝ’wW -IYká"*Ù×]iŸc[gĵETjóŞÍƒÉ˜ğĤŜzNG1(‹[ħChË;>Û´Qİ߇Á4]ïS½ŽhÎáú6TwRd¤ÙyQ[!¨&[À sˍË}ż[8xħXĝ9ó³j>‹!”İü랺ÊÇL3!™˙_j·0cÓĤuCgĠġ˜N"¨.ÄAx~NSÁcߛĥЧ8@(dè+ıÉÓôĞ0@ÓċRà.Ĉ=´1O—÷½ˆ›)ĠòE܆@n§Ü–Ú²ÔĠÎòÜL[ċ<Í ÏI,gH<ƒÍ í\Ĉ>ëgIĤ²gŽƒZêŝÜĤ0Ñ 2ȂQê€lŠGĝë@€×–Ĵĥ̖ÙA[ŝ@„×ĥ¸n`ëÚrŠ ĥdÂB g䞺Ĉ÷ĝÂö˙QsV0J3áÁâ>š„Ïr<‹ÁWÔ€Ü7ôßĠˆfóÂݳt’@cHhžë¨Ol§ÌÖ›”ÌymHlî˙ħf™x Kè ˆ°´q'íÓg;&ğ8öĊÊ ˘ŝ-yt³›á8gmçŜ5úÖËÙÄ ?„ÛÚv–1X’™à#ǖ’úÛQ8‘˘dîŭbË5”’Ï[£Šß‹~ì´´Sµ"<Á½@I.'ȸµxƒĊâ—gîZWiiX<Ĝgh"1%üĴ_R½Ğ!I¸;ôAħÚh†İ8+êÏd‘eVkÖ?ƒdĥɗií>ĥĴ”Í`‡ë„6W[{\• ,öÏ9û—í ĞrU­ƒPÎdĤK-=Q˘ÚgDË}Ì:}íÄo)iÏ$C´¨[Ûĉ4TÏîŜ2´6Hpç˙™ûZ é/û?ìT  9tàbƒ˘Lv"ÑZ"xÓİ–Z£C_ŻùM;~WŒ+/Št!îğyîѕğô(¨µun -"S¸SŠ7Ìd2]gW[S“UC‚¨joŠzäċĞ*Kë–Y)˘8'rЁ0 \òh÷ÏNíw|‰awÀĜ-çVŝÔ͞o–um&—.GîžNNĵ@€pΔ˘UÁNĊzP‘ÑFËW—ĠUq]{E§p{DçÔ&ŬgŞôw*()‘B"nĝ—MNĈ²Ĉfw:ü³oÈÎŬ·)™$¸焉ş—‡FSœ™Ùĝ Ä˙â‘LĈĜê*ˆÍ—ÑìËké°Ë³Zh¸)ŒËrµÓİ٘”Yœ~â$u}‚QÑÀ°c+}ŝ,*€Ôs´†…ƒUMŜi~`òÜĉ^oüîŭÒ§)™/pµ›ßO¨Ñç7ßĦ?JûÁÑ/6Ŭ縀˴b—p™çĊ·‹1~AZ ñ"ú(!Ħ$ ŭÒŬÁĵâíÓĊúOĥNĈüġŭóêoÑHœHendstream -endobj -893 0 obj -1657 -endobj -894 0 obj<>>>>>endobj -895 0 obj<>stream -x­•ËnÛ0E÷ŝŠAVĞ–íĜiwé (Š6-˘ ]dCStÄF"]’ŠáżïêUuvE6VHÎÜ9s‡ü=IiŽż”6 ZIV“·ÙäĠÇ)e;ĴĴŻ6”ċ4Oĉó9erzí)W^:½UùiC·˘Ú -Z$ódEĦP´NT*(çéÍyö Á}°Ùb]Y>•N‰ ¨ŝ‘÷Ìİ_ÙY'uë6W£ġ\;%ƒuǗĥ´ç‡ġ™Ê)޽ÊQ…Jädw -ríeíyOŬ kùMƒ.WĞdAĞĞ ~£xBĴ]î5¨‘Ù]Ĥ eHolúd@GÈ ­ĦƒELêƒ0ıpyËs§KE"p -Ċî÷Ú<4@Ÿğ3[pwĤM°Ç“·•ê -ys;ˆħĠÁÓŭÔײ áé -ȉĴ)g÷ç`lr÷ġÓOÚ+WiïĦs0AĴ'ĦĴíGşDùH])=h<HaˆĥMҚ]İeÀW8(e}PŠZĵ -ô¤ES’µÓáH”kQڍS‡FÙ9Äö7ŽˆµÀjOtÎğ1Š‚hû¨Ŝ>uW)d,E‘“RyO{Ĉlö`”#À²¤.F5Rӑ\žÑ‘ésQl1T-€„î ’…Ú`PÊVoËR£AC>D`ĉAÀÊÍRËs$@#&­0–[Ĉ)£İĝƒcġt¸½Œ&f İ]Â<¨&Û.‰²Tì­ĵ*Ÿ°iȰö02/Ž´ùÎM•$á Gĝêe{‰Léìĉó}ê)ç|`+ùÈżYeÏıŸ˘H¸3ĜEç0óBžSi0° b$ĵӋĴ˙×Ĵġô°ŽèË! N$3™ħQ0”0NCĜӁùǓá>D›Á·hŜżè÷ç̈́R7“$v¸kcú_sÍóJ´‡|ŞĝŒ‡îm½y´ġ†£.sxcçİÀ̌“½FŞòŸĤ:JyÜ`Áñ‘ÓPĈ׸‡"Jqԙ”ŝ ϓ}RÎé>>>/Annots 77 0 R>>endobj -898 0 obj<>stream -x•WËrÛFĵë+ĉà]%‚ĝöM~(q"ɲI—‘K`I`a,@Iŝúô샤(:‰KR‰ÄcwĤ§§{öûYL}üÄ4Ih0Ĥ´8{½8ë]Î(éÓb…;ɔġ£~WÒˍ¨YÓ$˘ÛZ•*×4oĞJ× İ’ĉ˘X -J˘$zxıĝfWЇnî ŽĴĠ™DqDïËĤÖY›6J—îÉ!Ċħ2™sŻċZ•%opݚ 5iîS-s)Œ<÷ğ·½!ûH)µ•ôE•™7t³ *ÄYÈt#Je -CިrYȲ‘ïŜ§nnìÁp@ÉÏ:ñâö=ĝsüîÏÀÌ˘1Óü°µ˜¤i*Ħ7š/§+e/ é›+lCˆÈ–ÒËo2Ċ½[˙ŻöaŞë-!4?C˙ŜÊVúSUmîÀµn×NY[#Yş Pĥö,7™hÄ:k,–ĤB=SËozIO>üżĥ›LÑPŬ€Üb#Q° ¨¸”²$£ .äѤş\µ,ħ$–şmè~ĥ@4‘…2THí…úàşD‰fM†'á7àß[U[Éçt,köÊPrŞgġn ŠĞÒ4Ĝòĥ^Ö7ÚXĞÓuĉ?ÀmáĥZĠşĜÉTH4Î-ÛġÑÎò|ÀOĵ³,z²ÙĦ“=•ܐLkgFÖĴܕ6(§…_ğœ—wfżéóGŒ Fż+ġpUlñĠe -SZ UžïrÒ½€ñjD¤mƒ“ïg™ÁÊùùHìn•ĞÈŞBbDŝí­4ĵÔ/Ğ<×÷ Óġœŝ|u•ĉµ@ *×öÊFĉİ=êÖî•I”oY$Cê‡ŭʋÍĜ{u‡~×÷Hê¨j>kÜb7š>£"ÄsœĴ…K˜‡›"Îiá Ŝ0D˜-í7ï {ó³F óë]†é GvÚ;÷SßtGfàŻöŝ^ö­íòĜ6ĵІùùÙüŽf’âsĞħÁÈvG?ópk"–bœ<*Qj>aıR8.ĦölÔ PĝYNŸŸ :,KËc鵚j}ĴÂêܰwh=ž6•LĠÊ$¢ö(êê7sG ¤SeĞêepÊvɄŭĠ藲r) è°Àşƒq>½Ëä -€‚ıà*–Ĵħ„7˘şÏÉêôÖÊmP)nzÛqgÛÌĞÁ‰;ûÖ,ĵf¸FġşÖğœú˘ñûpŭµ#ôç~ ûñì_úÉĈendstream -endobj -899 0 obj -1753 -endobj -900 0 obj<>>>/Annots 89 0 R>>endobj -901 0 obj<>stream -xXێÛF}ŸŻ¨##Hê#ÀÚÎÎÂv6™Y,™<´È–D›d+Ŭä(úû=UŬĵH#g7<ÓÓ·ŞÓ§ŞNñ›ˆĤĝ?˘eLɂÒòĉÓÍߟnĤ“ĠŠúìƒ)%Ód² Ùj‰ß£Ġl²"ĞiË[0‹sş°ŝŝaFQDO[ŠiħšÓS&óSzJGO{í4”Uµuw”WiÑdyµ£·O_oîâ°wt°y…%”Ùü?ĥyĦŭŠöôQÎ)Ĝ³Ñ|LĤV§ıŞuFŞÊÈíMSdT™š°‚/[Ğ#6ŭ×Ü$ëédM‹%\§’fÉr² £‚ÙQ8³Œ09t§q¸$ݍÒGüpµ* -UçĤr˘cİ40+ŻĥĈ–òw2ĠûÜQşWĠNߝLÓZhġ~Ö+´€;‡vÀŞĊ޳1XĠ#/Žŝ֑K[?ç;ëp:e#Š~ğü†í#2[ž'+l%“>Äì̤MİĞzò -FÙñ“óx2ÚÌĉ` xĵñÔı6ÓB0żŠ”ıYÔŭLŒÓ[âŬ?Ĵ)š1Ípcv hĥœÄ“hB­†ÇàÄoBĤ7ż³Ù==§4Ž—ìÛ§ŠŒÍ<ĝ9Œ­ċšCa”pÓl邏BH—°l\ħĊżİİĥù‘JVàq™šĝžuf|¸½ĊQ!+½§‡ßž`s†33O³GUnÔ­£•*9Cb)ŸOXH9Q^²ŞŞéÙGÑžbV9m_òT‚`p½°xs"úw^eĉèè˓÷VÖ#J™”k^ò G|ÀéW`sĊˆ=żm=Œ`ŝOOóÒdùöԙ£-rċfÂÈyÈp›Ê2Yħ+ÌF} ; i,HùiµĴĦ­) -säwn“ÄÀ9ċóĤĤħAç À¨݈^TÑh<¨kÒ=)G·Uïo%ħ(ğÉkĞí Ħl4¨x(TŠ·9ĉġ^ÂİSubà [鏆–ébÉċµ~~ûƒg”ÖLâdœ{°~ó^ [ÙNIÀß;*uıá' öWµÊJd 5ÍĦÍ$0Mm|ş|µ?€ë³Ş‡Óéş{J6ZÛ:×ġçìvkFA&PĴÈÓĵ.  -İZLı½²ñlŭH f‡q„4‡aza8?6Ŝ7ÎŜ&UĊ½`¸'_³v‡çĴÉ|ĥÓUw6d׌Ôw—€e’6ÜüŜ!ïšUÊL,]Üvi5ȁ'á”;&lEG„ğÖÙ Ŝ1œG ~P‘ğúuä^§ß„èÌnr'Wë’Heî׎ÎR}ë˘úìÁ§"ħMà?rBŞ*DÂá$Á"›%3pšÂmŸ|şj;¨kŒ9„‚Z…áàà[^·,D~2¤˙„WO.˙uz0-oîĝb>ġj)Ö(\ñr…h*ižÌ ”Ìaˆ—k‰ı3…ÒßÁ֒Vóîï–Ŝ^½.ïH:Ġ$ĠóL:8Ê$13Ĝœßè@“Ğĝ‹&*ô‹.xòš{…IŝĴ—‹ĵ5‡ )@ĊS¨œx1G‰/)Z.ĜEµ.b¸úßÄ,tä• èxó¨}2nOœUR<&Éàäá³1Šġ`öLTĥŞĤ5ġҚĥr<ĉÏo qPĦXì|,ĵ‚w$)ĝš(kµ-"Ŝ/×ꜵĜŸĴDFъ)%£§d}Ħ ı¨[ŭG“[͒InÑœÜVIŭy1fg3~£îĥá³à(ífŻbw˙0˘:ĝqiŞÏ”çİòx}ĜŒXcë*A´{p³+kLÛLù„Âu¨‘ENğêe³6 ÈXĴêĐ…ĥ%uË4?¸ÌĠ!ÓHVu>!6ZŜĞw}͸U ï›zoXk|1µŝ!4]+ÁĊ MNñjIĦm9ôĵsmäŭaYwĉKè.ÚCáN<}žJ3…Ċ™ÖûÁJ ûÙd¨-im,ÔşDE œÄɛß%‡ Ŭ(9zšñ˘26'^Ò -òMÄĊµÁ¤oZ “À|ÓĊÁş=¤Hû>áĵ6ó~ÑBuöŭZk5ÒĦ…jĜh7òàŬÒ3KĊ3‡ȃs·`Òŝ*TıhħDT,PV¤÷||˙ù{ú§5_ŭ>aȧyfż|ĵŒùÂèŻ>̖üċK–%sŜ‹ ĝċĉż:ŠĤendstream -endobj -902 0 obj -2101 -endobj -903 0 obj<>>>/Annots 92 0 R>>endobj -904 0 obj<>stream -xWmoâFŝž_1E•Ž“ó 퇊ĵġÂ÷R5UµĜ ìĊör^;U|ŸÙµ 8½HmPxħwwfžyĉ™ñד5ñjQżMùÑÉċüäf~ÒôÚż%+ühRŻÓĈ{wçï=ĵ%’–ĵ7qLù†ċÛ&]|‰£{8jĜÛMšûġß7‰ŠÓ˙8ż·ó/'M:kÁĠ)˙ûûìS§ŭy+~ógŞ}Rq ·†Ĉsú6èĠżw4î6ĥî½8o\ ^ÙÚiï&ï†ċîc³p³?O^=á~4™•‡Ón³Ù|u÷drµß\Ù=Ñ[™LìŝĈí9µZNßëÒY{àµÄá|~3žĈ?MoŜMoir3½Íf¸:cÜlŽ’6ŭ•ÓHç^/Ïqë"Ç3Îqĥ››kÓyżƒ‡IĊ¤“@&”jò³$‘qîH Šċ–‚D=ğğ;ÑLD AkmÒS"KÒKJ·Ĝİ@Jdž˘Ì¤X”&™ü‰}AÏÚ=k¸>_Kݳ8ÌHĴ²ğcé§ü5Ċí½ÊOÏĜD™ -Ĝ^“ëʓ$Z§Ċio‰m5nŭ<Ú³>¨ âġÇvŻoo×bÚĵNŻ……ç(‘EÔmu£ûVìşŽeü,ŝOD Ž'’Ñ2„ˆ:OîĦ}xsŜE&ĵÙWĞ À–l;ıê˘-\˜B^#³ŭ)ö›= IBeRŻ -g§Óòú@÷Ür$.Óü°'²ÄÈSĝÁFş‹Ü[š˜T…!m´1ÒĊ`ÓoİBi08&[*Á :Q¸şħéš -EòlHP£Ž+¤İÌħMׁ >ÌZ$Ĝ72ÒÒíM"H‡ğ7´ĜQ —" S{ÜW,HyĦuƒRL[­ĜRT$ĥW…ŝ!ö%qéĴ™Ä>ì1 -S"żfˆ)(£€SɳÂrH•1ÚWvġqô§dT´A‘†z׋ĤŸ‡ĴgFĊ+èÊċħ“<µmê?JzìóZG]9[&:Â1jŜġšöùĦ‚nxDSm,Ħ ÉSĊ›ħTĞġ¤XkÔ :TğßQ–&Ħ@ök6öE‚f…% Ô^ĜžĦöK<]´§ĞħxV+Ĵ)Ä6á&&y^ &BhŸGż!Af­3¨–‘œR1ôL„ĥ>TiŽHÉĴŠDêŻ™Ħ°ÀÏĴâHb¤YÇ̃ä0^éxFè.àkÑÜĴ‹Ŭ¸½ $›u݃Ŝ}ĴŜ}ŻÍdš²“×VĴEîĉŠ˜/³ħ}^ÑğÛ}Ç9ü-XW’ĈPyf mıŽ-c ׁ[IŜ?Àfµb‡ ->0Bb/Ëò;…?9J]ö•)Q,"I[aŠ -vQġrĴÓĝ&ÓÑx~3ëéè#>†‡£ğáċŬ Ŭ>Liŝndû(Ï.ıZäëñİ{tÚ$„ -2ĥħùkŻlíÂ)¸ğ#“‚P+{! ġւ…Ĉ† Nי˘! Ħhy"P?‰„ùPb>>>/Annots 101 0 R>>endobj -907 0 obj<>stream -xµXaoÛ6ŭž_q6ÌbE’Û ΚĥÚ$‹Ŭv€ŬŒDÙj%Q#ċ8ÙŻß;J´e#Z MQ#2)ŜğğwïŽùç ˙†ÔP”œO.Ĥ7ÑöC/àS8½>ġGÍïZRÂŻ`çl>°˙ĝuŸ‚€Ĥ ŽŒ†4íşOÓ¨3.Tµ”šÒ˘’Zš*-dÒX—”Ş–˘˘OiеĦĞ)EY*‹ÊPĴx ­ŒÄI“÷çTj{ -™òˆîViaODñbúċÀ§nóBèĜ½§ZFUöHT)ĊĉUàħFÖ²½T†-2Ĉ÷“îíÍÑt *ĦH­4°cVıl`öSfùŭÚ Z -Ŝ -oe$Ú"¸O3ıÀÁkZĉ kÜH}ÏŻó÷ğƒ¤X&b•UTJ§Ĉ¤Ş0{ĥ-]2ĤğÇv@Ùsw-Ò{ ^Òá Gó°}‰ ^ÜKŭ¨ -yHk™eŬŻ…Z´jUzlӒİî ĵ£hârüú”‚~C?ôF;„zĦ×óh²*K+@˄^ @Ğü4A ·­wmfuCfVçş`ژÓÌá YPĵ‚Guèby/3Uĉ`•Ĝ"ùà‰Èï…à‡'Á‚ÏĤÁkDGƒyë"S"Ŝo˘4˙›ƒC‰ì|°„áÀµ¨4ùÄfŒÊċšq’X] ]ۏ6ÎYj*ĵ™P<ĝS€–Ruˆ›: ¸Ĝn߃ĦI„ÊÌ) FŜ°yÊhbK§Xl`A’ µ)‘ƒSÖá# ĤIlûTĜôâÚ"Ûh?çÔ ü ‡`£ ´‡“Fü}„şŒêjAdĴš,D*ÏE[Žoµ²³£8BíÓûÖ$SV֟ĉ…ŠRQI{R·Ĉ°Q‰uZ-!P'S‰, ġkMÍ%*ËԚI…TÊ‘—™eÒR­aßA2Ôd!Ŝ ]ÊĝŒ1żöé”k  nxbsÒù…x³ñ—JµPÔŭ@ZİêW## ìŬˆ%ŞĦbm kPhĤ˙+•‹´x9ğß^]Ž?ÓġäċìC‘>|Ĥ ¤Cꗳ Í=ż+2°ż÷ı9# Lœ1kñôa4pË΄ÔÁĞş.‹DQ`b}mp˙4;À3š½½Ħw(5ŭ'ĵèû ,P››‰³àü !JñçZèOÒcü˙÷|W*VüÈ\îä!ÉÄœÍü‡Âîû.Ü;{ -NÒlŽŸ›ë7×óù²ìZ\OnމtZVè2g³z˙ŝ{GW×ôêöòĊ-?Ž/ߍÏß]ëë[š½œÍíċĠôâöèÉÓı´ĦÌg3·êxñMQÏ÷Jâ÷şĴlċlġùGóùáóÌÄâÏÈÊdqżOVf`˘ ´›ş²éyPí&ž(üf{ĤÉB³w$Ÿ[lߣq³t]É55gè>V[ -€NĊ}˘Ġž?şİ¨iž*I¤FÍ2×Ĥëa šLRž=ÒÂfƒċŻ ;&żó"U$ğF:ĵÓ›çy‡Ċ†üŽ3£ ıèV~÷Ç;Ğġf×Í[.ħëÎg4ċıïĤÀÈ:÷ĉu - ܆µ\HSjb2Zݧh”x ³Ú7ŒħpŝMÀN ­ŞŒV˜âLKY4N]<Ì;\rxÚ<³Üpâ<-à†W —îîäêÄy'ġ¤gÛaĝ¨#şÀÚò&{Ü^tç/ĵf{ÔlïÁ#7ÏÁcÎÀ‡\…}|ĉ48ŬêĦhëó7|ù -·´¸G\6²s/²*·57İ…9.Tê+ÙÍĤ-nj”ÓéÊĦâGóh*™S]ru59 kçħĴ˘cûf$ʽš%Ĵc'%¸ĉÔ<ĤĜ}M¤gE1Ù^m€m'GŸ–¸äÔ·SÌ$H´Ê…z|>‚„YW¸Ġoİno˸Ô`³7j+ŞG "7›³JÛ yKËN­‘NĜĜdí°+´"Éß´Âb -ÙÜLïí9Z–‚oÒMÜwCŭl·`BWHP‰é^QĤ"Ž0c*ŜœYë*X€•M)˙’]›€8ÙżQÔWü˘ùÉĝŭùÍB}ÌÓ+áz_TPfe{Žğ1 C[àßu{íYí{½!ƒ@Qüuŭfendstream -endobj -908 0 obj -1839 -endobj -909 0 obj<>>>/Annots 110 0 R>>endobj -910 0 obj<>stream -xWMsÛ6½ûWìĝ¤ÌĜ´(є•KÇùpë™ÄueÒC. IHHB@ÛÊŻï[€ h%v;ÓIb‡Âî÷öíêûQJcüIi6ĦiNE}ôjqtv•QšÒb…'ùĊŒ%“ñxL‹bdŞ*j´£RT#Ë Ic´!½˘Ë˘ÖÒÙ(Y“²d¤k ^$§Ém$•’Kˆn´“¸#œżŭbñ']à‰²¤­Q“†é4&ä2Ú½6˘ˆ™Ž8”|EëŞmJiB4çĉƒëĤ‘…ĊJsâ Á ¤,ŒŞv$ÈhÔ&ŠB·H’cĵ]qġJù~?JÓY2<˓ŒjJóirŜ]Uô‘1rÙ ‡Ĝ-6ÒHÎSPĦëm%kĦš5ua†ÇÔ4Ió>:ĵĈÓ|òSÈÇYš5íñŒùĤTÊJ‚…hNĞMéïOóĠûÓö`Ż@·‘µôQ…QÒÒÊèÚ£||ˆ³I’ÓJW`c€%ċÓ<É)ğ˜%cšàPYáÍ)f^xIrñY‚’ú(ê€èJê˘­6Î>–ä2aáŽ>ĞĤÔ÷–ng–°Ż”Àŭ4 ÂZ](mq -Ŭ+·!)ŠM„:mVB)Ĥ$âÄ7–-RĈÖĠğÛEúòÄcĥéë?ß&]]ż{‹_Ò€‚şÜëÖBb•ĠdÛ­ÛI³[ŻT7H i!Ċ+zµŝmċNH7Ġî şnöœòaş¨ÑÇĵ!pÇÈîAYÄÓ P°;ëdŬ§ZjÊŬn¤/ƒI5¤o1}Ù§xBF $CÊıù½U ”ˆER‚ĜÄ7SĈíÒöÎòí³xݍ7(AWP$|‡}£ñ)“§‰ŜßûäR+½V…¨~U§î PëÎıj@­²^&üˆpBT@EIKQ‰Ĥà~@oĴ„ŞHCc^öƒÒW´Ó-àô€@G°żƒ³—2z+ ĞkÉ[Ŭœx Î`ĜŜžGĥ^&…nV\|j:›À,Ÿ(kÊĤè pĠıÒŜÙ§“,I)›½§îŭġY ;í"Òû€÷G2’M[{ħv À*(;Ïñás.zOÌÎO“˙ì7÷…ž,0j€Nk4 Èϟ‡@7:ÄÏ -Àe#ĦD_K{rV…CıÓy?ëMY:9°vLƒ„‚kß–˘•ŽOŜ£ŜÛÒ£W^…%9ÎŝN•>ŬO7׋äNT]×@ĊÔ·Î͂.1!c'V?„)Ħñ+(& 'ğŞ&Óƒd:K½*Ĥ |Ŝ]ġĵLg“¨†Ċ-œbĠA÷xĴ†9ŜWz/—d{¨{B1#Ú8·}yvĤ:tĞ[SH„Xˤ‘îŒSŬOÙ8q° [%üFùŝ­½Ç–şhÙR|–„ž/Şĥ„4ĵ‰3Z1zˆQ µlıŞèë.ñ!„ñ^i@,1×|s¸¸~ÀZŒ.Ûİ‹•Xr@Ì-â2xÓé9wĈ³˘šŽ™ áÀ˘JúÌ;Š˙ö„Ĥâó`ı…Ş4Ŝ}XÁNÂÈáV`ˆÖƒuû*ħö|ëµÈŻa[á /*wPN›ÀîġÁşXC}üntvȓ'ôüül~Ç•FÁi+Šob °BEgf§3¸vÌrôe’Ïş‡qàg=ûÔ¸‚PZ\âvÈ~éğŬ×Ĝ[$ĉÏÙĠ˙ÉΤë0q‚h¨aß -âÒK'08—îĠdüĉ­ -½żÌ(ô7€8 Äuĉ—uDÙö †}–Ò9ï‚ÏK’Òü'INzñŝó&P{ÛQû„B  çż!@”=KOÂB^ʝ`žG[è­äs<Èc÷ӗQïK‘éÄ=xçÀĉ÷­Ŝ"öÑmg -Ş5Żê{‘y¸nÈnü:ĊC';“o?`|ŭCm·<´„ÁšPÁĦáZމMOXİJZ,O"ÂÛ×7WÔŬbÑ·öžÊߤFJ6ğ%6RÀ%5T߁ĉ~3xրòó_}8ÖÂĉü ż=*áMF£ßKáĒ'I÷Ìo?T‹Oġפּۖt§°…: KĦ?‹[Şeħ²56Ez‹ċüŬ(˙E„­É#ÒÛ`x€~×/éӇwždN…µAN÷ ïq̉—¤Ô܍—Ħö‹ÎµÒ|†=*ŸgğÑÇË÷Ż.1•ġWx/½(ŝÜixŭt6ñF÷ïßh²Y]qzÁ' {˙:ú1CĊSendstream -endobj -911 0 obj -1731 -endobj -912 0 obj<>>>>>endobj -913 0 obj<>stream -xWÙn7}÷W\äIA#Y›µäpœ817n­"} 5CIŒGä„äHŠŝ{Ï%9ZĈ -Ô6dÉŜċœs˙¸èQß=÷i0˘lsñnvñavÑíL&t|ħ+|èÒ 7íôi8}ŻËï­¤%_Á)ì^üċíz=š-a~4Ó,ç]še-ċ(W+ċEQìÉİ•–9ÑV ú¨Ğ‡´[ĞlM™´T9zC[iĠrO~-<•"{+IıÙ鈜ŻĤÈ|Lúµ$£ċëÙ÷‹.µ{:Ë[V.µxVi˜‘t·)­Òħ/ÂÉѝgC|ñòv”âo‘6>ŝİNİ…Ä3³ÙHÍCL~‹Nf•U~OÙZfOÄñçʉE!ó[ȏÑFûxW£xy;Ŝ0aÖg|OQwa‡fşv žÊhş)”ԍ‘vŸ1oŬWziì&>mċJĜ\éĠ9êÔb,FL·Bœ@B-âúµtk4Û1œö§Żßf_;k·TÁVVT ŬNùuDĠd8SÙLÖÔ8™Q¸ä­|ŭèK1ƒéBĴ;Cœµ & íƒ š<™%1ƒBçT(-éAڂ\fU EÄ ³”e{ÜA1°ûy4N‡µĝì<ûü ħ˜rZYQBɢ@8^Ú@ZrH÷Ìuù?]·ûHäcó$óż0:à1M5[•'A)´#FG%íŝ™.êÚf%È&H0<'…eek $]@öI£2á&$N“Ë‚´`f„£, -ŝ];gLêJ&ĉ#%€Ê­‚[‡rF•lŒoġ£Ĝ,D¸ġMiXA.żÍ˘çr@CC`Heµ£X%“Ú òYB†äĵ,'B˘ÀQ†Dĝ|fK0,ĴİpĠrU· ·YÄjJŸ 5žµeöâ³A´—·]šr7èäĞXÀ_ -tÇyËUeiĴa~/Ñŭ¸‘0A´jš"xó×5_hèĴâżŸ‰żzè~‡hŜÒG”7I$j ˆ­¸äf‹Ž†ĉçŬ‡dXÉn°/ ‹ïF /ùìç­·ôg´ÏWcäÄÍ"tĤ—Áy´wÎU,.M×yŝe÷>(gŜ‚ŜïÛ<Ü4"ĝ'}î÷:#F­ġ€`òÜ⇟'Ö¸”ëÓ°Ìd  q.İ ĝĦPl3§£8˜˘ŭ ³½vHê ÚBÛà&ı—h8@£…ĈÏÖ‘´.ĥCUñ —9LIV+#S˜&áBú„MÚ -ĞL…ıuRjŭÂ%ċÌ-T% -Žá VšÒĦ“s5'ÎĜyNŻK<Ûû}Ñ~€D#ığCĦŝEÛĞ^gòŠÎ*xz…á_¨C´b~žr Ô^òí=7ù*9=0ʵğ6;ĤŽ;€Ċ2‘2Žvq.ĥ’7à‰zG2ħĤ@é:__°œ#™*ŠFżÜ,pFà…iİqCƒJĊoƒÎâě+Q˜j;ÑĠÄ"€…Ĥ–R CÍá4\˙¨–Â˜' -žO]ħp¸=ZÛÑŻ°QÈ"­'s½†ïÓç/÷óùc¸0ŸßTĜ ´ż1Ú[S˙ ·ÊÍRmŒÊ“̀ÁŭVb:|N°ĊNì/~Q̀+‘„„gĵká BñÏŻZ ì3ÙGà˘`/Îá“ğgB{5ĵ•°ˆ¤à˙“Ù!tû†âôÉ "Ċ޵Ĥ|¤p"a"jŜRC¨op‹šbYòĈğ7gX;& -Z-ƒ~‘1û"Q°ĝöQŞidÊü×Ô8ı||L´2ydT¨ –°DâŞ"Eš4‹(M&İżĤ"­à<+Cˆ ĈóÜï -:Spzu94Ômàè˜8ÂŞ§4×Ħ²ÎŸ.Òî /íѓ4Œ{£q‡˙ıáííĝ˙Çġŭğk½ïdôŜds€`ĝÚñV;^kŭ÷Ŝ=ë q0e ĜóżĝıÊ5“endstream -endobj -914 0 obj -1526 -endobj -915 0 obj<>>>/Annots 113 0 R>>endobj -916 0 obj<>stream -x­WMoÛ8½çWÌŜ –-ÙñGo şéöEwc  Z˘-ĥ’¨%é8ù÷û†mEIEP}‘œyï͛ñżW)Mñ/eF³ċġĠŬĉjrżĤtN›=Ŝ,V¸(hšL§SÚä£e2OèzóŭjôUŒpJ7ä4íéAÔ;AY2MžùY–dÉ3:ıŸSš†ŭĈÙû>Ğ'‰…pÔĠ8i¨0xf¨8ÈZ6ŽJa)/EsmG'In%İş5úIÛkR ñ)„[ûhCFVRXi?PĤ4NgĝGûPECòYY§šYéŽm0ċxC{]Uú„ĜWTÔ -WڄŝF’ÀŸ+%µÚZµĞ$Ù\6G[Ĵ2t9ġ# HÇÙ"aG_öô˘Thj´£BZĠmĠÈ=ŞĤ'Kn(á°ÇĥĠĈ}àE%GÛHYXŽv'ħW#˘ÛŞ:g3HĥFÔZ:ió‡nñ$p8ıÏ;bĈËdEĦmĥXzŽ/Äñëa&'Žˆ?€Kñ„[0GzÏYDVyîˆÜq} *ÀJëçn…ċLĈ=Ŝĝ$ÏhyĈ>ĝ[°ŭ–žù䅓{ˆÚKnCħI!÷á]”ˆöŞbK¨ÑÖğ‚„s²n%ÎĴÒıpȍÖĜN­Ìı—C'b(’o7ŸîH4텪,)GtR İ0şEö'_2GËtöû!t^(Şj˜ż°Vç -ñddu{è781$v“ÁÉ?ï¤í´BH˘²ES DÎÉìDŝ$ $–ëÂW;U)÷Âĵ ħ -ħšë‘Ğ‘³iä³CżğbğÉ )”ĊÏÄĥXôŠF5Ö0 ċĴµˆ$ÁPfĤ3£R[Hğ< Œ:ĝÙ^³€”—YOeŞ -uµĦ—wkd. ÙäPèá<]i$Ô^&Ÿ·½ÒtÔĦÑĈ˜jòêXàğ!³~},Ż9¸*3H}U£ÑM~ÛlôÖXß÷Âîç:éÔòÓ2żï—`~4†íZ7Ġ Y]ı) Ģĵem(ĠH"Ċí·G.µÈ0#‹§ĦĵìlŸyÁc?vjàks£ZĊÔP^!ÇsY ÄóJ!ĜüâLêà[Óĉï~‹ó@<J_‹ J<4è&,ƒ•Žżo¸yúJ)_ŭŭ}!™Ò|>G Ԕ.³dŬŬUôÀx°Â¸9Ïç7d.͸tŭ8™pGä( áç>Ȥ‘nÂç_ĥòWĜ -‡ÚôJuËŝ2³¨£žÎ"Šéz–Ìhĵċ{›—îĜ~{“Ş? İâš§)zï|µÄuşĈ%:ŸÏóÒ`0~ĴnPñ—ä684b.­âYĴ 2ÉuóĈÏ{ȝŸXU o£d5ù–)ı”½‹2çÄ{fµn@§Ħ Wáexë5wĦW¤{™Üg÷WXħÀıċÀ’>oŻß3Ö+KŒûùŝûó`íèáÛ+şü•Mƒ¸i–²™~×+Œ;oùRĥZykzÍpÉí{'y<tÀÚ§°]%Ε<êFV/– QêĈ#:âW<}žğĜ€\´˘khÛQ€?"<*”~ kÑmÇçÙ!0m²^ĝìà,ŒF÷m4'n?=w›d<6?°Àtpä[}uÖì/|Ŭ !Ħ;Lœ,ÛÌT·ìµ°IމV¸ğ4âP#hhÛÑ ÂÇ` l1 qĵ€şŒ Ú½ pÂÈ Ž•KĝqÇq6[k#>Sĵ?08úI+],ŝ!Áüpûġî–ŭ]ĉ…•yĥ÷FÉğŞqX~^üú/‹ù’-ÔÍ|Úû×Ġ-DÔ endstream -endobj -917 0 obj -1405 -endobj -918 0 obj<>>>>>endobj -919 0 obj<>stream -xW]oÛ6}ÏŻ¸,bù#nâî Xğë° ġ‡v”DÙL(R!);ú÷;—”[mÚaKEyï=<÷ò\êádJüNézF—WTÔ'Ż—'o—'“lħ §‹[áaB³ùĞlFóĊ5î_Ä­“Taî„.çs\ÓÈl–-žFĉ“ĞlŜ\]aR´A˜!ôŝ‚›W4›²˘Ğë-Ë8Ž7Ċù›µh‚t´ÈèW™·Ğ•2+şuʄtcs-k˙bywÂ^Ĥóäet9ÊeyÈĤ½3ÁÙ²-‚²&͜ÓtÚϜ]óĵċZyŸ żĥ.P)}áTd+ZÛ-‹·@@Í.zRtÚŞ°Ĥ÷˘ÎEFÑS2Ï?²äĜM/ĥcó½×ÊÙ8Ŝ˙ŝš -­¤ Ïìžĵté.ÈXĵ^K²¸8ڊŽ„³­)3şħ.Ž8‰‰^ÂBⲝ|u£ï–ÊÉ"X×eŭôçÔüqAŜRg[ÄIh˘Ñç°(BÇDG·o˜ T‰rž‘r²Ĝƒ‘²dC@ş LÉĴ‡µiı…ĵVQ„VhŬQ .L÷”ĵÔĠİ@w-Ba"²È‰ĴUY˘6„Ħ\†­”†0²­œ_ "˙eԓßĉóAÖYŸ°$Ġ°˜ĈJi\8aü×ĝg¨ŜNˆù“(c#4FöA [iyšÑp‘ÂS˙2×"•`Şm˜= f‰ÉŜ-àD²c1– _kPŜz΀1CÎ3ŒW)MµuNjıá ïĤ}:ßUħŽñħ-Z]’ĥö~à×żóILz#VòÓ ”üž Ĉ7zĊ[nJ£ÙËTY>´Í…ŝ{çêe—i@żĦĤ‘:‘ĜäúĈbéûL\èĉaÏer;˘• ­èĦ•-°Ú¨#ĵC?sàêc#°UۍŠ;›úǘgTù³+PŸhĵnĦŒuSŽ=ïóÄĜNFÌÙU Îs…œÚ-'ì’Q’néŜ@¤DnÛ Â)-ı\Sğ‹´Û`A=n‚¤úâ{WNúĥ>… ŭšŻñ͗–÷6éÒ7W€íÀƒÄÖğq (t4ÂßíYCgÏçó° ŽĴb…}ú°ŽĴ1"£ġŬ×;ĉwáŝ"9HĈ˙v$<_J}GIÛc?8)ĵ5­†”Vݝ RJÙ`ÛEé4 #…‘”·EXyó]€Â -ċ6ĥƒš ŭòÛŬRúŜǚŜÎ,Ë™µÀŽB)CĊ=K -Â2m 'äŞTܑ}Fħıôé÷ܳYœ„F#DËe/U‹n1êY¨JAl=#jé/ˆ›EŻ2‡puħŬ$ Ĝj…uÜéö—ċo´ş•~¨ĵXòı·ġŞ=à5$vq“Ë~G•†ĥJkşgí@_iĴC Ĥ“S˜ÔtߐĦS;Ü*ž_ÎŒüIh!r2ôH4V(\"†!H§lİÀ#šhĦ0 ZÑSÙo›¤ü(lyìÇÌpŒ=6Ü'5D -*>ĴĊŬ‰JùŜUûބґëDW­Vë R-Ğ1uQÑc{Bó´gà˘_Ï ĝżZ]ʤç,ä° 9ŜZn›’N9wĤ­séNQ^­˜`q9")ä]* Ôƒ†ċħ„ß³Ÿµ ôcìÓZÎúÓÄ.7˘²C1öıq²Ñ˘@Ĝx¨ N‰%‚ìË]ġ´|ä“hì‡>`<óÜâ<sèŽÉuϕĈ÷İĈSLLu"Ğ€`¸ˆx¤ô+{ϑéÒñâìî9GŒ§Óv5bïUœ0ÔiƒRċHñ%~…,vŸß›ĊŝdÏ‡˙ô1żžÂÖçóiòϓżL#èendstream -endobj -920 0 obj -1444 -endobj -921 0 obj<>>>>>endobj -922 0 obj<>stream -xVYoÛF~÷ݘ"Ií%RÔvá EÒZEQÄyX‘+q#’Ëì.-ğÇï7ğ¤,+ˏ{9žÄ4Â'ĤYB)eĠÉëĊÉÛĊÉ(šÏéáÇĴñ0˘i”Îg¸£)I+‚?Góî$Nbw2N҇“é8JŽ&)tLÙ‰ƒ~H„Qğ({´XÁÖé7ı?Ñ";›GIDoä²]ŻU½ĤĈ¨ÚIƒĞ^–²²/_N†ïRŠÀ>Hf`?ûPKڊ{ršrĉ |A@`$eùÔ:a-ïawSŠŒ)\!­¤LW•¨sÚ*W-dY’ÍŒjĜ -á@Ÿi“31›0˘AÌŜCµ0ëĥ’5è˜ç“ù…^ùgï­T)#ş"ĞŞĤ”$ï„żzĜĥQàġÚRÖì”çÁá½bc$$ jİû Â{ë/hèŞfhĊ­ /z჋“YéXŸŭ0\Şú°wŠsĜ“VR%6’l ĝ(à÷’Œ·°µÒ<Á;l­ñ -TNƒ†.½U°,òV=ÁŒ•™ĥîrÁeWüKiŒ6TIkĊZö.Ċì 9 ä}D|>9+ p„Ô!í^·†ì½u²zÂĤech€˙ÏczžPryù·= rÀišt, -Y³šH)†AXé[Ĉ rÑ_ ĞâCÁ‡›íyüÚÊVR-eîaĵDRœn™“Ş ÀD‰8Ŭû!ÓÊŠÀ äğ6€ÔĞ g_ôò(ĊôœŝI“˙èÉĴT¨.‘…ê5uá”cĤ´Ġ2+àOaİ3QÚşaıMXDž{QÜ+‘IRÍ’ÉŸ”–™°L&Ş+a7¸‹úïè@ÜGaíq8§ƒƒ7şŞĝtu½¸ú}ñ™>\_|ú£VwŸéZš[i.>]‹j)m.š}>`†3çtssÙ%Á'ŭç›Ö9Î!x(?JX„kÏ&”nÎàm–C{ó´„} /iġ‰;8ŒGé+_úµ×u@ĵ³?u&Kbĉ’·ĴÂyÉnžŽÎÑÈr˜yÀ2éEtbe~LĈSîÈ;ċ˜ñheÑi°EĞ UŬ5köc‹4°ç¨/Ô˘oó NL&ڃ+z° rh½ĥ”"çXhîGÊF½ù]aqĦÂ5ÒKtż=ġŭF·€ègAíoJ­7„Â7ŽžK¨Ġ-ÏĤ1Òĥ%#İŝÚŞlSv½:Iġ³Ĉ;žvóùç[ûZBña… EÔ<Š -nħŭ€ l°BíúzçġPşlèEe˘ †£…6Ò `VéóĤ[a”F›ÙëZ!|~ Q2Ħ1†c·Y`IĜ_ ’xêgÜŝR0ŽèO—+\Ó{oùϏ!ÂsÎŻ}’0Ħ|POטڞ²Żk#*Ŝ²Bfż ğ†£•ô½›G^k9€+/ëZŭîùĉq˜¤wˆK7ß"/ÑCŽĥZáŜŜGzÇ^żXZÀÍ.IŞĈ”Ğ„CvhetĠÏĜ×=vĦˆüac‰1¸Òeİ·ìs‡Nĵ<(ƒ ğßrä3"sİï´~ŸqÜ烽e¤=žÓŭށúßy~ÊĤv›Œw{écÄÍğ-2žÎ"^™ħî-˘×Wż˘F‘™£7:ó[ž% A`ûžµ5ñîÌJÎÒ¤³ï·“˙}o~endstream -endobj -923 0 obj -1321 -endobj -924 0 obj<>>>>>endobj -925 0 obj<>stream -x•WïoÚHŭžżb‘JàĦ@#ġCŞ6×Tm”k¨î*E:-ö›Ú^g×Aş?ŝŜÌÚĈÜU§(€íŬùñĉÍÛñɈ†ĝÑlLgSг“÷‹“‹“a4ŸÓŝ­qe³hJ“ùL~iZaíŜÌĤÑüÙĜÂC8h?`èġċ[Mhħ‚ßé?y>¤E|:&Ŭê²4ùšŞ‚ -gò2Vİ< äµ{ÔÎżZܟĵœh, Ĉ3X:ŭa+ÊԎr­*-V—lÇÛL·Ĉ<­Ĵ£­ŬŞlİÈï|İ3^^yÑUIĈ“/Í×é9Ĉ6Ëtž°Ċ*y'{Ò`tÙ+ĥá°PħIMi´‡3ûhxËr'$ò…µİvÈ*]ay›'kr˜İÒĜ<Ş=§#uvúĦ2Û´[GŞÍ\Ż’| µÜ5M´Ĝ ÑÎ3Ú(A¸“£ä'aì‡ô–ĦÑ`ü&G”ĞL˙­R£ü(|£(:·§òîQ•>ÇÚ ĜÂ4y‰UšY_â+ Ħ1B…|%’êħ·eV/5ĦJ…ġ@Üĉ¨š]ÁBħQy•igbĈB -HÛûĞwTÂx£œŠK,ˆˆn™.µO˜ñ–£ħ[Ú슍Î=Ŭö½ğW¤ĥħEUQS_¨Xƒ d„ YÂġ!Ëİ­Ê.(eѸa*"Q¨’Ĝ1ĊÙĈŬİò(™ï“.ŸOY³ŭ‚Bp,%4 v™ñzÉB´À“għ?‡аÑñOd3XġX{§ šĜùèÌ!r~cĞ4ÁÉÉíC·Wż}ú~CŜĴs•2Ĵϖĵ€b%I@¤”²˘íó‘öJ#×M#ĈĈ³Y;@Œ›ÉóCwZOާpú³]rĴeÁÔ°¨DÖ^˜ ä´Q89bVäsPip£ħ[Â €Ï€,!éħ Ùyo—PodnVĤ™Ĝ"îÓmĊqòSEm*Pf¤Ċ‘$F;%ÜÙ +$<-ƒÀƒÚl½Í‘VÎâˆÇşZ*5ĝ’û…"ÙÜŞ‡=Ä1ûxñċË>·ÖġÜUٙġĤâ@ß}×s£UžaSôŝö×#NÎJdM‹öŬcr˜µ -ë”38|iqž4Y°E40ÂbòĈñ¨%†ñZfĤ„ġXv8,ÓôÈ{ne À°X}÷ú?†VÁM £DÄööê(×Ü Rù1ˆ",“8&XVö{Œ½×8ÈE™„'ğĞ•]xYÏ„Gİ—˘& [P† V ڀS<l7ğzrxHıâXÀOĉħĊTŻ}4Bp3?T‹ÙżUL|ğçç²ċ9XH*a­ş’Ô”Ç À˙Á“ ŻS49š ġxu”žJ2“c!š2ŒèR˙G£·b­żPD:„½4* qH‹'%„,P4 -´­‘ċŽ|óqĥéÓOK1'\šBĞ%Ĉ0OEâ’İÉġĉü__ŭI=nÙU%^ö'Rê ş°×—óúŬe4E#ĵ MñjĊŝĊ×÷˜Eì=ÇÁĈ`óR^xß ,ÌĈ"˘˙ï…i2›@de䌭A|?ùpuĊendstream -endobj -926 0 obj -1583 -endobj -927 0 obj<>>>>>endobj -928 0 obj<>stream -x…WmOÛHŝÎŻµ:A%pâ$„À7ZéNê˵9NB'-ö&ÙbïşŜ54?ŝž™µÒ$ĵŜy{žyfòċ 1~S:›tNYyzyûò`œ,´˙SŻñϘ&çi2§Ùâ ŸÓ ŝԚVxwL³É$™={2Ÿ.ĝ\îL§¸.wà×àz÷.F×3JSZÑ|qFË\ÎǴ̎V.U •…FĊ–Œżxµü|0şÓ9ßHédrŠ–ùá'ËitŻê‘Żœ+FE•ŞÚĜ kœ½$yJıİu\½%·"9ĤÏîÖ³Ù1¤È³VxĥùüÏKZ›óM|(ôs×ù9ċĞËñ8-·çCŒĵKö„cŸ'ööŻkÈo\SäTŞ;MAı™o]SÇ(‘„oŞÊĠÁÈxjkóŝcïMżġA—¤òÒXC­(m”'c}@uNŞËt}Ĉ ZÔé0Úz0EA™³÷şx¸9—àHu^UUĠ7UÀ!|ôLĜƒ°iL§‹s4ò`G`t}N)pcOOçO@_$ó„ŝDe½ĥá˜8 ğÖäšP5ƒ"ħ 3ĉè½Í4dïıtZ ‘ÔŒ]ËQĤ,ŸXXTÈëÁĠġ‡¤naš Ï˙˜’šL[Ʌ½Ì#˖°\KT§,Ċğîĥ@Ċ‡ŝŠ@İRkí™Z1Ü şUÖğĝ`ŬÊŜµ˙`UÛ|è珕„ĴÀƒµ#ë:×7:ğ#(%ñLUäŞ`&’G¤}‚€ÊĴAµ|@ ÔşÖĦO¨ FJ‹ ı`1a‰]^ĝ Ŭ1Ekí=m´ÊÙ[ŬûĉUë>!Ús~à}‡àÊ…{Pì÷û´i^P’$ß+LżéúYI"me¸¤\w¸ ~P}dŒWşb~:À“msû5;qh;n­A%˜ÂLÙġİ&8¨ÉXêžThqGFBê!k^‰ıXÛQ@×ħÒÖù’£ñQNkŭò6Óğ†Ŝ MEŜ­ÂCä2ƒ.^„¨0pvğ}rİTĥYħX×{Ç]ç´ċF=AÚ^³ì{#T&Bx ñlDtÚóô`Â&AtWf.!6³k—™zµŝ€ĥŭ”ĠĤ -"ĝÇÄ €aÀÉJÑ)}!£ĵ6@Âc.Í[“Ġî*B’·!Ħk¸Ö_UYúxà¸ħL˙Œ=?ċËY"Ç~2Ä>āċÛôN•úñĉè£Yo½)Lvwóê´Òl4^CV^²zĵÌù9/ì½Üƒ}¤gç<¨ĵ•ß„ş8ıZWT ³è£ xD&$äÒ£,[t6Î7ÂGı;& G™´x>¨IœNŒ#,>a;&šŽŝğb\k8gbGĈÑA˜á9×€ñó´ͲěeS,ĜNİĥï™j'¸_†UQ"{ö×d:Ĉ|üùàJÏTĜï+‹ä,ĦêĦ[+ĵ˘ħ{!Ú }IğQ"ġšTâ–VÓà?HĊE™‹ ׿û˜Ql\XúÛgž[ в·Ċe×vétòKìÎ2û-êZˆ¤ûZ?ƒÚ;‡½§“zâĊ"w˒–l‘ÍÚdR¸µg•Œ+>³yd ŠĈ…}ċ­óçE;&5É$NüF£ƒbÛ£-Żs ZPäs7´òhÓ-xîw -˙ÛßŬ ŬÇĜBayà6úIdbGmÖ÷Ĝ˘díĜó§ ½íPaKĜV˜Ŭ*$ğŠÁöêÍ7îCäÂ]Žĉ8ìÀiÁ”ۉ2ş^´ßÒùY’â"îħŸ.ßnî3+ú•Ëš-efÓ'ñġ“³ XäGżÜ1gg3,òîlĈ°ŝu?ST8endstream -endobj -929 0 obj -1506 -endobj -930 0 obj<>>>>>endobj -931 0 obj<>stream -xuÍN0„ïyŠıQ¤ĈĜİ›¤ÇV€Ä ¨_ ?Û4Uc—ÄAäíY“"qY+YÚŭfvö=Rü²ĞUíLô`")$Ò|#4tžñ?áê ‡{Ü@i˜ƒéz-R˜ H S-rħx£âŒšÊħiZÛܚCJÍPœdŒ,žGBQşš‡áÛˀÚُ#/Ë0`ÑSI˜ÜKT;”=ˢµßì‚f´4xêàû˘âÀž(xKÄj%’ài-˙égĵeżĥ§Êğ~aĝ'ĵÔìŻù5‡J3îĈİĊßoŸw[ĵôî̸wĠĜ‘ġ…o êñLĊ3ößħtĤEÎ×ċ…ġúşÔkô0Ruùendstream -endobj -932 0 obj -276 -endobj -933 0 obj<>>>/Annots 120 0 R>>endobj -934 0 obj<>stream -x}WÛnÛF}÷W ô°iŬlËòÔIkŽÛX@â˘X‘+‰1Ée—KĞòñ=3ğĵ˜v‚Ž(íÎċ̙3Ĥ4Áż)]Îh~Aq~ô~uôau4‰–KêŝĜ-&tœF´X^âól-ÉjÚ ü3í?ûxE³ ­6°~qı¤U"ż›xüëN•N[şŠè^ǵMŬ2ŭ¤³êxġíˆoNŝĉé|Ípw|M#ş)œ5IğÔŝä‚ĤÓprvÉçîUVTĠeiĴĞÈí É2³O‹-™’oâ[#?l3³VUù:ŠMħĦRY•kĉmOèŠMOétv!ždüĠßĝ›Œš¤§œùçߎ?0š£œ Dî2ş’œf“óċ×ú(UöÖA+ŸäjˆoLoékµSVŻ+mĈ‰Ŝ¨:sÇߓдĝ’JB>ûĜÀuÊI]xd˙Ì´Ş4*ıAE2-$ı*˖A´TWü)-9WŒ$İ"i$&s]¸:_Ìá"§élÍÓĦp‚XëğÛw7Ÿŝıŭpûŝçhçòìu,ĈŜĤĥ(·µŠ·ÖԈ-ÑNYEĠcAıI45ÈFD+äKZ$f_“I>™ äçs ĉW³è<<5 àÌë‘úm×ښŞñÔ8—=ŒÛ/Ŝ*òpL)Îê*ĥéZ'€U8ù<Á†'w×÷§żß}YŬŭ …H.Ke…w1İÖĉIŸ¨ç5:Ŭ×ÖĊäRŞĠéòU4‹èÖàplò2ƒ‚Šnr,-‡úrŬ¨ -€"üŽîoß7¸;ĦQÛÀ(¨•SÖĠ%í™y1Ċ舞‘ĞŻôÜŜ´>Éócc4„eÉóÈ[ŒèË.wœâ€ĜħĦ^DVǰƒZ›ŽĜĜĞC˙ Ž£CmŠSÌ֎ÈzàÀÀDzPš"á~§­è;¤Gc×i‚ Á0}8[Ŝ2:‘çŽGcHhŻ÷•oÒ`Ž…ŽWonkj"xXgÀ–Fä90Ĉnz}-şW€Š5‹ÇGW–Y³HIH2#ĝêqpĠtĊŬ Zx/Ñ÷Ĉ&€ġ/_"‚Żŭ Ù@ÔĦİĉ§,Ĉ9?ˆq&¤)f…i}mĠHeT–Ñėé‰yqĉ—ßÇbŞĴ`/@Hy´zxoê=ĤԈ8¨oğ” Í}'.ğ÷ßıĵ˙ŝüĠzqıÀKğÈàâ‚-`]üëè…ô*"endstream -endobj -935 0 obj -1797 -endobj -936 0 obj<>>>>>endobj -937 0 obj<>stream -x…VÁnÛF½ë+<9€ÌH²`9‡âĥrpÑ‚ıĴȸ1ıËî.­ïûf–”d6AaÈ Äٙ7oŜÌì?‹5­·ĤŬ†îîİhûĊûO[ZŻi_áÍŭŽö%­òĠjEûâĤ:§Ï‘L Ğ_µ'ŭ½kLab3P6RĴ5ÁÈ[ĠÂòÙµš -×ĥÚF5ôüô3ƒB_Ô¤ŭħ'UÄ^5pĦBp0ŒúŬŝÛbE·ëğ|ƒĝ7^œœ/•Ĉ낣LĴ)ÔÊë@ĈĤ'j€İA„˘÷&K:ô‘‚jŠTsRC`h!a´ĉ;İpm4…ŠĈÁGQëvúTkŻÉHÊêœÚû œİôîâK—K².’˘Lž³|ÌksŸo9Ż'e* DÛRÎ莎}—R²d*A¸cö’rNûZˆî[!tôùŞSÎ8Ş$$YGSF¨š0ž…ñX#ÜÙq5&DreÔCs)yÈrúNmJl–§ÒĦ  'zÍú°5EÊóĴšàH•¨utpƒàŽ…Ċ˘â¸ü,ÌòÓ@Ñ&?üĝ•…Zġ UÎÏâ×,ɤ"ç_ߑbŜQN2EÓ%Ìa2ŝ‘~É(´‡H+ ħPöï&Ĉ¸°µŭ/ÙŜÛYduTĈ‚8˜8ŝ!wŸ+ÒŞˆÖ€ÓÊġ€&ño -ż¸.ÂĦ‰D… u°OĈвQ:Ò!Èfl43t/9k;öÎĝŜëÎyèTÊrF“ô/-ÊÂ,í·=™˜KÊH™MZ@g^ËI•:ŜĦVMâÓáÔ#¨¨^RGÏ˘2–Ëı÷EW4rk€I}ŒşíRf;rċYy\£qîŒet1W{ÄäĜ ‚á,6^:b?b4TŜµ"12°Ş1IĈ´P‘ÍyYpQhÁûŸgÀ@…ÂĤÑwħ>ϚKÏ1§Ĵ¨Ĥq'‘ñÛ˘ƒ P š<úĞ>ËY4ĝĈr §‘÷·ëÑğoÀ;w:ë”:²gÒħ@rT^F páW–”1[L×M“r:%Óy“Á=jìò‹‗àç|Ĥûƒ0áŽ^u50oӞg"7  ”féyażqÊ;v˙VHЉÜħfa›Ò@÷@ŒGà€ÈÛ*Ў¸à“ûŭxrâ‰Ùfċ4½ g)ƒĤ0ĜBFïû.Mt·Ûä÷´}ĜáyƒWéŽġ0ŜħÖ÷ğœï_¸^]Ŭ³ž?>=~¤?½û†ÍHżı˘gXrMá ·éÔm:vók­şˆîü€Ŭ=ö$˙ÀĈÛŬ6À]÷íŽĥż˙p†`óendstream -endobj -938 0 obj -1153 -endobj -939 0 obj<>>>/Annots 127 0 R>>endobj -940 0 obj<>stream -x•W]oÛF|÷ŻX (À%JòW°¸p;mĴöî‘<‰ŒIžzw´ĴßÙ;EÉöC‰¤îììììñż£„&ĝ“Ù”f§”ĠGW‹£ñÍM'´Xâ—Ó³sZä4‰'|“EŸ ħĥRS2‰ÉÈĴĠŬÒ/”ĞZ” áSAÓĝċâğ‹”Ì}¤Ñ,‰§ˆáÑ$ĤßUٔ͊DC÷ şöÏoJ[ôĤ>œ’¤‹0=ç/ikI[ĠR!ž%‰ŝ‰@ÒÏ@çâş—öêöë5çĠ’|@”ëFôċÛßÉ~–€rZÒ÷=€]™¨*™ïǙ(™ùÒżŜ„;ĤMQfŭúó›ĜŜ‡P8}́³EİȞÚu =SĠ -È´!żĞœÀcÌ! HtuŭùMöëŒüÉi ô%˘¸K3=Ñë<şmHém°ÊħHĥÔcZ–ÚX2V­ \v­Ë…ĴULn÷DĤêŸ?î£@9!VÊŝÔĦIBSM…1›œFß ˆi¤ùfžFùX³pĝ2ŻĦBcµ°J˙ìžr(Ô7Hˆn ·8v•ı\ ŸżâlK -aC“è1âŸTSmİYQ6Ò˙ÎÒĜ`Ž9ˤ1 ­#4ÈjċáòŽraE*Œ|ü@Tšş˜ˆîĦO¤ˆc8ԕZa€Ŭ°  W†XUÛĜĵe#ıĦ·Dk]>—•\ĦJE"ÏCÑ\ŸKçG*&ş]â3@”ĉ §i!Ëĥ"71’y“)ħ’ïË£WÂGg62€œdż,ŽĜלıQÂ˙ûöÛQ2ż€ŠçÓI|N5M““ĝĴûħzwÜ)c>Mplè Ĉ„ÎK i‰ -ĜäjÓCە¸ŸUŻ(˘íctŝĝa˙”CéNa hŞ]j%ĉҊ²2‡31àG*_ o6Ú\>ËJ­k‰Ĥe*wmaƒ-uĉĉĴCµ–m•Ÿ@Ÿ2-„éĝšĠ-8´_5=£nĜR‰ ”„/¸ż.ĞëaĦÖ]Ċ$¤Pŭ3 -i%É(Ġ@Ò iYIœR-šĴ€gıÉĞŞ×Uş°Î'hpZµĞbqÀÚK˜2À‰k­ĴÊTuÌÇ?„‚uĵÁĵ";¨éşħsù0½!.:qt3L~ vÛ¨lxà|(Ċq|)/µÌ`<|í÷úÛ+Á=q@ïFµUÎĴÁA5$=˘FéNş÷'aÜ=–׉S1ĉÙD_9öĝf'çŜYow{|ż8zç •RO†Şò‰uQš.mœ]~âĊŝġîòöžî/ïüêÓġë×5s|Œ>yÒ0)n‡ßƒ˘W€úwA/ÀëaŠWç1hírYâĤ`Ñ\ç¨SöŭDË0şŠûS-_D½FEޞċŽêğâïïw‚­ÇŬ:âWÈÄ èŸrʉ‡7E*ĦT-וÈŝî˘³¸"èuÁ– ÏıŜ-÷·-?ä·7-­‰mžîSĊî菛^/_Lħ³ܑ°ëÔĤAàtKĵŠŬ7€Úàż@(r7ÓĝQ4[RP½ĤÓ­ecâ1x’Ûŭm0ŞĜ҇ġ×ß3y:w5[ce}ì2š"Œ„ ÈKÚ [‡ S¸`Pıħœ;`zžÄ¸>LĉñŽ?;™Áñŭ§ÎñĦĜÉɞËßĞÍ1:Á‡J!%í,–Kò"¤Öì—$óÒzşW`|Ó Ĉ•nùĵ· vSyiN•ŭ} -İ<-L6à=†ˆ L\œˆÓ9ö_MÉé,|èi8=qĵ½·öÑǍÁŠÇ…ĵ§#v‚]€W<Ä{ƒƒ`ÉaşÁÇ>‰aAiİĝ‚…ıċĤü³ŞT*Ş9€-yÉàmÀ+İšeȚíF÷¤ğAŜaŭߜw§ĦÙÙ߀ì-i~6Ç-ŻWy4?ï¸ûóè U?endstream -endobj -941 0 obj -1500 -endobj -942 0 obj<>>>/Annots 134 0 R>>endobj -943 0 obj<>stream -xW]oÛF|÷ŻĜú%naÓ"%Kr€ G]¨´VuNäIbBò˜ğ£eŭûÎŜiŠ6š˘HàYܝ]};ˆi„1ÍO)-.ż,FÑŻó—˜żüñëÁl%4O£•OĤÑ<üV=?tz3Ħ8ĤĊ -áĤó-2÷üˆéѝ|²”nDµ–d7’~\|á$ŭ(ˆy6Ž&û1(ôšNo’%àÙOD[żµjjzÇIž¸Ÿ\€ĉy%)ݤżÖ…ZŠâo22µı‹Š´Ù[öôĉ,¤=qyO’)°.²£^>şŝpË9ûDtïYrCĝÏT˘”¤VîçL• ĥ’„–ôEċU^­£Ž£³$šÑtÄ|—”ÄI‡ßï`{4û|˙İ*cIFÑF)-r¸#›':³ĵĈ`÷´¨° ÛŬLƒż h<˜Ìgĝ -bŒV~ûŸ(Û?9?ĝe<Š’vĈĈgÔνHF¸-ĵÒܒĜ_ĵڏnEµ£ZŞş~‘ óŬĠr-tĈ`]ë,û;Të*~ƒZ—yä\–¤ž×üTˆžĵLŜÒٚB+œ„÷µX"5ħİ@b}/—hxXdÄ MUµÔ˜2@DÚ2j&ï Ùfmo‰dŒu9còVh `)íVJĤ¤ıN›=RŒ5 -*59tè²şà\fò•àÁL¸ÀŒ¸ı_ĈÏŝ·Q°ĤTp2ÛÜĤàDµ‡¨]ĵŭ…|½Ş0P•”áŞûċ(a1pİH/Ÿ‚?vcè#í%ÔJ4…Ċ²} Œîô[ÀXŜĤİk_Ì´—ï?Ü;6îżŬ>ĈnzĊT£™”•îşÑ0Ü ´½UÍù“ A‚ Œ…‚Él܁'U:K ŭ)Ŭ¤9µħ|Œ}=½" -2VÖĈ͜ĉEgm ı²<;Ħ'|Kvt:pÊ{7ß,,Ê6FñKÛéJ0۞@ĤÇò)•µğ•Ñu'E—ñŜ˜\ħ–úVZ•Ž/ °Î D-ëB°K/wÊóáNpÜĴאujÖñ' ÄèAÉtÊşÁÊ2‡t{{…ëë6Oµ2jeÉgd˘ñʨBâ Ğ‹Îĉh ĈÇKòÈ÷ŭóÉ Gôy³ó'<*ĈXò)Â+x·Jzlág.ë;ğj´>^ÍĦQŬ£t0lì˜êoRş]êd÷s~‡7+68}Şò§îfbħ˜9 Ö:|*á áH<ĉî‚ök­”˵Ó@ò£ë·Ŭ0f/ntŸ‚ŭ)$”:ÀċĞö Ž7¤Ëŝ‹%1,•İq.Ġ/Vè`‚G‘[ĥf‡*CyŜOoĉáCFŒËŸ¨Îñ‰#;şż¸½ĵ Z}î°˜`µ &*Ĉ|âß|2Kİ6;úŻ[m‚Œs|*Ĉ#“sŽŝ~N‡°endstream -endobj -944 0 obj -1711 -endobj -945 0 obj<>>>/Annots 143 0 R>>endobj -946 0 obj<>stream -x}WMsÛ6½ûWìQ‘iRßîLNœt<Ó8nĴŒ{è"! I0iÙŭġ} @$D7eÁ°oßŭà‹„bü$´žÑ|Eiyñn{ña{G1ŝÏ |ùŭb/£kZmVQL%ÍĞhĉW=òİЏ JÚîqßj³Ĥmf/ˆi›NžeóJF•Ş µšÚ\’.2Ù£(w‚ŒLğFµŻTêLÒ/ÛoŒ!´‹Ëċ™Ċp§›Y”œıèäÂ9ĥÁĝoĝÚ*ÛNÛo8=™sÙHù¨ğ"£ZwŬrv‹Ï^:C—Ɉ·ÙDtxPµ*­Ò5òG'MË<zRUĤ†è~뭓Ş,?F”’Žâ•„ ö]/I7ŭİëM™z‹[t"r“päĉŒĤ¤d6gĤìÊGñš/,Ô!b…FëAòóq oÀ}Ë8šî;¸óĈFàüŝXĴJ;íá°ŞY:ŝ@!ójZYZğVó“TĊ+-£}½żû‹:•;8—VÛàX,=S'ŝA˙-÷DàO!޵‰ˆĥı2”²4ñW< ÈxW`QQ&ŸeĦëá]#Ş4—†t †ÊKÍÏĤVRC|v]KGU´Ï2cGé8ïï1ZW‘?9[E ÖÒwŠìYT­8H>•Yԗ¤ œmî!H ûg‡XÎ@IV#ÈìLp6ї‡÷”ĉ˘Ş`—Ê‘ĥœwöâµ(DÈÛċMĤIµ‘c–J)*ÒjdĠ%¤ĦJ!’QVµhġ.\mÓ!—À‡ÉUmÌ£é“ÌÀEú{˘"MéUw”£È²‘ùSuâŞÀׂohŻ‘FwM*=VaıxF8Î9âd÷„âÛÑexĝtúáö½—f<„Ѥİî ++Âĥħî,dĊEe -9µıMĝЏK_‡'}Y +ÛP§'Ñ 0;/)²N—^ĥRŽÚŸżKYzŞêÔÖ0]KT)[ÈG”QĠáTÓ8‡qWĦñ/“µéí´H2—c;k8 -—Áçœ]€òI6zߎĴ÷ĥAI’:c¤M‡K5òNïƒ,ÂÓ˙SèÁ -Ñr}d§²ċrÊ9ÊÄòçyˆ^½Cmı b†ÀàZ# Àhu:25µ^Bu̚ÀÈôà€ĥygApRqlXy†^ÖfĴ³T½Ş¸Â"€³QŸç%—ß³D1óöÂÚtéî*ƒħiÍAy >™S kFÀvĤƒlYRҖnR÷ÚŭİۆtiÎbĜüxwë.,ވŜèƒœĥ 'v¨÷ĠÓbJ²M#şAÇc,4eĞ;CŬrXá=н|ie•Ħxzŝö]Ûa˘•edŬCì—ï2\ƒ0'5e–û‰ş.Ú·‘LF„’`Ħ -Ż4Rék^|g;ġ^^VE#Ó³Ŭz.×\{Ǩ§Ú˘ĈCß}ÍۉôğĞzĵĊ†ñ‰“×ÇɌlá–Ù”JñU#Îcrßë˘Ȳ.0 1™NyVÊêY5şâ΋Ĵ-˘Îùe™á6>2Ü÷ÙЏĞ~„½ħÜİ…Üw¨'Óigç }ùÖ@u·ƒ0óA/OrbâUı9y˜Sí Îs*ŭĦŞîċI7…kgŭ4ÖO²§° µ°t¸™Ÿĉħ›ç<Ôı{,áö5fĊáY°,iŝς%&E^Šw†·ècœ‰·š…`Sŝîñ -I9TÙ·ÎÙêċŬ™]ρg1͋TÛğw•t²Zc^ϚĵŻ<Ŝ|zwCŝ†~‡ÁEĈNĴ„KwêÒ›$q4‹ĵLY”§™rĠé֎)Vë‹ġš`K“eìġçĊżPÜ endstream -endobj -947 0 obj -1490 -endobj -948 0 obj<>>>>>endobj -949 0 obj<>stream -xWMoÛF½ûW zrP[ĥdGrzK‚08n­ =ä²"—âÖä.%Ċ¨żïí’M‚"Ž“ğóñĉ͛áדı\âß\V ıZJRžĵ[Ÿ\ܑĊĴ3ĵYndÊċìòO’Ó÷ıŞ]Ë|>“OÖdF§ò‡Û:ëe£›Nk+ŸM]çċ~ŭjŭÏɜ/aâTÙT>Ŭßŭ-­7vËSäú› ŭ_Íg ‡¸xğñM­’&ğ†ÛŝĜbĊCwĥÑÛZ5ĈYqY4O?LR;ï²fŒ4yíÚm.˘¤í#/ıäŠÁ#òi˜T×ÈIÉ/ı+öëĤĝOd~c3¸£‚ÛjĞ]ë7ËŞm˜—ĥ;S;[jÛxÉ\ K…óĈ”z&ŸµTµöx)1eŸÒİtc@†LOÏpŸĈċäĜäZUıQ“˜|k-Og7….Xô.¨ŽĉµP)SVx ÇaŸ8=âü×{ITQĝ3y(ÚíVÁĴĵm­mLïpi[hœ`‰˜Ç½*ò£w&AVi’œqŽë†ÒM\ŜŻ%uB iíñŞÒ -@ŞĞ4è£È½'!ŭ>R%ıħ¨Ä:7^*…ó’jŸÔfƒĵÔ¨ Prż÷.ÏDĞ -8gy8kmBtUaš½˜†àï@!$™#<€*3Û´:C`ˆ²Ġıúɋ‡k(ö3ĤúûúÍ&Żçoûúf…ß üŻákèÍĦWo^>ğM³˜ ş˘Ô!0šĵ¸èÄfŒëtQȓuĜ‘Ğĉŭ“Ğ€MM–ĦC@ĈÒşˆŻuÏjâÂş0ÍIáĥè -Ù˘'ÊÈBÁÓ#›Nrë–Ġ`÷(Ĝ#ކÊe…¸RŞThf’ĥh@‰‰kBL™ĦfMç$–“à³EާAWïöĴĠu¨áZ΂z}´š}X‚I‡ŽŠ„ğTí"ŝ&µ$ûQ[ħàzÚc“$<ÀĜĈ5 <˜Ĝú5ôeÓ!àÀbĈ;A$vŝ¸ñBÏCÉ ú@W5P”†½ĊԚv€ÈïÀ÷ò1S–ĠtLĤ ëôN×èfXSiÊÑHĦƒĈŝrôš g€74 xRk&ĊJr²SĦRŭ½Jy†IqŻkŭµ5Ôé€Ìvıv@‚ĴZA^Xc›@ò­ù7Ò­×ş BêßCí‘Q˜û ‘™!½ĥ&÷ÔPB}еárpt€•q‚µÖâKHhˆö7†ˆÑ|dâĤéhà$‘ÁÈ^vï_Ü&ŭœ9_Ín0f1;ż,–Ğ~ òÀwĊ‹7J;qĉûĞ?o÷Ħ/¤$ı²[²†hŝóç‹èà ğTSM99˘Ż@Vċ:X“ôß/Žt-Ò^öœDá°Ú8˜8 b)Ñä {ÉhJ¤mU Ó¤|Ĥv  Ŭ>ŻñĜvd@ĵ‹Îr`UÁ󠘤œŒeËuŒ´žç"ŝÊ÷wż2fžœx$›q7`sî,&ßx#žêċÖ5’ÂNÌÉ “Á>IÌႄ8ş˜ -Ç%£w†ڃOĉÇşDR3—Âı'ì/F ôJKNĉ³`kĞħĜbrĊŽ3:àŸhšŽFxa `Ó -r}èPÈMü*Š[ê•Fù‰ħÍDŜéD! ssĥÂxîE^€ŸŸĉÜN"_NwF…Èîš1ñòˆßXÙ¸³¸Lċ½fSĞz˙ċŝĝÈ9ĊX ›#äĦ#=Féâ,Û“^£ÂíħÂ`ĥM¨ĊíÍñSíê2~5ŭÔ§c zÏ^"ß7,Sğ^]3ìġœ°2˙yòk7ĠĤendstream -endobj -950 0 obj -1670 -endobj -951 0 obj<>>>>>endobj -952 0 obj<>stream -x…WMsÓH½çWtíÉT%Ĉ_$áhÈn-‡„,1‡\ZÒX"͘ÉZíŻß×3’?IJ@ÖLwż~ïuûûĊœfĝ5§›-Ż)­.Ŝm.^˙ħ˘ùœ6[|r}{C›ŒfÓÙlF›tòÙ+çÉŞ EŸ>|ŠÓBE)‡‡†Żèa#9b“Qîl³#2\)OìċdG­mÊ,ĵú›áZïĠoñĥÖôĠĉÛĊŒĉËéÑ'9!÷§…m mu‰›È[\Ċuĵ"|Ĥ2J:‰žÙŠuÈEÒu¤öÊPis<Ğċœ˘óì%QטQ`Ž/}½ú˘Mf[òÊ{âQŸ†^\OW}ÂÀ¨ìÈ&{mO8SÔ€Cθ/Á3ҞM.H„˙Ċ’FĜEèj~Q!ó­uĠ(Ñğ÷ëÏχƒ4< èOiS ~•˘vÔ kâ²´­?äl2U+WIGc.NeÚİ4ĉn‰G‘{ SkjgË=G”–Mz(pÚħĞuڔì°/ ƒ Ŭ:-¨v—Wûkx8µUN™Tecl×YĤ%dŜ]ß9ğי Ŭi_ƒ˜ppŻÓĦœH?z<–MžsR*ZŸUyo³FH÷&êÉk`)Ŭ>yG4k‹‹9`AËzŸ'½ìhùóФß7 z³œçêö?ĝƒ(Ûh+oiyˆ­ĴŜŜie>Ÿ.§s À.W5}†ÔŒS/şZˆMN´S‡—‘?$e]ÎÀ!ô\p£‚÷¨ÙİżµŻ!ô#a‘ÚÀ7³uìA´ng EOLxΨ­öElyƒĊû€ġ‹Żû ğP ŝ8=²Ġ@€OúÉÜËĜÛôĤÑ2&‚ÈÜqê{bĦCÀ•E˘ÁGb€ı2J”Áúáé)N=jdĴSFL&”AŠc^aÚÈ<Ó\…ħ²z€J`G& ‰ŝT…c€%@›:à1ëœÇ„>mŭbµ˜^˙˘ġ‹ÙíôölqƒżÄ_LŝˆáRI&î÷%üŒ ၝ%ì’@~ê;Ij ´sÚDFHĦœˆYVħ=ğ°=q•0mÀ{ŞT•È 2•ÚL /àf/úÇöÖëâ™c6ß?}z|˜Î½é ³Ô è 9*‹"z ˘:U6Ĝş<ÎR ĥ@/S¤ßzEÁiÙdÂ:ñĴĜpz{)ħ-‡ t?ásï7;kK\͔âġyËAh! —µ -bÉĦAÖ3[ƒN فO+ytş’5ï.,£"ß·5l4w‚m–<ëĝZv)Kb!f[bßî´*3“)ħĥÛ-…ŝEËúà‚r°ĝQä]v³}Ĵ”Á€˜ĝ@ĦŸ¸´ĥ(ÓTAĞôx!pÑcXs£4ñĤMÂ\Œ -B˜†Ĝ™6£|8‘Ħ*ë9ÖÇ£$ô,|eˆWNé#vgıÈW‘ĦPD;i0üqċ‹éIvµ…M 6yfMé]GqÙFÇá*^íxhU0·ÈĞĦìÓò.†Rñnì›ÂÉïdI`Á×TĤúèò7²~ż[ŭÉäıí]}ŽÙ$ß(ggô´··ù&SŭÎĤh&Ö‘˜€sO]Ċc“ŸĴƒĞ›|M.žĵYÈ1äô×Ċżĥ˜Ú†endstream -endobj -953 0 obj -1691 -endobj -954 0 obj<>>>>>endobj -955 0 obj<>stream -x…XMsÛ6½ûWìääÎĜ´%ğĥ“›439Ĝu+eÚ["A‰1H0hUŭġ}ğ)ŠJëÉd˘ˆÀ~}û¨ï'3şÄŸŬÎéê†òúäòäâó{š]Ӳē›;|(è2ğĵĵ¤e~:›e×Ù<£'UkZh÷Zċĝw[…|óÓò^ÓlŻžÏoqġtıÑ?:}FÖÑÓbqF•'EVĦsšÂFŝ†Z§½nıĦZ5;úúôċO²­v*T͚üÎ]ûŒRĈĜ­g÷—t>ğÊĉì6 Ü/­ĞqÉ6äğ|CÊÓĈú ەJy0š‚:ŻŬÁ% -–VšŽ5Żş ÒٚŠŞ,µC|SŻĥsıFXŸ‘ŝ[Ġ­ÑgHÏĜVĈ6šb&[ë^„UĞ]o>ċu€8„ í*ÄhK˘Ò¨İ²2xèƒuİTŬĜ\’'R­Œîİс]8”a‡ƒÎ£˜umgRŝAL“Ĵ%‘·3’R"††rÛĝÎÀ.=}YPĦ‚ZĦքĤ—ß)úô´à\_Ñ9Ġ7kâsÔ×,=šßd ֈ¸Ċ‚Tۚ*5n];U׌Ş ڕ -ÀÈĦmĠĴ*ôž“pĵ6%£—ré#Şŝ;ÚrÎİrìK`˘ĵIYÖÎv- B$·xìÑ0 ~ˆ,Up”äħ]U5=Û*0ô´ì‹×yö˙¸ĝŭù@0ÁéÙת@ĉ@Âv”˜ÊsÛaÜtÓĠ2cĥéËÚOÔW1‘ìP,IÍT+§Ü.:ÀLàıj3ƒZ… OéB‡ü˘ñ^¨2T”ñDϗ§ OŞËĵµzavĴw3ì$ÔÂâİħökbTüúĈ· Ĵi@oĈ#ÉÀ*7gğİÀœ`Ñ|#PĠ2Ĥŝ°k5èñ¸s)V]œ‰Ħž %şw­B!Šw‡VP4Lˆ‰Ğ 4 >PRÒ0ËìĠµ-12“Bp]Ğu Ú·:gĈŒÁWLĊ5[ĝ Ó,ˆı†3ñ€†)˜êˆĥQEÙĥĵĴ+´á+šbô˙ıòbs-DNñò‡HË}Uâé -Ĝb=Òà.rùĦÛÊ0ژЍUˆ“j[t†çÎÄm€$\à/°÷—ì‚Ì |öĞúâŠËĞ]ÄO4yhj´\Ù^o3mıcĞÜ ĴğIäĊÍ+³‹ñk@l~ÊE =Àƒ)äÓË(‚´›•]“óEŸ+phĴV _/€œFğL˜°™ÑŻ CQö“ ‹žż‚?rÏÑ1Ÿ CÜà /üßÑàö Úw“˚gÏó=ótcíH+fâm ÷ ‚Mo0Ç|/:™ -!Ĵv BÜh]pĉ“ˆëBäB€‘ĥ S¤$Œ$Ê=îçH„qQ҃÷”‹+ -z—L½‹qÇs0ß& #‘“Êë,ÈW ˘Á0H%f¨!rî[Ée ÷È.ÒĞ_–'Pş4żı‚’¸ğċÏĝ Ú)§Âx>ŸŬKĞŒžM·^Ğ&òZ„^ƒ<ʜ -e퇏‡]tò[× #·ôÒĜ-Êëéùŝ*Ŭ„>y {ċƒS˜ì~uè O0ÁĴĞŝ‰‰‚Î75v ÖÌP¸ħÌnz‚İD™·ÖûгCE…bËŬ^c^Ö.€GÀyâ|}ĝ£Á‰lQÚ¨WÎΜÎmŬBç2Â@ó¨:âäbp°<ÊΈ|œ8ĥ€ÔLîÎ(G­…VŒcwP–‰”ßW[“W˘[´mÀiÀœŬNĵ²ĥˆ›K ÒıÌ [()öÄ[QCˊÀʑA+TaoY°;")ħ… Ĉâzâƒcž^ˢš‡(½LùİçÄİmÚLĠ¨µ,QĦċ!Nd?<> YÓBz= ÎzĊk!äĤ’ŒŽ;—éG7ö™áSÒMˆ% -JžïĠÔé(!^ñkÈE~çÁ›a…´è9ÉşOQJÒC”w†×˙R`ƒe‘+XË7ŞY $+€ˆu : €Œ]!2żżYG/’yÀŜĝIïn“8Ĉa¤:öK%?*ĵBˏ2ŸAŽï}×*ú½Yì6v$S[UgĊŻóF-ë^ĵ1RŽ˜š÷)2š°HEvJwÈ£ġ[+ĵ°á^àĥœjnñ<ËCŒŝ.İĴÙÍm6/ïù%pq˙ĝñí´ß¸ĵŸlŽ÷š$ŝĝÖy<|~;ÇÏĊ[?k\ß^gwĝ5'âëXżü Ġ˘Ş”endstream -endobj -956 0 obj -1820 -endobj -957 0 obj<>>>/Annots 146 0 R>>endobj -958 0 obj<>stream -xWÛrÛ6}÷Wì[”[ĥ(ْßêÄuâĥı4V&}ÈL"! 6 0)Yß³ R˘è6ÓÑ$ĥE`/gϞ]ŝ8Ñ>#š&4˘´8y3?9ż›hDó%ž\ÍĤ4ÏèbxqqAót›…W~GısOê’޵ Dݳ•w9-Mİr”éJûÂXM۵ިpYëÀOr§29ápUİ?leRUg)]ëô‰”ÍÈXıûzŝxrAg£ñ0A ç3í‡4gŻĈÂÉRš -ġë*ˌ]Á$Y½íÚo Ž.§oĈ. \l42Ñ*ìNIċ9âA¨Vë !҅îùÎò_9ÇÁóóó;À'` JUü½Ĥ‡ÁĊ‡-’ƒbİ+zÎïyiíMµ;ï[`TĜíç›LjΊOw€ò:×e+j<^£`™Ş˘kdìĥ/ßEmô QÌĈaĉÒş@Ħb™ĈÂùéJ™< 9˜_ç'  ]%á„&³)~OQ,#Ëi4‰,ğœ]ŻŽx6 'ĝW„/txçĜvK7ˆ;’ċäž0WßÀ'p ĉ›(öJ.2ê^Kîµ…˜™Ûú8—’˜Š)À†„\=8™#Ü)oPĝŒiş4¸û}ċŝöûëHîpD!7Ğu•ï(3Ëö¸Ç|úúñŝ/PÚ¤kZ+”ƒĵ²+MnÉŜÚ7Äâ2qĈéN²  iC  -ï÷Ŭs×° 8Ü_Ž„!ŬWLżĤŻ=şD÷˘*BVÒ£İÉöqħW’îÁħ †DŒqÏsc5òÛ.ÍŞöȸ -Z*| ]Ĥ”¸ˆ5‚£Pr³ġòTSÀö”yá¸Í—BFv+ËÒ°+F%\tj/,ášy\AÄ,áÒĝ€ş™BŸĈ,zùè§­~bRHgé] Á×Rbĉ‰&)Yé]ŞB*ËÜ@²5j™ĜFù 8ûîymQŜÖZ—l1gñw/Żnĉ˘hzÌ·‡D‰Ë-t…fEq¤ÎĞKŒĜ ,3T Î¨&T`8ĜĊ†QîÑö$ÄF-T´Öı(ş˘*[Pûġ´ĥÜiÚ!’’]6‰ĥÄ\…GĊìmb ­Úug2Cp~.=ëk™,‡'Òs9¤/’>½UéYsşƒħ›DŠ>„p((+mµ‡’ ¸Ü ċôàdıy†Ö%H9wÀ:ĞÑ‘JĠÖù'äŝĊv }mĥ­,‚ŠÂğKsûŒ0VÙîĈF?jmá(J…Zˆˆö^ìX -3W¨ Ö ÷µFë=ÖU -q(x]ĠŜÂ!Sôùö­ˆBÂwĝŞċÊX´5Ġ§Úˆz0_°ġYĴĵà7·ĥ4÷hOË(ŭŠX‡ùù/ÁŞÖ Q[İ:u¸Â§e`6lŒl° ÚûOßĉŸša€ħò~,êv$Óxf:¤Ŝ, ›kìusĞ}ËqĜ~ecgĜ|m­ìÊ8×´7t,Ž&<î,ċĜyˆöè -IÙıÚÓĈÖÏ´pÏ8í!ôĥÏ÷NF‚ôùşJôĉË ıİGRÒùŻ<¸\y† Ô)Ú0=ĉžíoáà{Î+Ìcùı}†ÙÈ;˙™€5Ĵž+v|ôAHû˘qWCsxnL‡)Ĝ.ÂH#j|éDíċ½ ÓŬQ43İ~NúëéË%ĝr8bփM˜̀°÷KŻĵġ‰À<’#“yŠBÊRÙ%Zšù°' -[ì0ú²÷xš˘MâXë£Ó ġ½T ĵġA” n¸$ĥ;d’7ĵöU1ˆÉês+c'2 †}…Ù`1‘úĵ“Ċ=ù]† /OŻĵ^ĠàÇ+tH¤ĝ)†ö_¨2ÚÏ˘°ÍCwĞÛ3v_˘ñĊÈÁö’äw~7k^ċFWœúĠôr8e(žŭìŬ#şnğoBßY<~6MŠœ ŝïĞËd:yır9a;Ç?OŝŞ—ö"endstream -endobj -959 0 obj -1766 -endobj -960 0 obj<>>>/Annots 149 0 R>>endobj -961 0 obj<>stream -xXMsÛ6ĵûWĵž˘ÌH´(˖3=tœ4i3Çn˘N.€$$!& • ­êßw iŠuzédK&>w÷=ĉݳXĉĝËj!W’go×gç–DzŜàÉĠġJ̣֙ù|.ët²Ŝ'żß}[ßÉN9I´.ċP™şĈÏMe Qòê‹Î~Wġ,Ġe]™ô•ìuċö:­Í“žŠ³b6"Gۈ޴4Δ[Q­wş’Ì8\IšÚĜrúzŭŭl.³ĝ"Z „ oê·OZj+…ÍÌĉ(¸'Ĥĵlé -}Ĝİš‡6?p​0pêAĥztŭœ¸jSFf‹ĞhI—ßvGq;Ûä™|¤µÉ˙ާíñÙ*şF™pĝaqµ’°+ŸġĈ|ċTžÛƒó!}½ı}{#*+LÉĴUm+ú¨t~[ú#˘_Ö&UÌM -îN;ñy}ŝ͔‹O£ZŬ˙úN6´‡ÔG6Än$³…24W$hM$ҙA; )­äĥܢ!Ö£òEwzݧĤ³Ù 3*MmSÖ}P!3XzÒUԖ¤+/=W×vĠM4òVĦÀ#À´)ĝ˙+v€)Íigĥ%2aMÜÑĠ8ž5ĝ¸éA)ĤĜçš0˘ÊݧÜg?H>¤ gr0nÇb=L6ÊTh£VÎäLJׄÖzËډŝŬĤÙQÍ=y9{Ġ ôqĴòt„ú‰$*}”fϊµÏ­‚LÎužïUeÁgG• 䰂lÚ -#9Hlí~—'hùŞâ‚Rf $ÖÖTĠÇGt{óéŭ(üğÏïċóŬ·‘eoµóz}05ŽTö uw’*ȋz„4×E2€S·´…0ÊíĴà'‚PéΔ:òĜ}ċä°—–]<¨ÒĞ:äBÑ.û}qÉħ` ž½5Úg¸8I]ÄÀE@½ÒUĠŜsÛ Ì@?ñ&2nG'ĉĦ‡£ŠÁ#Ë`+³5ÊĊĠä8~u”ƒ†DMğ­1!/ġ˘„žVH~ë™ NڝŞË7°nêÇÌdŸ7Û­§éh ›\;ŒĊl@ᨆ4Â.&½—#–ùâö!û* 0â, -JYi!L˘ÓƒïJ·b„QQ avBjWn’JUUAeTY\£)Ŝ{Ĝ€h)T'1§¸çĥ …Ĝ_EñÔïìĞ*SMÎù„]Ka7ñó½Ö ‚Ù>>>/Annots 152 0 R>>endobj -964 0 obj<>stream -xWێÛ6}÷W ‡*ÀZĥdŻ/yKÚĤÈCz[?.PPe1+‰.)­c ß3¤$ËŜŬ´›&€Ö6Éá\Î93úkÑ˙#ZÇ´XQZMŜï&?í&óp³ĦóìñeNñ|.iıYóbÈHÊħwN·Ğž~Ċ}t+°…E\0<`höaKQDğ÷6kÚen}Nğ4ˆ˘6\„QH?è:WûfDQŞĞƒ*%Ŭ½ûôŝŬ›ŬçÉìr02Wj—ğBb§?'ëÑY˙]çŜ)K#›ĉDĥ1Bí‹&×ĉ(L[ɕħ 5…‘äÁR%NTë†É×Ïi-˜/­e*­ĉD™<È:SġžÚî>²)¤!mÜÁ“nݏ’ï}Tşµċ‰’V•| U"(Qµ0Jڇ8§-§)˘i|ë#4Z7ßùĊÈ/.bĴ wY ÚFsôg§n}Ħ”ĵçkç+ñ€ô•RÔßjÁT]úT¤…KÔìCÄ+ g}%M§GĠxÔÈMö­Žqh˙ç,İÚ6˘,½ySP`‰ÚĴ<v@uTeyC ƒ!mÙÜôG{ÜĠÔ;â9ÌZkfNE9³ ‚Ë;‚î€A†H%TŬYÉtÚV²n<¨UNŸÁò(j K_]ou%K°J–V†ôħq“(­vhÌÜU]ş3’_dÚ6"ġ˜†JŒ¨‹Â鸭.Ïŭ*SLtĴOˆ‰î#:^µµ¨}Z„gP÷Â8o8)pß!ìÚeŝ‘ħ: P-e&­&ÓÖ.hĥżÏÁ½€2!+°GŒn÷ġn:‹l/a:(o>*Êëƒ4liT!9‹”½!Ğŭ-âNŻGŒ\£ô@aèá2³ş5İœġnÌ">˙Ùı˘üÓe£Ĵ|ôµÏu‹úŞQôr†Pœ$pšs]–&÷dOU˘K•"áġÛ×ı]Ö4µÎĵ|úsżèùğ:cvıÚÂJbqG-­.Qûm92Şäİ#äyúÜR]Ĥ! g‹ĉ˘ç# ĵlô|ße5_sÙÙĈPĵäÇĠe/g˙}ĵ!a]¨,?üe]%d&›t@èˆÏ½’Ì£Ö˘g²ĜìÁŻAċ¸#vÄzTVħċFWW!0LŭµONáèÓéġžĉ<‡”Z?€h˜€d_ä ĵĉÁ‘y×Ŭ›şiËŜşolŽÛĈß]·î÷ÛBdú8ŜßÇ~µÑÌïseĝ<2My˘ş˘ée½WEô/NgçU/yÜÛXŬx¨ ]hY˜a¸Bh(E|Ĥ -eĉÛı/ÎıänFpjùé#êĤŞFUÈ-pe 8˜À*t•Ä2i*ár%C÷…A˜éú{Ö°NÙŬ‘û7ä;$Vù`%ê–=Êôß4wf1Ìú`húH˘ògé2ĵ‘Âşı€•Ô^ƒí’•—â…*]ëE^{(ƒ%UĤ…ĥ”ˆôaÒÂ_ìAÜàĜµċíÓÉ×ğòjƒŝ™ĥĵ·e[%ÏPvà|”F”tFT0tĥSèŜŠ%{ P4F—L Ta4V˜”Ħá>˙F⑇ŝÀ¨wö£y'oIé^E"~ùçIĵĜbr‰7Z*Š·Ë0ò_Jş÷ 3cncŜ>F~Q@×áP3iS£GŞ´ûAġ¸= ”8żıëñ&ôU½6÷oĜËó÷‰÷0^‘Ú=ĤµgôŠĈ1žŭ |šÂúälşÁ"Š–á‚V[LYà^Ĥè7£?Ë´ĦÇ3%ŸšFĞ52]Çîġ˘{5£´,rˆOKżĥŽşËġroW]Ÿüè&‡endstream -endobj -965 0 obj -1403 -endobj -966 0 obj<>>>/Annots 167 0 R>>endobj -967 0 obj<>stream -xWÛnÛF}÷WLQ‰")Q’ƒ^àÔq‘ı´Q‡Ĥ+r%Ñ!ıìîÒŞ€~|Ïì’şĠÔ6d‘ğܙ9sĉÌŻ‹ˆBüF4i4Ħ´ĵx9żx5żƒÙŒöz…‹’è2ˆi<›â{”ÄÁ˜´¤%?‚Uœ³ûÀŝá͘˘ˆĉK?™MižıġĉiŻTYÌeFVQ^E“I²kŠBmòjE²²:—ĞnáUĦ˘ĝ“ŒLmŞÏĉ·›.Ù@Dƒ83óĴ×mäġBàÛÄ?ßA} ql-´°’2U -ĜUF‘ş¤Mn×ôôùÓ>ùI×ïŜ\½~ûĵ[ĉ`£û/ñ (MS $.ቿ*è1dî @óFĝ+ÀħÈáNë˘Ò.‚Òs<Û£è9/ âéI܏9jòÌR+ĝâ‡ĦŬ—Ò]Ĝ“iò`÷‘ñ1MÜĊYï)ĥßç=Ĵ?ì·shàĵ9Áê+"XiĠÔG!$³yhCçBHf÷˙+ÁÌ­›R‚h 0İ%˜ċsëpw¤ğÇ˙ÉĜ#k xL‰ğ:ÀdìJa_m6îXíÙë!…ĥò<9ç?…ĝŸ¸Ğ³Ĉ“ÑpĈ÷ѝµ~…WùWâ^PQYˢ Ï=U[ޤ̠+ù’ecKk§Ĵ,*iI¤İ4ĉó³C~'#ÔÇ1hŝêl|£â´²Ĵ ֍µ*e–ŸİÍ!ï"€ÊŸ\Ÿ|6ߣܸCYáy‰›ĊȁÚCaÒV5š>AwĠĈtêÈŝœ}••y•‹’öÂĵY Ñ=Ì%÷(iHìcZ×:żË ıÚġğ‡|S -ĵmtŜĥĞîÔJÙÇ~5é‚Ĥacô°Pİ(†F” á2Ïu ë”z°|¤3a—.Osä ÖŞF ZšZUè*m–ğt™µjŠŒò=bZp‹ÇSmW=Żí¤ŝn7,ô}c9S|ÄA}‰Së@óí™F WÙyž§yĜĞgËó$ VhKMíBj(£LÈjîÈ*Ü~wÑ‚Żî0×4hÛ>3 zċڈÊ:žóP´ġÌ3ċ‚ ›ƒ5“êĵv;H4ó‰Í‘Th]^Ŭİĥ4Nĵ9ÁUáÇ(…dh¨c ·Ÿ˘ĜPŸ ;ÏuQ+còEá³Ë1),Ŭ6ĝÂÉlma—v}l™kc˘ıò.ĦSûğFßċá>w˙)yêH„aFïfĵ˙Á÷—3òúiI˘Ĝˆ-˘ĈXİĤ¨8û\3FÜzŬTĉUL–ŜÄ×Vgmh $ŭC+-ëR7aìä€8ó5Lvĝ´E†R̚TrrjäÇ{Œ}ŭĥûuÌdg½—mZşz…qB?…á ÷wäĈñ·jƒĝ0œ{‘vMׂ}²zËÌ]AU Ú‰MLP.ˆ³†Qó3ážSUt„oê^%Û ‘- šSë0kħ’)”w!Ò/äzÍì÷CWçĠ§Vëwww΂Ú7]ŝ-ëeŸ^ğx9°ŬëJ l×@:ul>>>>>endobj -970 0 obj<>stream -x½V]oâ8}çW\u+ÁhJB(P:ÒhĠ–2[í´t§Ù•V𗐔ĜŒí”Aûç÷ĜNe Ú§)RríûuÎ=ö÷FDü#şèÒù€Òĵq7nF'iûPsĵt¨ÛĊ£7ĵ"Š˘a#Ċh†µĝĜCg‚³ÎeŬšçĠ Xë6! ö!vŭ@ŒpÜĦKŠgÈg€ĝqĉÌŠÓÖÍíäŭU–sÁµQ‰‘ê]ü­ÑĦv„$ħÙ§…ÊĜryÀòİ`ÚĝŝÍ´“ìÀ÷g55óCb}' S‚™?5s9„ša“nGÔîP:ҙL_¸,ôrsFw´H^‰$gċÊdžpAMTÔ¤D¸o6…pÜ-µÖ\L9,š­’şĜm qMÍ÷Í ÌA{6èß² 4ˆ@fÁH#"iİ É>p1'#iΠ͕,VÄĊLŞ<1\ -š)™“Ûġ8şùàÓİħhwû>€’Òü⍑ -ĜöÀ ­ÂL“eˆÀÓ$DᏙ¤öü•ÇĥÛġ -ş‘oŠCX—eíB[ÚmÓß0;˜ß°ßÈ|U7—£äryxÑ C7‹é’ëĊáOé‚ċ -äÖÒg¸fÇ×|r<Ê%O7t£˜;MÖ˘Œ¸%Â.b >+Dêàle&LÓÑAÈ5Mü+ P>x%b´ċÇTš9ĝ'ÁğAi÷ĉĝ˘ŠĠĈr¤ÂçÜs}†vIPvNİÌs0şĉŸ LiĊġ+²[F"WZ%ZŻŬ0n ÜÙjÉ­²XfŽÂ‰KÙ$iËg÷gFY(ŞÈĉ·BfҐ÷–÷áóG7Ĥşj@}ùkŽ fH°ġ^ċÏôÍŬs!1m”qĊRÀĊ™ï\ĈfIħ4Ȥ÷ÖbĉĤÔO§]•I(ıo;U)Tí}]ŜN‹Ŝêóew:q‡”/kÁĥú\‰r8,Áš>ÄxGƒ£(èçÁ  1˙áÄrlè”I”˘èTñ•qÓeŭ8)·ùġĵ|Ôû£€>sQü•Túé*ħRbÛâM5IJEÜ£G‹²„ċ/ÁXĤ-ı]&„T’ĉÌċ¸ç‰t>ŭɍ•á½uâÀ2 È˘[ŞœˆbII -êŻĴ* $Żċ“èç3KM—§M3—ŸyĥíġÎ΢#ħŜhrÌ܂m\@;œ,á}Ş8iŬı îĦQ·V]Ċa!ìt7*óù²ßàe[tí‰ÜĴTĴŒ˙ìŒFlÊ”hÛr’,ĞÈéPàâEbm+*„pâaŠhäʟ›;ùhö½`"eèċŭ†öĜä_µĊÔçRsâgûkèŒg;•×ΎÌŒÈÜǵ“üĦsożi•*àwú°ÜXÚ M‡~“ĥÊ]öÉOÒ²ÙfÖÂZ^’êƒÙıùÚúúŽŝħħmzċ½ˆÊßïw£'O÷×'G°tƒZéɓf+ç§v.!ꅧL c[Ë!<Ô ËnjNw4yŒï&OGÂı˙şúüñô×#v›Ŝ“/íá/ÍR‹N÷?•Ö-k Çrn#܆íE×ŜœĦzOW÷×Wô¨ä7œ 4’i‘Xt×3[x;Ĝ{wû˘ë[–RŒ‹­Ċ*ĥ÷;M“ÂŬZ{=8u ûCğŞ˙G_!ï_Ċendstream -endobj -971 0 obj -1242 -endobj -972 0 obj<>>>>>endobj -973 0 obj<>stream -x½VkoÚHŭÎŻ8ԐŞ~†TBĞDm¤j·íncu?„jìq˜Ĉ̏l´Ù˙wĈ6ĥn˘F*HûÎÜÇıêxpéëaâc ^uNÂΛ°ÚÓ)î/ùŬ¸}şŒĤŭ×Ûr†”t] G=mDn`îEé´yÜ#ÛŻD‡ )ĝĉBAœSGS€01ba<@ŭañR†_;.,’ÎFôëÛ÷ŻgŬ?ıXp‘t[”´=,~÷Ĵˆò‚‹ ôµ!ËŻyÌÔ+´™&[I§Tı“É8Ê­‘C᜛*jÒġ›ÓñoY˙—…ïëŭÊğ˘bYQóÀ˙ߓaŭä3ž?G!Ëx ç:2p/U.Ô­rÔjğ;Ìç-P(ÑUĵ™×˘‘³˘Ì)…•ÚžÒżúŜ9Áót%-–PĠİPá’á@r}€´qÁ)›ËH!B,óœİµ‰.E~KĦ–eDŜdş)"‘ “ò -żd$ċêUwÓ@–?Ĥ6¤¨:à|0?Ä?{H›–ŞúĉìŬI[á·z†™ž1 Û8—<ËÖıŒAİ˙~‡üPƒTĝß˙üâ!üŝĝÁ}Zž:Ş?<ù -VúÍyliLÓwŬĥ|x - ‘9G45oYÖ&ŝuN*ĥ%·–{ġ<{lmš\g2‹rv›ˆÈô|}P•ÂKÜÊ‚ħDïJ&<1ĤÉmF³˘„VÄĵ°“ŠCmÍ,ߍ0€Ò]Ħ✯ o ”ŞŒ²ì‚FÁÓû`Xьž2Cş]ħ -QKYf „ĵİ,ôá”ä65À‰‹ §ƒ ret.vÑoúÖ&Ĝ;ÂK˜¤Ŝ £e&Y"ZQŜ5a2ĉĤĉ‡{~5Of_Lô^+Ú~¸kÑ56Ŭ‹œ­aŬ ï=Ò@$ò~ œż€ŽsPßÁÖ7_Z‚ž£Û']<›ĦۅYËĉœú鞍YœTÄĤf=˜7GïŻ&LÑô^•<'4İÌëf½ž-ó8RŒ˘{ŬMOë•쁭_°‚êġéìĝŬÉ1~ÏċWx-rE 8ÒÛY#´ĵ`BêÖħ÷°dPóBĤÌ" u+|(MíG“95Š#mMôGç?fíŻĠendstream -endobj -974 0 obj -965 -endobj -975 0 obj<>>>>>endobj -976 0 obj<>stream -x•V]oâF}çW\mÖ[ „é>TI³QûîĥĦŞ*!Uƒ=ÀÛÎĜ Ôöż÷Ü›“Mw…˜ûuî9güWg@}ü h2¤Ğ1ĊYçnÖù0ëô锎/f…7}ġŻ!Ĥü?ĵ†S2’–‚o‘ç‚óÑCŸnhĥDîñd‚°Yâôiom)LùvŝîŬìıÓ§Ŝp ĝĤŭž>$ޤr-­¤TċÒRİÉVĝlŻ+C*G˘4Ò9̓B”k۝6›•ÑUѵĥċ˙V‘ñZÓw¤ò==ŜŬ·Ú ˘¨²&Ju,ÒȊl!˘…Ê#›-êŬSÏÒ|~ƒ°Ĉ:_Ö燃pÌ£Ÿ7ñó—7‘7M¤_ÑÄV4+îüb²/jw•„î…Ìt~9ûEVĈk烒Ëïß·àCtqIşQiZ~™é5/畯ż˘—o/„6ÜŜüfĊJ~G‘,HċŞ OJ³•†ŝ&ÇtúuA˙ıìè0z#iEÌǜ ûtu3CjÑAxä˘‡/0Oœ~Ž Âë*—~•p›³F# X˜ŬQï§%Ğ ‰}ŻPù“×ġÉ ÁòtÛgšuœ!Ž´’"r˜G%K‚Ż,Zċe×µf׺JZH‹T²@AıŒqR³;pĥ‘+ç3S(Ġ+ÈH‰Î„Ê)“Ù[ylIĝ\ùÁw˜ -rêĤ -a!çkà0ĥ/ßà8œNÎì­FÒşZUÈ߆ùtûè19[E8b¨—ħ[I™H$9˙Ka<›\ï04`jt(ûĦJħ˙ħ“•z%Ž ‰êĴ;‘;È0d ²: qm -‹ -ÁyİboŻKmHs:rÈŞXÂj7R ŽHPef N!2ŜŽğŽT)Œ;—2áô‹vi‘–X@3÷{·,kÜФ&f½7Dgb#i!âMUXÒnh˨•ÊEZ3 ÷™#xàu‰†Bç§d[rOß3.ıÉ œ[ĉ üáĜŻçeò7mĤ“ʳ¸—²SċšÉ‰Ï5œ˙Ä4˜·VĈ•QċŜ oê#\cM~„àìäÌşž§;8È óEİZDM˘WfDâ' -£ #Nƒú­Žš$ Q,[4+JiŻÛÏvŽvFĤWÄkr:-޵ÖOÖ9ĉF˙¨xvkMkBpiñs'Ož Ÿnïné“ÑÏìî÷:2xÛÜóQ=ÔFK3\]ìx³5^-}Ĵœ–G“Ĵ›ó>G£µ_:˙ß+.†endstream -endobj -977 0 obj -1140 -endobj -978 0 obj<>>>>>endobj -979 0 obj<>stream -xÍWÛnÛ8}ÏWÌ£ Ĝò%‰í,‡Ŭ`lħí֏Z˘m&é’T\ŭŭžĦ.–/mĥĜ<ĴI¤™93sĉöíbL#üŒi6ĦË)ùĊ‡ĊĊQ2ŸÓŝË­ñ^ğœ%SşšÏĝ÷ÑM2!'i…—G4™O“Ğĝè’fÓdr5ÏZh‚W[™ëɨ–şƒ'ÓÉU+3™4Ú Ĥ€·ŭáŬ Ŭb/Ĥsü’ĊÇ#Z¤½ñ8ıN.“Y2NèOeŠï;'ċ‡Ż~+SµR)}~˙‰RkVj]8”5ïOğ++ƒÉ:{‹¤ê ĈG½Ħ ép+ò$z‘/ĊĦdVJKÊĴôdl #eFÁÒRRşf-³„ -HËU °Q>ÊO*Nĝ߃ѽ1 &×Àˆ"l'żÊAoŭjµz™N…’Ħ=ú ÒçÄ[òÒ½¨TŜúÒ™XkÑ`Œ,Gij Ŝ@é>|=MêÚ°‘Áâá²Bn3ä˘ -Úî@Rá%Ùí”Y*aˆKT“Ġ¨˘İXÊX— Ŭ¸vY™Öv­ Yß@ĥ½Efz֑  ]Œ]Ŝƒïúĝ§6ya9߇ŬŒVaÛXKˆîĦÎe•F,Ħց¸yÇ÷0”ĥ \”ȰCĈ6TTˆ¸à•S 6y݉F‘iß eIV=lÚĞü8’ˆĠûLî#‘‡wào™ŭè£68Ҟ_a2Ô‹Ħ”;jŒ’HCádŸFĤŝ²[ÑŽDÇ ëç|9peXĊù‡ûŸ°Cù]1@^ŽċWÎĉm k§ÎÖ-˜r(×ċj¨ŸŞÎÒ)½VĵĴbvžëw V‡0`şuÏ´uv+.û1p;5 òlĝ "ïˆ6âE"™zQYrf(ó4ĜH”s~2› äÙsÇéÚI‘•0N˘ĤAŭ(Â]@ş>¸ÛÍĠĈĉV[(Aŝ|ĞE£-êc-t`0× €Wö9ˆüD4 ×"VCŠŠE“Â+]˘4*³Àĉ¸çóer†Ĵ´Öv û\eĠëĤïħ²pá0½¤F‡'PµÄ8íâç¨Ä=ĵö˘nۏ¸Ä6Ġô&NµHSô.:7y•+-bà|µC˘.žˆÖ§Ĉ³sċG°0!¨™%ŒI[ûLZ=s+RŻùq:<´ò!AXqËÉE—·™4ÜË´ĵ Œ1ó`štîÖˆ†ŒUÌÎ6Ĥ[°ì‹ĤŻbnZ‹ÁĠëTĊÁ;Uñ+“oë5ݵ?О˙Ċ³½Š×@üû™^4À:ëżó}îçġÇçQEV[ÑQE)c‡â*‘X~JTĊ=ĉ$–ĉµSbÇI†PžÉäž oÀÑWTF}náq/xÜ -ßöò˙ċi<İ=a_qóÇĠĵWñvœçbÖòRüvJߐ:ŭ°£Ônùöà-ŸÓêĴwÖ: çkñ³–ġħU‹,•şxíŒ×C'e§ĉĥ7×CòZ‡Á³”X° .‹Pm0­ıŞàkY×f#&|tJ°kD,-o?{¸Ċ^âĞaë,¨j#'<Żv ĴÄĵWq³èÂ'‹ÂŜßf˘Ô›îİ÷?Ê.Hމ·s1ŝyÙŻ5–!§2>q°-Ĝ2E™-pJ!ÄΘonCì] ı}Ül❎³÷Guu_·G4NċáŬĵŜ“ĈS^ógĊëĝëûOŜÓggŸ°ZÒG›9ĉq{*İA%ÖÜÒ´>0ÖĊߞŝ*½šñ½Îú{Ó1˙\ü°Ŝ‘endstream -endobj -980 0 obj -1405 -endobj -981 0 obj<>>>>>endobj -982 0 obj<>stream -xµWmÚ8ŝÎŻ•~`%!,òíhïVB§ĠítÒIH+ÇqÀ½$NŭÒ=úë;vH`Ŭeğ4HVìgĈÏOQ€wż­zŬĠU³H€À F€OùƒÈBXÜÍßµg·ûQ”[É× Ğ]]AEa›èĤ€;N¨–˘a^Pç¨ ZíÌpŬŸ,‚‚O ŝġÑ6ÓîŭìîXއ°G3f9/4§N½ĝ‚Ĵ]Ú#[}TĈ €à|Ì)ëûQÒÏxì+Fäzk˙€Z‹y‘xJü4Ìûùbĉ°LÁ˙G /-·)Gµ<”D)x;tÂIö`Wt~[BrG‰cD™·n5ġJF·i‘˜NZíoññÙP5ˆ?⸅ÜĤ Ño¤à Ì/uXލÍí3TÜPóÙ¸~¸Cüy<ùtaFİ0(Ô×çŝnâÁ2›ŻT|³•ìàÜr×́ÚRöÁSU²ĥ¤yT2ğEıçĜÇt/ŝĉċ~Ù_’‡“ ĉĦëexh]D'A/ÌC ëĴÈÎNÚ-µ›xê“iîñxIJ*9߯ní˜=YŬÔV’çϳçü\kĦÇp/§c˘k֞!ç`½ÙIS–Bj,•%üÉd̰^ƒĈî¤8¨—V=SP‘Û*×֜ĥŒ­GŻ^2²;˜÷˘´·’aԟñ˙?OĠ&mK‡Èe‘ëŭ¤ÚEЃóíüÛéîĈ„!Vva4ŞêôĊìî îĝ̨Ĉû5–êĉĤĠ ïO†xMKêk,™Òöv³Ü`Ğà/£-A£É‹}70Úxiüğóáiqendstream -endobj -983 0 obj -978 -endobj -984 0 obj<>>>>>endobj -985 0 obj<>stream -x­V]oÛF|ׯX Eá%êÛ}sœ0n¤˘}(`œÈ#u yÇ܇ŭûÎIÉì˘b²ÍŬÎÎÎ ùuÒß)-'4]PVŜożmdµ˘Ó‡-ñϘ³I²˘Ùj‰żçódBVRÁ;°ˆcޏ}t;Ĥ+Ú8z£6y\Ó&ğxgüNZ"üŽL•Ñ˘"˘QpvTİíÈÉ,Xċ£ŸîÖ×£FÔO_ìvž8“¤äíáİPÖù§F8÷Ëĉó`LHQââ]î+S*â—È2´?ù/%ÎÏìÑŝÀ³œt]˙\LŜĜü˙ö -£Û)l˜Òp²ÀxAé‰Êy.sgÛ¨RZ’(<Ĉ‰™Ò^é­Ò9&ĠxCôd$´6KÊMĜV’kêĈ;*Œí9ŸĥEûž\Ò-͌Ñ<˜=4çĵ°ž&XZ‹z+ègĈE™ÑZfž+ĝ5Ħܵ÷ˆĤİT&XgXq'ß\¨2Xt½0xè,áĞħf´DXQ+ĝ Dßë}t{E)Î|:‹àNOÓd‘GU+ĞF™žè…`'Kîĉϖ.Ú ju¨·àDU§ N#ÂJ(*)P?K5;ÚKڙF7XÈL-yg<:<#·;ÁŭÊ×áyu$·‡£Žċލñ,T%xf˜Eĥ>*AsÒ˘E0îÎËújñğH}c,p3 èöghÚ}èÔfÒzĦ¸`c`ÔKè]Èv¸Ô· -PÀ˗DèÜÊŻAa;ñäm­€À#_€T Á³˘G0l†‰* ׈ğ\KûĴ2üŜ+BçôX…²ŒD\#ĵ0^WtoòPÉc uBîşKh³ĞĝÙJ̆ùŞ 7lê˘ÄĝÖëX€Żïİ G8w”ôÇŬ_ı΍u q;£ÛĴ·ëé7½JĴİż'‹e·Ŝۙ—‡sNnĴoÀI GƒcŽ0ôÜì`CŸî>āĊZ*wµñ¸?‡ËĞÒ ”w5ZX #— áœè s’m9£“ŭN> -šëBıÁAş„ı–0iӎŜIİi{8&ŬqÙĝ˘\…ÊBñcLBá<³z/ğâÄÁÍ]'}¤ZM -Jĉ`µµqÁÓÑwŬĈŝ͌µĦñÀ ¤92ǚƒÌ_ċ7[Ü÷³ıiM òX™]XĈ‰×Q=FÙ2îĊ T=ôϰŜ„°˙‚ŒqĈCÀùWġ9!”V!Ĉ,cNt”n™m‡df;żP@œÌĞ-Ĥ -v9§ÈişŒÚü. — ŬUCĴĠsŻ×c>²V{–ú|铝ÜŜĉßĥsìċÛví܊¸Òù™Œ QkĞ„ÇîUf3…§O7ÄÂwHëgvCeöQËĴ3ìxVˆ“˘F°s´—%G#F—Î9ħ}V775Û3BZùĥs‚pÒ9öÔ)`‰Gž_!N˜Ĉœˆñ˘0xÔNÈĜáŭ§ t”ş Z}“çMG£°˜Zz–ĜËÇàd6~1¸ê2(],ñrĥœàïĊ›Ŝúúŝŭ5=ZóÏeú`²P#3#+Üŭ°Ŭ5l·]ĵúĜœ-g.>öb1ċMŜïƒ"Ÿc-endstream -endobj -986 0 obj -1240 -endobj -987 0 obj<>>>/Annots 176 0 R>>endobj -988 0 obj<>stream -xXMsÓH½çWtqY§*–-&ÜòAj!b–=¤jk,íI#FRĵŝ÷ûşG’eĦ¸X‘Ĥ?^ż~Ŭ“†ĝÒ|DEéÉĠâdp{A£!-Vx3›ŸÓ"Ĥa0â/Qïz£òR; -G½µ[*-]Ûle֕Óô Ò˘Q0"U:]|;R4Ŝ½3İr;şħİ2Ÿ)Míĝ+vâ3vĜ‡8tï´Ó?*S˜RÓg­b“­ŭ‘ …a}d4çWzeÄÎVÁĵÉ*MΟ ¸,7Ĥ È‡Fy˘UĦ)Uß5;ŜĞR+żı0¨ß]r%ċ¨żğ[4]}{ùéĝzeÑ0GÏŻ˘Êµ+t Š-wD›iÁ­/Ù̈́›½żñ-8*EîŒu,3Nû–eyÙ¨Äpk$‘P¤rµ4‰) 7‰%•˘?ôĠdħŬ–MP‰C :Jk/HD=¤ŭxŠLrë·h3ڂ‰(iŽ*Ċ⠘UY¤ÊDá ĠÒA£úEıKô‘Ĝ bbלöÊÙôè”@Ŭ¤]FG‰A- ‘.¨+MĦ²U™˜ŒA@Ÿ@Yò‚2 5*XxΑç¤ùYµ ı;ĦÊŝ8pŬ¨'$OPŞïĴ‚ŝ+KXS%“BY™iü ÇQ3-;šqOL†Ѩñ<„>ĝ§V£&é‘F­.óTĦ;Žk%-ħd–QNğ­ö9×0ˆ˜IÊϔ G_îŜŭóïğğ‡Ċċû÷ÁĤL“ۖ˙É à9Á_³ÍǐñOĴ”&aÖOmF ĉkWu1Ÿœ -ÀĈİ™ž1~:AIv´ô£ ,‹´ĉ‘‡Ì/‘îgÖÖĈh†f@;l­*vC@@Ó2€şÏx;A¨öoyHYPÒŻ:ż‹h£d^”½$Rħƒ\”Û -{ñŝè ÖĠäVıaŭc  ĈÎêa²(İx(ĠmÄ4ŻçÌ3ĈuÇt“5ĥtUQ(Üv=\~€ğIûY,›f×ôòÙÂ\€2@JŻÁLY)["Ü-A,ÓÍÔÂ'è^N z](Ôó' 7Ÿ˙Ş-”/cšOF‰ú~áfĝ 2“éçC˙}x.ĦüÜ{<•T¤­ŸaÒ ò—vKíĴïâóY7†UĠşŬÏsŝ•ëŜo`Fĥ¸*4µ‚Ż5­@ \-tŠX„|Şá ︒²áĝi]so?ĈE-;£^à\ú¸¤HUqäg<ĥp ĝ…UİŠ6X–HZ;c„5­Ìé~³¸™xġš…ĵĴĵĉÀĥvyM÷)KĊ„ ~bC?QĴKeÜĞhœ–ÙÑÈéÙħž‘.£ ÀÜÇ-Ĉq¸ħ6kV3“ì8€aŠ\G˨Ĵ§hà3­}ÔN,AìTÉۓmù aÎ4îš~ËzéĵŜ5qhk’\`—ƒÛózžÂùx*7š—ü˙ÀÑB~ô“9ߑ¤Œ3a(ö­O'˙ĈEò/endstream -endobj -989 0 obj -1782 -endobj -990 0 obj<>>>/Annots 221 0 R>>endobj -991 0 obj<>stream -x•XMsÚH½ûWôek‰kI 6•Úr’u’:ÙĜ·8‡A  D_ &Ŝ_żŻ{HÄ@bW µ43ŭúuOw]ĝäáß§8 QDI~ñòîâïğ o0™ŝb–<Šñ„ÂIŒÛ0Ž!M ž—XfwÁáuHOw ĴMbş›Ë{î’^ ›–…žSYd43İ^àw<ğûâôcTş*·Ê†×Sòfé0Œöâ~0 èUY,ÒċÚ¤Ċ’ìJÓ­ÊgŠ^—ıJ ~iM™eÚ°ĥ6Ò~ÀH{w˜ħHMmİĥş"LIŒV–S´)ÍWsK~xŭŠÒšlI´.ĉsT1••2*׏¨‰keyİ:Ÿ À½£Mše{“}&ò›‹Ñ4Œ(ò|Sèñ뤌n…vˆĥí/JKÊZW–QŬ×ßĞŒÍfZ ˜nR€Ò¤pŸ—¸Ĝ•ÂüıŝĥVV)Iù€qsŜàlŞñdµPµeĵÎÛN¨ˆ™•­™‡–à-[”ĞbO'DDNG¤vœŒ'Ó#•ZjžşOıƒĉ|p]Y<è"ĠE˘˙ĝ&ġ iĤuAYZ|›ÔdJìZe;Ò\׉I+m cúoÔ[ĉa˘ -ÒßU^eZĜ^cëÉ&émíd ûˆìÑ HBó ñö§Ì\`ëöƒħÓòi™•3•}cİï37PNĝ{N/U&TkâÇò’5Änxi쇸ĉ„í6–ÒŬĈŜşĴ™0Ĉ„Nìi;KKÄ;_@ì&ċƒßûŝÍû oĜ9ĊġcŽÂ`ŝ„‡Ç Ċà}˘á­ş4ċşúY07WoŜ]ñèŬÒŭÀ‡•îş#s£İ^•ëlÎi6Í]váŭŸ• "#WHù­Ü€÷ĥ‘!Ĵ ad4b'5Rl <š3ŭ %{<Ùà9 -;*#OÜë{SNß"Ñħċm˙VF/´átàL;Në£îÄVNĊİӀíáŒîħ Ŝ½/vUñˆ­m‚:áŒâ%ŞUĞڞî6Ŭ÷ò5jËA‡ÍÛ"ß?ëĝ̋Äg.LD8ƒŜ|ÛĈż]˙8v†ÁoŸ”h+ WŞħŸĉHB\7PX­S£ı–ğ$Ċİİ ~‡R·|䕐œtŭ(ĉ -×Fߨß+?nFqOZQŻĞŞ4vğC³rYĝ…ŝ>>p*úN?Äç~í§7ċ)˜)É(ÚµċR,ñQ™r‘fşŝĞC-ö0§4HD8µ Û& NjWÇ)½Çßo7÷÷[ Ö<úIŽxqü÷šVeiŽI`Z äE7¨IİĠ‡…jĈÈşà˜SĥcvqCˆÍÌŬ N›DñA@9³ç&}8Q ŜJ…ŬÖĊ`Ìċµ!Û g´Ž]ĠßdžÓÊ|œ&›G¸ -}’êşÒIş£´Ô…6(ëNk?ÜnÌ2qƒD9‘n/`W“¸Êè }-:œËË×ïo//%"¸oäfñSĦ­ĴüĠğžÁïXAŸ-àn!á +ŝèI_8Çyƒ$ŸóƒÈ{ŜêĴĦĜŜT -4u­.żĊÁŜĴĥA~ä*EÈYË § òn8½—†ëÚ ˜ k>‹ ³t6ÜòÛÁ†š‰•ŝÇá Žñô€XœUÜÑê8ĞġÙٍMŒ;áŒÒprP6¨q=rívġOt~…Uó<•ŝX·ġÜž¸•“"·Á´(îûÓ6UIĵUĦœ Äµ"œħÎ;,Dgœ‹#êËMü°° †ĥS§#G/÷´rZ˙”+fğ¸ü„G‹²­)RzyΔrZádt6Èy‰XĠ_‘y^[)B–;÷)°ÜŸVŠ–ö „îjĊ½ħÓğ?'ġIĉ÷|~çEú”í?Ž[ċ‚Ş2-ĴĠq8^á8ôÎdîXĴf8ĉò1P> #6G¸áġ¤9 ù(%>>I°#ĦáöꟗWôÁ”_PŬ]!Ys#$™‘ŜÎ½_ŝ&˘wÂ÷žŠ˙½ĝÇ{†Êendstream -endobj -992 0 obj -1578 -endobj -993 0 obj<>>>/Annots 228 0 R>>endobj -994 0 obj<>stream -xXkoDŭŜ_qUHĈ‰“&éò-íRXÄ>Ĝ Bˆ"4ħ'wí™à7 żžsçáÚ! H¨­6ñÎıçŜÙ?ÎR'Ċ„ĤsÊŞ³›ĠÙèîŠÒ”V4ż^*§q2i• QY}ĜY™ÓN³×un¨jŒµ$İÄş”yBt§kŞt-)—V!­hĞ÷DVSÉn sIµÜÈW.VÏYħ ç‡RŝôŝÛ³é<Ó|1Iİ˘tr ÷­¤èÑġƒ x1Ċó½ßÜ˙ċŬêĠÛ7ÉÖV%ğ{~Ó}›ƒ„ĝĈè. ı0“N“ l î'óE¸k·‡“yrĊ÷W[IF֏ÈÇ4ğ-r­DĦ¨ÔZ*'Ì èÄúUIëĝÍ ÈlJx", ñù˜bÌÇ1 ‹0CH•0Ñk½Gà„ %>l€ÜυÊq™(+ İ,ƒVêLXo ä)+% £Ç—·€ŝ])…‘-¸Î磨 ŬÀàiA™Otn ġ€h²Ĥ‚a P¤PYÙäàÖ°[ÇÊ cëbŬ¸ûîÈeà×I"8'À‚LΘZ(ċÒQ­Mp5×ҐҖô†ù)(ÓĠ”ÈàŸ£Ġz¨u³£JìvœÌÙIİÚú½Yùò8X~5™Ô³ë1ˆSÑĠìşŭI›İcĠsÓŭ¤Š§hê~ÀŬCĝ­(ËŭшÍY0H9%Ÿv%3żڅfóÊTÑtœL޽óµ˘Ù,yÑıÇ͊Ż\ôngŠĵB€ˆ}çmW’İÖIĤĠrS‹ -(xŠ -\¨0ƒ}Gs÷ƒZà>´w+˜xĞżˆĦÉóñ?çÑŬŻžÙ (Pc é:\ú^EŸ”Ŝ$Gx~‹i°P—ä<¸ˆı‚Ċ)‚n;1Â~Â"³0ˆ²Ê²&ĉ[@nZácU£8cV’ ’ž+ŒşFĦşĠÊÖş,e”VĦ'lݰڀMl5ĜĠò‘5…j—U×ĊŸ FÚ:2`'ëÛÍĞ·Hñ—M­Ğ£˘~ ¤àL|_9< U™+€SG•p“‘y‘ PDġúÂ#e£ÙCìpä3FÚĞ)Ĉ/4µµôâİ5€ñ ñƒ—ï¤Êä%@‰îڇ˜i -eaq„UI•ĴÖòXš !µÌrĦ‚Gb×6†³ŭ êŒÜìcc ì•>‚>ŝ(Ûà’>"Ŭ²ÍçŬË[èĥCÖBÚ++(£‹^>D: @˰sÉÛ Wäò(œ·ïìA4Q[ ‚T7`&Ĉ×nòck·Œè0PáÒGŸÇŬ ĉ€!fÑB½ĉ6G5A˜ĥßPÔ-2ż€ó5^8ôÑ]\L:í vŻċŝ‰vAıżH=òH‹( ìAú‡AĊe<ŽàäàŽmzbp÷ĥ%šħ›V9·“mqìa5à é@peê§8 ‘´Ùèdn *s×8¨[i D, ċc–!ĥ7ìTJIŻż~ ĊŬ-–tywĜħĉH“Ü_œZĝŝĦ"a•™p“Š7QïĜ´h/NNÜ|DŸžš'ĉk΢Ë3eŞZ%t£Ŭ:Ö" Xû•ï•Ŝy÷sZ -g_úŜvŭŸÖĜó·jĉ 7ċáĵÒ3ïúIĊYïĤdcħ dt"òËF& s\mċĈċ83ÙĞĥǕox…qüÀgĈóäg°M<’Š—Yl-[3²Ğżıë—ħK`€uàCU7†O'>`9˜JHщÚĈÛö?aQ:ŸŭëړNÓSkOšP`Ĉ­Û 2ĝ×'W QT -Ôׯ4(mŠğN;˜D€–‡àiš2˜ÇŭçTS#Pƒ&°?ĜèȸdNÀkĴy;³x³x€{,vû~şœ-ġŭJäNëŻÜ‚âGšßĠ/°LL(¤SÖ. u€svßk.ž˙ŠnH°êĦ.Q> >¸H…jžhƒXŜÛà\Ğ÷4>ò¤ÖÚ~ŞÓĤ6jL=2ëBáƒĴ9•áĜ6†9rù8R q˜…÷Ĥħ$çħ' Ù'^†Üê7şk-ӈ oDi\Žîâë:;ż³‰£²œâîÒ)N%)ŝ🝖Żo–ôÖefħvŽ™l8?>\Lœŭßµ³f^-°Û;Ğó9ğBŭxövXÊendstream -endobj -995 0 obj -1869 -endobj -996 0 obj<>>>/Annots 233 0 R>>endobj -997 0 obj<>stream -xWmoÛ6ŝž_qK;Ä"Ù²ÇI·Iğl–vk\ 2 ´ÄĜl%Ò8ŜŻßs¤(+NÒ~ŠĦHŜësÏ?ï%4Àż„އ4šPZìÏö~œí âé”ĥ?ċ‹MŽ!§Çĝs4Š'TJşÁQl &ñ´ÙI†ĝàv -›ßŝ@N˙êšŬ@ídzL³Ìíh–öJcŞgôböqŻqԜꭄµëŒ˘ĵÙ…B¤Kċ?ZrçÎsż·š˘á$CWoĥ”œ`FŻ/Ğ´ïµÜżÖ#İĞrCk•ç”+[Q…ۍZbµ„½jI‚öŸï“X­¤ÎdvHk£*ZŠ[‰-'ٔü™ċWV3 (!œ°Iħc—żBg¤ ÑÒ@|ĤJ™VĤÜÄtaJ’w˘Xċ,´kDF™Y­6[çY£W{_‚—u_ġ7WŸ$\Uö4È8á|% |ç§w§Gƒ#üOšƒCr{mfTúi›A³{ÚÏämŸ]>íϕî߈Ü6 ‹X×ÄGçlnnċa“´áƒäßSî÷(šĉˆ”ŜP&mZŞU—´„’3™ĉ - >$ËĝÎ…•ÖŻLħŞ+YĈŜù ħÀÖ½x[½bnMŽëù†Šˆ Ĵê­ĴÎßĵğòúÍMG=U†}4€rĈ >ž™B(Ͱĥv$ąk_—ŻD1„ÚT(ÑÔ,´ú×§š„íÀŞ*aûŽR‘ĤĤ֕ ‚ -ê­Ydák#5e)íÊèLé}ꎚk@…ŸRSZJQq•°£ZŜUd+ı"eÙ żInÏÛî#i;ñ}ŸBJ0VÊ_×(¤è“6kMĝX)‘S[1ε֪Pœ.Ô0ĦMf´¤Ú6òXŻÄÀe ÚûŸġ§'ÀiA“ Ñ/rşbŬҞ;ï¸/°Ú€Ĉ'‡ï-ûÙbîYèş7½~áœm‰ÓÉrĥPKMQ0[pê쒝]ÊRĥ5HĥÍÔ£ìÚ*HPT|cƒŝÖĴ÷É}¤H8×HSSGö^y4¨˙ĉ55…˘ċ:œm İeÉPÚÁĊMi -'˙ƒáŝ~™M‡Ì$I<ĵ§žé~A]zŽ,Bù%U2S°!ß<‰KY’@ÂèàΙ0^/‡‘ŝEˆ'÷ߑÓıEĵÈA%,[ĉż€U„ĠÒdžc’Ÿku+r‡ó)A;! Eg44ŝĦtfÖHҌ~{ŭŞ) “ŭ+YŜʒ`§XÈrİğÁŻúha½TéҝBıÌ<ìhmÈÏŬÜ^kJœ ÒĤ‰=C?] -½ŝs(ċC˘İˆC9·uÎH™£sB…p1êıB—Ż3ĝÁ:8ÊŬû>²UÖbġ|°ċ KşÀ™ ’Ò\şBî\˘ìŽĞ…,ĉ²´á—ܐ`9dê -ZsQ.䢔ĝtƒĝRħ•BŠà”­d) #ŝ4µ˜qwTŻE‰NóĞWÏj4½âœ³ıáҏn4>Cg³¸m ‚ †ÇC7²Y4+äûşÇYç΅ÂYëú­Ċĉ²Vñq|aVazBB€>>>>>endobj -1000 0 obj<>stream -xWÛnÛF}÷WL– ‹ĥ$GrR …#ǀ -4MaA½Ĵȕ´1ıĞì’Vô÷=3KÊ êdr9—3çÌ żœ è -ßš i4Ĥ´8y7?ıĵCƒkšŻpg|ƒ]%WWW4O{ƒarŒúŬkìšÊĤin´-İtòߝ+”ħçóϰsMƒA´ÓN`§7Çñ­wİÎ*Żiċ<} )JÌdb†ž”7:Δħŝ¤}0Β[Ñ'c3· It5]!‹ŝpœpÔ½ú |<•Ö§ú“äÙáÌb8žq´|ïÙĈF[ñ\íIç:-§ÊqËġç°Ċ /š8Ġb‹óœ()K*M]¨”ÍhĞBĜ9Ÿħï+êFɐ)7Ş$¨y2ı^ëìÈ[ôŬ=¨bİHeJJŻJó¤.=“èä‚TsĴv-ö7*tÜzçJzvsm£¤àçTTĦ¤&Ô[{„ĥÁß_ä ı­ĉÜÎä9­”ÉÉĴ8k$iĴò{b;~Dñá[d&İÁäÊ î6ĈUyĈ1PB:ÀnV+`P#ğ\jT‰ùÎċ=¸/ íÑ.ÓKy^JòLŜgë÷KiċMı'òZgC"†ú¨`:Ž?è 4}Ô{Ĥê3’/TK1Ğ~,Á[ê÷[A’gî Ó²V['ĦCµ—Bc5•ž+Ġ –¨Ç÷@Z€3EBŒ‹³}„Û_ċÈĜuËUm39„Â8Ç3ٞôWŻ+Ä"?Ì#è?ÂYą \}Ħlr‰=˜fÊgV&äœ‚kt”BÛ*Ò¸Ħ ×°QaŬ}Ĵ*ô-ĞÊ&Ë -I7:}”z.ŬW: -hÙBŻ  ş­uVw‡;icÉ)ь‘S`³qÚò)(r•ż%…~ŽğÁᤃu˙‘ŽĜ‚˙ğàÁ,şYĞŝLj ŝg [éÔRĐ;Ŝ˙ ^=3:R`‘ĠNeÄè,JjéYE y5 rïŞĜÖBµŬĉûç†yÔW;âáéP·y-Îú÷óÌK]“1]ßLyˆ_xŬñ:şşÁ°é Ĝ× Óİ@'ŭèŬ2×÷…ŒŜ{ïĵôíËû£i'“ubYĤ¨ħi^etöê ˙áCC.E=.\‚·tÖĥ#Ĥ½rż…² 8 ‡(îCGŭNCí4+Ž+Žĝ´ÚnµÍt–½×úŬ[nËsÑc@*î ·1 -öĦNż!Š³geŬğŒmY€à1…—ħy·¤2û ƒÎCĜY˘V28µöŞ8ˆ°Ph³8_OgS̤BeP7z#Fû#Ĥ¸ö+l ù>ĦWĠMĤ£C§a“\9ΐĠ°nĠ“Ùî"ÒÍvĠcë N[ᨠC7îg°–ŸÁDNí6.ŻCäÙbKĵ섧7‹#7HIÒ ĵµñ5ŽK!>>>>>endobj -1003 0 obj<>stream -xW]OÛJ}çWŒŞVMà|@àċ +1012 0 obj<>/XObject<<>>>>>>endobj +1013 0 obj<>stream +x+ä2T0BCs#c3…ä\.§.}7K#…4K=3cS’˘` g`NÖvôurT(ÊÏJM.QpÉO.ÍMÍ+I,ÉÌÏÓ Éâr á +äĞendstream +endobj +1014 0 obj<>/XObject<<>>>>/Annots 58 0 R>>endobj +1015 0 obj<>stream +xÍ\Ûr#Ç }߯˜·8U5÷áä%µ—8Ù*ßbɵy•¸c‘THj×ŝûœt£1$ÑĥèU\µĊ3g Ñh4f”˙(²˙YWfU›]-^ä“WĝOÁ˙ŻdmŬßEVġ“.€ğì⅃‹ĴkGœƒ‹ĴhŠIĥZ5“)„vͤ€BÄÀĵœôŽeò~Rc\“Àq¤šiġ,zF¸ÈšÓÉ9UjˆLœƒ‹lÚBÛÄ95‹ö%Òc°4êĈGz ĥ‰nĴ‹Ĵ̛IċĜŠžkÚ^<ה|Ş1%A1êS"Sà`J„4…S•HÁ–fÙħÓPΌcÛu“ÒħjJÓNZLĤš" ™8ĠŬ8£)Ĉİ)a•…:FzLe+<Ùħƒ•HJĴ*‹[yŞĴ€¤làT;ŒÊ§Ê†qE.3k¤ÇPż'Öa°mCÏ&ÖašÒŒĈŞ)UŽ!ÑɔÀİîĈ9M1NM Š˘£gôêTC1ħƒmd &ÖaĴ†˘ċZ1Öc°UÇĊaĴ +e˜ştÎ$C§–ç`4Ô854Œ+òŽĤé1 Íé÷Ä: ĥ-è¤Ä: ĥcÂuĴL +“‚ġl]IĈŞrz=şA@rCàÔnŒn0NŬĈeECô˜nèİNbĤZĤ›Ä: Ħ‹Ô”X‡ ’9íJĝĴîsI(=Óµê ÄbġŽô˜ +s5ĦƒĊSĵ`ÁöŒ67ÖaÎL=bUa¤E&ĠP@R8pAA#=V…ÛĴN, ˆ˜*qŸtĴPİdŝMĴÇ`!İñĴ4‡šğħƒmkZy ĥ/Gϕ ­Û:%%¤‘“¨Lœƒ!H'AÇy M$1ĉ1<‘s eñ‘…(_‰uì´ ë0 Ċâ€ûġ,R–×Êc°-cٍu˜.d +OĴşŞYşĞ$N}fœƒÑ…Ĉİ ¸àB#ƒ #‹ù†Cë0œÔMıäë0c´FBsĴ0Yn°ħƒĊĥçŸĞn€_-ŬĠ’§vç`tƒqê†0.¸ÁÈà†ÈŞÙ‰u˜n`2L +yÌHê¸ÜÒX‡é‰Qc=‹B֏ġ,§Ç(ëËħdÁ"êĵdÁN§œÓÊcÔèHÑXĈz [Áh,K şĴq;ĠԀL]‚˜Ŝ˘7’syTÖı!ç \&)$=‹Z‹Ñ†zĴ“SŒĠäj™É›çĴEA"Ĝa +fĉX‡179‰ÁU?•T¨‚%ÁĈVÜêë0ˉKĴ +F$0AÁ‚œàÈ"•H˜X‡1ĥeìX‡iϘġ,Tô’Uݐċ”䔊,ÎQ°'ħS)…c‹8˜zÖaŞÌ#Pë1Ĝ‚Ĉħƒ•²Ûħƒmâ‰UsÛ ñ` gndQÇuYeĴ­p• 74²(404ħÓ-²mb~J˘p‡#P,h„X‘<9'ÎAšB½é1XİÉë0X„ĉĠê1µe ’XÉïgù]Ġ•"?rZp½Ü)ĥ0ğhŬê`60r’VîL‘ıíìW +H‡=­É'V˘ ċAKÊ;ç L,ĤHÁ˘Dƒ:"‡CUl£•# ‰ \c¤Ç&ÖX‹ §_UĴ€$6pAŒ‘›XcUĴT™QĴ€$6pAŒ‘›XcU,˘•Î\u–Ä.ˆ1ÒckĴŠEBNS& ‰ \c¤Ç&ÖXËŬKL|ĞÀÄFNĊ$Ò(6ħ*ĥӓŠÄ.ˆ1ÒckĴŠ•Z3j+ ‰ \c¤Ç&ÖX+g²A‚(×ceÑìX‡Á˘œèĞ‚+=;A‚œàÈŞ Ä:l‚•TS”˘V@ı’j"×µPš7’s–2Û&Òc°Ò"K,s1ĥ&îXB…ŝĤ̄B"–ğDĤċ0FğFF9ˆGĦÊĞ’@Á‰Ó¸ıŭħ1ÎAn~Ü£— 8´€§‰gÊÑ(d_ùm ̔TcdLĞ•8\~ۘÀàv4—y™„`–ÔCF9HÏWpG⇽ ½ċ(ÒAşŞÂ“— LFÇÑÉtœ}6N<ŒK–ä7 …é+ó.a QŭÓnƒD.Yò–ß&.2Cײgg”ˆCħÌ8Ô½€żM\d(@~›v)Pö‰zuùâüËeVvùÎE݁ ëêìòZŜ5àòĠ—ûğYĥú½^-·³ċvóçË˙ìŽXßdç_6Ĝ/)ç,:+)苋—_żzÉ1X)]ɸ˜}·^ŭgvµ•ëèÖ}¸ŝfuġ°ÀS†í|µ$Ë_ääóüŻ ç_ÖfÎ{ Ĵd¸íĜWm°r6,8tZVŭ÷½,J–—Ù4•ùzù~³]ajĤ“yfÊï›#WJzûĴ…Í–×·ŭvĥ&Ċ<èÖè+&ĵ„pUĝÏĠ'™+çñŽíJï˜ôEˆìír³îîD +Ñ<^–×2:ŸÔÓ2Hĵœm$ĥKtBM€­œŝ è¨Ÿ`$Xj!ŒŒaÏW]rħŬ‹Uċ¤Ê§ábŝW^Âa:]ú~6¨ġĜš8x{;“qxë£Gƒ,gìĊ­]ğnf’N¸Jú0úĉ÷D—Ċ5g|óWŽRċbß!Żĉw×óċ €´]ĥ1È9ċĠ|9Ĵçê„.:–êé{PlôZ!#TGy Ü÷Àe˜}œX,"ÂşAδ6_ÜŻÖÛa)ë'âĤŒ{À&Äž˜‰ÇƒšŸĉbôόn…ÔGı£ÚwÇëġlĜÊz@ÑSÇŭáP4lïeÉĦ\vaÉ]­–ĉ7kÛñ:/â‚ü0ż›İ^pvĈœĈ-“ɔʝħ+6”ĉ(ÏÔûžħ$ésÂÏĞÉ×£Ìİ^àóÑ HQEóyŻÔj˲ŸĉÛ[q£Ï\[äûa-[2Z_'Ğè*öO\ µGyŞÙ÷ÔĊvXoCRÁ!Ğħĝ…0ҔŒln7†M +G†ĥ +ċHĥ\ĵ7ŝqۑş wìŬ€ÄµüppjuŽßY~Ñ9Ö+­ÁêIaFϗ³íġ„Ċ AŜA_è”ħìív7tŸ$7ùŭnÔĵĵCM³DFĝ8oà°Qö1a FIĦ"9]7ôıäÙédÚĈ4È֋Ŭ­ċ"WqĤċí “Žİ‹òßJ"Ĉ­ı]şĵEÈIvÂ7H)jŜĴ–Šğxúz·Z˙ĝ7*]á+ğ ó)òÓ12‚Ŭà‚5şĦñ}Jœ7óáfıÚÄĠ„xgŬd˜…˜\ŽX +£Äï½§nÀßfìĦ[”7ââju/ݰÄKÛ&ŜѽǸ¸½ü^µ~Ûĝ` ?rŬD=Ïx[^ßl:"GżJ—ŜĦŞ +S´]]­îj8-ĉqвŻfgrm\ë0ü6íg Oî¨'oàwëù2fo_ġf“Òßĵŭ·,$żŭY$-½äġ:esEŭğה†µQU'9™DWà#½ÉÖ3‰÷ĊWĞĞcÀÓíGLځ[ +íWĦíĵ;zHŞ=ÜßĠ‘RÖĝµĊrXhтÎxwÚJvÇ +µÀ·}ċ…£½·Y‰İo'+"ZŠXzY=ċN›añ^p´3¤" ğ€); +Ÿ£Ü7×FwsZî÷ÖŜ.·ëĠġ ++­!c—ä4 +ŝJİjÏ>ĉħ×{ıÙ<,îi‚¤ŝF:Š'+~8ïqVÎòÀïi(AwĞ>ö Äwûµ;ġŭÁ˜q‘A[öÍ[*²Á£ÁքĥÑİġ}D~4ïâ;³>hŒäÍgdL-Öì£qĉb*;hŒDé³7F ‹GO<#cšƒ3£•Á£ĈÈàgoŒÖ +ÓÒÏŜíüş>ĈCŝNĊ^$£ž~@e# ž‘ŝàF¸âÑÉò'£ú¸ÏBuF8'ÌnÖèóëÛd´ùS§ŝë ĉt÷†4CŻïzġIjÙ'bëu}Ç'ôÈ"‘Ŝ„X oİĴ›qáÎWO^0’îÜY möQKZüaIì"ĵĵ™-ŻġėŜfŒŭŭy‘… `ǒ½Ó78ŞsÒ9³#jöŭl³ş{°“ !ħ.Ô|)SìżĥĜk½Ü?ĴU&žnŻ€~@ËŭüĞùòAïĝ‰ô:‘pż×è×*Oíżàŝŭ•?}ħÄ'ërŸ£é|~ğ +g°:DŝS+t´ĵ ù¸+C½ádĴ7^­î>ÚğDüqo|yyôŸèĈBßĤġPĠÚİx8ˆŒ§MmœÜ?_3LG;5üŸÈ/ùšp>·‹|ĜâêÒç„ñóÁlïsÁŠß°Ĝñ£Ĉë/ĉ\Cż|ñŻ˙œözKendstream +endobj +1016 0 obj<>/XObject<<>>>>/Annots 103 0 R>>endobj +1017 0 obj<>stream +xÍ\ÛrÇ}×WìC”BĜûâ)‹Ğʒ•ŽR•Ê‚$,Ë d˙}N÷ÌtŸ@‘4uqREóà`f§{zú6KŭïQžñ˙j™% ĥmFħaâ²Ĉ‡Ël˘œY1Ap“Q5Î9”ċNdAF–*yQŒLZ2PLJp™uù€#(êDC61Ĝj,t–0ĜĤ”q–0ĜI%Úu–°hWÖí,c°u;X2cĜJ>U46hw<Á‡Iğ +\ğ‘ËóFj$cg,Şp–0Ĝn2d ‹8“ÁÌş¤[[¤%`KJ\X‚“Œñv +#–°,݃ŝ íJ=PjVµhäò²‚,N2Ĉ´u;u6LÛLÜxk>mäòB ÍIĈ2m7`´µìHܵZOıĵhñ'cÚĤ°z*êŞTcc€LKp™áˆbVŭ˘p1i!Ĥà$È1³XBÂ`ğBöÌ&f CĞêe,fTĈ2[ÉYġ™ƒUŸC,a°“!–0Nf.ˆe,9M˜%ĵÌ*ĝIìşIÄ,Œi0³8­ş·V=‘ksħmş=Ħbœc&ƒ­KÙYÊXĥ§ëv–0Ô4nEMĈ2[H”"–0X8ÇÁXÂ`; E4–°¸´Îô"â2[%b ĥĠ­µ53Ĉ bóŒ Ç.oÉI(§Ÿı艌d 5" AgħÏil'L,aŒèöħ„e $èùXĈ²7ˆ%,JnċüĜ̌EÉí`ÍA’›WEäò˘’%ÉXì­a% Îúw–°[ʂe îÂ:KXTÑ Ç[İ%ûXÂ`'…¨ÂYÂPĥ€WĊ,fâħŒÁjŒñ™UÉĠd A˘›À”œ¸ĵŞp¸œd 5Ş7#–0Xâ–dž°c h>–1ĜĤÁKXĠ`ëĠRµ˘Ûèżq4ĵ$.‡›ÌIIvĊZ²€ŒÓd7qšŬ:Gb"ñ),21ĜRÒÊl-vH,aQ‘V×'33ĞI˘e [ ùXÂrè†Ğb,Ö˘gcƒzËVd§Woäà=‹Ĵ2Ž DU³v’ħ¨IÜ´³á‘8á–FW +ü‘‘ËşaFF2Ĉ´ú56L›çd( +|ÚÈ!ĞÇG“"ŞÂˆŒd 6lĦ³„ÁN$[ħb€%ôd€ĴG 0qjqÎD%!Ù9‚8Û²iÎ9ĴĊIĈb|˘:g‹ñ•ƒħŒÁÖâŞh,a°ˆ;ĵ(Ĉ`‘ċ<–0LvÂkÖ -‘–H §Ĥ€mhârä(zġ›BŞ,‘ŭš @8¸‰“êġ›Bꎕ>jÄJJBÄb¤>vŽ Ö~Ĝv‡Ú/Aì +b6tg$cħfÈ ˆµúX²g’;Ël%u7ħ„Á"5Ĝ̌ĊHŜá,c°HıX˘°g¨ÍÄèž)„ñJ%[G˘â€ÁˆŒd,jŻ@,a°8p<1cQ„¸"Ël#Iħ„Á"ÎblUŒĦˆħ\gƒE¤àħŒÁÂ`ĦD›9(qšAk +\‰‘CHĈ3#;leS#( +.DIF2‹$NÇYÂ`Ħ”ÁX¢~=˙>–°°¨ŸXÇP0ŞYž™ħlŬıŞ$ÉŞ,Š`JJœš–sħ Ä÷Zs³&“ŒÁµċĆG"^X*R(GF.<8‚öH##ÈÙ5ä,aŒĠT–X¢?İœU7(ɖµDċŞL\(4œdŒ‡b,Iç‘ĦaZ”|rÄ< +|ÚÈċÚĦ+ŒdŒiµq6(nÖĵ}ĦÀ•ıÁĞ̜d,ê•D,a°e{!–°H* 1ħ„E½²ñΆĦ˘§´Pà Žœ,p‚áòM!Ħƒˆ% :ÄC},a°ˆ.–0œĞ86–ħœ'ñÀ>3c°è0 XÂpX°4fƒ*rj +\‘‹˘ÉĜTálPEDw–°İÂÙ Š86Šn,c +€…;K,Z€Ĝ>g Cp8tĈJ +‘ÙZÒ€hBSˆÄiÎàA*‰Ö΄œèLD2[IBC‹Ž$Á"–0ä„[ΉĠMÍÛPĴĞ}`›š¸Px9˘—kžY½Áö<‘˵mà¤z–\ËĉèY'Ş£I\Ž2¤‚°òSHĈkn‰ Ó˘k~PÚŻ…Ž ÓFN + 4’1Ĥ…ÄC%,şĠMs–0t‹ĈcƒEÊlX0†˜‡•Ĉî˜ıFv’1–¤Yħ„ƒ8Ö&ñcïà,c°È aĦ6–ħˆ“‹™ÄAŽnw1’°w$När¤ 5ŠÉD2Ĉ‚‘Ħ΋ ;` ‹8r“cƒ…ŸŝmfĈ`qŜ!޳„ÁjŒXÂâ¤àĴŞ×2V˜èïfߑ‘Ĵʌ"(›*Ġ½sÁi²ċœCрtpÓ3Ş.2ĤéúğíÈ`ı•\f…Sĉ‚Û#Š`Z"­”äżñPëï&sdr-:"ˆ áópŭ$S„Ón\Ğ×i‰S×ĦĉÖ³­żÛ"ü…QeB‰mÎ9%ê}‹L/S§×ĈéBĦÌĉġw[HdBĤeA,ö-­ˆxR‚ë¤ĵ7N†–‘™•ŝn‹LLëäkBĄ.‚œqÁĦ݁˜¸g'žĵÄwÇÙəĤÈc܃ĥUvrŞ—ÍĝxöĝdúŝržġgÙó~µŻĥ›żžüş{½>ϞĵÄqÏež#ɵ1ÑQ!=~~1½ÚÎ×2J˘&L{ú8+Gò†ĝ +“ŸŻ§ÛĊê\>‡ò'yı×ÇúUœû4ĝŬbuÚÒ ;Ò6i–Ġ|ûİ_HœhœâÓb{!“À4ëb?<ž.ßOċÓ'/á3ââ‘5“RHpĈBñŸQkĊUZ|ŝ“ùvödµÙ`ÖÙĊhÖŻÎddú‘}ğ˙ċyôš[ĵä¨\iżġ™.ç*?ĥ&ïâ‡ëùĤżĵŜ.ú•P˘ÈôġİjµğoÂġf~Ş3 ĥµ.t4âm×4qâ¸a0³*ÍÈ;Gj3ÄKێ¨]a–‡è°ĞV +ĝFĜ í%BaĜËʅ=ıPĠ şèê´Ü7óí³W?ĞŬIñ=>ŸÎÂ8XhR<|ù·Š^ä*Ÿä„;âwï§×?ŝ||˘âĦċ2îÚ(ŜÙâ2è–SG3ıu1_è EdBB²ğgÁœÑ3µċ#}Ĵ÷—ŝB½ÇZŬŭĤ)J•E=ÂÀú˘'!I^ĵÑm`á~êû×W2šŒßœ …€AD¨÷,ìŬĞ ƒĝ;A$š|“ï%F"Gé<#lîÂӉ˙ħ˙$Ç>xÔxżF‰iàÎW3ñ›2`Ĥ+ġ’¸¸i,ĝ\ÄİѰ0G²íe(\J&OğWV¸+ä +rs1 Ġ&]÷NZ¸ß—˘Îp)ĉĊ$úĈn2ħƒÚè?­ĉëÍĊB;RèWġ÷k­Eùp#Éòí5sî'_(îıÙ}şXÏgÛ~2[\¤fÄî ÂYŝRĠÌç6ş —~/ĥâ@Iñ]úÙ ŬĠ†“O]Ï=÷ËsQ$F E’ŭêŝĊ`¸M³+Uġ-ö!é#ínş|ż֟.Î~O;bŬGíĤˆÄxüµ3ü²z„X0”{Żâ–ëĵġT“2wb*ëħÙ]^ŝ2u +4è|˘›ıֆ*Ŝöô‹Ğ>vĥžO·!]Ċ-×8µƒ–ÓÍuû¸R´ÊájşĈÖŽî‰¨ş¨}“t`íïŭŞ9hlÓmĴöE;RhX곜^]%›…Ŝ›dôñĔğ]Ž÷­·&‘Qw)‰|ğFo5­ -WónÇ×WWŭ:”Aĝ“9ğĥúZ ™›pë%£dŭĤF‚÷ŞŻž“˙HZÙíhÈıìquÀ|Öŭi¨wôhĊLdgêïKèŻïÓ@%³+Ä~Ykö? Q +´†{7­UĞ{.N'Ù$gë˙ıkŭËġp!}~¨ƒùCZĈĉ‹ìb)´lÈ~´=žo“ RY×áĊzö~Háñ7VL¤"_ŠüŠĤ¨AëBnšŭTÓŭ!İnT…{˙]Ÿ´ûmprƒ+ä½|ŝrş>A ,~um—Ü/9py f$—^èéaùĞĝNŜ˘Ú9|û—ÎOOOÓ.aKS-ó&ÖGè:Ú;"ƒûYŭ¸PU *CAœ t~ñ@ùôí;ġÁx9°OĦxPQúoMìèc˙Û£m‡ +î¨=ĠüŬ·ˆ?zF–˙$u'.ì‹~Xisĉh?nì•|'ŜryµTëÔuK‚e­’“żÜÌ5 Â4ßĊwıž˘èÁĦ>ô&Ïğ‹İY²­²Pñp5ĉ¤$÷ßdñ*mWĈdџùġK[‡żŒä'nä8çÌMöĵĥš)^úLċëÛéì.f†#Ġi^w<‰×ҋi"Û+—eÒe3Ŝ-Nà×ß­ĝ„$ĠÍ‘kßÉ” ÍjܘÙu5Ğ³ç— \¨İÄ?—ò-ߘ Rá„ÄdHӗ:ğô^$ŝŽN&kÇèz-yüôġ³§ÙÛu˙+%ً~v½ÄâM.ùÓÂq‰­oċċÒÓNj…ÈġÉ£<ú?MÇíendstream +endobj +1018 0 obj<>/XObject<<>>>>/Annots 147 0 R>>endobj +1019 0 obj<>stream +xÍ[ßsÇ ~÷_q“'wĤ¤yżÉ‡NG‘ëԙÈq-yÜWŠ:I—<ċHÚÉßÀ.€#eÇULÙíŒGß}Ü]‹Ċbħ›ßž¤É˙O“:Kò*YĴžLĈ|ĦRúçÍô%İŠŝ]%ùlœ°LΟ8¸JÊɀsp•Ì2í„Ú9¸JÒ<gSÁċuìt2Î}[‡WI6)"ċI‘—)T)³q‰ä ĝQŻüCwF"„vi:WŽô˜”)Ĉµg[Ġ³ƒ…Y`]ÖcR&´ġl6UIdž´É -â¤1 J&-p2KÊ9y0"4UÒc°˜X‡E—İcÙôċĴ‚ÁôÔô‘KÑa•) §9ğORÉÀ.°ž‘Cô“yÖa°ġl šbÒ¤äĠž:Ğ=BRĤ‚i­ĦÇ`aĝÚ³ƒ­RˆëÚ:Lʐ;ÖaвĠ ­Ç`‘‚­¨ +Ÿ`ÇfŬ˜Ş†ĵÊ9HŞRe¤Ç`1W›z žûë0ÄÍRDpcEÜ:•ċÄâ20q7+WÎA^ĝG9,ü!r>X^IÁbˀŒulEAħƒĠžô’KF ĥ Eg=ÓB̑…iÎ'@bäxċç û.ÔĉN¨|7BғvA#= ŭ!6ġ²Ĥ´nŒġ,fpÀ: ™ìĞ={ vJÛıcĈ6ÀI˜ħƒĊîê{GÊiêg`Ž8DĜZ9i—ÊIBk8ÊáJJCSxoċNXÀa1WIœƒ°|Fíô,ÎR›ÖtËàŜ´óĤÒUé1X„…Ú³ƒEž0u,ë’aĦrâFşP]"ÇËÎ8Ñ)§&FzLCҙXђSE‘Ó%²ċu™ħ£cDšë0ıgFvĥ“{Na`cE¨RN,A(FN¨Èĉ)BdfĴ +3#ë0†EîÛʰĜ€É•°ŒÜ°‘ċÓ|fĴè™ôQÖcÑ–RV†Íäì†e䆍,ûifĴı(h +Œu,?hkĴ`ħqWžu"#Qµ­ˆœÊ #ˆÌȉYxh’²„úċ¨  ħŸ@% c†–t˜yÖa´EL†´-k“"èÑ^-Ú2m”E¸+`,ú-ħҔCmÊÈ5,œ?…”TZSleEh£Ğ˜ RDĉG5ÉX‡1,ĥÜ³“²Ô§µe §UQ‚…HláÈHKĝŭ’HiˆbŒFvŞÔ¸İˆyĞ7’6U:!ÒŞ‚Ó ¸Oƒ†2X\%(JÁìÚÎAN; rˆËBäĥµ#=&ˑTÖÔc²\Ħ=‘°S DÂÚzL€v)Ç:L€ûŽu,˜ë0,ˆHeĉi¤| +$7áżu6“bŭċF9=QލQ_P˙àżµÀ¤iïPŠU.ħçżµQ`¤‘RB +¤F(ûQllƒà*Z°Ĉ¤yHĦğr‚ƒ­ÇB­4%çżUÈÀ 1ĦB ~EŒ!‘k\‘rD¤ B›91° ¨zşt"“kç 8艚šĥ3NáÛ„‹àĜ@u¨0žƒà°c 4ĦœApġ ÈqlC‚lğ!žNz"‡hD§KüPfN!̂d'lċ ‚›Î ÔC@'ǧƒàĤìğĈËġĥïv‹èepAÇ_ ˆB#$j%²}%†3…N÷ŽÖbX²ˆu\Šw~˘ g9Ol΢˘ÉEîç'ßWíŬíœ|·tÒ³VìfĜ­ó8iɕĴgĤ +I£ÀïÓ<,ÚÛùûĉŸô=Î&Á>ÁQ{RËëşÎ›mŒ8Y€ÜŬ‘plĠ”§z1çïĜjë¸ö’ùúŠ‹­bèlìċY˜ŭdÓôï›^̊ÉôQĴSÔ$Ç(­!óÀċ/üĜ]E&NäġöïAT+$Żü ÛmïvìIT[ûê‹<*Ĵt¨tġp7Û~iÈ8q•iÜÑLud u‚ĝ£ğüˆÌ4ĤɅä=Ĝnŭfŝ'4ÏtĠî6ÛóEßŜIö€4L7# qìâX!UÌJŭÂjú\½ŸŻ KŒM2/b–á·U\K}½è¤ĥ‹3vàĤ³}7}Ó̗³vċ3”Ëé£ĉŞĈŝĊŒDġy.Ï?M‚Î1Ĉœ7‹]ßn˙ (ÍĠMhÙĵo–D)ş‡ÉŬáÑq95qF5Ĝ…[äóûSúM§F˘Î^j„Cäg]Ïq?,şĠŬ²Ù2÷–]52ᨀûWÛ2ğk2 Ş]•6ΰ`-Aq.€,ĝhÛMœSËôqŽI…²ŸLôQh`],&yM +Tâtóĝŭ§É˜ú_uĞıœ×càeTĜp˙#à¸LóGۅËlÏ÷İàï÷]Şĵ°I²¨ç]ğGŸÁtfËĦX­ıÔĞ ŝ„s§nWϽ•ş,XéCğ½ßús`bGŬáْeFù,ççc… ħÎ(Ċ[xŞḭ̂‰Ĵ&µÉŭ’Ŝ—^k×WŬ9nÁ ˜ÎaȘĊVò[TzbUàXÚRżeN³0â‹üĦĈrŝPßŬrxÔZ֙ÄŬ,ÙŜ†HħµXq‰Ì]N^œM³ñí­¸nÖ­’à—ß ò%EÜFBŠÎ€Şô˜kHÌäĥIşŒúœr°•ĵ]·×­d<¤žî§îĤ[³=qŒ³”Ĥû4ĵÒ°³bÔ°~ĵ[ád]% +em=ݤwDš)}ġòż4ñ8Ĝn½Û„eŽYšĤn¤Kĝ0ŭWù,lúŸï”ċ~-"DŽBžê CÎÉ%e 9¤ Y?È#˙R4ávÉ/LÏP‹o8kÔµ r¸ÊoÁާîÔ$(w½o‘3°SáĈ/–/<ŬĊè Épn°Mħvî̛\Ìû›Fœ ·7ħ ôv#jàU@\C˙CŠBŝ„HΆSôïNˆBû‘z×ġżÊô`Í{#ŭ”}‚fHş÷ĤJLÑYğèğMw-‡]ÜkñĤYu’·RÀĴYŽˆċNRŬÁ™òt gÜìĦLÎñO ú.ÎÚ‡¨XjċY“àïĠ|%é8RJÍ1ÏQvjR¸@Zŭ9ò'Lx­‘ĦPx áïĠ· 5)$ÒÓ%ñÂ+ġz‰:9Ŭ­váNvÛ[ܳ´ ½|À¤Mĉ +ÏË=p½w$÷Œş̎Ĵ*Ż‚ßî Xùèü$ZÛVúò9€RV= Ÿ,—iÏÄcNcJLx›ĵ·Ù˘"v°ÎŜ4›ŬRBĦ Éé|qsÜħÇĊwݧícԄŝ³–aP=4G}ıŜlħÈĠĊpMŻÔ}s‡Ëżëöfgb¸Î=–ï}Ä:Q7dgşFƒŒÂnÛ>Ò˙1?Ù§ûsrëŜ4żíÚYĊ›Ö꘷@ÉĠÑav€+ŝƒ%qÑlôo 9ĉ&´ d#}$–––’:žœêYĈ|ÄżƒRxÌ<Ĝs¤|k§vĠnye°ìniQ´Ïl§Ĉó¨Ħ7II\µÀŠ],qN‘ûëoM Ŝ*Ŭ!‘ŸĜAŸ?-BɊÁsù˜N[^‡¨ ~§ôVt‹ñ‹w[ÔğĴêbġ‰½Gĵ-Ù8sv†ġϘê&üÖ­8.JñĞy/µ]<1‰Y²Ġu¨HĤ­é=Eß-—²{˘jĝ°Ò}Ċ›—{ې#›òžGġLĝußôe6­$…x”£wî JòWqsµşÏvÏ/ùCQmDݲ‡ +흿Ÿ/~½Ar!Gï˜F|IIĜWP`pvDa`8Ñ5ƒĠñúÀ< ™`pCĞšúҟ9JĴöĦ“á‹‹y JŸhVɖ‘!‹lX +{÷ Âkx냤1WJÎ8‡’ŒĜ—p.úŬ†3.ĵIħóËÉb9—IxÏc>|_óħÒì鲍[íàŞ\cˆí[÷M†3ûîŜjkŽ2z6ô{xóġNîËÏNٚᙒ·ĉ=wÁÀtĞñe²¨u6uğ09Éa6ôŬÏëÌ>zħü;Zxİ9CòHŠ#â—á\§$8ĝïöù/~0‡—ĥá5’i\.$žSóÌùÉÙ÷'T(úYl“çŬbGù &ë9íB¨.Žjzıwġ´m[_Oŝóä#[znendstream +endobj +1020 0 obj<>/XObject<<>>>>/Annots 192 0 R>>endobj +1021 0 obj<>stream +xĊ\ÛrÉ }÷W)q,sî3yIùşqâ[$mù1EQ#‹YQԒ”íŭû ğ3äxW–,oRċÒáa÷h4€F÷×ÙdŠ˙g“&Ÿġd|0=˜âù'“’O&uÙáßċ¤è².&G.'UuPGp9i§%q—“.?(ˆ#¸œde~ÉlÓ´Ìەƒ‰/'ù´>èh,c°Y5P”1ĜިÊl·†aI–ıÉĊĵE…!ò4?È#û2[4bEŭ²„ÁV…ċ,a°m1œ™0X˜Şâħ„ĊSY›™1Ĝ²C[Ô˘PžCĝDk@$&ˆ‡N3™Vż”u ĥôy”% ĥ.EYK8¨‘Œ "M;X/‰¤ÀEŠ\WÈŞG“j#‹¸2ğe ĥ­ĊmĴ +Tu5–$ +€ ”¸VÔtŽ &Ċt‘ŒEÜl0”q—'q[Ġ°ƒ?–1Xì2fƒ2' şÂ•W&rŞŻsE\q'‹¸­<ÒĤe ë4e–0ü3Żħ2>V7\UË.ÄPŬpİ—[×Pb ËIJiœe ĥc# +À÷yl +f—M…RDB%6á,aÊĜ(T›cy` g c,¤€•% ‘sbƒ-ZÔÇ2Û¨1lĉà2eá²Rà.ıád CÁ!à46”ħ˜˘ËlYÉîq–0Xì4˜ÂYÂP'Ÿff,ĤÈÄ6–1XD*–J²k•5şy4 – ˆ%ÙĠ9‚1ğ:§Ù5ÍİéÔ9‚°_Ĥ^¨OWG# ŝdS–0XlĜ‚b ĥÉÄ~>3aXÏa–1ĜZüÂÇ2 Wâç2–u+Äşö\Ĉ°=>g–1ĜJCeĵœ”¨XfĈ`‘˜ >-4Ȅ˜¨À3cQW×Ne ê:u¸% ŝÏ23–È$écƒ1*Y 3†"2FbÔ ³„Ċ™<ÖYÂb ÙvÄÛJÙG,a(¤ĦÖÙàÈ(|%{‡ @$&¸œ4üK⑈?pd#ƒEœƒŞÎ Ċħ²Î[·ħ„Ħ b Ċle3Uñp+¤KjäZIÛÎÄáJ²œs!,Š(j“2‹@8` 3`ÇúX˜!aa[YSbƒĊŜÌLXŒ$…Џ NŠ“w¨"rÒĆê,aŒ-§b'g ĞkCĴc°m#,aYwħŒe]kÙuÎÛȑÚYİŠĥÒ-İ@˘,ÁX8§ġ@‡úÇyDĈ„&8¨5D2MJĜه2 ÌFt™JzħŒCî°p§„%2I%Bc ƒĠXH,aäŜLÍ̊ áS"°}“8=€8§û­@ħŭ€‹\ĤÍ'@ԏ–\ >0rö?D3’ħĴŒ¤gb ƒmtQmlx(2£! ŝÈaË×°Ż|Q8‚˜‰Ĥ3’ħ3aQFŠ”A–è‹ ĉU ÊÄ´81A#%aJt7Á³à` +dÁ˜0Ó„™ĈeH{Ĝ,61žXİW;Kl‹<ÎĞIĈYUSŞ sħlÍ'"d°Ħ|SHĈbñkb ‹ÀĊÙP$sÉ&­ÎĞğ;@ D!SiŞ $c°°gÁ,ay¨K}bĈ`QĠ—Ä‘j:Éf +Ü‘ë$ú8G“–²lN†IÈ-ŠI/IÏÈE½Œd,zŠq|(c°úĠ˜œáÌĉ'Ê€ÂŞI²2VëQb ‹6j^IÇ۔²ĤÎĈnÒŒÁb&(dcƒEG%É(Ïe Ç lœ‡3cpp‘C†é ċ‹Â„2ÈhPĈHĈ`µ'B,a1“˜šXÂb&];›9ˆ;óbĤÀĊ\Ï8‚&‘QÜ82ħ9Kc°œ%,âJ™D,aY7UĈĈŞ2¸šħU˙6U"£˘(éaTP#Ž +Z8§J$NevÎaÒÀ9U ŽË3iÛ§âkˆ…šŝmâGêtbŒ#< +ŭ§Ö)‚àP,gÄ9‡ÈTçꆊ8‡àlˆSñqž·zD˙6ñ#£ÓİĝF‡{NܚÉä2!AphÍáĈ8‡Ü§""³IrѤİˌŽ.–ûIcáQ8H?îY‚à4İ8çPÄ{Ş4NĊ@ Hҍ>X˙61"2šQĊ’ÁŒ{züàñKI²“3dŠÛÊĤœŸêU5>ž?<ž\ô“ĠÙäÙêrÛ_n7;ŝßîmöúäñKìĈLĉy$a˘GıLôÙùìjÛŻe”Ô 0íéC,ہ|†›>ùçê³|‚îF“>Úô;yYÇAŒ³ĊÇëu/ \4ĉhĥ<™É§8Šgeš‰BççÌT<żÊğ8݃'¤Aï׋ċlŭ› „•uüÚóĠrĥ¸ÔOQÙhħÌzuq´|ü 9X"‡kV] “È!ZĦh‚İâ¸ö´Çŭkµ¸\\~ܓ}{ZÂFY—'ŭ/XùjŽCŒİi–*ĤmüĉĜh×;yšĊŻ|÷˙5™HĝHn °˜ĴÚçĤÎjı\“Í4­òûġ +n·Ô•B"rf—§23"`]”QÑëġj­_ĊĠ”yĜw×itÂF½ >+ÍĦ˘ġPÑ£ß6Û~ı·ÄïW‹ù˘Wéħ$UÛDĈ…UÎñËpòdQÉîĤe•{âĦ²ÍPÙç³à˘ĜuMÚ=+8¤ĈìŠ˘J[íĵż¸’IQZÔĉäó™şVÙ|tòJ…ĞÛïûí?t$r}rJmÎĤŒĈÌ>Ŝ­A›ŝiJĈ°!“ ²u²ÓÙJ­„sğÛîâòtġ9m†Ŭ—Ço^è ¸ÑJğçkßŭóĤ *ĵíPL•ĉ°–Bġlğ[ŭĊ²‘W£$ĵşÜl××sá6—iÑ˘ħÀ˙ĥß~^­‘‘­pœƒ^Ż>âëŞ0ÊĠĝéġjZU +÷Ĝƒ@…t=5:ê·ÛqÒFr f¸VïG‚0ŬW³eü& +ĠİE„Ÿ7qûà0™"÷d'$Ä]u‹Dµċ$"vßnÇ}ß½yòê퟽{{|ĝîġÁö‹ní =´ĤNı&,àAkÉçkûöXŒ&µïoÜÑ pĠaÏòďp3ËML ßi5€SùR ´ƒè!ò÷ +˜Çżı€y2öëÈ­oP’<Í "Ż„diC¸ñpíòµ’=!ßBĦ€AbvÜ+P^]hġƒ#ğ·3XVŭhbFd-îÂĦô“ÂR]ŜWĤ­d-İ`*Qw ^:ûużî½^lÛPâŬœyĜÏNÓƒWß ŭmĥ–:‘}†3T²sp à›mŽf°Œ~NíÀ"דİäšÛy%Ĝ]÷úöİ´­E„ËlÇQöÓç‡óŝRċĈÑ2ĜBÓ9Ŝ…ġL7ĥ˘ïŸ?ÓĦhßÚĦç²ïOûSUAħŞîí8nµĠ&üp_—ñ,”°ƒ%òŠ@ĞOÂ!ëfÛbÏ(ú£TLQ⏷ÚFÂ?^Dß Óí˙JkWŜÙ ;Çĵñ} Ê;yŻÄßô!W–ö Ĥ=kÛùéógj97W?îĵ<ĠŞY(áF +ĉ[ZiŬ_á9 QâmžŽÑci³<ıšm6Ÿ÷Óµœ-ƒ…a“êíc0²Ġ“•YyƒrûkĴ°İ¨Ĉ:ÚÖ)ĊóqY—üŻá€„&KŞ'R4?~3›Ÿ/.u›Ħß×ĜiâÉ|ŽÄĞ.&=1ÛV‹KœÁ–{ñ&ċŸħòIƒz|~†{ŭüÉ{ñn\§ûFX÷sÈúJÈÍïGŬV&T(Ħ܇ ‡!çŭġújµQ5)Ü–áOAŸGáœÇzì”DݤvކbÄ´.ŞááQ…AQ”:zÖÓ:şşZ­·½î°AñbnƒŠyÔQżŝԇŝÊm;ÖüXmÛN,EÑî+/ÎN^;šŸ÷K¸Ò²ĉÎXğê°ż=´9_è!×ZCnĜ°<|Ò>f:1çĊTƒ 7Šá÷‹/´q•bEĉ ­‚ĞğÁÛInİÏZŜYOEŸÛsħ7òĤ­÷dÌ9î ûM‡vÓ°òƒü„WcGòÓğĞŝ2I‰ ?xĦ˘ÔĤĵ‡LĵQĊ,tSAnġ½$=^àÚ]£ŭúóf …~SŝŬŽ 7R*)睷ÓAŽîš€nŭħ½÷Ž”WĦQFâÉrv9ûĜ/ 6dŬ~CËèFʌ~İ ÷ŜŜÙK;£~~½^lCóïMY·wLɍÜĝGNŭñ‡ŝ.^ÀwtÛé§­ƒ—0=úoúùbv–jQ·Ûġâäz‹èz!1Ö!f[èdxŸâ7jŒ—ÈŝşÓ7|ñeĥĵşrdP]½~ŝê?iíô9?]ƒpÏiLĠ½zŸu—™qÛ\ÜWé + —òۂaÀÁ 6j•ÎÙÏp·•nLqñúC6ÚèîÛŭ°+ER*ĈñjÈ Šñö¨µĵZŻ>Ċ:—ğĥš'k\V¤6n/íÄ>R=ëâ‰>/XObject<<>>>>/Annots 233 0 R>>endobj +1023 0 obj<>stream +xĠ[Ms7½ëWÌ-rĠŠžïSJvÖIŞìRbİÖ_hrd1!9Ü!%'ûë÷u7€nPÔÚÙÚ˘¸I•¤7o@£Fcüϳ,Iñ–4yRÔÉlu–NR<Ħŭx˙#=Iê²ÏURt“́er}fà*İŞIm8WI—NZ¸J²Ş =P‹ÁĥE$ĥ¨éċ˘‚ùM+7ÌsHó hCÇuͤLêÀ59ġ‘vxĦi>Éâħ ĥlİ)żK,7­şM|SAÚ4°g•Ö`´m* BYŒ™!›È˜*FF°góŒ+k0¸Âà k0Ĝĥ„ı k*É3Tl1Ĝĵ˜tĤ­Ċ`›rR–­ZĠZUéVġ<§I”3ÍÉ+”ĦU­Ż¨PÇA…îK/g ÍnA3HZR çFê¸6%ŭg ĊH)B‹”Eôe BÇYNÚe û´c í×òÌÎ@ a‹@ŠP¨VXĊ@…:iɳg iH MIZÂ\aġ B=Ğċ $Ħ-üQIÚz]ac4%jà*i[ĜB9ƒP„Ö%ÛB¤0PĦŽë2L[8iNSM Eh…FÊ@…:N†8!Rò¤ ¤-6”Œ” +u\–Ò:.i1Äb͗†ħ9ÙÁÏ*ë8\à „PÄÏ6))B³Ì˜Š +uœH œ"HZt­šJ@êı€ŝÊHBiûQR„b…S T¨Z +ĴÊĦY8$íĦ(M)ošHĤnUŽ÷PߎחrRÚ µ,˘Wëúç.i+,Ĝì.† Ž£ˆçZŠ,ÊñĥS´B(o}‚¸KƒÁĉ5LmXƒÁ–eÌLlÁ´5lWÑÔò(¸_ƒiÛÉÈԁµ,6貃…şV²Ċ`ğĉ3’ †Qħ÷`ŞBżƒ­òhTƒ­Óh6,‹Y·cĥ˜ĜĦÍôk*)Ó&ê×b°X£V_‹ÁbTĥ_1~&y 3>#c|ϊħ•58_Y1o+ĈVÖà`|eĊĝ­3v`-ĈWVŒïÛb`9+k0Úb{€y•5Fà`§ĴĊ`ѲëÖb°5m_†5,r˜WÛ ÚcĦ(k0 ˜ħÖb2~IóĤ’WgHaáëŒÈĵLĉäÎb{AjûÀr~iXƒÉö´…Ö`°Ĝ/;ËLĥ§üÈ´5‚ž–µ˜lOŠi[‹ÉşYÜÖ`°Ĝ.*ÛÖ`ĜK0ĴĊ`ËÖĠ~-[Wq[ƒÁÂÇĴFƒEfd5²˜l_G3)DlCLÎȳĵX k00ED1ĴÁb^L•J†y=&óRĵ1ĴÁd^VHÛ #à8uk1ĥ?Œİ♲ƒċÈmXƒÁ"üÀĵĦ_‹É´Í+Ë£¨äXĈûz΀&Ù@·Í+ÇÛĵ@ÌöQ¸Lhh1X¤'²ƒ…Fm Ĉ,! ÄhC[‹i†éĵlXƒÁbEm –ù·ŭr•Cċp„@Á †ç2œ!áNü&Ïe&9<.hCǵ´Ħ*g fÎïPC‹Á"aĴ,‡YƒiİŠĦĴ,œLŽ{.ò1âĤœò䞅ÖXŻÊ ÁH`8e +ÎXé6•Ħ떑éֳҍ²‡n••n}[>qç%˙Í9ùħ + N tŝĞûŻo—4ûJZŒñ \ZƒDŞ .€şdOñœxŠ’Ò°”³ŸĵÉ@:{b°E/g Fž˘¤-äì'B¨PÇaëÉ  ½ÈB’P:+)Bħ ҁB„2PĦŽ03B˙JCŠP¤wa…e T¨äĴ§¤Ċ4V:ûÖ`éjÁ4ÁÂjݲƒĊ[ò€áċÁÎüwcĞLóêĉìċ$irs‹„Ô³JêĤLnĉ\ĦÄÙùÍôÓ²O†Ûäġ°ŜġëŬöĊÍoûEÌñsòò L’‘œ 'è"'AçŻïĤ›]?R+rqôħósh7ĦgĝċŸ\OWŸĤübVéŸnúñvWÓġĴ'ÇpR'cħŬŜ÷< Ę%V=9Ò°4èċĜiNAğ PI JBıŒµÌŬ0‰ĞÍt\l‡5uziÌOutı@œÇŸÇżÚ,‡Ùï<ö‚VáQ'üİÁğç^Ôöu+PYÏğĠĠC?>,ú/dA” aµçSĊ+ÏşÊ<ùvĜoû‡~™ó"u[Ö,8vTĊѵñ:d)Umb5ŠGj\-ç¤)ĵAğŝÎ+1°éڄ˘Ä ŝökŒ"cÄn1Ĵù1ŠuíŜż 'ô^éÌûÍĜÏĤğž;ÄIħŞ]ôĝŠ7}+ˆF}^äÀħâ˘vXú×X8ŭŽGŒs^ç#°!EdE“"ŭߎî[µˆßó:µmdÉ2Žïû)O*òù˘òfÜ.ŝĊVÄ]û &äu‚ĞXïĴbŜM˙ ĦŜen%Ĵl6JZ·âžI‰¸[d~ìz{*ÉĈüî-ünħŝ̎wz!Ûi@û 5K›ċún:JpÀ>˘Ŝj˜ğŬ5şgˆyħ5òFÁ‰v/hcŜl“µÉĈGµ%…wv@”DòîèQü Füеçk]ĴӇĊ\̄XĜĝ˜ĵ\Ĵ™°Ş>ßFЇ̚—ÎħóĦÖÏ6h\ĥĦƒĦnœröpb‘îi­\*ŞZ}ğÇĞJĠ:™55ÁıÁÙ +'Â=cı UĠ:h,dóĊÌç (›…FìGD^§‹B{Ŝ÷_ ŸôĊÀşİÍjşÙĝÀŽ“UĉÖÛ50]yeû‘…\Ŝ ş^ĵt(sİÛëċÂ/İä۞D À8Ç\IîûË˘˘üÂew˙JıÜA•аCâÊÂgtÉî~í]é·ÏŝŒ?˙Ï`Ş8iĊgûˉ—ÂvêwĜä}ż½_JiƒjNıۏŻDÜ#‰hìĥĥ‚ú|gŸŞ+˘µİ\]óħ‘2[ż'jÜu퐅ütġáĉŠ:ĈĊĦ?ŸĊ;Âğ(ŻċĜ,Z…¸|ó7—żúrsèOSˆÒ\ğ…‘ë?ı‰KBÀŸM×4#äı™/ŭLO)@8­Ì†ġíâó½¤Ë0`—ú“ĉĠġKqu?LÇ ‰@-k}ŠRßşŸÉYWZAöÀe<|˘‡£oÊĊ26 äTSĥT$ŒĞÙâfĵ'ĝñ…33 +‚<ĝ¤/d™\=üž ŜtzŒöÓ^àëƒŭy\`yÖy/hĝfŠ>žŻ9zÚC‚³ÎÇ£×éâ5÷İöAkàî•ß´Ġ|ZĊ3¨Ġ×ĥÍ'|6AÄMüEDnNl‰™}úÎòdR|‰!üħg-ĥèϑÖÖ.eÍ4îè•ìîzwÄĠ^x:]û-D³ħ^9Ê!ĤBêzĜoÜġĵ”ĈĠƒïıë [ë}(^nQ5úĝ‚:D!VÏÄ YU¸9Šä~+Ċݍ¨ñíĞOÖOż?ˆnY–ÑHàc›dv˘­ħùÀŝ¨•ĜäQdû,Ġ3*އH°¸•ày§‹Ż ĉsÄĉÀĵ‡h9Ĵ—ƒ”­è Bë—a EñEšƒv’Hµ•ÉBÔġw&Ë­ÔŜŬ­×ÎTĝÔ'ĝŭ8£¨…ĦN₟¸P Ĝ/‘u“½ğµËŬn:ğsq!Êl_Ž‚ŭ:”œ0!>M62|ksÄk Ż8}ïb–¨“ĊËî—énv'W 8ˆ`×8 _ôq݁ƒûw‰ü҃ï‹ĝ|ħVŝÍ}=„ŞÓġċğW—É/ŞÉì~…ÒíÔW׋ ïeÈmú²h~ŝ@ŝñ÷›³_Ïŝ Eşßendstream +endobj +1024 0 obj<>/XObject<<>>>>>>endobj +1025 0 obj<>stream +x…ŽA‚0 …ïûï¨g;ĉ˜Gˆz3Ѹ?@ĈH$"Á˙oN^LÓ¤é{ïk_ŠARŒÜ sˆ"MpÙA[XŸËl¤Ç„f ió+”Aí/GBh„ċrPC8$›¸yײÀmÚ'œ†ĝîR?UÓsè·ĦŭFÙ.Ñ]Ĉ‚ġš İê‹ójqÖéùÀ?ġ¤½·òxyĈœƒşĞ•;Òendstream +endobj +1026 0 obj<>/XObject<<>>>>/Annots 274 0 R>>endobj +1027 0 obj<>stream +xY[SÛH~çWtÍË2U ĴğÌË.M†*&a§Ĝ‡y‘í6(ħ$Ż$‡ïç;§î#Öb\İ2ùĝtî—n™˙ĝj†J&jUžÌĵ~C>}üñéÄ÷C/Qñ<ñfŞTŸzYĥꁞWqàwJ/êBz T~ì{ĦŠ—yŠ’ˆı‡´D XŞ(ô|Á s$îä,Ġ<´H§€Ċà‹”Ĝx:lxħŠâ™‰0"µ H-L°TYBZN@2é[-$(1Ĝ ġR!*1ĜhNîZĊƒMİŽ5î†)JĈ‚ œğ=gü³œ€äPBJ-)19xȐc›…Tˇ‚­18ÄÀ9ÔsĈË ³ò‘%%ëÏ)Žl“ğŽ˜ÜM(ğ–5î˘\u—s·çŒ–Ê(–”lS†+0Ĝ8ĤVqĴÀ4~u™e%‹Ĵ#–ċ`ÂyĈcĈÍj€ fàĜ{Ç ‡f)’áH‰)˜ĴÀ`“ê&XÁ˘wGš żçRV`„ÍŞÓlBÍ"7Ĥ!jϙĜ,' L˘ Bċ% “ħd›$cV`°YLîZ³SUi˘‹]›İ0ġyˆİyCFÄPŒĉ¨c‹˘£:ŽìœÖ„`Ĥ Ó~uĴq*&g jœb$œĜ0"§+0™QÙ+0ÌbJVb°!mY'+1ıœQ@V³Ä`dä•Ä`ç´˘œĴi¨(†3ŭŜ +¸†ê9ÓA–ĦÎ8˙–”,Ò“Ž,6>‚qĴÀ`qĉ"ŽÁ1ue%ÎİU+0Ĝ$y%1) Fĥ²&Ma V —Ĥž3yħœ€6M–ìÓÔKÒFDG8V`Èâց^sĴÀ`qò£‰+0‚ÁMÁXVb°‘?ÒlBċĠ>tjϙĜ,'  Ġ’}¨½dŞcM¨›fäc†fĜA"+0…RGXVb +5Ħ;V`°é|,+p )^|VVb°èZôİc‹wĴÀ¸üÍ|êDËJ 6àa·,Ĥ•ĈEn>X´ òÈwChċ‰CG IÄÍîZRb°1]++0 ĤÓÉÎS‹ ğHÒL-Öü•~³:½Zĥ]“Żş_ß\‚Ĥ4ϝCA€'OïòĥS_wëĵÓĉ™¨ĉT]ŞĊó^]ퟰéÑŻ—QvĊêúfA£Ó3uŽè#Ò³x.ZµĴëï +?sµŞ·[½êŠşRġFŭöċqñż^ŻġZuµzÈËeÖġj_êŞËÍc?t£şg­^uŜ´žşU]óJëŞŬ7TŜİ|ğííò$njµoè9SË}§ÚşÔ]Qꖕħ3Ûĵy‚òoġ’´À£JНnZ8·,óN•‡xµ*k$¤Ñ+(TpİíCèßӃ˙ĴdİĠĤŜWk•sù;#ŝà/Žš'uޞğnwyqñòòⵔŻnž.X§ŭ–‰%ĝaĝFÉĝċF&éµËŸ´§î·:oµj5ìíıvˆĥĞì˘FCéĤyŭ—µ=~Ŝšöú0G•b5µBV×Ğ@ÂQQ„Ŭ×îÓçŻê“t“oĠŭ~ı-Vê@*á쟧ŸîïŝüĠĉ4ÔÚd÷J ‚P{ЃŻe1˜*ŞĠvOóRtϜÓ?m½oVÚy‚JYTW[’ş:ߨùTiDŠD6í†+Ô{Ò^<íĥ^÷óMy‡´‰Q¸~Öè›3ĊéĤ°.>Ĥb†É—[Mħ_×U‡fîè +ßTÄ6ÉPÙSġ[ŭBr[µ&Cċh‡…Fû>\ŭŝáêpyñ½ĤíߛVŭ靚]Ş?tŽ‘ı@FİûÌXgDüÎß`ÒcVë_Şûbğ.Ş'VŭĦ¨òĤ8Jsĝĉ€v +dċnşSÜ"”É…ÇŬú}Ġáşn4Ö$ğܖK4oµ)žö™‰MħĠo4ÌMüĉ!WMÎM„¨„ŻhîŜ‚"ĠÜüf:UžÜċMy8ş‰fJŜw T]ŜtCq)–:ĞÂ÷^ŝĈB.LlšşÄ„ëníQ>Ġ ïf£‰5°ítSĦ2?ô% §À B§Ó:×e]ĥu>Ž&}ßV‚rá˜Úbڄ=L‚•yħ53^™jĥşÁrĜê(Âì}›İħ‰tUtÄbˆìbÜWĊOµÚĜ'GĜ™żo'û?;\Ĵ\Ŭ|y8S›Ç'|Ġü'˙ĝĵàÁ÷3ġċá"8Sş[yžwĵ7¸g}v“ñHg˙í³h[uSW˙èÔcŬ|˙çXb¸q Ħxş#oŠüİŞ[Êâ}Sc%—Ç,8za˜ôö§šV·7G*š^i×ϵñŒö/ĵëj\ĞԝŝĦÍ-èŭ% §WÚ}ƒ;Í%ŭúùöżtäêš{GŬ_Nì¨Ma`z™ŬĠĞé•ô{ۑ›_1€XIz”’é…•dG)™>.XÉü(%XçŜÔĜŸé‰"zçŜŞ™èڋYç•ÌÍÛĞ|MŽ2|’Ex™Ĉë%÷íż'˙9ù Ğ\>”endstream +endobj +1028 0 obj<>/XObject<<>>>>/Annots 326 0 R>>endobj +1029 0 obj<>stream +xZ]sÛÈ|ׯĜ‡<8Ĥ €ŸO)Ù>ç\e霓§*•ˆ„$œIB@Ëŝ÷éž%v:BĤSWsĞı³3=³³ÔÏ7Ĉ‰›§.›ıĠöl<7ü‘Çï?›Ĥ£İ›-f£ħÛşy†˙y°qWg·.OGs!ƒÂް‹Qêfót´€Ġ٘S U˜q>Z +'6S8)¤b°³ĴgV1ĜĊ4xÀIo]šô§ġ"L—£Ü],è’ŽôÜd6š“3@N ĤÌĈ(ŠÁNRYÁ`!_ĤĴ`°HäŒc#˜t +ß"Ğì4ëıĵ\RµŒax6 ˆñx2e*1 OÜÌP$Ç3Ëi²LhÖP §ËÌL“˘ñˆ¤I8…XABș„—¤6>IR1%cî8T1cÉ ż°‚Á.'JXÁĴ‡EV1%œ@%ao] tŜ%šÎĉ^à„ Ë# H0œš² … ‹*š%+˜.ϑÈúiáS—ĝi É´ “p*²‚9mĈë ›ô 3ĥ‹İ!3,ìdIë‡Ĥs+Š…Ґ ŒĦS*°~h2ħ’IPáİ›òC#ĈP4¨X_mÄ07³8R &Kf.Ši–ŬKXÁ`)ċcsép}EV1SgġĈ*‹e‰#+ì| +5… U­>+FNluˊÁ.Ù ˘eĊ[7Á’Öyƒ&Ìm°l)˜ ‘²gK¤ÇĤ@ SÀ'’ŠÁ˘ ΔÌpC’ħ‚!ş—ZV 6!}qĴb°Ùu'Ĵ`°HuĤĴ`ȘôçU {„F¤ì+†cĤ9ŽU g ġJ1ĞŞï•½€ğq2™eC&¤`°è—˜6²‚Á.Ĝî…Œ€ĵaĴb°hp9²‚Áâ 1ëûIĈiÇF˘ËÏċʳxz0b …0YÁ`ħÈa8²‚é1w1aC +4/DĈz§C}£ċĤ’²x°Óv˜Ór;V0XčXÁ`qï†S‘Ìü°Š#ĞĜ×İÎËşí0X„‡€‚eĊĉ' ÚÎM‹*{Bà"¤# O‹23Ё‡Pì$Ŭ¸××gŻŜqĠşë[œ‘ñm×Ü]Żíë´ħğ^½€v£ż^˙ñôKĥúνpWmıÙ¸ûükığsm]ío6Eó·ŝ§qX;|ú%lżÄh +ë/²A“ïwmqWç--^\ıÏċn]=6nW´Uŭqe{ïòíM~|šŝ,Éà<çwĊn=`cĴŽĤƒ&.ómá~/šj³oËjçʝËŬ.ܧ]ùíĠ‡r·˙ĉàġf}ŠĞxyıŝíÛLH÷ê‰ċçĊĞ˘]½şŻšĥé´S9ĤòIéİĈkôu´Şv·?9Evêô˙˙™`rêğĤAĴîOšäIa—ĤċÛäñùηoе•$r˙çjE —°_¤è–ƒ5v}_¸Ë˘}ŭŝ·+góżÉW÷ĊqнŒcĦ=kôĊŻż]]_ıÛrsšıa]~Òp;y{yċ>TĠ—ŭINüüŝ–žä|Ĝ_ĞGwS£ħŬîw+ôĈċğµğĠVn]ĵ¸?DŻJ†×ï7un+ĠßeXŠ8<àÀPŻE²Ş‹ĵ-š›/î!ŻqÍÀ˜S›†vÊ´tŜ6 +L˙-Žç½§é´k6(èĠŝáĦŞ[Ŝ‘üî€ÇÛÑ·ĥuÁû“çbŞĞµïzÇ-INŜ>h¨··Ô÷‰wµŝçşĞÚ ÷†ÉcÈ˙~`ùO˙ƒŬEí‰kÎ]­™{[—8C5ĥ˙ò í’s˜§Ôî)]vr·ÉëğÂíöŬéÊb8u‚ás^ÓŬK´ĈÎe4ÊÜú°n +?Ÿ¤Ö–£ĠÇñ#Ên`í<)âa}x {ż5-w]U›Ĥh;ÚŻ“çnvŸïs,‡&Ĝx6éĠÉs—şPw/÷1_}Á o@‚'ĉO”àÄó<Ëzf×1QqnÁ1ԟÁŜlJKëú$U•vQÚëĥ\ìĊ·uµ ŭf<úĈß=Óx^½3ßÁĝü=^ào——ŸĞÎ/^Ÿ£rĞ?°/ş·Ġjż…§ĉ5Ŭ}Ég:~üċ<Ċ›ÙúĊù Žchò$'ü{1Á_ĴóŬ‹żùċúìg˙šñiendstream +endobj +1030 0 obj<>/XObject<<>>>>/Annots 378 0 R>>endobj +1031 0 obj<>stream +x­Z]oÛF}÷Żôa‘Ö +I‘U`ħpœ´ë"v²ĥ‚ìۂĤh›­$şÇ˙~ÏıCÍ\WŠŽç~ϝ;£ü~›b3KÌ47Ġú$šDĝ żÄürŭóI1IL^ä“ÈĴM6ŸÌ°27' +Í|>™*NÁµ‰ÓÔI‘…É$3ù,™ÇIAž„ìœd”Nb“ "İ1Ĝél’jVa°E“"™eT)@ìñö¤”êHnŬ,K%[éŒ2p‚Ȥ8ċ8Ğ/$ävwf‚¸’ÉÌgްfÄiLŒÚñ¤Ĉ`gSĈĠ-Ġ,j_ ÖU™$“™ZĞ1Ĝ,ëE1  ,F“ʈ3 Şö:NAÔól´NA‹zFÔŬBÁĤ^Uj 5GŬZìUd)Š%Ġ¨@„HW*HܙžÔ, +rK5 ×P˜žU,:ÜñĴÂì9#áXÁNÙÒ=+B #Ĝd¸!ŬáÉâIÁflRŠUìlŠU˜ĊÁ`ÏZ“¤âÑq…@“sS“:ÖïĦ59’ĉî1X9…Ğ0™3~­Â`´Ğ0œ‘Ĵ{Vc°)ÏÏĈĴŸÉċAšÎQ/Uĥ Ï)ƒ¤ÇyRc°y>Ğ1Ĝ‚U­U˜Î$ šĜG“4‹–€{Va°Ĝ7£µ +ƒE4ksžÒjÁ  VËMy,à˜Gp*ȓh7Ĵ_„ SQ“3JĞÛ-á9…!óÏ4e… +˘àXaĴ…HœcĊŜé<“¤bÀɌb’‡4‰‰÷¤Ĉ› Š“ĤHÛdŒĦ0‰I +ƒEG€Zù]afâ˜tÏjÌÄ#ֆbšÏmü‘dĴdCá1ô"Œ°Ê³ +ƒEÒ皵evrq*`Ĉ$’†U˜s Ùħ[›+Ç6§ĝšp œ +É +3’Ì”b‹VkVaz$ùô’†U8’#½Öú‹aTĉfd9d#é1ġzDÖZğ$?µ‚dİÂXjSäY…i²¤È³Ö¨È¸q.& ÉÂ&h­Ü_Lo†½K¤Ĝ™ŭlSM +MĠb:ÄOħ +ƒ-x7ñĴ¸›ävÀ€37Q°%Q6B +²ZQ' T³[àH@NA´[ΞS' KÒs +ÂÔdĵPc°¨¸éTj MpĤY…ÁJRkF5EÙȍYkÜñ~­Ĉ`çÜñžµ”޵hİ0YDPašœR°cíRdÄ^ …ä2m.Ž™)“MŸÛjQr*íïÚĵħ‘¸µH}Ş×*ÌP°qúµƒE-Š‹c,\Ëĉ¨6jU&aŒİ1X í#Va(•+²Ĵ1Xìr¸Ôj yN4Ğ0XĜ¨ġjŒ +‡^-Yc°èt”ÓĞ1Ĝœ· +ÏÚ +''-JMÇˆ†ÜÜĞ0XÔĴòk†G¸­Â*Çj V^Ğ0lFCB™¸µƒÍ’cèESdAb³Â³§zVc°£ ·Vc°È ^\<Ğ0XôŭĞ0lĈ¸€ şµƒÍxqħÇżv›ÈŬÒbx„í‡,xVafAlöĴÂÌ7ĥZĞ0£Ákg5+§gĊĝxj'Ġ8âÎ" ³ÂP‹ˆäËï +Ğ0XRäY…irÎô:ÖŞ‡ıP @ıˆ1ì8>ùÀ$GjL“8Ó(Va°x;ÛK˘`ĞíVž|86ĈÈa+í!ʝȓƒ/Ğ0Xt)(u‚5&+qPĴÇ`ñ†;V Ĉ“;·ä{‰‘C´‡gĵ£‡€Šó­9Q&Ĝ4sµNĈX'…9ċ+ŜP×rCî8ÁáĈ˘9ıŭ9ù¸uv'a+Êy# +uök›Àf₇äXŠsádЧ 8ûVĊ†,.xH÷X~‡tċâ8ÁaàËÑ SAp˜iÔ:ıâÊQBÏá|OK<†1Ç úx/‚ĵùpsŒGû°c^´d ö3î +üžz\ħöĥHmaĞÉnÇ:qŬC¸n‡ĵ=÷nqòö'4éĜ,îáC^ÌÌb)Ÿ9DfQ½)&_üúòsˆîŜĵ1ïëÛŬŭ}³ı7ŸğfÓÛoÚÛU½ŜŽ—à,ÁG§Rg‹%ÄĈAÁ›k—ğŞoÚÍaI‘”y iaŬ™Çî5Gb§Aħ_Ê’DâÖ,[saÊoġżŽ°5 +½İ{ áîъÊGSn–˜mŬ}Ğğ@\GfgA ż´·³é˙a6­iwŭ?ÂâüyÛ+7÷ġñBgAĦ×ċ“ùÜnû›Şk÷Q^ag¸NϖßÊMU/]™!m6°.Wfı/ŭ˘Nu‡EŬÔĠkúg³ŞżĠĞ@rǢŝ˘Mƒ–t²íjSµëÇUŬ×t+™ÀV4íêç“GîÊ2’|) Ä û'6Ñşl6oÊġmi’É÷ñŞC=˘ñĝm6lIċĈ\-Ì{+˙İ霆䰵›xÍ Zo ċŭÚl–íÓçúœĠHĉXökĉÙ4[Ó?àË-:W˙OTÄlGôœqÂAú²iî쌏í}ğUOu½q!pôïËĠĊÍnËhÂĠ[x{8rşTqßĞ=ğeǨŝ¸ŭ@J8ê˜àŭ'˜Jièƒkèí·e”ÓWĵ\”Ŭ}Ŭ›/ېĴ—Y +˙nŸöĦ7_ÛE4èòeSuíĥ½ëÍu½nħÑá6zä{˙ĵ\…š‘ßx‚İ%(˙Ş\×ĉ§VSá_ìğêáp@_Š géó +F‰ùœíúdMUrD0—VĦ ż”2ĠI½˙ܵ8…/Ŝ›³Ġ޵:޳=|ö^×ÛŬŞGhĞl£Ò^–CXÚĊfÛ#IÖ{îóvs×Üï:ùÉaé/6' ‚ıû³ wç Ĵëú÷]ÓĠk¤+P´áÙ3(kQoeDZ0†[ó)4żĵ dx„ùĜĴ›^‚v”qáħ ¨Vh‘ĦulR8\Üè}ëò‰­3‡‰)·Ĥä³.ğçŭyµ•WĞş;"éÉ+)˙ÜĠ3µm +ërĴR.|lLÖğ²úí)tXŒċ„“/mž>ĜġC@†óüü+ oŭóF@lÚ,şŬĥ7gUz{l?PœŻ3ÓD{Ĵ%G…˙Ġ~\nv,­!vÖ:lËaM/ çċ‡O›SĜ}úÓêù‡żL]8}û¨1T6rÇîċv ·Âóv½F¸pzÉĊS2ġĦëÚ#îJx w†›çm_ŻqY5USÛ +€’ğĉ¨ƒÏÖÁ!F‹xtĉĦ^=š +sŬ…Á¤˜ċĈİ _sĈ[Âܵ›ĉßß^~8\8£cŸ Ò#ö;Ñ;<ƒ:{Gßŝhêŝ sÉ0HVġґpĤIŬ“ŻÛrÍM+÷ëÉyYPáKÙûO—gW˙;˙tµ¸ŝôqÒï͏.ŝ&1tó7ې{<ÖŜ$C×?ĞzÛċÙ;1Œ3Š&ÏûÎ iĞçĦvĴ0ÄŬ‰^Z?Ŝŝ„PäшoßQç×ùOGonÎ.ߝqGŝZĦ÷mµéïF“SĠò×Og ^˜–oôm Ċ˙ù)ŠïP RFġâä?'˙ú¤“ endstream +endobj +1032 0 obj<>/XObject<<>>>>/Annots 430 0 R>>endobj +1033 0 obj<>stream +x•Z]SÛH}çWô[²!ú–ġ´E ÉR‹™âYĜ4ħ-$‡Ìŝú=çĥĴbh·¨rùpt?ûöíۂ?NBà'4ydâÌ,Ö'Ái€ß#äÇíדtv˜l–ásmÂ09M´2óÌ£ÓÈYÂ'S‚Qrš)Rc°qtZhVa°yxjVᵉ˘à4VĴĈ`İSƒMƒÓHË* ĥˆ§^ŸN DˆRDmĠl2;Í5Ğ0Ĝ4£fÑ$² +n3É#Ğ1#ŠŻc›dSY…ÁÎ\´ĞñÚÄȕĥÚxĦ!aĵ1ÊÂd‚Äg…oÀ5rĴÂ6^ĝìXÄğÇ`g²ŽU>c}áĠÈÚzDœÊ Z@Ÿ„Ú0䍤Ĉ`QXÇ* V~ŻX…Áf³İĴÂp8È'Ni 6›zeAŒÜ^Ħ +`8 +M‘2e#§  +BVÛHj 6ÌĤĴ 5Àú*Y…ÉJ;Í +ƒĊNœÈ*ÌD„ÜóNÖÖSI·ö‹ İ'ğŸöl\0ŽUv“” àX…ÁÎr.ĵcĤWÒFVc°v':Va°(0t€‘ĊF™m‚ ;ĵQ ;ƒœ}PÖA¸›²Í8Rc°E„ĊSĴÂp(ÉħŽĠ˜ÁpñĞ0ƒ‰bĊ*Œf€ĊÒ²ƒEt: İâtĈJBŠOĴċ²\6l²kĤ‚™rI+˜TIÁĈm:Va°^ËZĞèB<™°YÀ  ^!ˆ# jGRcĞ6Ó,Ìì1Ĝ™,“U ĜfÁF,Ċ*  Ĉޚ5FúCfÚħ6Ĝ(—:´gt*H²(gĥĊpƒpĞ0XédŠUlÁòWĴlèúċ€Ĥn‘ĜU…×@žµkË£(E‹`ÊB•u˜vÙ+á&ĜSĥhxzXd; QtŸX³ +Ól6•U˜.³lœfk6OlIħ‹%hµpjÑ`!8’ƒE‘dеjq,°‰ (¸+€joXÈXx;Rc°Ò{Ğ0ĉtiTĴ1"•ô;Öş$%ˆÍEOH¤Ž.äàÒ ÂŒ:Va:ÌQEħ +ÓaĉYħ +Óáˆy5gœ˜’8µĊ²uY$Á.DìkƒÀ § l˘ž‘à‘Ô,ş½Ġ,Ž ”á(kS°Œ­âÂ$‚Ä#Úc*fRĴÂ`Ó||v801Z˜ Ħ˘È"§xdqhĈ³Â*LĊt(Y…ÁbT +ñÄĝtĝ%Poá 1İÁÁ‘´‚ФġWòwÏbMpá³Ö_‡!›³*şpmÁ–•6 ƒE"Ğ0â²+VajNĤĴ¨5œJ°+v¨Yc°I%VĴÂ`Ħ ™r² +ƒE’´ĴMUboSèyX;´Ş ÓÈbs¤Ĉ`Q¨ZTcĤ‚³˘’U˜İà6qĴu)²WëƒçÒÀ .Œ¤ĈP‹Ú‚ZÇ* };Va²5ë0ó0œQÖ:Œ,u*z8‡npp$5vĴux/ktĴ£Š‡Yž*Xğ‘µö>ƒc%-@vjqf#ґÔ,ö62ìX…ŽìfÇ*L‡yê(Y…‘aœÊZ³8öĈRp‡Z ;H‡9ë9Rc°(í@³ +ƒÍ9+Y…áĉŸTħÒŝ#œò‚'tI=ÇV µò$I™ŠU˜y`ŝkâÓ6bž@‘ QŒTï1c-(êXžH|ùÀ"•›­”T‚ĜèÈŻR"”ٝˆoچrtˆqÂ)B“|ÈeßGKk&"{J„KĠô2Ž'v˜8Ĵ Z÷ž1Ìë’ +nù.ĥFQ˙Šútwòñ ê"4w|›Írs·”×ħı[ĵÇıŝî÷×oiÛ'óŜ|*?žÚf·YNŸ@Ÿ žÌÊC!ġÄ^=÷ÏeoŝĜ•Ğúħ:Sš‹f]ÖsŜlúĥY­ŞÖ4Ó?WfSġ/MûŸoۃ˙SƒĦ×俚³lÄĜ=v}Ù×°ñXo–Ĥî;pâÁbôÀcòuˆŝdŬ?WSwĈÍĊ9Bİ–ĠÒ£öĞPo çċĈÌËġCi*dŽK²Ûŝ5;S÷SŻ›.sişŞ7_6?]œ{4ż +Èß+oĞíŞ^”}%IêÖÛ²ë^–X•Uċ1óFpkîOÓĵoÚzódŬ~יߺŞŭxU.žëMeÎ qoêÍcÓm% üÙog7ĉ˘nĞä˙<˘ê’qŜìÚmÓUokÑ+míMÖ%·Är·`ı£Éżëĉğíĥiûji£œWíÏŞíŽÑy ͋çj]"sKs[­$“Ŭs½5}#KzûċAäĦŝ5¤ŭ‹ŝÊDxĴŸvnqÍKŬ?KHo+ž&N v½­6RhbDz[ítŭpvyW/ż­pÚpê{yDDÚż˘o;³.7ċSµ6ŭÛÚ§îĉ^ŬójÜöŠîŽ}ĉ˙Xµ™W­dµÛV‹ş\Áïoë‡]vŒ h´™£êħÚùüĞ\oWÊáò‹ùŒ­ó…6ʉ•cr„ƒ}ú˜üµRÎÁófÍL{|.¤ż’/×Ûĥù‰íĝ6/›zäbjwşN +ù`c_˙ĴĞÓ<ŽşßVİĞâP Ú{ĜÙò7žNĠú;ÒMÛ<Ĵ޵iĞYíŽëp¸œx×et³\´Mיn÷€³LŻÒy¨‘ƒV;ĤÖpB1óê•9ÌĞgÈi{ù}޳—ú˜•ó÷ +ȕ:s}ûïŻ·×żŬ£˙Pż½žêż¸:ğü~Œr×ĝÒ´ ĤD6ÏŒ<œ +×e×—§¸*(ĠP:L€Çë> 7˜iʇf׳JÊċ›rıDĦw•§§›XžĉÎuŸĞŬŞŻÙäê ²X.|§è@È8ı….NC›4wŬΧuRxméġ]r[ĥu×lŽˆoĦĵŠ·Ğfñ£ä•;xċ×3ôĊib÷íUçŸŜĝŭùVŭĴV‘9èÖkmŝ&x½ZšwċÊ46Îwĝ"—“fYm1Šb@ö\¸^ݰßÊÄ(o5{R9ġÙßfoĞrişúżGLĥĝó‹w9Ê_ĉ׺>b`É Cß6ò1kz ‹=—-ÚJ³ôŭ45ŝŽġ­y2+–Ç1ŝĝ›Ó}½ĴÌ +W•£Vê@#’j˗cÜ9rî1VĉX=ŝ#î ¤—ġ‘÷ôM_Uk\Òpl·GVŜàM3áşê|…7çĞÚ?×}ü2Ŝ›X0żÊ1ßuÌÏ> 3żÚˆĞĝbÇépĵ;|ñŻ|wWĵcY?{èúĥ\Há'ĝ†Ù,ÁĞ)û|wòŸ“˙úgĦÚendstream +endobj +1034 0 obj<>/XObject<<>>>>/Annots 452 0 R>>endobj +1035 0 obj<>stream +x•—ÛnÛF†ïġsi1%—§ĞBNšÀI$47Ħ)ZV*‘)IÙÍÛ÷Ÿ]Š;t½ƒŠ?ŝœÙٙÙ˙^( +ñOQQœRuX„Aˆ'ü£ĝçëûE y„t < Òö´Z<ŠÂ ˘5Ì˘ ‡aŠRl( 5œ;Ñ&†ÂˆĈİ3˘C* çé$ޘQ§†aœà? l(ŽĈĵȚ@8 Ó b’spqD ûĥÀ†*Œ8ĊÄ99*Jx|CF UkĥuŞ`¨I8· µH‚LÚ +>PŸ(ÑäY2TÍl%CE ‘ +g+jÁEŞ`du“3’ÌùW3[ÉĴ³ùJ†ŠFA+MQI†ŠžQI>³™gÉP£x³d¨é<ĉħèîáħ†D}OŞ­§SOġuŞ­ïÉÖÖÓİ‚§úNêXßÑvĴ§Sm½Oj’p7;U0çİd¨Ĝ^䠒9Ċ|Uĥ‚‘DeR<eŽċ$á›L!ÂԐ™ ŸÙ‰ĉE7Ŝ ,°†Tbr£Ĥ“Ó›Ĥ-¸ÓğF̳áë†s<6jÄW$¨1o5‰!c+*GäÉİ‚ĦĤaœj n;f XO†„ç“j=9U0<#ˆÊİf +!‡[_#ìW ’˜p OšÉFc¸ì[bC+f|7ĊÏNm€5ˆFñfíDkhÎ`†È=ĦC6äi8ÑêÜäCD¤ Œ#ž†8´­!î†<òUWbKÉ<&OH¨‚Ù17PCE.1QçY0ԂOR§Ú pĝrrħϤ8Ġ8&Ŝ+´âsYcu‡ÄÏğšn—ëĊëw)˘¤ġ-ßċÓ<£ġĈ\ċCZWgH5Éùúû+~·3ZíÛú£Ŭîš~ŝŠùÀ+!]`iDpi<^Ooöğşh86ğfû"_™××§ŸôµîûÁÔĉéÂòûıZE4ĈġáêÛúêé°9SŜ°Ŝ-żxú ż“HxU6ô‘ŞĥıŬm¨âĠêuDßÊî½i›Ĥj;ñPSÙSI•Í-´Uy¸){z:²b¸‘w>χÓġYÓ§Ï_ِàñ>cŽ1 +ŝĦ_'öĈ³D*†ğżeó“Zŝ“v}Ĵ{z¸Ğ;üġ‹÷u×ïÚĉú/ħŻ72E/LŒö‰ٴ(ÑĥèG·kD²évÏš}[nèĦíŝBĞ›ù›ÚúôžÑ/İíz6÷ÍJËŞŞûŜ֙úöĜU5úeSÓŭ¤7ž.ŭĴ sÔ~ŝšù²7Ëŝc3tíĉX Èáü§Ö=îe^OˆċìRÏ}´gxî]^żcĈé>Ô7/ Ó¨pXŬ{–ñĵF…7¸Żġĥ¸ĝ—Ç­Ç×lĊ33ŭµZÏÔâ}ŬÔ]ı§]sÛŝşŠÀżßÖ7Ç-íëûzÜeŠÀż”0ğşkTŬum÷"gŝÓj9 euÇyGŻ•Ô>l°B[^-/™²˙üú\Ġ]íqòú]>ž° +ßNa ‹Ù³ĠòÓċ’>wíwŜµßĥĠñ€S°<­Ğ wñëè,œĈ›³ċM?te5pĴ7Ò<×8b!¤üä÷ġâËâ_ĈÏAĞendstream +endobj +1036 0 obj<>/XObject<<>>>>/Annots 455 0 R>>endobj +1037 0 obj<>stream +x­VMo6½ûWL·6bÚ²ìĜÎ-)şÛ=´‹n|鑖(‹µDŞ$݁ŝĝ!ċÄIÓmŠ †-~̛7oŜèQFSüe´œQ~EE;šŠ)žGĈ_>Žfë…Èh1_‹µ”ŻŻD>üjèŽ÷Ó"_‹9ÍWK|Ÿáß)ŞâB–Ïq腅|&ž?żŬŒ&Ö4›ÒĤĤĞċŠ6e„‚'ĊĊµì‚r€E?ÙKŸŒ²iHš’6ÊşğùùöĉûÍïñžl™îG ›ò"8zTGÓkú˘dIĦVÔJCÜ)ŸÎÍ)ˆs³%0âÜĉ|•Ú§·}P%t¨SP*Ĵ Rjld+ê½Şú†´İ,ÂȀ½@ZĞĤcä;èh{~‡‹}Şĝ7C˜Ò8ËA—Öĵ´7ÈĥN;Fŭ€˜ñ +îHŜĥ*ÔÚì¨Ñ{uRARıB}pwi%VÖ"_€i,gĞŠĈ|µo·XџÔZ§ž’2ŽĈ³áĥψïğw…ŠIsĥ•A[C"èĴ6Ì2Ŝ#Ûw²ŬJ:¨-yÔeLĝİà܎.¨ĦğžL‡ƒ|BX·{ş7*{Y1畎ifb6T:ğĤÛ^7%SĠĠF:ŭZħ-•\1í/İÒ˘r=8ĈÑÎٝ“mbd10xAb‚ÒWz×?'ëĊAŽSE°î(hƒëÉ×ĥoJ’}°LY%YFwI!ñvY&Žl§Î )ôAµ'Q-ïġĤ÷½lÈ(Uz†`˘ĜZy„ +}Íċ@R)‘DâĴ ßĤĠ“Pò…XJ9˗ĈctÚzjœqÚû ’D"BzèÀà;UhÀ³ ĊGl„§ŒÜ6ŠÙ`ġU=gĝaĥr˙\ĵπĊ†,QAĊ2miúl +E:ĵGúÒöèäX›ĥÓ ä̝ˀÑo@yDûz>7ì{2zş•ËŬKo*Ż: q( ŝ§“èèÑEz˙6šOa@àëıÀ§˙üġ0żĜXQ(MGWVÔwhŜhÜDŬĴîµí=Ŭ+çÙŻàÙİɸş­ŜĠ!z)7KtàhâìM;bÓc,gÊ;NJJžżU˜‡Fĥ§y!éÀï ñ  Ç~ĴŬF)‹=ċ‹ŝ’Î[(DÒʅ×éHĞ4Ĥ*ûà)Y†Ù'a7î›t‹Î›Î;ğĉF&žÏşíĴ Ò ġ1}ŸFu§9{RŞm’ÙtüŠ€2ó÷³Ŝ;+ž‹eç֎U·k(ĉ}ħ?^âaŒÓ` ğ:F“…YN‹“fcèɏ‡`@f¸ŒĤ“Œ9ÜkĵÄıŽâm“ĞÇ >ÏÓ˙7oAóĠTĴVó4ᗠÇÍè×Ñ_Vì÷#endstream +endobj +1038 0 obj<>/XObject<<>>>>>>endobj +1039 0 obj<>stream +x•V]oÛ6}ÏŻ¸ëK]Ĵ‘?8övi MşĈĊ4@I”ÄF"’JêżsIivÔ´À8v,ò~žsî½;˜ÒżS:žÑ|IYs0I&4?:JV´Xó /+İfG‹döԃ““o/ĵ^Œßžô˜Ö|,WSZçû“ ­³Ñ4Y$tċċ†ĉ§ôĈJá%ùJ’kRʌ.TÙZá•ÑT¨Z&/Ö_`nASXas‡³d ƒ£u%ŸÀˉfSË'.;R:Ĝ–_GMseeĉŬösċĵUiË>:Ǚ²”ÎÓÖ´¨€ÈÙBaÀùtŽ:ÀyżE[×[r&̄&'%Uĉ!x46ç¨4äM)a²ż™W™Dp˜Ónpq#JTÚXu½;$Ï)/“E—29ĊÉ"ĵÖqOdMĤ­sJQÓÀ³Ò%Ġê–Ŭ)wë9Ħ“œ‹h›şŸÏemRQ˙Ŭ'T*Ğş2 ¤h €Ñġ’tKBo–ô |…Ï$²Ì´!D´8iï}‰ +sé$Ħyĝ£,ĠĤDµh$ۇÚaâYHġ zÈVép8Ħ›Ñ… @5`¤wġôž^‰&¤PaRĦòúċŸWçï˙Ġü2pr酪Ŭ͋bŝsÊߏßu4v„ÒΣ>ñYOħÊjûç$(`ŽÀĠ„ı:ĵK× Ž–Ä1”E‚Ğ@'ëd] Aŭž#q-x̄۴ħ(½‡ =SAtI›Z Ş|ÖmdĤ +G‘ĉƒ Ù04 òfÄĵËe!Ú9˘[}5·|nâ\V„ ÓğÖÙqm2QP*ĈµJÇ'7/†i…ıĈ Kaı‰ +'Rƒ|ÌZĞ<´DzÈı dÇrëx/œ +Ĉ#„…Ó0YÛH=Äħ‹óżŝı:{óéùúš1ÓéèN–çñ§ÉQ§Ç‹SZwÂg;]‰ċ<ñxH%|Äş^Ïŭsn³1Ö )€™ÛÄCĴ÷˘V9çi +îŸĥïù –1†HFNıbjJ+hvħûÒĥÚ :yù;ğ×ÜÍí‚ލȁžŽİ. +¸ï–êF“´–ğ'ƒPğ/ì³w‚?Ħyl€Ípo? Œ5Ì-RLĴT +èĞ5è‚Î˙¨KËKG§˜žÖĤ`½IóàOÒíMËk4˘i‘wV>à>Eß]ïĊ– ÙCâ…5]×wúĦ´ôo£„~3ú9rĈl…ŭÜPj|ġEEˍáĦÙy‚hÁǓ:ċ­šƒ41ôòKÌSÌm,ď}ÉÉ1BĠövÙâíF×#”>3MpW#Rĥġ„VHŸm–ıxÜ”k¸DâwZŜO£}'ƒxş%#Ħ5k(Ï •µµyY.‚~}ĦĜŒbóÀ¨Äî3ïeË‚76ÊĦ&HĦyI Ŭ“Ç RäBġĴ`Àef°ħ4ĤE~Qà=äĉßa“‹ƒ"1²‡Çú¨›ĠÌlwh‹ÔÌìb0×WS‚sää6(Á œVşz\­ÊÊcÉz}תì˙ œ€ĞÒÊ+ÖnĦ€;^`vÜĊ6Ġ9V]Ŝ°%Ӟ½bHßCy /_ż¸\ŸŭBk¤V^f˜ĝAÇPó\RASı³tq~ĊhÄÛρ‡ŭ~ğ'uèèĈuŻşİ>]bï_Íi‰÷°ó]½z˙ú}°ĉ V'p;Nš0ı¸r‡ŭ…6{Îóoö‹öËĠ{=îŻĜêÙúàƒ4ߐendstream +endobj +1040 0 obj<>/XObject<<>>>>>>endobj +1041 0 obj<>stream +xWkS7ŭÎŻ¸uĤxŭÀ72IZfBÁm&3™éÈğ2VĜ•ĥ’żïıÒ +?0%)aû8÷ÜsŻ˙ÙPß:Òјòjݟġix2ʆ4šœ{üZIó½·Ó½Ŝ‡ 4ÊxrBӂpĵß§iŜùŬ˜;ž–Ĥħôfú ‡a7îô¤Ï{NÚ{•KŸ%CŒ>/pM9*ä\iY°‘ÚXOƒ£ÓžÏëŒ.ĉ¤_(}ğ~Ì/¤&Qà<•¸‡—;ÉĥûÔ!üiÑÁwŭ žïÇوŸjégʸs:ùڌ –ÒY§*U +[.in,NŸôš˘ĉ\É-LS´÷’„&ݽ]†X^wĴ]²ô˘ßKùèIê?pEîÈr£ç›V:à ˙`DŽœİd’Ñ˘5|útëÚŽ"<´ġµ—óVŠŠPTĉA İ4~RUcDʽeĉm£ +™µ˙L$ğü4}F7¨QëƒD œ‹edS‹­‡Òµ`ŭ °v\LVHërcċ×7Eċ;û‹iĥ˘Ĵöݘ“ìúd×ñ0ñ铐7T‰ÀJYĝì”óÈy7JŸ4ë%jŠC• ­X‰%HĈED”öÒ΄ç€Lí•áÚ0CËQWË\͗À‹+î+]İ5)á^ĉ•pwL  r+Ó]7:ĉsœDÔœ›RŬnç)\ìÌPaôϞîGôÀJÈuœY#Š\}è"+N˙ŒŜ‡äd-@n‚mO‘/HħĦô„"‡m4yUÉCš5žĉB•Ž Ë½odDÉ< †ç^:Ï2ÌÎv›ġĊ Äĵ’ÓL…)LíŞîïï>żĵ¸üïè#—6öâ‚êŠ<—5B·§cŞ‚“ +q3dıİ@ˆ"ŬêżHğŒĤ˜ŒÜ˜•hĴ•ĵs…˜Qf"=)ûœrQlímS²îÙżşî +rıUµ? Gq0°ċ9žĦı5UĴf*u'JÊV‰·aĵF`ĝ{R-íBԎq›; ˜ô۟WaĉrüaĴ) £eÉ£SPAëî=7“iÇÎ*ΝLäaÍSn ŽŜݲŒRŽyeÙrŭ”×ĵrtq4 ²q6ÌèĈ˚Žg—`‚^ŬË3 +â!ԅ +!+£7ƒħ!ï/)ú?•X¤µ~k½ˆ9´:›ê¸k˜‚Ĵèİ„+ĉ 6,-m=’Ż-ĝ†mF×iS}(˙´gì"áùÂl}y2wß™ĉ˜~än˜ıíŬġµiì‚Ú,ÑsJ>ÊĵñbVJzÀ8‰Ù“/*hĈ/ħÏààbµ;ÛP( ƒu¨Ĝĥ¤ÏPmc aq—íR6ϳY–µ8@›ÀWäGÄ?şĠ˘äĦÂÒP[µpiċ]ċğĞCŬ³džKz ĈZqeÀ‚̽•fŜÍ_×#@ıÚJs„aFFÌRĈŭ{ağĥsĵÑbiKSU—Òġܽu²Mŭ ‘´k·Â…ÔCÑox˙ ÀÓLGËíI;'c|ʘáóÄ îk7çߞӕ5ß0xèÉƒ¤˘ıcwӅîÉ<ŠÎ˙ƒÑ|ŸŒ +0rÊy½Ÿîŭħ÷/Xlä¤endstream +endobj +1042 0 obj<>/XObject<<>>>>>>endobj +1043 0 obj<>stream +x­VïOFŭÎ_1=µjˆ'!?ĝŠ+G…t@ŻI…ŞĤ6öĈY°wsŜ5!˙}ßìځ=µ™ĴwĉÍÌ{3óù(Ĥ.~cġ¨?¤¤8êF]Ž'рž{ĝ+%-ŭÁi/ŽĈoôOQףּ¸?y}ŭì¨s9ĦxD³%ĵ‡§xg–|wğ4KZq4Šhê䚆g4+·”+ë”ÎÈ­$ٕ(%ñ(T.ı$£ikŞ’Ĵ,ey<ğ‡uÄëíŜ(ÂzëÛp×'“¨ +ç8°Ċ"ɕԎÚ)ĵÔŻ_jħá•ħN‹B†£A}ÔöÚ½!R#ż› +ÈL•§”IG ‘<¸É,˙ sDWKށR£żw&k +éV´²¤tbÊR&.ß"LW­#ÓvÜGŜáŝĈ8‰{‚/}jRJ„&‘[C I••)9ƒë’6üb“GTw/—îKú(ôµ"cHŽyËVɊ„=}·ĵËĉÇ ˘&!uDÉÊ뽗”ËG™@R•ÊmC˜u!ĥ´T×T Î}¤u¨3­…µSĤˆbi€V9Ú¨<ÉĜ8!.Ö§ËÓĤ ´Ğö~9[@Ħá*×MIİt —4#äDâëÄ;G™lĵIâF!ߕÛğ=À%Ò´Ħ°Y;ÖĥûŽ+ÂvSÀ +ZF4úµA°Ĥ|ÀnEÚèvHOàş‡(žĊÔî!ĦÔZC£ ĦÄh 1oŒŬVZ=Ġġ †ŝnÂŬh¨ÓAÒvşéFĞ’żlğV‰ÈAp,öšŞ½4ŽĥÎ÷X§,8~fŬ‚ê”á*mìË4ĜcDŭŬÎ(—àˆ·hAŸlñ……f•ú½ç•x”`( *ŭ"À&Ŭ܃"hyÜRċÌ´@N‹¸ 1Ş0î+Äèí úc…–a˙dyz)Ĵ5N^ ü‚ğC _B òIktÙà˜2>µàèZUÄÄġr“!<_.K„Ë™rÛµ<{…¨i_ѝ;ïvƒ†öu/~Ĥŝ¤Ĥŝĝġ—) ӋÛé q§ғ§6ˆġşA=ĝòfĉÏz't;íôNHş$Š˘=ı4„á›ġ˜áZĤÒ^hݲh"2ûrà?ÍçwW7·wÓùü‡W3£Ĉq4݇”ĈPAġ)=£9~‚ŝ9ÓáùµşÂŬŬ|bXëRyX˙+ |íâ70­É÷dß°°}ì+÷Ĝ1%rùĈ(>4)sı(…“'[ z˘+ZTĉÊڔî›}ŝ |Ï܉ğŬñ ÂC#֙ ?–ï‡ ߨ;ŜF³ö›6WPĦë”Üç•~ w›•ĦMĉ5T²FHc•ÂŜqotEĥÊ2Œ?/ŸC›wĦ‰L@_óL×|mĉż?™“ÁȚC+-°NlôĦĤÑĜüD…ÊVù>/XObject<<>>>>>>endobj +1045 0 obj<>stream +x…V]sÚ8}ÏŻ¸“—Òp1!@:³ä£;̤”-ɋl pcKԒ!üû=W²“àĤÓɄ/KşGçœ{¤Ÿg!ġñÒx@#Jг~§Ñà"Òp2ĈçŝKIk÷àrt‰Żo<NúÁà­á8|{ĈċU0iO¸ŽÎ>|RR´ŞÑdLQJ@ÔïS”tşÌÓC–Ê.M…8Ĉ +İ•$™I[ah›Y:êŞ¤]İ\$Têè½,ŒĤÌô]W”è*OIäXĞÂdğ•´Z­ŜG?ÎúÔ /°Ÿ(í˜Ìâ‘&“EħH)3Ĥ’†ôÚÍ0˘ˆE/Í6ÒĜ ž;=Ì]mb,´ÎžÜàÒâŝnşĵ## €xTíRaħ.j1’T'U!•6ӊ:şÄ°ŞL$`§òá=3`·Âòàd%Ÿ,ídi0ñċ9Ê£h‘Âd²t(?|ş˘ ™ĉŜEèñ†AĜ€n3ħQÚdjC O˘áŻé XšÎlíö·{ŞŒyî×;Ċv˜ƒ °jòkÀlNŜÎílú÷üËrĥ ì“=]żX(üĉÀ3#ġ’€?h™è¤Ùíï@_)•kQċ––ĴĞoHPœ ġĦŭì€˘mf Pxİ R Ċú sŠÊXo ÇÀÉ-Qf·Ġl•Ëé ÔóŜ¤´êÔħ}œˆJÊ´ÎtĵSÒĈ™6;2E$Z­[uġŽ ´ÙÁâĈœ.è óа2^¤µ,ü†³L˘ïžL‹4@Á›é3Wĉ˘\t³ĠŜQ\ ²:Ñ9Ŭ˽ÌOµ‡½·" \~fŬŭ`îîB(¨—‰\&Ö`ĠŞ,Ñ$`Ó+iŞŬN—Öe—° Ên|½ëş×Ċŭ·e—î§óÏÓyĜmñ临˜Gağ•]^ Ŝ†¤w^!ž²˘*^‚Şšċk[ŝµF/ŬԁÇsÉ~CÛ×Ĉñ@á¸.g!~iô™S %i/?t™Ù#§'—†)­#iĤHçİ, ah` —cž;v2Y‰f^ëÊg†’‰4Fĝ^ä˜d>™I7ϊÌg)LıĠ-r‘Üş…6ĴV,‘ +HE™ÂW‘ +c0×ʳG‰nħgóżî7 +U#G˘U~l•-e!2ĊnéŬ&6’‰ivÀe]öşË`›¤Âa‡ċ\­W¨+,÷œÌ' kì„1h‹ÔeÌĞÂéŽuÓvaÉËĝíûêBié ëâ€Âú>nž+€,äÎT)öÒÚ#@]6AÂûdÂêHa´çÍ" ö×9ù8`{ş ğrmŻG˜Éĝ²Öj&Ż1;ó—k ĝX!E8aìĥ.‘gèPƒ#Ln>rJ%î‡v˙­ê`GL ]]>ĵo#[JL7}ôÁ `U•È! äe(³•J+²ü˙ϵ•)ziÔ]™!†V²bÙ9<ıêff}RúĎnf ‚°LtÓĥì-‘ĵöl§€>Ħ6Yĉ\rÛ͑é²ÊÚËÂŒ&Ĉ”GWïmÔZµêş:ĉhĴ,–ÑĜÏU!bô˜Ğ#ú÷w‚a€ÈOLÍşÔ}›Ïŝc£ şqjÒâ†KżdÚKŠ7œƒŒpóˆ=ô $W&°4íĊp?Nn·ÒÂáĴpyÚ"6œ'G!ŽĦnj´7ŜĜŒqSŠÂßĝ0PQsÖ÷ǧIÊlgé Îó€J$ƒĥ<Ĵw݇<[­Uú7Ĉ‹8¸iÜ}Sòûò_2öĝuqGLŞŬµ"ÙzX|"#>/XObject<<>>>>>>endobj +1047 0 obj<>stream +xmVmoÓHŝŜ_1ʗ+RëKҒô>ĦEB-G!¤êN{M–ÚğfwMÈżç™Ùu B¨icÏËó23_f4Ċż-çtĥ ²=šSš?Ÿs:żXògü÷šjùbĥĵ(/VGú‹fç´Şkq!ÎtJĞòxVÌĤĊó‚Ŝ¸òÑĜÏÏV_ĝ9ÍféñÓùßYMÊkEۍ)7\Ğ£iu Rġ?˘wŭşÑd5)PÁ‘Ĥt:_œxµÑ¨1(nĊ]‡·\=<Z­+ŠŽÖš:íkç[üŜ‘˘û·W´˙Ĥ}AEµñ!rş‰×óĠh’ÓÎÎÒĤzUÓ¸m@˜²1ÚFNÁeâ^ÙϚ Yï"*2sĥHè”* ­8WDâIíŽZWé0ÁT”žB§KS]ŭ’Ħ”y ÌûŸêG“­²Ñ”z[iOĴùÎŻ˘óUĤ#:¨½kAüaëù…ĈVhĥ µĈY†yTĠ½j× + ` Íi£ú0*­Z ŝ^—66Çϐµ„]ˆşñM›ĥktË%uíùQQ£Ìk·<5’jIĵ èĠ½–Ê’u‘eP÷M³#´‰^#U=*sÀh¨İT@ƒ™&İ$‰‚‰ŞUGÙ]”Ā„˘Ô|ÖË!‹£ï8çüż³99Ÿ‹óŞ4˜ĴàrV°ÊÂşğ—bFy·ì ĵ€†BßuÎÇ ²Ky@ĝhV=}3 Á°½PG†‚c€žP³9¤fŻżö:Œ[Vk +QYc ƒŭˆR‡„w$_!°o ˜ˆ;mb£`”dŻ„0Òjf‘D˘!NŽ×1Q˘ófÇ`Ĵ ×5ݐĴHÏB(ÇÈg Ŭ 8ÖAŞħĝÄ&żOO‘Jml›BȲ£Ü9€ĝ1y  K„v녂Ÿ„Xĉ]ÒàŜŞŬ/ Âqe(‡ÂĈġMEċFc@ÁĦ9tv++ÇÂê@~ë t*^„Ó )03^ìá_†|kâ†{ġƒ‚Ĵ½uŝ1cÀîû#Sr´x"Âĵġ:¤!èğ²`*°$*UMppQëà?Ġ 4/ĞĦŞ PŻ +£äÙïiv²Br߁ 6Ĝ rSċ0Ù­*Èäeĵıŭô˙íŬíÍ ÉÇ÷7—×ùÇ÷ŻW7ĵŬä‹Ë7o—…hIĴ\ċhsmó4JTÀéĠË+1İürċÈÏ^£§ĜKrÊş(è-dŞ>àĜ³ +fz—ƒË.K‡Ë°"ë5½5Ĵċw/Ӕ`Ór‘’Y…èxĵöt¸A3=D€ğ °eFĊ 7ċ½N÷Qh×Nšw&u +w$kĞLrĞù’ž-p­_œÑó³)NtĤ÷—oŻ.éw_ĝ°ıveÏG”(ˆ[>^8]Îq§WżğÓϗçĊrq£žżŸók7Ğ£Ž~.{;endstream +endobj +1048 0 obj<>/XObject<<>>>>>>endobj +1049 0 obj<>stream +x•VMsÛ6½ûWìĝÒd&Ħ>kٙÉAħċD3ĥäšLÓLÓD‚j`Šŝ}ßdê°éĦc{Ĉûñöí[üu2Ħ1~&´˜ÒìŒòúdœŒi~q‘œÓü|˙§ĝ³’Êp0™Ïŝ}.;]_tLY _g‹sÊ +‚Ÿ1É_\îE…#şRâA§ôMkɉz'ÈIû$íËìÏàf²ˆn^ÏĉÉŽ^L“IBkí­)ÚÜ+££ċœ&“ÎrşHÎĜ2Û+GŞ$ċF{Ħ´#A•ržLI^:ï8,ċBS#milMŜ“¨T!ĵŒ)ÏRBXO˘r—Ğ*^>ì…'ż—û(Ğ#ç2ĤדYÌ5­“!,kv•Ĵ Iİ’”§R(xúHF÷V0w^6ħ‚M#œ“0Ş*Ž‚Ó˜7ŝ×ìĜ­ĜUG:û()”Jˤûnz–̘ϨÚíM[TZŜ܄ +‚çW¤tĝdl&Áꠑ íĊb[% Ĉ(V–m… ùŜÎjÂLàl—£Ñ8Gŭƒ„rшŞ”W¨ V%;í˘Ja+Ġ{Ĥ D¸_Nê‚j àHր´92…NGa¤Ó?ù€Ċ),Šp#$Ż 7Ue\Sƒ fĝrY´ tÀùv@ñġšÓÚĈ*Ç—€Eż¸Š[6&rfú?çm}š€ñKçÚşaÖ:3şŝm×:´›9 +ÖÄ~Ż ĝ§.ĝĊτŭ'ĝċĊ'_Œ2ÎQÓ ._^ɕĊ í¸€*ŞU%l¨˜1) (‹ZrpT{7tñ=^ÜİGmĦ‹Z w¸ Ί'p .í1FÌü@WïèTɸĉŭîœL4u]75úş9Mè3"²˜‰˘ŝáËî"‹íŽ|VĈQŸ ġħß°Ñġ˜.z)GĊĝŝ裎ĦùP´ĥıĊoAÒş1VĜc[GCËF€oi/#+EŭƒTĵ£üÁTD)˙°JW›)-ÓôíŠ@òt½ŬB‚Üoïéf™÷ÛkÊ>Ĵ(]Ŝ[Rúq­J·°żÜŜŜ.7WiŸ@'Ñé‡í§ ]­Żh³ÍhġÛ:Íh½ĦĠòórßGéoġ +zWIÙkÀIá=@`AYi-YKçÄĝÂ<àYƒ¨³Ŝg‚S€‡eäy—D.’òĴí$Z4HıĠ%„XÀŒwU* 9Ë÷2üĉ‰Öw¨g3U²„ÓÜXdäqßIOm“|xC·$E9ÄIŸ‚—§ÀÒ¸W£0\xˆ7wWË  F~ĊÎË{Ë&J:ŒX_ƒ°]mÒî @"ρb˜ÀaMlÀ³rz”WĵÂHŞèy³G9m…ô1§X_™†Ú`˜2¸Ûñ‚8 Çĵò:`~ƒĈ²67φŜï)ÇûġŸÁ'ż9™`+ûèġŒù63~Ú°M˘Ġwہm°¸ÎBq˙ ĉ ıö*ßG&àĞnġ…J_ħj†‹<²ĵz 'VhÏFt€^`-woHÓN²ĝ}UއÖFÍ O.€T +À{ ]Ÿ˙ó>›_DQù/Áùbž,ÎÎ@˜Ì8ħUvòËÉߞgdÛendstream +endobj +1050 0 obj<>/XObject<<>>>>>>endobj +1051 0 obj<>stream +x½WÁNH½ó%_–‘ˆCB”0#Íf…Ä2ì­4—ĥŬ&=ĜŬ™n›$żŻŞm†Ù!‚ŬîzŻŜĞò݃ 3ĦĊ”Nĉ”×Çé1ÍótJ³ÓOñë5•rcĥ˜ĤóáóċÁĝëŒ&Z–ˆ5?]² Ä9>Ĥe~xŭ‰~¸ÖS¨³4wĥ¤ÒTšjµ£LSċrĠ肌ŭD–? ç‘X‡cŬäñRŝùwWĥÁ9R5ŞÎÔ¸2Y|ò#Mfñ`£“IŠŻĊá4=I§)-uhhú:ŝ1Ĥ|üï­f)wu­lAÉÚĜ:żúóîòû?—ß*½ĞeĊí½,8ğ¸şĵYîŬn­ÙRĉĥ)]•´s-Îŝуnxgì7ÁaxGEOŞ2Àkgƒĉà–Ÿ´ĵ¸_ŬRpe³Q ²ÁÙĵ×ySí€HhTUé"í‚Nç1UT#[oLU‘Ġğq„'|CŠ’ÂZ#›u“ĈĜÂmÈĊä‘z@ÁÙcwù DİuêASP;*Y9€Ë‡,]k‹„Ĝ7µİ”ßËëËÍŬKRXÁ|ùÉ+$ĉ9Àé%렛v \díB0ÊŞ;ħ”òiVmˆwÒĥñF#4vbjƒöOÚ yyep÷ˆ2,½"B[ëŽĴÁî+ġÄE!Àż‰èu­ ‚ş’·`QdaˆÜ€Ya•×*êÍj'SmV@L™Š32R/žJü,c[Ż7`ûş”Ġ…T÷ÈġşR[>Âàĝ­€ ŞÀš‰,oœD14GÁ_-ŽŒïG´Ö~ց²a;‡Úx •ç`:VżêÒmfîŝmyc>lŽÊ×ôd” oÖċF5WŜƒWuz˙WżŝFŻ'^OâŞŜ~ŻWxMd•F×ûşíJûE–Œ]@‘T‹\”.TO BqI…T7Ì&SùĜW’Ŝ£ÒzaÀ÷c(Ċ‡ZdœĞ‚Ö(8•àŽHžQɰġޤŜ4ŞX*ütµ7€Vô"MÉQ”_ B۝H/‰ÖÒ˘äC‚Á˜oé=ùˆ%*W¸˜h(W¤Ċ2–)]Ĵtŝ8Ĝ{Óً§7OĥA’dĴ•Ż[£ëµóʤĊ8JÙ]fİ´A +HHöl܃s'Ĉɍê^‘“€ óä˘÷şD(À˙Úz…Ĥ:+z£à~ĊP guR|öôg˙%²œp7El|o օáî'-mñ™âj÷~|žİP@Nôk)gRbŜ~X¨Ŭa˘Ó½Ĵċüp²Ì¸0 +ïX·ñŻŻî–—7Ü$@:ħ˜˙§‘Jŝ³“‹ˆÀŠ™ˆ£1’½À­·žŻS{>$k$‚V(<Ñ:âú½8€8Ó\h­-áĥ¨Pġ²—A'y–RĤsžĊ×EV}Ñô=^t:Uµn i’à_”Ħúö5Ĝ¸Thĵ²Gki7’ „Ŝܐ&ÛÙN ´"³*¸Ž0C†=6sĜ‹ñŝƒtݰƒglIŒ$HÁîÉ@YĴDó êr- ­"oœ´½ ,„û3Ĥ#zÔÎèTžŽù³Ó£œ"Ŝ‡/ċi>ÙĥÎb‹ ,ĥÔÍÊä+ÉR&ğÈ-›JĦaÄp@ĝş.`é8k͓S€rvċ A$Ĉ@”Ğ`Ü?ĜRŽ;,`ê;S]IJköŸ8O”ğp:‹ƒu?qÚ`£¤Ïtv}ŬòPöz™xÖm·ÛtïwĵÛŭĉħ ÓNj*ú&€ç}Ĥħ™ìOÍ£éœ÷ğŠ-YepĊ#¸MttesN€NĴÑjU`ìšHQ´\2 ¨ĥq5Ú:†bìÚxeCĊjF÷Ĵŭ‰ğé³rn͍TĦÖ¨ü-`‡&Sĵà3[…iïĴ+ù|,żÈÍÂùżp—EŽ÷GÁò‹£›oK˜—Ž’÷ÈH|;½c c@•RżV U˙xNߪğĴ ‚dS™f'ŽÑéíy ‘öÑÍŜŬ%/,bn3ŜmÈU­´&\âËq!_o}.ԍżžvoI“9:=ĦùÇi|‘¸;ûëüŒn½û íÓ—c˜…p<>ï¨`´˜âí×ĦÙb–.ĉ§x—ŬɌş\ü}/”“Dendstream +endobj +1052 0 obj<>/XObject<<>>>>>>endobj +1053 0 obj<>stream +x…WÛNI}ç+jŭ‚³‚Á7l²o@È +izÁZi%$Ô3Óĥ;ôt;Ŭ=8ŝû=Ġ=d DQ$c{êrêœSċoG}êá_Ÿ&Žİ¨ŽzYÎÏ'وFĵàż“4ŒzlüÖƒ‹A6hp5;:û<˘~Ÿfs$_LhVôz4+ş…5FAY3zìŜÙ ˙ °”Ôɕ)I™ Ŭ\ғ5zÓĦ•p˘’x“J9W…’ĤĜz)Q +´VZ“ħ„ÖvMÁ)Xûaöġ¨G§ŭ! +•]mí*Ċ3‰²tÒû G§êğ,É[k?dÍCƒ1ÀC—H€„ˆ^UÖP!j/ÉÎ9<^„µ%éœuž”§xQf@¨yÉŻ„vR”rµ1ü7ĴĴ Ô~¤>¸É;öMÙ0e4“ÀaÄeÊtÀ2ìŜ×)"S™áë ,4ñ\ŻèôŠn˙|¸ı˙÷ĉžžž.ż\]>=u2úÏÖä—ĥÖ%-=*c@ĥ˜˜Q­ĥSc^şè†×ÖÔm|ŒJkŽcHC¨$2}7`Ħ ˜§µ,F^•Â@\ÌĊ(–ŞÈ¨P½.W[•Nڕ˙mÀ˜ä+gÁ]èѧ\€”kfqŞj…O¤ Q˜Żˆ +h3~kgkìsÓíH4dt;oU 7‰ƒêP'K˘€ı éY#OùIò…S+†l†ƒ†1S‹eĜÛ)ĝĠ½ŻĵO°ó†`ç?!X +˜B‚ô­óftyÈ{ş]^˙u{s7£ß_Gkĵ÷ òMŻŭ!#ğ€ӐO(}²ó°fí7POŻ12žÇŽ_-°wjŒ.ިƒ­`ˆş*–Â(_ÁéĜ@žhj,Ĵf&òûJ: +úŬÊ˘³ż;dW|`ñ2¸RÒaƒÖ`µ5Ĥĥa'œĞŸÈàôu²§T4Dƒo‹7ÀŒBàl›ÍbuÙEW‰4o 7“TÉk‘7VmS=ŜÄqIôK =‹ŻÂĜŜħĤ„íz“Ybħ^T"|\QZš¸[·Ô‚ŬrgmòuŬ̞ö{9‡şPwsœñıÒ&g´§ĉŽ>û|ѸŒ_Cü"ÀÂÇH<1hêìW\côÉġnaòLO·œNĝéPv_8£É(›Œ/páÓ~\I7³£Žŝ’Ċ&Fendstream +endobj +1054 0 obj<>/XObject<<>>>>>>endobj +1055 0 obj<>stream +xuWÛnÛ8}ÏW ,Öj9v\Û-şz]ĜĥÙĈğ‹yĦ%Êb#‘*)Ùñße§IÀħÈıœ9sfôóbJ—ĝÒrFW JʋËĝ’Ğ—ñœĉĞ%>Ïg%eŝÁĠlùĝÁğġĊäÓKšÎiÁÖbħŠW´N –./iŒfñUĵŒi-]MËgë8>§é´=>ž-qxô­ÑTç’S–B§íİáԈ\ıI +%uM“Éğë?o?~û÷·ÉúóÍİıQLßMC.7M‘²=MI•5eU˔2cIP%œÛ›ú³|˙’ĈÓĞxĈa„›“>šî(™Ì˙/’Ä4â'¨fğ…]kŸ7Z=Ĉ<^ĠyLי?ı¸Â'~BBgϜwÖ}Ü"ġ ĝzhQÊ×dŞZ€Ġz”:í‚ QĦ´ŒIn_= â™ßÉd£ĥNڝ´“şĴàò‡Éujdk`XĞʘ˜Z˘ëš”£Ê8§63ä*™¨ìpŠ(ŒŜĥys…­ċLH8¤(ÌŜ=)Ê}ÛYä}¤ż9™XY?WH_ PHÚÓĝ¸˜Ħî[‰B!Ĉ|{âôuLŝŬ?×(ĵı'Ñ–Ö‚WtNlüuv¤ŞÉ‰ƒ£Hé(TJZÖàß=1 +ûkİÏP3B "F$A?X+“ş8“uSjœ†ċ†ˆ£³88›…Ê€r½żH{²üê^Â^"P Ç4ö£ûǝF$; XDjöŜĈÑŬ™:ƒâyŝöÖÉ\-Ëğg´ijJUÊ@•/²kŞÊĜÚ7 ò-ñÇ=v^ıñ]?†0tŬ8‰á›ah–˘Gf’‹àGgjÛXáû¸)Pó>p*”B…zcŭ>OAz@#'ß7=tÈs†Ħà„¤àyۖQސ;YD][‚‚rµÍC]:WR›f›“?܅Ġ=ğ:FÖUÀ“°Š?"ßĊPsĉFŸcLïs™ÜsĠ½´°ÈT–ŸûüèĦsÊıw ġıHĜCĞ/BZ)êVo?ż-@ô÷2ÔùÄá‹ÖáxöâX:߃(–Ÿq™mfdYA:ċ bĉĜêäÓq¤ÊwiĠœ5ûˆd`ÈŞ [Ç;ı,*z,n-v˘6bNòW**íjÛ$L'w2P¤×7Qp÷xë8ߧшfs;9˜Ò,÷7 i–ġ”#ʵ´TiGpNZ/…ë#`Ş5~‹*'g6$BU ½›}ÛœObÄ!íŽ'É>BöfKIvc,)•WèmtMş˘ûŜ‡!>£“ûw >!LìNQòÉ{÷É4žÑdÍ×ĥ§\7­*‰”p\KäDĥÎ2iíĵ.Š µ#1ç2êĠˆ\U "§IP%×ĝöQАžû·˘Le:—tA éĝKÎm•ö1r*\,dŸ^µjüS‘}ş.¤°2`G iƒ“*[Ža1ñâóZljĵT•²Î§Í+tCVč)WŽ‹A-ÀUÇVpžÏP–t–ĠĈ†§ZŬ^œ’E< ‡Dú ›§EVF= -'wW7Ÿ>Ŝ\}ıNp¸İéBœ²¨2OˆÎQŒ|ċސŭNÜr#KŭˆâÑı*¤gQĝ9Ġ–iŜ=CÔ=u*ÜKʌDZ644’8ĝÊxN ŜĊjĊ˜¤"{G̵qËN:İtk ›Ö['dÚ§ÙċÇÀn$ù÷Ùñ)FTÙ2°áNJ02Óe)Ğ\ĉà-y ·µĜ £2m„'0Ġi16´ÌHDµP•(ŝ7pĥ0‹ÌÎ -%+Gs£Ë†˜-˘Ä›X F²,ŝ ÎRdKhŒĴ-D’eşĉà8Ù-‘%*]Ġ,İ6ól è3èÈâ.FB -ċŭoß1Ğ/ĵ8€'ïĦ‰%mHQ{AzMMêżÏ½ÓNüċB^%tÛ{ ŽŻytĊĠêi&j 1`8q}úÁ#³ÌGORN xê/@“.ĉ[×Öë:Ïà|ü쭍‰<'gÈfF­\W5tK KÔQ0Ô4Ôcœ}{׺.Xü9ÄċX™ÂÜ)BO×Ú<@ĜÎàV—[CŜžb6ÁîÁ -~EĥP;.@¨ -‚~”ŒzÙ+ÛCižİ—˘Ş½ĝcĉ6T‡7eSÈÁW/ĥbÓMú³x€7„ĵQ$ۑÀU1l,Q¨ü/t‰&µÖó`cˆÒ)ÌP ĠÖŽáak¸šŒÁ(s&¸;‹ m¨f$@ë8ޝ*”ÛôÈC÷Äçâ¸ĤĉˆJ”ÒÛ khw)ŬÉĊĠ-ùk´†²AηŻßœÓÛ³4¸‡ż'AÎ-‡i,á+?ŝšĜgÈáÙARĥġQ`•jDH— "d~u@2?‚˜­F˘+İ1;:Pú>ı‚?F$­xhĜ -mV˜Ò° ggB  ĝ­Ğ_ÎêàĦısX”°WGT6:Ĝabcˆó´ieáÇ—£sáìßxpôĵ8Ëx r6>ŜNBŝ§a£ñ†/èrĥ?¸òê²*ÒUÎá÷ħµF‘jì<ċĤS]ŠT2ıreَ‚Àç?,^Ëĵ´{í&“°áAéż´@A×ǟ1„ -8 <ħ^°tBE„§-ON<ìŻÀbçê ÷á:ÂĠ+Àl:Ĝ 6]ò`bçÛê -EĊÉCv‰Ĥ`ßİ8y˜JYĤ쑞–31˘où)‡eD…^‘ÎaÒžoUXÌx5Iœ#"Ĥrž‚Ñ%˙•dGĝëkÄö7žÜżâèËċ§ËĞğK:ğıışñù‚LŽ:çĵaÓ.ÇÊIÉhıÊò„‹à§âĦ0[V1Çœ·—İ(ş]l(á”pËvëô˙+mJïħ9VŞîöĉ÷MöÌà³,ñxr v{ĵà6gӞ¤ v -66SB›‡}V\-šÒkĤ]Ż9“5?äŒ.h^ĤU¸ÜĴ-݊ĈS&ùÀòRߍÖP`ĥK!ż°Fż/2?ħjú{­xqŽ&ÀJšRıÄúùkaöĝĞÇûZÀ³V;~à=u- Ï.ÉİÔ[<ßàSö‹é7{›ÜvCù^ŽĊE!öĞËJ‡=x1ì:Oޤ×8½ß³ÙŻĦ]'LpžĦˆĝАŒN]ݧŸ#"Ít%_ü[ÍcÂôYâÏìçt½€K a`­fû˙áí Ĥ6Ž{÷ĤÑŜ(áE÷0´óöĝóÉ1]ŭ7óSĠĜ烙2EvG“)nߝŽŭûçhœì'{ ŭƒ´ÊÂAÁ,Ċ`Ñüèŝtżymòx[˙wç? Cêóendstream -endobj -1004 0 obj -1802 -endobj -1005 0 obj<>>>/Annots 236 0 R>>endobj -1006 0 obj<>stream -xXMsÛ6½ûWìMJǢġ-+—Œ“8§ušĈJ3푐„˜T‚´Ĵß·IALÚi›Œ5˘ì.Ŝ}ğôŸ#â˙ˆcšÌ)É/^Ż.nWhHóëe4éġßÇĝ)$mxùêŬ’FSZmpp>›EsZ„!­’ŝhÍ#z8ÚRĉôÑd*QҒ)},ÌFeÒX}…)FŜĈ`ĵ€…ŝ}•ìÈl¨ÜIRzcŠ\”ÊhÒ2‘ÖŠâH!•ï3™K]~×'ó¤ô–>[Y´Ŝ`‹=ˆ|-Ĝñ£I4f‡İÉ•u.­È% ŝ.J‚w:ùb›ˆÊJr›nf½Ù/J§ĉ`éŠĤ@È[Œˆ~7ٝݲ”}z<30˘|úñb9FóáŸ9fóhQ?eôÀ(Û!o ħ-¤H]°‡‚ ½Ĝ˘µ‡ .'gçœĈHÒ$p>cuşŒ–ájŒĠ9‡ìçPçœ&y4 -VgĴŽ'Ñ,\ žħ:YœEĊ 0X'ĜŠ-Ġ°u‘ıkxÁıjˆĉY×Pİ>O—£CëÀyƒ>‰'Ħ2ħÎ@÷ÂätŻ’ÂX³)#>0p Ĉs”8ô^˘*~Ĵaú¤İbΊŒRYŠ}ÉgŜÍk²£ÄÚ£_˜hbmŞ2ŒËȖnaÈŻüé¤>=XDר9¸Çó…Küݎx­µ½2”€,àˆ,aĞŜ úı˘ëë21z£ĥÑŜdŜIS}:‚ĵyeKŞÀxG7ûAO\UŒfŜemuÖX…1vÉgÙ5 -Ĉ˘ĵQlĵĦÒIV2ƒ*w\Gµ£5`ñ6ìúڔĵá‹)mé´Ħ…·ÚqBPÒâY`üŜ$¸pé֝˘ûBáí§ş˜ŠJÓNì÷*;’Ô DÇ%§…ov`ĴšZâ–Ĵ­.)1ynt$ÒĵğĞöÎÉƒÒşüÎŜˆîPOR+î'Ü]ö•$@í`è6Bŝ²’Ž›äe;WqŒÎĠËSt;8r:ĜÖJsGs eĈ<şŽsŞ4Z$ڐñ½#ˆĊ`½8(+#ú`PÚ"³Ĉ "îƒRUÈŞqdj÷v*MîE.VXik…,5DDĥêürق\8lġĵ*9ħÌ6•Hú(’GšPÜçŽNL‰"~á˘?e‚¸Ñ#ş}. ‘p¨Už .§ÊjÄz7{xÑÜŻž;h^BC" ÀWîÙ:íñċÔîç;žżsօY{@óÄEĉÂk; Uà •odŽAû;cXĝŽÂZ“(ÀƒÇşvê{Ç}G& ĉ'’$éáÁnŒ ™eˆËQ´ƒËÎŜXи?²?tf+(ğ­o]Ö>yžùe³A— W'[T¸@-íÍÈuve×ê‚Ŝ@\@>˜Ż=Sf?ž1ŻYşÙû²0t“ĉJ³ÄĝġŸ OAGE MÈN5:÷;5Û:µú ~ĊÙ ˘İi'Ì˙Ŭ*ïĵÊşĝ·…İö †;¤2;v÷ìB5Ĝwú­èÈÖÏ\Ċ3Ĉ·_ӛ·¨#OßFÊH¸4&³q\Hû¨Ê8֘ş8éċĥ}™QÇÄɵëm>Ä$sbĥîJ{j*f€ċäñTvMX}ĝĠŻWۂ%Göµċħ™ÙSagŝPİòzÈ·íwS#°‡7ú“äóqŻÏ<Fı Q”;pŠûz5ŽêH†MÜvŽu2r‘ì~í´ÍÍú;t\9Vs‚ŻĞ„w›:Í&öÓC7ċÊ ıGX–lµŬJ‹/¨š’ÑWûÔU7¤Çò—îQ×î~ fŠĥŒ›ubBĤÜKò9ây"Cɰŝn ħ^£š}O½’erċìùO£dPhÈ\ -wġÜÛϽb+‹žËYϏ -ÔüÒëżO•h n>>>/Annots 245 0 R>>endobj -1009 0 obj<>stream -x•XÛnÛH}÷Wԛ@˘DI–ìyYäbϰ“ŬH™Ì~i‘Mİc’Ía7­³ûï{ŞHŠí]Ì ˆlñR×S§Nû‹ĤĝÒjFó%EÙĊğÍĊÍĉbLq?BŝĝòóĊ,ĵ iyµ Ĥ”Ñby…Ÿġ·”ÖüÖävAaH›„ -ŻV´‰Ċ”6Ñ}j˘GÚëR“·ÛCžZ“ßkRe´7O:ĤĤšŜl÷—;&ĝi2Ág™¨´Î&>ˆl6Y—Ôl'÷ëğۏw7ëɧ›ßƒ›ßnÎ I*04ñl,ÛpßßLŽX}Úù<éÒ›“M$²ÁW§KşWıÚágbK˘6S&wRyLƒµ.ñJû."=ġ¤LŞĥİĉPÉpıĉ´\°WÔm PùÖԍеXIL]½’ÒftßĤJOF’'’ëçİIƒŝVÖ_~Ŭ|ŝ|w,ÓYż•âŝJ´‹Ğ~Ÿá?ÒKêV_Sˆ"&¨çr: Îz΂U@ßöʓEƒK´=-(R9}¤ö˙à;°pG+Ü.ŝg*&gĞ2Ҏ{arÔ>Sž[s,/J“ĝñShLjòĈy7˘/·ïNÚÛ¨ÊtîĊ@@GRA‡ó`Ĉñ„ƒ1 Li˘ƒñ{1îTĥUbiĥ•YX‚o4ŝ™vÖĈ¤)0Âw%\$™ëRĦ½÷ï€öÂÀ¸Ğ˘=)×óğ->ÄÔ%YvósDİ”‘‹â8²Ĝ¨]ng“ŜÚÔĦ¤\ĜÊĠs·ĠN§”ÚjFEiQÊş)sŬ†eM‡˘&œñ - nKġ0[dHğòíñü¸F)?çşŸ­vŝ$â&`£˜Üq³F%sd­ĜĈ;&hÓïĥêrĴŽc²ı1Ühä²m, ÏùŒ+td’g:pgi ^)ĠO:Ċ¨z\6h -ž+ĞŝÖ5„  -L’ fİQZ)>[ÎWŝĥĞHÓı*Ш|Ï!'ĥWO:xrè‰Â†^°<öĥÄ%ĉ21 Ìu°­íˆwÇVûƒFˆĊiG€6P–t¤XEb‹ìĝ”üsÁ1Áb(Áġ܍¤ÖL Ñ­ÜZŜ&Żô‹İ\3­ƒy"ëyô‚bÌrĜĊxÔì°_òŬO2lP Çŭàq³PÊèß$ü‘NnÜ Ef—ÓŜ¤â֑ÒPŞ(`ïh2ù3×~kĴ£\!osYœ:gŸi²¨ˆĞĴàIèdÀ˙SD´÷˘‡Càùċ"°ċn"(: -ÜV A7P•ró…-ùQä4żdı; Żj·dıVëDÜ,ĵî‰8Q…ŠM—›$iTä×Üüq€üœÏˆöĜèP, ÌB+ŽYó68ö¨öNR‘óˆĤĴˆÏŸ>ÉMnt¸ıżùREġdáSÖ ¨ÎNèĈDH÷67ï2=Ş€”Ìĉ˜Ğ³ĤĵÊHœŭÀ;QÍ˙0@„_:ŻXɢŻÁ(CHï?´$„ĴñulÓ&·v?ŸÈĝ&>]ş½)x%aŞĝ}Ù,Ŝ €W˘n–;’ QäM²+P CŜ&"ĜN`SIÍRàB]&*bIÀk%3.Şlċ0ĤħĉŭÌÌÚÁğfg웗I3KöR´9XN€9é‡Ï“ÚşGsyY@€•X>S³0SAšÂ/Ĥ&ˆPGX$G@6♞GWmaQż]X‘JMۉİ5ŒĈ™ŽmJƒRc‡Qïñ36=ımċîəìĴúĜBÔĥ-|:ÇŬ€—ĉñëö2Çĥ>žĉprŻİĜ† -_—°íÁc 7.h“ÁÑ'7ĥÑX5T¨-¸è¨ -,!JŻ‹V%–µ Ûárħ˘hÒÂ^u‘&úHżâ: ĉ‹ëQ£Nù<âšI7?/Gï‰xñLßφΠ-‡÷ ĥgĴÎ** ˙L†“l}­é`Ä0á1Fĝ°ôğ­zeĊçÍ‘ŝ:p?Üó9ĵéÀéÀŸvûü‘N8£È_Blž€¸6ßŜż{ Ŭeżc p~?9 r¤dŽE¸š 6ŝÊÙuħZàÄ#ŻDŞcAüëâżYcendstream -endobj -1010 0 obj -2019 -endobj -1011 0 obj<>>>/Annots 262 0 R>>endobj -1012 0 obj<>stream -xĠXMoF½ûWT•À˘DÊÖG.mĊcÇ3³#ƒş´È–Șd3ŬMËìoßWŬ¤lgĵƒ=$0`ˆb³şĞê½zúó$¤>ŝBE4R\œ\ÍOz7ç†4_ñWñˆĉ ġƒ~żOó¸s[f6yŝDOŞĤM–çTJ™U”•Ĉâ~v£ô=Ŭ),VšĉJċ†D™ċZ–ö”H•dSIĉ4“úAꀰˆ…o3C?Ì˙8ÁÖŬhœcóÎ;…è3+´.°6+ׯUiµÊé“(eŽkj7ĉUú!‹%ŻşLħw7iu‘’I:‹è˘ßÜkSĈ­n8"=“ıŒ­;é×sâô(γĝž³;ŭĝŻÓà·½vA8ÂĥNMAŝÖ·‘¨$×˙KV&jcv} ó żíġ”h“Ê’*­ŠÊÊäÙħ]ìxÉÛĦħ•ÊJż3:U LĞ,GLŞêÁ²İ–!ñG€&“r[œ0DĴĈĦk]Ü+&ŻEL˘~€ĉ,VÖҝԚ=­ÉŠ:˜WÓkZJÔ8Cq…;*À1Š`•àaQ„Ñy6W ž÷ˆˆ.BgiwˆhÚĵÙlsŸUĠSÒ÷ÒúħgŠeG³*Hm‘ż -ߐ}sûĈÔ/s çµN İ# Ùĉ…‚ HE‚ŞJÄOOAŸĤ×g4E şe‰˘;ëO÷RVnJĝXĈ§Ay°\PħĦäú ¸ZîŞİWq˙Ŭ˘Â|fökœXf -ÖìAè $™Ô¨=W^)­á=×nĈcĈ¤<éžäÛpƒl˘0 -&!§1²ô'è˘żz‰÷QbŬ~fw™‰ŭäáx}{3;˜Ž‡gvĉĊ‹³•én'Á!ĝ_o¸ÀkDád 9ƒÁd{ġRádŒuû@Ò§ŞpŽ—Ŭíoeöĝµ6aužMAĵ ƒX½˙ä÷qŜ+m‚ÏߔDÔcü†sGşÁd‚ĤĝĞ“_‘ífŝÉ]NAċì˜gwWd*7’œµZıAŒ˙A‘ĊZµBJHĦHş—èu{ú IíFìÁ ÓŻHÊ[Z˰í4ŸĞÊHf™3?s÷:˙˘ŒE ÈBßú!ƒĜ_=ĞÌy8ˆŽZïÏ\Ae],Qµ­„iÉS2ĦƒSôoòê5|ĵQÙÎvoÓN5XÖ¤qw˙=÷/wOùÚ\´6ĞĞJégòĊŽñ/ŸkÄúĊLŭ[-ô2Äó"š@&, ÛĊuMÁQĉÉà€^7äŸ5Òs†ĠíĊMF½šÎ?ĵû‹˘ĥ~Á {†-×ì^e‡nyÌ(jĤۜǁÜ:nî^›ÙÑ%Ş<µx‡6ìŽ)–Şĥŝ€]> N‹JƒĦ$8e)ŠĉĝĴA·U^¨?‡vAa^ĝ z-9ˆ*IâXîAŞr) [şħï6ٙu%ĵ°„v´wż0ÌC‡ҝÙċŬĠ%}Òêŝ]gÚg-ùlŬp8Âòî(r3{Ċŝ[GGÄžÄñÒqïÂß8ÇQÄ1üŸü;ŒBendstream -endobj -1013 0 obj -1871 -endobj -1014 0 obj<>>>/Annots 267 0 R>>endobj -1015 0 obj<>stream -xX]sÛş}÷ŻĜ>YéH´$Èı/wœÏúÁŽoĴÛL§îHBbA+êŻïÙiÉĴÛÉ̝LñÀâìÙ³ühFSü™ÑbN§TÔGï–G'ŸÎh6£ċŠï^\.hYÒ4›N§´,FWvĞv ]ë:ׁâZEü£İÔOÚú İ éÉÛÖEË1?ŜÉMr>ÒF™’”+Óm‡aáÍòûє&³ÓlŽĊFUĞ‚âÁ=m‚/ÛB“ÂÀMÑZhUlħ -Ö~ù šZgtċvÄżÈ§S<Çın"U­nšc^nr°ƒÈÖĈUTû€ ĝ“OEhÌ/²3Žía~>í÷(áéäômvÁ;xjí˘ñŽĥŒ6Ĝ…_Q£ê\ÑηGۊĵşĵGŒžŠ|ŻÙ5Q×d"n­D­+uÈè˜İYû֖ŒSrğžħQÎ’dġ€¤FN!`ñ@Mg…w+ZĞÇ £Ġ* ‚7i(G˙Ĵ,ħ˙Âô˘V+ÌKwŜSÓn6>Ä?ܵ#U–FPCÖ9ŝ·1‰š|òYÒ½ ĝdÑûżßSĥ°PE 4µ-ö4ÜOħÖĊ#&1‘|ûjÄ= ˙GŞ{&,HÜĠêQ'T˙ğd ò0FŻĈd=2 ­wĠ˜s}D„яi¨ÒEd5ëX™ê…kĞġ†ßC²ƒV%ŭ…èƒwÇ(-cmIğ—˜ßU…xu(ʁ–3Wx 2 ó¨.ÎPcŝ­…<á›?“Û”?0™ĵӌC\ûF“3и£ë÷ií­)Ħ-Çx -Â7)ÏĊ˘ ;vÚD΄6žAZĵHrÍU+!¨¤2š×öñ“O Á7@Ñ7™FˆĠk2W¤&•!ô‹s‚x„ 4Mj}­6í &ƒÜ”œ½Ánúq9„)éĈÄĊÒ×i€IÔĊڙBٌèFAó6ڃ¤PíOÀÙI4Hƒ -͛"˜œ5u°KáUƒÓ#3ħ™Ê9żK€rì\b0ŬóŠâÖ#S°â^ú²ŠÚñ‡ÛĝZóì[c-ĝÇzŜqS6Ä)äĦ,·˘gˆ4×1"}V|܁=)–jĈ2Ġ`+¨“­ -ݸx˜>Żeü|ž]ŝ9ż1gu­MµŽÂĥî„˙˘ë #éHÊrûĤ9B•W"Ĵ p0Ĝb’ĜGŜ‚„Ü'€B5T· ŝŸOŬË0zé+|h4RÂĝskAÂx‘ÌÓηĠšVqÒù BÔ? o\hH­sÔIÁkpüd<ŒîÀ}ƒ.ó†SUŻVUϚDNǚ™šöˆVœċ0Ŭ¸‘qTr½1&£üN>ĵ²Ù£$XŬĉ˙š½żşp³­ĥà~‚˙°Y˙äv:´…{X&èUkĦİÜŞU!žİóEËm†E™hV¤ë=zŞA#†5coĵÏë¨É\i@¤nÇı/w}‚şÌd´Äd^jU€ +Óş­ ›­8/à˜ê}çŞÙC7CWËà‘Çâƒ·ÒżWúmCoœÜ|äEN>ġ´k's>n}Ôż Şo´ÄŝVŜZże}ëÒa°F×½ş>ƒİŒSnôËÍĠġmуĝ€³‰~2mìn€R×Wqâĉ.ôb/-ħo5¸ f…ıÊÑKĉżx(İŜAġ]½*î7şÀP^ô‹|LçŒ1ŭ.0Y6ò\cÊwôžŽŬÄ=ŝŬh†‰ÀĠŻ s5—ž‚o UíFwúlş ͝Yü W‡ZNh•<†ò€Üà!ĥÎp—Ğ“ÛñF p+áé`ĉڈĝ×b¸‚‡G€S*ÜfÑŞi< àrˆı•qÈcĦÒÉVV|Q…PSúLş²—s }€05i żFsNÊİä.&ĵmĝ{Np*ݧ.{4vP1›Ä$%Dv‚Ñ˙ŭuàatğìž$í;Ĝ™8²Ğ;rà¸áJÏ_úCoRµċígœĥ8ètX?÷¤äŝĉË*· D´`cHnÉ֘–ÁP.ĤÈ/şI§xáÎXœa`mQĝÑí€E´j÷•58^ĦŽRˆX“i `e„EVŜ{°‹Ä$z÷ġË·ûëÛÏ\Ö]ĞBú€Œ‘ë’żóӞÌÂ]áACÀ E3Éí`ŭ}òé²kY³‹E6'¨siŞ£ûĞ›wWtüw>½~è<™ÀÀ&éġÉBTqôóbxĥ8ë Èâ”gB#ûíè?Žtônendstream -endobj -1016 0 obj -2245 -endobj -1017 0 obj<>>>>>endobj -1018 0 obj<>stream -xW]oÛ¸}ÏŻ˜‡nˆĠĜqídwħ@Ò6…M›[ğ·}È -Q1ITI*İ˙ŭ=3¤lGÍbqoƒĥħ)qfΜ3ߏĈtŠŸ1Í't6£ĵ>şZ½şžÒxLĞ'³ó9­ -:ÍNOOi•/ĵï´'§+tAÁRĜhòĤıŻô¨²÷ĥĦF‡'ë¨ĥ…H9M…ñyç=ž7 ž7žĵ΃ħMF´TġZ‘ïÚÖşàݰµ2ÍŻĞoG§4ŸeX?–{ŭÉîĉhÇçδ_ĞĤ ÎkG­³İà^iŬ,é‹i -û?²K÷Îv­—çN/şy7°˜WF7pçicò =™Ş˘µ–PK‹PȖÏHŻOfٔŝ²Ñ ÌòĉŠâUıJÑá>ż—/Fb­UE|´ß0ls*=èµ\+ ]‡çl‡ìÀo§ÛjK÷Żs^Ùu„çQUĤ@Ĉ<µÊ{àÁ¨!q'¸žjoTc|-/Ç̨˘6ĝ*8àÏFùEÓĝ ŞJ-!µ­ġŜĴ+MwÇë.îŬ’]kŠğ_9äÜi˜;c£AöVr/ĠZyÍW56ß€AOZ‰aLĤ3c+|ÓeÉüzÔÀb—wpŽ1Dú üŒ„ŽWjŻĞG£|Ÿ›V†ċ cĵ†^èÚ"z ƒ×7ö‰T‡û\ D½3ˆµ0pÈá„JgkbXòÊÂîF-ÌàDĜ$~ĝl@§Ï½Ż€zƒÁ­í(Çjġ ùƒKLó ı)· ‡q‰?Fä4"ñ{|µ§şëÀAr×*€ŝĴ)”„#g“ò{ħ³ĦµĤ“ċÖi‰:×HPĦŭC°­h„qdkşa W¤×TİÉ71ÉNn›ÒÜwÀZeĜ;)!œ|ág:l X8[Yû€×UˆiÙ‚‹zÂijĞl×àA„ì7>GIġš^ĦIË;ħz<9¸¸=°* -¤(• ”Çn œ’ŸĤ`ċƒI½L‚Ï m0ĉ'–yĉM2‚w—Ô¨ZÓۏ7—‹Œó? "5ÄwÊyĥğj‘|Î7Œ‹e!xĜ‚żzt:×P ġ€~@YŽo÷FÄ )„ 8WŝÈ+vR޵„ŞÒŝ,ß}úÏğOħĠşLï8~…oFgٌĞèâˆa/èZ -g@ÍJöNĜ:°nŒÂ²’"XŻQwnf'#4ĵcûâöÍ/ħâàXeĥqÑŜí5Mön÷‘ ŬŽ>qn<€úŸÒ³Ä÷(;œAŽ( şħÏÄÊĝ/Q¤+vÁŸ;ûgǞİ÷Œ”šŞ•ËıWq3’Î-_›2‘ı´ exı­‡x˘Ô'Ï 1ĥĝĴŝĦóŽÇ‡µTİ$+ÙË2  ħ!tâ.Ï}î‚"•;o‡xpżĜÑ'eş‡ïèĦ,$Šsô^‡ESÚ÷Œ‡{|ƒjI÷BŽ6ÒS^ŝ ˆC&'/à -´ŭä’ÑÒ4yl‡¸? -´7ŭ7Ž ż¸U#VéÀ`ŬĦ„×\VRw7{â fĤ‹ŻğVróyıb?LħÓ3_@ĉÀPaP70$l÷è÷PżŜ£˙z’˙³¸w”ßùSŠ'ĊÑ%8„‰jeğp2p²ïšĠyj’ŭ‡Ĥçßñ—‘‹{ʍ1oóž28“ĤħßTĈ Z†òĉÙä°8˜~cİó|HĥŒw‡ğÏhÂğ´!^Jvcô™ĈQäöí‰G İöŭ@Î.\ßU`hNjÛ~&×Mîĥm?@²y@€ĥ -Ñç v"#dŻó´ğĉvĥâĝn2›KżŬÇgğġŞ_“§#ŜÄdŝĉqžG™ZñD†Êä:,*ÏQùƒ˙ŸŒŽ&çĜç*Lˆ(LXQÒÈ`ʲ*oa†¸"ï|ŽĴŒŻ_§ˆÇ³Ó ĴȆ³s&le•ĠĜŻPĵ0=3Éw¤v`,¸ñŸOï…t³˜97€Û ŬòùrŒùBjٞs$žci+ êO¨È5ËY&™ÓÁ"ì]ܰ8Tı–<7 ą錸Ċ%W`×Ï0³H/4†qM=‹uPÖ Żċ<-`LÇ݃É^}`{= ˆìÜí[Ù·Y$ÁYĴqŽÇĥgÈĦŒÊ ­´–(Ğs:’\%…²DŸ'Á³NˆÊ‡Şô|—ż9ò7Ÿ0i÷˜./o.éÖÙoè.ôë7C*{€”§ñŒßĊ׎˙?ĠOçÓ^,ó)ߊ ˙}ô_(~½endstream -endobj -1019 0 obj -1911 -endobj -1020 0 obj<>>>>>endobj -1021 0 obj<>stream -x­WÛnÛF}÷WL]•Y–dY—EaÇvb VRKiZDE°"—âĈ$Wá.­èï{f—¤$Ú}k 8’¸;—3gĉ żġ¨‹˙{4êÓĊ‚ôèz~t;?êvĈcÚŭÉWĝ‚cŬ!ŝĈ#ŝÜǟ\RÄ7fê?8~~‡#=šGÔ§áĝ’ĉĦ{Ŝyú4ğ}<;:ż”gZ˘y,IgɖŒ Š\Ù-:”D›X1ŝQIB™ĥ´Ñù……$ĞÉÊ ÎT D"ŒÎ )CŜtċ5{ġxÛpçMWŽ:‡7ştÖğèôrëĉĠŭ´yYdá '·Hê ‡†(dĝ­0–=‹\ Ğt†ĵiöpM…‘9%òY&5.6DÔvÑU` ĥÑ& 2HàƒHŒĤ ÑFÂU2tÒP.…ed¤´1Î3‘.ËhòY -•Q*Œ•9g½Ċ2×/Âme+*×Ċší"ƒµÌ‘Kĥ"`èĉ-*ú9V ‚³0ˆ˜ŞR!>¸[kcԏQĊ@g‘Z “h8…gĝ„IS€‹–ˆ’MÚärQŽ2òDݘĤìFS¨ B -,\†*Šd.3KQ_şYœĥ98€Ç´´Ò:lĝWĦĦÑHço]‰u‘„¨c*Ó%"ħħ°ş›·É\àÔ=‘äéósoISiŻï?̈2‘JGvW<Ê.Ïö€ĉ̄–[úĴ²¸£² -ħŽ%Ñ”ëĊ(7O„ÚS_ÊĀÛn$jäŻèÛHÓ=x¸îŠëxċÛİÂ5Ĝ˘M£Z|͓Ù£F•™ÒzEÙİŜRO#=guT×Ŭqg 9"}Äġż†U‡sFÇUÒŻUŽä}„ƒ.ˆFNħŻrM.×lx£Ür%7r÷u²;ĉLTÈ@ğĤ„•L:ÚŠ˙½ĈnA ê)Ôdn$&Ĝa4êéĤ"ˆUĉš‘ħÊPfà5=^ cCXuĵ8§ŒĞŸjî.Ĵv}5˙+ñM&'ˆÙUİ,Dž£‚FTmƒìl“Dĉ@”Ëu€„om4rVçÂ4àJ@ĦcÎËM‡cZ‹Œĉ–¨F‘€›!`²—qVLžÎ+?‹–ŝ"-Q,Lï+9´)WĞĜŝĥ8ċ³ÜZ砒ē5+öİ·Ô?ŞáċĤ\mڕCǁ e¤2ċ&7"?2yÁ<ħAxhD t ğ‹œ MÛŬ8ÉFl÷¨ê İ; P•óù„­ĉݟxNœ^;–d z1ŝÔżvĈ`.͎ĵ|żúhw'-UŜKpÍ=ğèw†ċ“}ù?ż›Pòa•¸˜Œái_îħ)Œ;ŭ½-Çĵ—ĵûÌĜĵ“ĝ ͤuâ9yÔ"e?ħÚ|ÌuqU?żğĴVŠ~jx֟°"~y†óŒ¸‹ÌEfo\ŜXSÎş¸9EŬ­%Óó۟ĜÌŜ^RG³.­×:w£e§)*àïä/ž<“§ó½ÒÀÂ# uDÀĞ;:@ëÚó;( ‘"FC‚ġ £ĵD¨ŠİӘTQ‘Y#ğÖİ’‘;UşN hF´$d$……›ĉîá­URd$2Ĵl\İwÒŜg‘†cĠßċxEH+nzt<Ó_ Uħ{9ƒwè½Ŝ`ġÉŬiDˆ`ÖPlŜP¤—ëXŜcÖ˙%lƒÑĵw&G—ì:öÇÑżß8ëendstream -endobj -1022 0 obj -1797 -endobj -1023 0 obj<>>>>>endobj -1024 0 obj<>stream -xWïO9ŭÎ_1é•Â’„R?@9¤ê -ċŽTíİİ*gM\víÔö6Ô?ŝŜĜğÉfÛJĠY{~ĵyófòù O=|÷é|@§#J‹ƒëÉÁ“ƒ^2Óî—]àŸöɘ†sĵK+)ٝġɰz‚—½ĝĥĥż`èäöŒú}šdìp4>§É<èÑ$=ş7^^ҳɧƒ“Ûauìè}ŝ”ĉ4‰rq1˘cZKZŠ/’ĉÊĉ‹´rN‚VÖÌrYz‰7è­Òs³v”ĉJjżBS!”öĝ!Áö{tÜ?M~”­eê•Ñä ù¤÷KSH÷ÜRÀ̤_Kİ)7 ]B4ùîTQ:O÷Ż'lÀÊÌXÉnŽ~f’J‡`9Ž7Sı¤•Ëä °÷h4ĵĜÜ@òäö˘gú{°òq2À÷6ñ‹wôÂèL-J+8³}HÔ`„‚!ù‰!WVĈz‹kd]ژ’BR: ÒAöÀˆħé n+ -éMèQ3’8Òf ¨€SĤ"QÇh -O-} sĜ<‰†ĝÎÚĜ'G0°–yŜ%Ħ’ï˘Ĥ &Ħ†Ž¸8Àü'1TÖë¤7@ZéE¸²‹zt̎‹kóVá˘ĝĞÒ{Ħ¨‹ä¸dìQÛCû,Hcì&iv]zZ ċc’0}ħ§ià" %ô2 o8éƒñÌäıY³÷ÊÛûEnf" +všpÁıb–€µpÎċeĴmÀ‰ ­|<8‹m$ŝœĤĝúŭ~ŜL§IE>o֍vÌwGħ'­ĉèì>+h­òœĉWY™çĈ‹cWĥĤM$·+g[x¨ŽšË½C 0äıœ·°ÛFFÓ#ż,šöİŞcAK5ŸK=}V^W˘z &[—fˆéŒjŽĈ¨E>2ÓpDĤO94A™Œm“Ee×­•3c|vùcìûġ²Ŭoá˙ž9ú–ç80 aÁsäNÖ8“a Ï}|›+8rh°!bB‡ŻÌ"없rzc˜°‡Èxħê‚$Ž×ƒ°ÉršVÂn·ħ(çá.ˆ߇Äfw@F Ż˙żˆd½ö`Ûgw'·êsA8Hú4ÇÉôxuw}Ċ4ĝÄĵ¸1iY@8ĥŸŽû8ˆ*œÉk~Tiúŝ@§—Ûq>ıKp(NârEWÙ£‡3<Â}0y>â7°xüu/ŭ‡endstream -endobj -1025 0 obj -1681 -endobj -1026 0 obj<>>>>>endobj -1027 0 obj<>stream -x•W]sÛ6|÷Ż¸Ñ‹œIħǎóÒqœ¤ġÔqÓFiĤSv: JˆHB@Ëú÷Ŭ;”Âôc:öƒe¸ğŬ½½—£S:ÁÏ)]žÑ³ Êë£Wó£§oÏéô”ĉ%ıxqIó‚Nf'''4Ϗ?6…vôÉ4…Ŭzşz>Ħ÷ΖĤҞ”Ó„˙6•U….¨tĥĤ°ÒxÀÔÊíèÎ.m3£Û’vĥ•zß~MÊ?™>:Ħéé³Ù"o*£›@utotUѽ[ëÖ~<á ıeÓgÑTq$òı3›@[ƒ#‹oSCŭ´{n6ŭ_™Ò8á ŭm:)ú”ÊĉŞ˘Zċ+Óhš"+Z˜@jİLƒÔ—Û&רĈ–äĴŞM³¤Tò„L„Tù5Ġ:Uqv1;gĜ’Ec·T‚8ܧâïLîĴ·eè!e’LC ûHˆ8>ŭŜzí&´QŜöb’k|ñqrZœÓçևA ƒc̈ĉğĈ))ÈĞzĦ7ĝħïî¤FĠš²cp­šYëÒWk䏣–ô£ñaB‹6€Vċpá 29(’³ïE ZVL0ı -è`Óg p6!ûœ âl0˘0Ŭ)OŞ"ßn6ÖO&dO&$‰Hƒ?Ħî„ꐵŸ@·à$§VÊ£VHŬ·y½/ÛŞÚуŞLÁ…H4eŻ+áŬ4èZšNÏєéÚAŝ Ü=K€ƒZhœÔcpĴüÚ˝ĜĥĈݘ Ÿú8ätݝFúŝ;˘şÒy ñNûñ?–˜şèê9ċħÙs[PÚ x ˆ‚| í×Án&’‚_Ùĥ*¸İĠ˘LĴ  {Ö%Ž*,ŒCF~ä7:7Aݝ$G‘½ -Ğ—Ïqe*8@ĤÜáğ‡FŻcf£ >ċ½ÓM;š Ž`“K§j?’[F°•µĊVÁQ}ôCá8wšIÂÖĵîO’APĜ $ÑeaœH¨v#Ħm²JĦ2@%š­#” ıh§b jBVĊÔ6²àò!Ĉ—ÓìɌzÙ{‹´H§ħX§²u8äúâ Ñ…iŜÏîŒİ“jk햑á?Ċ˘„éƒħÓ+f ƒÔÔ´€Ş¸Ĥ4Áp8Ԛ-P£·ĤœxŜĜ§ž)°ĥ0¤ö`ô1Ìr_şè)̙Çè翑`7ñx€ -&KH;g! ~ŜnŻžŞHcF‰sÒüW ?ƒµĴ A×4 šitœRü4WîtmƒN@ÂÏ_)'…ġ#ˆE4ÎFŜè4û!äDÈ4YĠ„ |-q>6ĉQÀ vµñŜXŒ!ν²2rfıâ˙jú"ï™NZ˜¤‡mŭo,Aip˜Ú“Ș% Ŭ“D´£\5À|KöFè:Û"iSÁZÁ[èÊnSà´ê|ŠŠY$A¤Çŭ(Ž ’!×ϲç@ÄĜ7;YżÀ)Ĉ÷’ mÄ ³VÇ;„İġHb͛ĤŬà`‚medzƒŭ…Q80!ˆˆ´ÏĠFψ ˜buÄŞXŸĈÏĝĜ/s|9 cÂL?ŠœĜ£YU֑ŭËŻo:Ûߔ2˙áÇ7żŭy÷ÓÍġŬŸïo~¸½“eŬɲ›Öa…_ĦH'Ëà½Ü[wĜäbĴ—鞓Ľ@$Î9è™Ñ“6f* ›2íıï1 ŭ{î†hoB2n@ŜZïàŞ•Ykx%Úi!1=Ĝió—Yĥ+t–%-e‡âŭ€—ğÁÔĞt‡oíêà$AŽïô—#-.§ƒò~óˆĉŽÏ-Q>ĈoÖ1&ëéۋ~Ġï1ùtŭËŭíŭ÷ñûô*pLÓnˆY%;L­ĠM[:× -t• ³ÏŽ -PáwˆÓ˙„‰w^”Wǵ É{{ŽİÙlż:ˆŻzTl˘cĴ•qnéoVH\‰GĵÌóóŒp1Ĵyo4_Q”×ql`Wùë £ìµ²˜ÄĵžĊ/QÖxâٚúéÙĠì‚[êÙ.äsFQ&A˙>˒W.¨‘ŭú!ñŭ(;Ŝ—•) -hŒü4Ġ’MöDĴgöúzÎ"( ìäş§Y\mËïe˜$Ĵ´¸Œ¨˜£ĤÛvçÓn…ŬbÔMÂì{Ĵù˜¨ÉÑ:‡½˙t×ïÏSvX•Éîr§ƒ>;etšŽN˜P²¸ÖùâäËp:Y•¸¸mñĉÛíŞƒÏç§o_t}uz~6;‹ËĞÙ fġğW×Ĵ’ÏLÒk›·WP>ɸÄÓ˳hĦg³3¸ßmJ³l>>>>>endobj -1030 0 obj<>stream -xX]oÛH|÷Żh8œHŒä/Ù>܃wà l|ıµÁbµ0FäPbDr¸3C)ú÷WŬ3¤dût H49Ŭ]]UŬôŸg3šâ˙ŒĉtyCiuöÓâìç+šÍh‘ó›Û9-2š&Óé”éyşÑé–üFSjjŻkïÈäò½ħ&/JMòZž;­iTšµİċʈ2íR[ĴtF¤Vf§—Ĉ¤ê ×KíµÑ:m“LJûañŭlJ“Ùerĝçò›/Ï$!rcûûÇD•Úġš­Tşm*r²úÏĥ°:Kˆš œî¤›xéâš&—wÉ Ÿŝ”“*KÒÓ”Ğ˘tc*êÔj…ïNU+ġw‡4WíšP•z‡;ÉZiż×şĤK)d6 }DúdÛ 5HH{òVĈšµUĠ 2×ĤR8.m²ĥjĝÙZûÊԉŝĦ1[âšU} m-Żc½Kâa7ÉU,ä`ZÚ¨&•ĤÚIšŞĤç۝ĥcŒÖy\òĵĴQ;è¤İ™H ÑäZïÏé"w°~Q[„|S˜kÑ?ĝì^ŝÜCލ8Žş+2b_€8}€P:³hżQ€p£ÀeEžkĞkTIÊâ6~œ‰É­ßİÜ Í KŸg`2]ϧhüĠíŸ/ƒ§óÀüğÈ|ÜrÜĦŝì"ıM.’ë„uföŽ“ŭfìÖyċ t•L9Ç£~@à3ßuEÌ>€u óHŭĊ‰ÒĴ-ˆÖë£pÄôôLpZ ĉĜşDICf)(°ÒT›=ıF§E^ożħĤ]ÌŜ(µQ )4iƒT>~>úA_³ñú^ÔuĴ÷ü÷r›–4›Şv}7§ ÀžChžĈí@ÑKüqM3—ˍݴ[.c-B€AAYáRX„£„@B‹òR|€%ğÀÁ[p”ˆ REíñ9çŞu*-C¸ÂQ&'nóğdòıkS@˘™Ï^k_)- 5÷Ż3i-šŠ(hJ/CD`9 -y_üß~9İ|żA,(sĉÓktë;ċÖTò›7Éŝ!4ŸÀ¸ûF-ä,ꌍĊƒ@טjËS+“=†1ì”ĝ5Xşğïœ<³ĊN„sxĜmL[fL,6:Ú܏…F×2¨Á’<…Ŭ?‹€ˆyò½­C[z-×zßĊĉžŒŽ%tÔ e$oRCuB‘4¸ZEŻĤBê=ĵ˘v+>>>>>endobj -1033 0 obj<>stream -x…W]oÛF|÷ŻXhë-Éú4'NZ‘ìZ -òPĈ‰ġ¨ÓĦyÊ_ FCš'ԎÚí6ͳż²ç8£n_”O!µ(7VRlò\jïÈÊXŞ™XšÒÓtN…5İʤğ"żÂÂI2iĝ\_y7˙vÒĤVç2ê"Ùc.ĵ—Ö=FîâÓc^:˙HK> Ëpüt^:i£›ë9{Nİħ$(:ŜĜÍ6èùöÉġôïˆ}œŸ  .ñŜ ñŜĊ %¤UċşrÜsÙ íJït£Qԍ}U:1kÇġͤ}‘–ÏŜÁ†rşƒ¨ÇċÌW‡+GÚĝ•ÒOä 9o -ژ’\!c•nĝkĦ‘µ+Ô,|¸˜İgd…·ÌÄÂ+£;Üŭ²­Ñ§·Êó#09HlÊ,Ù†ŞŽçkôSäc)NäDÄ{(êĜ†Äş´4›ĵo.‡”8mWˆkGĦĞ#ȕEa,˜!ul7…GœB8·66qûéFÑà:ÒżF£2ÖF4[ Ë8Ŝ×tC]~-ĤŻ>j`ĈWcŸŻpìEíŞgŭşáî ´ş£Şo÷Ĉƒ -lÛ˜ ^1B–”ŽË=Ĝšâô(Ë@>˘& -ÓR½=ü×o3½+ÂuĈĝRÌg —‡‡£v l•~ĉwÇB2´4O;§%†k%^$ӊ™INOùˆg*I@¤‹wğĵ  Ğ,Àî^“fĦ7@ùûƒRáäT”™GݟÀŽÀOäħÀżŸĤx}÷Žp]+$Éœžı[ œ@ĴD1jÎ#žœòiu­Š2‹\‹\F÷7³SRéŝĴ ž†&'œÒZ…™’Èó(DĦ‰â ‹d†B¸P‡–@•ĥšS€Ëó(_E^d@öG‘‹zÀN#†¨ĤÛŜž{¨Óp9§ġ -f^„Ìë\ċlË8Fâaşö6Ñm…#Ó´:tǁ)2@Š€‘^XOİKş éžyQ1Eçorş×_`~ğ½M=§T‰J§]‰Jàû -UĜ‰눟! ŞfÔ…Ü -[%Ĉ `/3-}$_żÛD5ħŞ ÙRSjMŠŽŻ‹µÒڃÎ^vw< útâ2Ôfù˘LétİwˆËWċ|ĜŸGĊC'Ĉŭ–ѸeœŻ4èûž„IU;éİ,°³ŽÉ6{ §ìßBX¨FŝŞŬÖü7h-ĥÔİ˙-³MU&ŸĥkŠßh×;Џ¤´}§˙, ˜oĵœ…”sĴ–ÎdĜP?PK‘І„a"ê´ÜħdáûXVLNL=ż*—ĵ‚!U˜=–~¸›Îî>GŝĠÓĠı1ı@Ò8i“ÑÏ4cPÑbK›ÎpÁ vÇìyîsŠ[x·ÎI­•ü£Ú‚uúŭ&7ħÓ9Ŝy°9kĦ( -İġŠ=†‘´êIé Ô˘ôX èÓrC˜•Ĥßi.má'³.ô7$ŻElAhHœ• ~š€ ē“ ÷›(ÌÂ6˙ÉJK{\ÊNэ‡ġŸŜÍ?ÒU…ŬÖdŸħ³9bI{²DYÍVfÀ1(Xi% 2sJĊ”KÜ §’ƒÁĤ2ŽG5…‰‰…ĈK¤EĞ‘ŭ]z Nôy80Pħ5ûԘŸH—Q‡Öĵ0ñü˜1ĴÉ£ xJ(„VXĵ´–xĤ“O~AaVx.—öÚçëéV˘áÓ;<ŜÄ&;pàŠy™”ħLŽâMTl3İo5ĴĊŒI1§ …‚‹ -–‘xAFĜ‚³„𔲓0{.€O; -ğ2ëjD°ÂĤɢ -Ŝ ËŝŬn-Ñn·"2ôí wM"äâ•́_0äöâÓhë_CT=­Í'ïŻÙ c§zcâ’ςóċ_µ:áĉÖ°‹GşäĴvÑ<áİz*Ħ/ü¤qĞQóghïLú€ÄéÁˆœa  -1‚äħ½atGÇüFċϓڏËendstream -endobj -1034 0 obj -1723 -endobj -1035 0 obj<>>>>>endobj -1036 0 obj<>stream -xW]OÛH}çWܗŞİœX <ĴDŠÀ#T)/{’Lħ=îÌ8İ÷×ïı3vpM´Ş*Ñ$ž{Ï=çÜëG߄ΧtrFI~ô%>}=Ʉâžœ]œSœÒ8Ç'·ı$zQEŞw–f1ÍŻî£Oñ÷£1OÏ˘SltŸJ³•†l\JR…u"ËdJ’T8ʐ 2Ş •Ê$‰"Ҩ‘ ƒ—‡§ż˙zzx~¤6ŻĜï”.H›ĉÎÉI4ċ;úĊ'<áE{bvT -T˘Já¤Et£sòZÎ范›‡ûĞğċ2_J3¤G£raêv]ÖeˆöŬ½_DòZ•ïW.>E*+räməJÒ -Á=ÌGSzĤ¤ıOqH7j­ = -·ñ9z´GÇŞ\e˘ŸlitZ%Î h’^Ñn£’Gı“êLEĤ‹5í€|§„ŭòĊšrQÔTJ]˘&ˆâŻ4ımë@V•UĊzHVS&ŬGN°&§)ɤ0ž$B™ŝÉ·àBŬı™lmÌQ€_kÛĠÜĝZıV–/H…KaeÀv˙3§PP…sĠ{IMŒ ‘QN‰LŭĜ¤ -T&ŸıFŒ*J%8kŜK’?*µ.`ĵŸ ġ“n„Ìua'™İ -,ˆ… ½Û;’ĊV]ä8Ş—†È€ĉÁ\?Be™İ$„iġÊ턑(½Ä_ ż‚&{·Ĥu!rìȲš2-RħD=3µ4bÇ -\e)!½ŞÔEDw£HÜ#ġ˙cc@Ġön–\i·E8àSĝ–‹š - @ÄŻ…Ŝñ˙ğ4¸1“Ñ6ÒzœùsàHŸJħ_Ġ‚½cOÎL"\—`wÏE‚ˆ$-kÒȗƒÀ;ÛÙvt^:/=W—xvÉ)Â ;ÜûÛġċbñr7›Ċ‹ĊŸaQë™J•ĦsOë'­Ŭ‡Ċ"|9™.,µnj͒éP‚ĥ¨ŻS÷üšÁ?ĠKf;RD"żk?R™lô/‘ˆ 5Q[éíÓ2íCi=ék]Á,jÚ „V \Ĥ`Ŝf˜˘ĵ­-ğ˙%h³UŠ…â›ğ÷fŜÏEîKbeRċê> ÀUAi°óŠCşW‰Ñ,’.š…,1ĝ>üÜv[û‘okFƒë…Çt™ß^??ŬĊßšÄ \;G÷xĈ BċFQ´CùèB—*…°FħŻ1W$AÓ~žÌ’ƒ)ıÀ Ñ*^4·r °QS™…­¨ƒAz›ëx -şĉ;Ùğ`^A‘˘B)}´ÎW5·2ÛByK ×ôżÔž£ h &WÖrż^A]žo‰BĴÑQAšT÷ŜqÓĈU5€TžZİ>JGŜÏvß!jĥ„‰Ĝ{/P~ùŽÚ{ĉ ŽŭĜ÷·}Ħ|+ĊcF£×dâ´İ‡´6£A*ìF•è×ĉĠé’Ŭ†.!PĝnOż×+Ñw5 ŝ~œ@7Ú)ÓL9ÈvÇĴšşb˜ûġŭÄ<‹ó–L Á_Ӕ½BÙ6Ĵ{ŸŬċ?Ĉ³ŠYǽFÓì!îUœ£„(Â|'â6ğސFùÛ%A•pYl|–Ï{y› =‰›‘²É°lŒ˘ŝÊ€›$w%<ƒàÑô÷Ù^%˜,Ŭß}\;lAR?Úħĝ™-½Ü:Şa)tJĉg7MùÁvÚá1SÄ_ÜÛ¨ód# µïQo'–ŝípĠGĉç)ƒYŭA3˙Y£ŽżtĴ*ÔÉÔaLJƒx0߂³k‰‘çĤs‘/&Xĥg_˜Rq2îvh ŬŠ.–VyéÁîè—qÇ( ‰l,…µ;+ĉ²Kä֟¨ng×Oßğ‡Yä~‚-ÛşcR~;… 5*Ğċíd)FċÎ_%h_È -w ñçʘwS>ŸÎÔhòhĵƒÇ¤W`KK˜,´^(…UxÏ$Ĥr Ô<ĝyŽu{ úë{Ċ înûh· qXÌ}o4p—ö÷Ïciż5íDqĝjôô.zQ4ŻK{ÏkzŽ/&K§m§~ éÜ )` lš§ÄRJö \°·,ŸáèëE3lMÎΣ }>áW;âËŜÉôwì›VR1„~ ĉ@âó)^RÓÁd]Dӈ_îüÙa\›'·GHÁ^âÍË9žŝàÎO ->>#XÏ)|ìéùit—`y1ĉn£ŽŝgÂ$Íendstream -endobj -1037 0 obj -1723 -endobj -1038 0 obj<>>>>>endobj -1039 0 obj<>stream -xmRËn£0Ŭóg™.â‚Í.éCê˘ÓvÊìşı5&¸clĈvZġï{˘*ŞFȒ{}žüË -äühJljÈ)Ûuُ› -EnàIŬ6èzä"Ïstrµ5“ êMùôn"mñÁHo -÷żñàġD<ĵZ†—ÎFïŒQÏЇĞËç ÛĞ =½…8C’Ï/ş×,ÇşĜˆ’ĴŽĝĵf1ż³ -;’óyvGžBY‹*!t£ Ùĵ˜VYÌ䣖zĤ¨À^ĵš–µ³pCZÁÓö=EzĦ ܙÚoµŬŭnYJdÁş£K¨ ĵtÓ̖Ž[qd:–²×!ú‘@ŻğŒ;@]nĜLĠ6|/ùx…aİĴ=UVԍHur[gµħ‡Ŭ–ĞqŻJFŽL&f;ÚLèëċĠzyĥ*JъR€ğôŝà—8n-Ğ9ÈMĝ‰'#NN~;šÒġOà’™cF…[5•hù'âÛâäâ1ûÓAÁendstream -endobj -1040 0 obj -383 -endobj -1041 0 obj<>>>/Annots 270 0 R>>endobj -1042 0 obj<>stream -xW]oÓH}ÏŻ¸Ò)q|4 ĦĤÀÂ%‘ş0ħ'Élm;còï÷ܙħş°ğZ!UĜžıçž{îÍ Ĥ1ŝĊ´˜ôŠ’|°Ú Ŝlhı¤ó³Ç˜&ÓEtE³ċ˙ŸNñ_#iÇ7fÚ?8~ùö9MĈ´ÙÁúĠbI›Ô}Ǜäâĉ ÊJЧ½ÓGŞ4]' K‚V"ıŻKz­sĦŠg›żcMf¸~q£‹Êè,EUàämmdv˘µÈ·‚ڏiç*Ç.Ç0šĈфÍÀiÑ­‘F>ÔÊŞJÒg)RUìÙÛċÛĊq¸2Y…•ÜiäyÒ5%AµDŜîR”Äg4¤2“ÂJÊĊ½$‹ñYTîÀC˘sĜŞÄ6“tTĠ îÔ6N‚ŭ;è,côóïƒxĈħϗ1Ïi2›G˔ÑÚÁÇ >vAö¸Üa\Si£ĥ2ġKrÈĥġrŽP´ wi„K£wŸî6ŸŸrġċSÑ9Rš/bD)1-FtħŸO×%˜DÒ{£ë"es?ŝŽĦ¸"”ô\dóŠŜ‡OıHŞ8óaĈ„…=‚)™ŜëA=ÔÒV–vFçtÔĉŜV˘Rş°ŽJ.MqX\;U¤úhé&8Žèî ùöĠ֛ċĞì‡:ÇïΖ‡¨<Š|~Áµ.d‚ ĝVϧ{'Ağ˘p÷– -$Ĵg’ŭ"—îD)Ĵ…´ŭBĠİôUfVjcà1"Úäżz4²Ì”´ž˜ÈU¤wHŒÍXÀV×UëjHĝBò‡ÈAz÷ĥÌD‚œİĉPmÏoiôNá<³ú*ġ@ı£´Ğ³Œ\rÌĝñëˆñÖµY7˜Ö@Ci”‹S*`hBg¸çŬêQ" !)­Ż?8³ĵ\EN`ç>­ŽšîÁË<­“¸›qC—À†9珽 kh‹Ê…9=½Ĝ ĉëíë3WH -͜•ĉ‘v8aéëĊŠoD\OâÖfA‚N‚Sx‘ ËŞšèòÄqóĞN–-ğ*‡ït€>€’°bşEE)YiĴŝ;óÑRC;†˜yĉ6†ĥ’R¤ÓK]È4êùË}ğ?êiž>Gádw¤ ¨~?I ˘úT;Š)/A˜â'Nĥ' ÙjÄyO&‚§#ꜰš‡À9¸]! •ħÎDôÚK7£Ë·RhÑ˘Ġ!ÜÎ +µµL›Ž´4#ĵîIĈ’Îè ü% ç.ĠwkcÉİ]Oöµ*А4 ¤ ”Ï ½ÛİDÁÇ óĞ,1­0=Ü0ö ACÁSŽ!İĦ.EĠêß Ô£¨ìŭ˜du3PÑ_-ó‚NĈk ùŸ·Ìd ZÉ<ŝmC8ààP€M,aW×8ï^µ*ßĴ àĠ°‡ˆĠ¨@) n£-œÒ³é/ûLoEömd!œ{h›o#Ç 1èÜXY½`Ğ—oÇôœ—‚j1÷jÁÒÎФ—ÜfĞëĈ=ĥ&ž"!…”/é$[Š<>á¸ha%œ8OÂğğòCiÍGd¤‘l –2…5C—RµßüÌ /…ĴœÍodÌ5‘Y q81–ÈÏë†Û?ˆ…–¸¨ŒNç&—0Ħq‡N³?J óëèb²Ħ–GĊŽ6·D#èfé@S ÄEĠ] âċsúÏ D<Ÿ÷ĥp -Ë£Ûj‘İOŸ, -Mç.Ĝ+_Í';ŜÄyF½]âİ„·@…òşÊ7Êgä^9 f$?ÊjġŝӚY¤x˘q~s§ùŻÖáeûğżŝϏĦÎ&À+Ïù4[Ì Fìïb9 Aŝ1ĝœÀhSendstream -endobj -1043 0 obj -1563 -endobj -1044 0 obj<>>>>>endobj -1045 0 obj<>stream -xWÛnÛ8|ÏW`6bùÛ)°(riP?4é"^ 䅖(›Dş"×ûġ;‡¤lUMÚE;’ÎeÎÌêëɐĝ7¤ÙˆĈSJ˓ĞċÉûċÉ ™Ïéĝ£ZˀF#ü˜ÌgÍÇJRÎà˘~àîŝí '´Ì|:LJÌ_2=Ž“q2LèƒÙQf¤%AŸMġdpÊhʕÎH9‹kPšR£]eŠBVïŜ,żœôo'4†È½Ñ ‘O/énIğV<ċ6² pùñêŽvB#° Â¤˘ ÚʊœĦ•$QíT*œÌh#,˙ŬWr ÄÙÔCù#ÎzĴ‹rS‘Ï’Â…žÜFYZíñEé52ŜIwµ¸ -JI_kYíŭS}]™z.ĝ ż SŽÓI'Ĵ­K€ċû"ŬÉ}—%>++ÊÑZ˘½•HŸ(ŻLé/s.ĊWıï %°SĦñÛî€FaÖFw2W1Ĵ³ - iÈl&+ÓşRnOS üʸÏמç­,dÊÀ>ž.ïoîßúÑ£ vsMéĈXİßtòPlkJ0@ˆ*ĦËÜñ(yij]"g!ûwKi%3µ(,êá1ñL:ııò- G¤ìñ “ŝPÑ ûÄfˆíĥ2Ï˘H8–×€Îç°%J²iÓÖÇùdšĵ QBŸÁIçŝ ´DéÙk2àğċ3pÙì(=Ŭ½–Ä­6=!&F˘C™Ñ’ ˜ÊÏúÀäĉş µaŽB~…ĉ‘×+Ĉ 4fÄ|ŝÈ]bĦ;ü­–Âò8S³ŬwĈ)p(°3hÖ£HÁ˙ĜÂYàdYğZĊŝ;‰{Úó}  FÀ„‘hp2ŭr„“ÉüÇNş†²DıŜcè -ʄÔo‚ħ]˙ÒĜ>+ˆ -µì‹¨â ò kxċ³dß`Ġĥ`ëâÛÀAgRroî`½îC~P)ŻUn YB2óÁ:‡z—R”L=ž1 ‘kĦixKc—n"…Î&9ÀŻY‹1‚'—ÂetòeÊn`ĴĦV³~ÛQPÇ)cı`‡ó^ë9o PBÄħc°|ñïˆŝ–lW°_!• p‚ïJ˘Fñ,T!VŞ€Ħ5yŸ_›eŭñqž‘ı 4;Ħ·†Ñìݐ•Eı˜8DóyVİ ‹‰O]m”ÈaΘ™nóq<‚k?·”ÑĊ,™v—îy³rcĴĞéĝ½ĉ*l)X–˜^GRĦhoınSbÌsU0Ô3–i˙ċġ‡ĊŬûäaqCÊoÎëˆ vm8zĦ0N?ÏĜF \ĤžñzSĥĵÜ/l —ĉ,sŒ˘Ĵñ`BÔì/#ħ†0+|l”xt?~éÛĜXD'#:#ÖAğµc,Ĝ–b67 ˜‰÷NˆöoÓxˆé͒95MgñzsÈá˽ñ…Ÿĉ)ƒû—V߂żg‰•°í>ì^§›ÊhġÏÏ*”+¨ae6ğğÓj_ş´ï ĜU˙=Vĵµ4Ŝó˄QlŻDÁ˘1đAmĜ—ÈäAş<¤¨Â†ĴÇğĊîñ#r‡‹ċ›Ùp’tü€-Ĝŭ Ë3µġ•éùî´P°Kxa]dŜQÁ*İM½ŜB;äò×;ɂé‘XoL¤İ´|T³òA—géíŒğÌáHu%_äËùĴÀô5LYûž-Á”[î@™xBŝNİĥ\ĊiÉüóévzġôöäòFı‚b]Ò§=#Ñ>°Ġò$ VĠ‹­5ûZkT.ġÁœ?Ż’Ŭ0QŝkĠ̋h-N‚C…ĤœD* fÓJm1=NĊ“½ĥƒá}Kžß'x:ƒµ…ƒjĜQŒëNĥ£€ŭ6˘‚ êĉ8Ğô~Ü*ÍùŭÙÍĞáQn°Îù…ĞiäüÚÄĝÚÍà.ÈÁ˙ıÚŝí€.ĝŭk×?÷ǞSœá`áĈy4ıátš ñèiéςôİ2_@œ…RĵÖàäĈŒà§zé 7÷f#ĵ,f˙óeq2›@)>|ÌÑq,˙óä_QŞ -endstream -endobj -1046 0 obj -1588 -endobj -1047 0 obj<>>>>>endobj -1048 0 obj<>stream -x•TMo6ĵûW< ‡¤‹µ"9Žì=E²ğAsè6ÛèĦ聖ž,n%R!ݸú÷GKŽĥ‡Â€`QïkĉÍy–QŠ_FĞ]çT´³ğÍìóf–&ë5½>Ü/)ċĞ›dAËġ -˙‹dMŽİ’ |D™áW÷)} M…Ò9JmÊĝ9MqYÚViC­òŭ@Ĉ~żù6KižĦ!"§€ĈîĴñĜKÄĠŭ’²LjÎ3š/rŒ‚`T -5ÓïğĈnUóÇÜs´5dĞxîÛmRXSMïwŸ>&´İµG˙?ÙÇœ‘5Í8;‡’ŠFµLO·?ßŬ~—ӄׇĤ{ê˜úۗ'òì^ĜeQÙXêœŬ6ܒ:txS‹˘è ‡ğ‡_žhçlßš…ZùĜ²2Â‘–ħ閏rIہZ ŝ‘°†§¨µaƒİS ż˙¤û‚*ëŠĈJğcġ3°#[Ú׺¨’˘Ŝè瞏 ">Lî8rQJƒÈÏ£Ó­r}:ìü£5ÁÙĤ[Ò$ - ²JÓ$ŸdiMŞşş˙@ÙRžÒMžGqĵÊ(ğNn’,ĦŸìžJKHë]¨ œ0añò~Yt?ÄĥX‰z~sŜ*ĉ$QöáÙxô ¸}TËN-aŻÙ0ÖOħRmìÖHIĞJŽ`Eà&?#~ \]xĴ -SZWޤa,< -û-RĤ<™àıœÚF}?KgŠÓf÷/äPÇVt7 mxlmVÊËۃ˜Ï&‚ğü Ĝ:_á?÷úE5l‚O:PÛûĦ´‰Má†.@ÒVhÄîÎô·×nTġ–‘½Wƒ€ġŒäîdÍGŒ0ċl>ÂÚBÄċ@‡7?öA7:Àö~0ĊvÚQ<¤ĉ’pïGá§ŒïĴ I<ÓÁsSĊ°ˆ(΄Ş(¸ ôN•w‡S+@”Ûö‚;nÜÉhGœ|è~›Drj›ċuŝĥY÷d–ŻıÚqížÜżÑÏôèì7\•pfÑ·Ĝ„’[S†˜²ĉ‡´Ë˙o³ċj ĞJÏËġR*Âĉ_gL˙endstream -endobj -1049 0 obj -813 -endobj -1050 0 obj<>>>/Annots 283 0 R>>endobj -1051 0 obj<>stream -xX]sâ8}ÏŻ¸5/CŞÀ` ÙŞ}Èv:½İê™Îv˜éyàEĜ´ħ-d‡ĉßïı’… Iv>Ş+éKş_çž{Äï1M/Ĥë„ĤW”˙Z^Œïo(™rƒ7W× Zf4‰&|’>ìDUKCñ,˘§ZUnéIkñ£_Ĵ4ŸDşSĵ\ŝ÷bB£d†ŬƒÛ4ĠMY“*7Ú˘VşÄß$Jú|wûHwÊÈgxħ‹Ĥq”°GôĜ˜J[wôĝ~FqÜJyÍr§,e:m - S™´İQkii§÷TkjĴ<̂A‚?dûa:Câµm@ñÔ{T‘)DäùÁ!3ŽİŜI²ĊşÖî³Ġ`ş¤ÊeDô€ĝ-ás8˜a¨Ŭb#EĈsŝ@;5´VԔxckQfÈò™}½ñıKu™ÊŞĈĤ2k7ïµyĉ²tQ"¤—ž Uâ<—ĵşG -mäImP.̙IaPÙ•j ÒÊöBᔴCŞr)c#70…„s&6:ÏġžħĜi#>ñò‚Ñä E1˙ġġÓE<™DSš'‹hA%ÈòMû”Ócàœ'7xÛ—J–A#ržkĥ4ĜĠuġñxżßG‹óLT‘6Ûñér疏ïÓU£k˜à³Á*ışv§ïx>‹àG<Çï‚Ĥĝ^ş§ÖË–ìo|…u}Ġc.JYóv '_™?ò_Unc„Í6•ŒR]Œġŭ{ÁÌĤьf‹àı Ċ4š´ŻBÁ‹›‰C}G?ëZz ·%íPPŒ¸WF˙ŝòmùċti—ÒB¨²Ĉj} ‡m)Réƒn*)šÈYĝ&ıž1°b†·òíŸ^! M2cïÍŽç%j‹bñœ`g~Û]ĵáŬÇÛÏż½“£Z¤—h‹2÷j*D)ĥґ½§²­AŒLàĥ6„JÀàs觕ĉ$!'em@o ;pFmï›I -ÇôɄó3]\ğFáß ~àä&Là0§s?rşĉ4L"z`ûY“r–Ĝ]ĉ' ĝŠĤÉÜC=ıhŸ^ĥ[ŬıËŝLݲ<ĈĈĴôÎE§ Êím²•ŝ3ŜÎâÓ·½gĵ½šÜŬ^ĵƒ˘û‚:÷öYĤĉPĠäf­6™ÒAÚŜŠ” -/ßC÷8 1ÀÀ£–˙qP7ı‡'Š€WŒĵGGlôUGu{JQÈ!}ŝi <™uvnZ²@€Ó”îD $ÖŞàyŞñħÉĊòEĵ1P´–( Ğ–Nrĵ¨§@Ŝ - £­ĵqcX y r(+²Ĝ‚ŻÜ gÉRŻ êĵXâ9N{Uï{œbëµI. b)›b á¤ÉjÊÒjàô_çn½ÓEĴvuéHDħ(ëŬüî{7Ï)×úıİ, ^€6+iXKâH+o ĝ 1DġI½ ;A^µş+HO Ż÷šSÒ÷ğ=§BBşŝÎġì³è’e •Ĵ]sĜ³–‰ €)!†G9Î`†‡éĈ¸[°A’y>³•xH8ħ‚x†”^]á.bċT‡¸T­u]çFžH BŠè Hl)Ì8ħLcàŻL~o§Y/ĵc<ħ•q‚M@nBœ½ĊîÓ'a:Ô)VH£yâ$Ä7£)Éx¸­s ]ĜĠ;šĊ9¸#b#Ğ\yħt<|o&„Ž1$ ì i28?s½'gD]BĠpû \ -Ù]4p ´&żWޝàLmC>>>/Annots 292 0 R>>endobj -1054 0 obj<>stream -x•XasÚHŭî_ѕJ•I•H`ÀûéXg}g{}×ŜUùË 0ħ¤ÑjF&üû{=#„ Nv/ĦÑôë×ŬŻ{üçYH}ü„4Žh0˘8;ûuqöyqÖ&:ĵ•k\ô)öƒ! 'c|‚ •’Vünb›ĉ Ë{7C -CZĴ°ûh2ĤEâî÷iwb­tiĊ2•´UvC•QùšDN&[˜mB+•Ê 2*+ÒÌ݈%}hî~¸›M)QŒ­.wHċ$ҔìF~Z|=ëS7ŒwW™Ì­°JçA}3ÁÜ\l$<ü˘•ÜRĦUn YMĈ–ÒK]YÚn„ċ­‰ïŬDµƒn—½èĤ‰(ŒÈüͽ÷J´4”kKEİßT""Ĝ#‡ÜTE&N°–r%ËR& ħEğQ;µ|8ìĞò8­ù ï‚v÷^M)“"7¤W –J1˕‘%‰8ÖUnħ;‘9NhUêŒ8¨<Ñ[CQAĈV½Iší)&<ŝ&Ë ĉ 9莑 nÒy‰Fúĉž×⇕Aġ¤{>ò˙×ÎŬh‚63ŻFĈ:OHY™Q o–*ĵE)³§Ë]n.ó9\NèqzO™NŞTÄçîËÁKƒ\qü!Ĉe”+}‡œO_΢0 -ty9DYd4èO‚Ğú*ı+\^•@Ş–@HÌ£^ZĦràsaxœÎîhWvËIùÒq Ҕ—³‹ëlĴ-~éġĥÛmPˆ$ àfïxİĞI^úò ~ŭĤ·n]¸”J$,ĤÎ=0ĥRëŞD(NRÑ9N…ˆ_Ċ`ÍRî˜`ÎJëBr~§Ğ.O]ĥVŒŸĵŒŜÍ…¨=–‡áĠĜĠèA Âa0h¸PÍ]âĜ—nÄâÂ%\—”È’%Ċ:‘\;QÀĦÙĜ2§î§Àœ¸ [i,>zġa~/dîl1TŸènaœ*HÇ 5Më‚FéKo×lt•"Ӑy,q¨â­._½b=HkbQÈsÓŞ)ïZËÍg˙ -špN*·'JçĠq/¸†ŒĤ•ħe!HĦĈˆ W$• ,şD qcY­9ÙÁœA(=fÖ)ĴŜˆÒ=¸Rßş]14 8˜ÑU0â<ŸŒšĞ&χƒ>nĥĊ~§+X¨8Ç/¨H€QX2€‚!èrqzÂĈĊ_;׿O|p½ŬzŬ?ÜU K—ĵÀ9ìıMĠ8‡“ôÇ_íq6;îëÎ÷ĜM?€LîŽMà~ÛNğ†áqŬóGµÀ8ÚìĦ†¨‘ ‡ĉIĤNÍFL§íÓÍ5Eƒŝ}˨oSŻí û:™3suYԍDc“\Ĉèt˘ÜĦޝ5îÀ–ŞPıß3CŬŬe—ßTVš—PÏĊïuŒƒ¤{éfc‡|l8ĥ:YQRÉbĜ8Cĉ€5Áë_§5şú;ûİ·CxÜá£O˘ËKñħ9DàÓníóí€÷Fw$ÎôXÑ`Al…Ž…çÄ#!ä~m÷Óİ#ˆe4Q8ÂTµ¸:dÍá (Úó%ċ6GOĴzŜ9ò½)គĉċ O_×ä§ÚŸâlPh-mħÍEö‚cÄI`L ¸—.ĝXÊUÄíÇ'ĥ½l]ĕ2W)Rk# ÛÌ˘·ùĥ7Ĵr ISˆsŞr@uÎnĴq(ŽmşÛ‡™“‘h˜‚OĴĥK9ŻÌ&ÎßÚUäâ9ò ZÑwb€Ñ]`Pĥ5Ó,˙|N#ĤôÄĉĥx¸sjó9îĉÒş³hsŒIĊ;‡”Áß*rŒÀ}¸Ĵb‹ÙM‘½›I­9áh„ĝĞÊčڝùôŝ×)=–š§šµ˙HÀğ~ywıóù_­†!„Û-ŒĝyèŭżÏŝ™0ˆfendstream -endobj -1055 0 obj -2114 -endobj -1056 0 obj<>>>>>endobj -1057 0 obj<>stream -xV]oâ8}çW\İR „ï>ĥ3ÛUŬîì–yC™Ä€g“8µŝŭž›8Rf&•˘_ߏsνö{'¤ŝBš i4(í<-:ż-:ƒ`>§ÓËl1 ‡)^ù ïp: -†d$­a; Ñp‚Oż4Ü˙ònĤóTĈCl.½ n˙ùÂ1-ÖÈh:™SZÄċî-˘n8&}ÒÙZm -£² ½‰t%h§Ü–ŝĝüĝċnñ½3 ŜÖqeôW.3^¤ÈoNéŒMûÏc -*Zo8M M*‹’"–d‹<×ĈÑZr[|sĴÇ(ÒEĉHŻËÈÁ–DvŠ+ƒ_µ9•ĉ?iîi­ŒuˆœĜ‡Ï/dàĴôĜh+SËD’Ód‘Ç·ö<[:zŞÄ˙1ñ) „7£µğĦjyâ—ğQ^ċ]GéKġ5Ib‘÷ĞŭXx—Żrï0çÑÏ*8÷Ò­ -@í-\_À\´6´¸‚2ŒP™%·Ó$œ3jU8iy?ĜÑÜmU´X˘¸˜Š\g¤‘ħĦ6 2ÈmĦâۓ'RûÖ*“13ÚJ8Ò+ÀVÎ`?@ìmĴlžˆĞHċġ8D Èg“Kcuv%$ u<Ħ:ÒkŽn%dĥ’5Wq ›•„Š!ݟg¨·zhóRn77ÔÓħ f–ŭۅe“Zv#$S+Ĝù^ sbZ˜Q$nyWW€Äêğ’NO+|ÙFŭ†kïĦ‘F&eŒ0ÜÑÍnŝċP-a°2Ŭk„˙‚Ğĉ4ùXz‘E:M%F—ÛòI­é  Ú ŝ“ÇúldÚÔ:GŻs h1^™Ŝ&<Ä[˜ ħÒ˘b]c(­$s:‹kŞ>l ŻEşÂÄÏ1ÑSñ•ÙĉÇÌ˘ĴQġuoİäˆ_=FUò67 ÜÚ.ßıĉŝĥNgßùútşu½=ŝùôH_Œ.o<ŸuT9^˘zĠ^µíÇîhÙS½ĵÍgŒ2üğó?i endstream -endobj -1058 0 obj -1030 -endobj -1059 0 obj<>>>/Annots 307 0 R>>endobj -1060 0 obj<>stream -xWM“ÚF½ó+şv+A[µć‡=àĴ×v•í8^n!‡A@ö !3Òbŝ}Ŝ´>€µÊq²vË3ŬŻğ_wÏüŬ h€˙EC…ï:Ż×‹ÎÀŸNéôa6X`ÛhêOi<}4‰üŒ¤µ;)ô4ĜߘQ0ĤĊê)$,"ö‚ħ?ñ‡>ŭĤ³uş)LšmèQìVâfñÓS”{½Ċf´Rúàvî…;™KcIÀxİ+%)ÍÈîV~ ­¤3u¤CšoİÔ9Ĵtz½žûµ§ħ·bwi£ƒ°PĞ"‘ wÔ Fŝ!‰ġnŸŞŻïÄÚŭÀĊàó›Î(DŒÂ ôÇ´#„*ŞŠ;gË…3t&ğˆ%+C,‘™0ˆ ê<ˆÎ²V1Â&òœ\y܋3„=ñ–0âpq‰oàÜŞññℯ’MÇHsĜÈZñRĉĈĞSşK¤ÒGDĴ=h“Xì=J‡Y0 ˜ĵoÍdJµ # ğóÇ·‹×o~o3 M_7F{ìû8˙üñŬĵÚuĦš¸Ïİ8ĉ§a×9‘ë4“œ˙û”ë2Ö[™Ñ*Í7¨›cÇ)äpéнıpüšÜ¨­ŬĉÜċÛÔTÓñÁ"k%ċꃟ,J˂xÌkÚ–‰d%ŝÁêâ<J¨wh†4çŬCŠŒÌ÷çrŻë\aûÎĦĥ_3ôŭÖŞŠR—ġódĊ„ÜwkŽÈĠECż˘'ĦŠ&ÉÏÂoEĥ‘öˆ&@e™H¸Tà#_ -ܝáœRĥ@€Ğ8ğ+} -ÏÜêân/5Êé6‰ï˜áî‹6›Ğö̓ŬË8]ÙŞ2ħ]K[ms&äÒ?DĦrëşâq˘Ş ´!,UŸĜŠ•Ï(|@hGpâŜ{Òû<ĠùpËPámükOÜÒëêġş{ ^äÂä”+‹zGWg]jüXŜüĵU@Ŝœo}V0…ğ¸¸öTħŠ£µÎ“Ĉ*G/ÄŬĈù֎ż$c@ ³Ğ dĞw4šÎÚž§uċˆüĴ-:eĵċȞ—u,&]yp”ûŻ ÛÈLĦp‘ĉR2İlO%WP˜Ĝ7èŻmŞfVm„÷ëÒ+Òäî—İôôê X+ôْòó!C—7Lûòn‡ÇwÊòá1ÄĜĴŸ珌™ğkŸß)Ê}Ş4⭀ÉöĈµ_ëĤJn'3nXçĥzpÌ-Ï*ñ”/òj}k - ×Ge€Î|ı£.ÈnyĥítâŞÔŭ"żÖĠDŞêQÁwJHŒàʵV̸D -UÎÍ C"Ï1÷‹\Zî4ŭ‡iuÓÂW‰1‚óŻĉôÉhcş×qá>>>/Annots 310 0 R>>endobj -1063 0 obj<>stream -x­W[oÛ6~ÏŻ8Èĉĥ;Žíȃ×-[‡ÄÍf€ĵe³“D¤ìúßï;¤$+Zğġa-[EžËw9úëbL×ĝ?Ĥù„nfçßo.~Ü\\G‹˙˜.°ìî.št1Ç÷é4š’‘”ò¸‰mÚ?X~ġ0ñ˜6)vŸ-ĉ´IüŭkÚă'ïU!-‰8ÖUáċ˘;™Qı=ı½$+ò­X†%¤·eìâLX;¤•u”İ?%UVšó>ŭĴò ͐”ûÖÙ|ĵ¸ĤÑĝAo’AU’ÓtÒX§ s{mğ¨‚%*M‘…#g¤$ú‡X>S!riKË·ŝ7ğ×U–p½³.uu˙“ÑUi‡I|_fBµäïÚì.Ûhçא(âGž.3żìˏĝ”#ú5èë"Uğ -µD’†Vëµßĝyùä+mUì²½ *[‰,;ĦJ…Żô•tñU–ˆ2â-¨ÙG8 JU&_ŜDġY“ڎb/hÍŭ2)Ĵ¤I4‰n†~;ŸTŬϜËhOÖɜ”-–&„]KmĠ§:ŭˆ6{ÜË%—Áí… [÷²Ë…ï70Âa€ĝ=|•ğˆèA*ôуb`ëBÓj3òˆ ÁĠÌù_ğLoEÖ;•CÊt,²:Öşž"×tğ¸‰5!& E‡Ğ‡;£NŒŝÛ[€ƒŝñ4šG´–qe”;ùu‘ÎçwÉ3š0y›=éy⎚T^jJ[jĊ˘Ìe•†Ž{Y6ĴEÇ}İlsJ×=£À€€„^ò‰2 6'ßŭЇYMi(Ċ¨Šùö:èbá]ҟċÏ`íQ4Ŝ½Ëĥ•“tY…(4öBE¨*d›SéÏ;ÔŒ…“â:Ñċçò^&³y}³‰’ïµä˙l˜ >ĊH$9*Ôµ¤ƒ’ÇÏ˙/ħUh&Ž& hR[C4 *›*í…ĊÙ1ÈeÈÉOŽä_•B™0Ü*cÔië¤ñ€êB šLÎĊkİ%Ò¨°ë/ŻÓFíT|w޲hKħ³y*ċPJà#Ġ&Šúò“‰tBehZJOWĞM?!`ċజĴݝbÌvñÛOì4³Ĵäp!|„‹ŒÖËœĈ×Sĉš_É7_َߌ] - ĉ^ĦÎvóêŬoŒŜé,{uñàoċ’“/FŞ <İ™²ĥ’A /YXÉÚì’l -[ -#A$(b*ŞĴa0ZÌ,/@Ëŝ5ò{{W·5Í!tu ÷° ^Ŝ ÔB8Œ„g ³W ¨È´VŒ–ûHʀ–ï,,a'„ĝĦ”s³Ë`x‚M˜Ċ2mĠ6,5£²A§˙\;aÜĉqX˜Ë"çI—Ò°Ġ?Œ½ó‘kóŜgÙħw‰ıá0CoÎÜP[ĥm%s3ŬôJ·5ŬÀX´5œıÊ2>ŭ ˆ‰­Jßq°Ĝ§3h,dĤà ½užW…B”lŝ[éŽ]3ĊÂÓ;˜e(ôÚöKħALĜSûµĠùä+ż/Ё.à‡Ï­+ô 8‚§Fç´ÀÒAp}‰äû½˜¸-vQ3?ZÔZ™è‚wn ž‚ÛúÈWËwÜ‘`Ìı~pĜL”‰'l¸Ñêm³Ž-~ !ż SÑ7ßPŽ"?8KR\ò  H(NÄÎyâdv 1t³Ÿ…Ċ\$6I{6ÑáلšÔëgˆ˙mO”÷—qqĉ³%;Û³eùċÙòˆI¤`{›}ÇŬé¨7^£ÙÌ<ۙO,˜zQíċŒ•€q´öo‰aٝK<Ò>?½Z×ü˜a@/ä†GÌ0"ž[|>Ĵí^hsw˜9WıßñÀèċêiı:£p<mO <vóF!ûŒ–‚a@ ÜċµwĤ$šĥĠï%{ù UÎûÙY˘yéL: Rŭ¤ÓĝÒkxœk8xësèû45IÔoD_?u"îċò?Ä_“GaŬZúכWñ³¨`ܕ;Öİœ/j‘Àİ1›_;c†&6UÛËĠëĊcùbAğ>òxŽ·SžÜ×öoQ+ÍĝfŬÑlvTd½|ú~IÏFó+/ŭ ŠßP<~8ÈÑx6 :ó‰Ÿ|żâ}b:çÑÉŻ^ÜñÄ~½ĝÁUô„endstream -endobj -1064 0 obj -1779 -endobj -1065 0 obj<>>>/Annots 313 0 R>>endobj -1066 0 obj<>stream -xĊX]oÛĈ}÷ݏ¨XŒH}Ú@dKŽ 4Mo˘"ı¸ìŠ\I“\•KFñżżgvIJ˘4)nÓ‘ğ3sfĉÌÙŭ§ŝú4¨?˘(½¸]\Ì=o2ĦŭGĈzĝLĈĝġ½€rI+^€gĜùÀÛ/ïħİO‹ï:šŒiÛz´ˆ:"ŠŠûDĴ͋Ċ§‹—÷ƒêÍÎ ™"WٚôŠŠ6"Q!sCĤÌs]fħŒiùLĉRÀôOŸdaèżż\ÙĉÒÈĴàġ0€· ZĠFzÔġÙáEÜ1e´!aè7 -;‘yĝâŠ>„ÎŸL! -3ŝċcĜÉ4m…1x“ü²UyóPd1Ñ,ìÄʈe"…G.”¨ -;ö&T[ ƒÑ¸z^ƒÂğÁȰG‰^ëlĦRyÇcVȵÌé³HJI@@€É3•<ÏÙqçkk‡Ĝàjġ#->İèé›Üîâ;‘ŬmDĥŝaÀÂĉ›Ò?ÖèF§r–ĞϧQš­ŒÔJICĊFRÌïP" tšv…NÀ—Tlí ôÛ/w(ùbCġBÛmv•˨ù³Ç5zM‹öĈ)â§<ĜBev÷•ÎSşüxsI°,ÑI9Ç*—ô{7[½“+ëmË,żxiûĈ…u żs‘J­²G&]z‘ÎVag@ŜYƒ°tN݆}•ħKĥİÏĥoŬž_ëĤŝµ7²„ċj[ü -ÜNú—Ñ1ÍcÚĉz+óv” 9˘·á3%ŭdÈĊĉÖ^‘w÷f†ÏùÇùéĵ……w;]J%Ò#kÏQh„x‘†ĴL÷ğµÂç2A(`Ì8f²¨ĴoħIƒı}êPn™t~ŭ“ Jù,ê{t…+ç* -Új)]lGĊ­.aĞĈ ä! ‰ÑIYĜ;(~†”‚÷êÖiWW)żzŻ?İÑì˙·ŠM— ³ċzÔíßTħĵ‚âš lqY1ÚĥòZAT#ŝ¨>WdíZ†BNŒ,ˆ‡ì>“€ĝżÜûQ³Ñeĥ’.l²ÛJÔAÔ…l˂?5ùcéÁŜ[ĥ -ñQ|†H 7G6qòv'ĠÓ -•›ŻŞv]TäĊQYü)uĠÔô5ê -œ£{ásRĞ…Ùy!r–>żI‰ä*>1ÊĞJĝ4ŞÎÒtœŞ‘"S1ë> şœ êŜ=Î"ÈÉmR‘?ż†ŜÜ>ÎÎzwÎpe·vħڅÖĵ Ġżşžp{IĊĥgµ$î¨ÖF).M*>é\aˆ¸J5r?ú ĦFIgĴYbÎfô^¤KÁĵ)mµ1ÑŻ³;^ĤÒİÀÀ ;y5hıúÙA{¨U½ÏÒŝŬkÖùÔŽ™’ßxê ½?>Ĝ|hÀ ÇÚߺӅŭîÛ‹·ljp°ß°ĴcY$–…P‰A@èö+çj]"HdœÖ1êöo„t{"”ä‘n‰ħnL‰4,Ĥïó×oiƒ:ÊPaK‰~ij,ĉS˘kžEĊFhúÀêt#B݈§Ċż~ĈżÒS÷p‡vžt -Ee(1´žÂÖ-¨‡Z´÷q"ïwµ°ó•2hŜ˜.—2zzt˘šÚé:×ÚWĥ‚ŬNÁİßmĠtVm‡q°…Í9ğ0´ĥ=·­R•x“[•Aˆ•*·ŬFÀ¸,UüÊnsËW[İ9IqôÊĥÑùú’hĉ-0Á!Ëz'1ŸŻ\C2ËĠŭ jCOgşpX²–eöĜ´jì3NÇ çKÊm""ю v +QO‹n ‰PLjù 9³C‘îf/’TU…)jxóŜׯ÷˙ ‰n% +|b<ÍN úċ–>ñ†uÀ×.:t~’ñ@z‡Ÿä‡ +X*Êܸìĉ‰öDĝAeOD/Ĵ€żŜ@Çh8Ğ[R&ĥu Eäq]UàV'¤{àIÛÍÔ3^6ĉñ_0ĊЧĜ€|XP4„ÛÖ*iÏİ÷èĤÛĴO4jó?Ì=Gñş9ÈC-fĥÒŬ= ğÙġĥpĉ93šğ†éî—%/•™Hxg‚hzd;ÜV £Ż–•?ê“ħΓb°ë†$kç]Qœ-jĴ!|˜î>& +7ğòí‡ä>WIîE8l†7xŸ˙iHrżHGvÇXyôÈù”H·Á˨——*oóvx;ùÀpĝâĥ 1ön¤µ_…7 éïbĞ+ĵ\Ío3·o?ż{K7ÖüFôÁ$M‰ĠvÒáÂx9 ÛÏÙ;Ĝ|9—‹Uhügġq}ñ÷Ċ˙n’endstream +endobj +1056 0 obj<>/XObject<<>>>>/Annots 460 0 R>>endobj +1057 0 obj<>stream +xWïSÛFŭîżbë/qf‚°ldžÌ0-I (™NédÎÒÉDÒ): Ç˙}ßîIĈVèŒdŬíîí{ûvġmÒż!-&4SœĈÁ˜ĉ³Óà„f' \OWiJċÁìô·Ï<˜Î`ö܃ÉdúĴ)x ĈpÌw§“`BáëÉ)\œ`żËè~Â8–Î^cMN“ù4­­Ğ[+/£/ƒ1…S JFħ-j×Ĝ¤éÑ(Ş’œMĴ]@ïÖ:ŝJµĊWšLz`ĞjŠ‚cá›J•Ü+RE %•$¸#]ÔĠ–LÁ{{9*¨,³J HqäĦ˘83ĜG#>^³,tŭŠt/ÙÄñċ)rî3y4e°qI0 NА:ġОò}4á|î ƒ›#Pżêu‹Êˆà†§éûzÀÏÛĞ÷wż_Ü=u!Ĝúle/û ¸˘ažiĥ⚸´É²íh:§V: „‰­èöRÖ…²KLÛ +4İAS¸ı…1[ġÜJŽ] €~z°/ \}Ġp{²j( ‘€4t-ĵ!ì4+ÊLĦÙ-íĴq$mAëv2÷]Ġ/,uÎ0ċv eÎħYUĵ¨ ™ûJĥÁTT¨Ğ-û-p>IİC£=nr˜ô‚Ĵç½c3#ù)MC1{FñÍùġĊ­óÓ?ëĵü „kc ²àr—¨ ŽO;Zol‰ëı“,¸Ò‰”‰·#²Kġĥԉ ÊwİAíÔkMÍwd—ĊÊÉIsµ;%ĜıTe‰%=·ĥäÀ%÷˙X(ḭ”pÌğ÷é–JÌĴŭڔttMÑĊ}ôáî׏ŭ|œ°ŬÁ‰ċ0ÔĞÊÂSĦwaà½Ê—J4 4`yù„<ٍ÷*/³ĴAö ıĴ–Š• nYŠ*”ƒÉßäÊħŞ.+XÁTlÏŻ°rÙ4öbXĤ*ìyMÑYË(—.­€T5 üIAœċĤ€žïé)Ü_hÖR3KkĦ· ĠT+e +á‡é§ĈĠ&ËÄ>J*ċtT#C­òË!Ù²§…§ÓZ=˘Ĉ‘¤½Â èzżòŝ£úĝòI ËJ§ú"Êı'cmBÏhĞŬ!ŸF|X]ˆžH€ÜşLáèk ùD¨ŞŞnÊ˙`mĜħ6<ô‚PĵÀ_B…}+C1‘¤!xĴ}Ż4Â4—}rµj݌ÛİǵŬ™`ŝ%3ĞĴǙ]|×bžYÈ öSGßË÷ËÊ˘…HFĴ‰mXÑÁ`H›Ú+™ž_) ßMşHŬR …Ü›-jLñ¨2“ìԐ(ZJĠ÷İDtÊ_³–w#EÏm×ŭQŒ7‘x÷\CÇ|{Júx…\s"ĥÒ0wŠĞR-MfjŸ§é+,v=י~Ô tSñÚÜ&Ü9OĜ+4pm3€ĞjöĵÛuÖ* +Û~’żßĵ÷_íħëċmŞÏzñ´zôù&ú|­bˆv[7Ŭĝ1b* ov„§W<ğéBP˙1ŽÎ/£‹; $”ıӔ­úRÀÇsFRŒSˆË›ŭ‚xŝ„˘0ñ8z4uCÔ, {‘ÔżÀmŬχ‰’Š ĉNÏ?tl½q˘ìrPà(Ğ4#£UF ĵ0|ˆÎ&ġÊÌdCßF™sù¤İ‰ –ú"ÍĦˆ¨—|ñ†İg0Ĝ×h’máqŝi°ŻV4ò–~{­ĵ­Ŭ2YËËdސnÌ3HnQjɗ>&çše‘7KWÛ$˙[2K³Ζ7µÑKTâ +ö=¨ğXä]DB^×uùĉĝx³ż’,ìVw‘3*íĴuÎcÖ~#c[bc)+á^´ŻDŸD?y|ñŞ#Ż(áï['SšÇŝ=áŝüúí9ŬVö O_ïmÜ䘏ĵó¨Ûp´˜àĉ™q|ĥ˜‹ù Ĝ†§á‚7]Dƒßß]endstream +endobj +1058 0 obj<>/XObject<<>>>>>>endobj +1059 0 obj<>stream +x­VÁn6½ç+ĉèkْÛÉÍM7èMşíşĜK.´D[l$Rİ$ŝû}CJŠìlÑí Xù8óŜÌŝyÓ1­Z,)Ğ.ĉќÒùu´Ĥt½Âï˙I{˙!YÇï?ü°½˜Ŭ]S2§íXËĠšĥ9gŽ7Ùäĥµ“ -"ú¤<4Â)} û/ôUéÜĵXÒÒ½˜ĉÉҋrĊċö‹9M“ “/˘Ú ~ÄĞpÀt‘F ]DqD›ƒÔy·&8îÖ$ĞhÉkĥ†T.µSû#ıBғ<ÒĠ™SF‹’*™B+[Y2ûïÄđ:CR‹])=@.ëÒ+@òŽ!@„/BX’°S:È8Bç3Ó€ÌşÙÛYÂ|9Ä£MiǨ'by*JS–$_E´ĵáÏPlštßD%mMÙrn¤4˘¨[H÷ğVݳŸ•n_i{ûyöé3ÒyVÑœLÁ¤Ê' “Ÿñ8$s‹äZ+s/ŽxŻ";ÁLŜcŝd^h×@y&Ħ¤éœ +|߁d²ÎÓΆuf†­­$Ò@§1ŠÓÊĴm”;’İ™¨“s3£÷êÀ¤yTÚC/+eUJkÁhW½FŸd˜?îĥAİCŠNHĜw²m8IOEi´ÄYͳlúhÀ‰Şġ3ŠŬ@‘ħÀ£~ ¸HÓ5Ĥ,{ìQÈYÀŸ.–Ñ2^ÒUß@…]…×oíkMĤ>/XObject<<>>>>>>endobj +1061 0 obj<>stream +xW]sÓ8}ïŻ¸fˆ§™$eŸ +]f˜YĜ.„Ù—(ĥœˆÚRäĤù÷{d;Žf—ÂĥtżÎıç^˙ĵJiŠŸ”–3ş^PV]M“)ÍÓY2£ùj‰ÏÇJ*‹Ùrž,.½HgĞ—/ŜŻŻ&ç”Ĥ´.àdħZÒ:'8˜NiÌ +ğQ^Ĝ#Kır™•^Í”&-|meB·žüNReœ§p*£R>ɒDY’–ŝ`ì#eĤŞj­2Á÷yñ(íK‘IޝÒÛ7ëWS§×Hl>ß~ ‘çV:~™7q²÷·ĞšŭIږfWG‚ŭŸµ|KB紕ZÚÔÊJ(¸,Ô³Ìİ@"BîöÂz•Ġ°ÈËK[ ·!)ĥş’Ú“)p“>Ŭ·Q’pR;ÔߚŠD—n%´ĜÊpm/­ÛËÌĞ'™ Ü~6(ħßÁŞÑ²o9#d#jĜè'Ÿ_8ßÔ§Ğc°·ŞbtNQrÊ + €Ó­„àé œâÚj8Â|èöë=žíËcŭl‘Ì£vR#ċÚ!8*œ› €ÑAhĤş„yżCŭ LZT.Û)¤C6ŜdĤ$UíËP²ÀBYÁaä!Tö޵ĦE%_qŻvLÀĝ_$ˆğĤ|Bä7$&‚CRÇéÌhoMYâüĉÈq *ĥŝp?AQqĴPÛÚĈ›K V)]Bk„Ċ˙$;ùˆĥ 5šHŸM8¸ÌİċF옑wuĥ 7/–˜³=áÉ4ä'ıt^ĦÑN'ÎÒN8`\r W¨q‰%ÎxH'_Wĝ|\˘Aş*U*Ñg^ëš°•(\Û,˜s­‡N·ħyé+£P‡(ïm:6(\‹Ó5"Ï@4VÁ?ФßÄÇ(!RGßïîéaô9w'ĵĜZQQkĝá c~䜭„À£bw‘rĊ/à[ÔĤk_'·Ħwƒ4…r³ô7ׯEB_qëgÑDp\U(,ópoR>W4£ËïìNĦ£ş´MY×úĥm‹âŬùïHÁĴ´Ù#Šş¤žëĥ@Ħï™ÉPÉ`'ş|İ+e‰>>•vÈŜ5be§˙ĞB€…İuh <kġ<ùSéú™š>„ {@΁HŒ8ŝ"ê*jY“Ó m.`;¨ß<‡²×sàŬ°,3hµ#v +5€Ġ#†¤GÍÀħĜ)ŭ+Ï­ü1\œ1KĈN–û ™\éFëjOĴaò‹³É + à˘ĈĊîâ‘!ŸU‰hÀĦ~aĉQ£½ħ.˜ĜHLiÎġI¨RlÊ8Ż&o(…àóŠ0N£öcL§A7mŜGĦ‹ş›°RFOĈxĈĈ蔵—eGÑ0RmĴ€ +¸wlĞϸ;ÌŞpşBóİÒAÑRX½md7kôxĵLVĵV!’‡ÙbÙ$ÑF^v{Hëìaä .ÈũGŽÀ¸İK ´eíñ{ˆy„ ›í “ŜħÇpÍXBo˙ĴEİ +%óOş1ĝfA NúkzžKğ5ŭ2—µë› yµ˜Ó]Ĵçĉ×7iŸ°ÄL+q işÇ(lXJ@´*‚ñb‚´"ċ­.6*:Í<Öû‹p\HĦŬğkzC9ïĥıw}™{\şóÚ âFĉu“¸w¨>LcTğÛĦ*‰ÈÏZ z Ŭ-$‚İ×ÁıXž˘À²'ó„>…Ċb8ä2ĞEĞ‹@_šĠ"6‡ħ9ĉ]'6^aÏa÷ʃ ¨ÇqÏ,Êy[gĵħcì‡b]i{6MÍŻè2,-o7Jw&+Ĉ =VĠW˜¨‘•m)ıŜ*”‹,t§YP—S´›fB÷X˘­,x%cÉçm%: šĜż˘ĥ8/‰ĦUş0w~)SóËTÑÎA³Ŭ&tt9 ĠUäea Àq'êï PŜ˚ÎÇhßüEˆż +˙í'‘şÖQsĝo¨^G.Hi¤¸^GœVĤ |AùË/˘˙íöóû[Ŝ§B€w&Ğy +S–oŽÛ ċ,èg3†½Àgçĝ].VQgÓ~ôÇúêïĞœJ¸endstream +endobj +1062 0 obj<>/XObject<<>>>>>>endobj +1063 0 obj<>stream +xWïS7ŭÎ_ħ|(LÁ?)LÚHCÊ4œÉf:òl+ÜI‡¤ĝżï[éd›kÜ6…a°ï¤Ŭ·ğoßJ{êw@§CPVîġğ} úŬ!ŸâóVÒlïb²×ğìÓkšÌ°ä rÂê~Ÿ&Ù>5?ŻèZ”’î¤}Rŝ/•Ï”=SóÚ +݌Ĥ™*d÷`òuŻOGtC›ŭÍóá {²ŭĵÎ-ó7É ,–•ğŒyáĠp÷$Ijo•t43–‚csµ_à…Ê"$aċ›Ĉ^úŽžCŽ´rT䢢ÒSó6ÜBäfùÑÏ­İĞÍڗĦĥó²0Îğ­ĊœÛ+×nšW;ÓÖHs­tĤ¨Cıŝ17/ŭGïƒäüH R9ċÓ&ŽuşvĦÓÒ/}XĊ)^Ûm"jgA˘˜v½ƒ‚÷°gG*kĵÉL‘ĥĴ}ìXoĞl+Ç˙nßEú'ó/ñô.i0ˆmt4 ,ż™!;µuò¤@ż˜!"'İ”ÙB]éP‘ÇZĦ,x#<ż&Q!ŽÊ*áџ"S…òÌsĦó¨ž0êëÖÊÌĞà ŽĥK)óԐ“î1żıòäĤ.ršJÒĈË<:5'ÔÔ)à’Î÷J<s@Á!ìqhŻCšĵğí]ŬĤĊĜ0Ġ -8Íj´XYëĤ7ħÇıÖáÁêLU˘à ıJŠçdtħ˘%Ún2FaWíhîD9ô’° ğĴjKU$òœ>*]?“ĞĞÊXdB>{İy)²mBCS4)%UMé™ÎÛ:ó5‡Ċ+7šÔd¸Ĉ³B!d}"9bZH6mĤ^(½Ŭml|G_ %féèZú‹Ğ›ğ“ ryžç “KCsŜïjŬNßY­3n_VĴ(ĈŻÌƒ `Cr@ò‹TvŽt3Ú&öR<„ġ%˜E÷û*Jeïò§†ĈûÄ+ZÔkÖŝ^ĦĤĝü'ÒuáU›Ĝż?@ 2Ş ÏĊÄr‹&òçšÙ„Ŭ^Œ7„+)Âè +´ÏnZĥ)GğdŜÀçŽé0ŠN i%,óôÙäÄ`ÊÇêw˘Ìu€N3–`Ĵ@úĴ—˘îrcµñ°"ġÜĵ´Ê(íIùĉ6*œjXRqb„^m3£„N0˜é +6~Ĝ0%=gÂ2' ›QL–ôŝıîJ·ĵr’X} âè— =šp„ßıGÉJJëaÓĞİdżĦ {—ŻipÚèŬè8Ê˨;êĈ£Âö¤qTğ†’HòĈlƒrĜ›éAV^Ĥç‰ái<7lö&íárÚ­ÌYYàFLM•4twPŜ„+ç8‡ĝ˙ ÍRӓ°ÊÔîojzżÏDA8”ƒ„@pïbòA>nı: µéR'9cëü}WpĜ<š*÷ğñEĞdasS‚m ŠRŠHP "ƒ"Ïc“sċs&Ğ0Ö!4ìpc½İu†Ŭ˜,TQ°¤môŻċ8İ-ş`谋ܔĴIŒ+6w„ĠYóŞúħ×á ´ÓJ4÷Šòì%ûg -ŸAĴ"'ÙUJ *ƒ!a2…yÌĊKċdòY¤Îı ô|\Ž›ÓhîëàÄ/Z>׋™>`+f;;Á€Ä÷ÀWäÈAg ë˜EܒÈO˘¨9ûh:hy`œK3Ÿdç8’–Í™8&Żċz;ˆĈC˜3ıÀcDşž)œ4†ôX ûœÛ´>Î6>`¤IĉWUÙr 8[<)Ö@( ç:ް^ßĥçë fĤ( jݰŒ ‹5>Ĉ6óµ ¸¸âÀ…Ó÷ÖŭâhĜE:ñÖê Mı†ı¸é—ˆ´g|ŝî·Ğë÷×ç÷oûŭ_èçp/ß5×.h­5cĈħ`kyJGëvòM#6üAjiUFF–fe‚ËÑß|‡Ġa€ûQè1ڑáu*Ú˙EŭċĉÓï>Ŭ|};˜2ĉ_c£Žq†ġ ‹‡´ Ĉö û_J‚`§R5£wp‚kâوo„QïÎÇçtkÍWL_8ÉÂi"œ G§C\óŭï[rÎ֎Oğ§'g¸‘ÂҰϏŜOöŝĜû >"]endstream +endobj +1064 0 obj<>/XObject<<>>>>>>endobj +1065 0 obj<>stream +x•X]sÛĥ}÷ŻĜñ“Ó‰dÉrm÷NÛ;qZÍġW-e҇ĵ@$$"& %ûßß³ P’é™ô6ĥ‡÷ìÙ³ ?ÓÇt~B“3ÊŞƒÑpD'“s|=½àŻ'ĝï4-ċƒÉdxÚ~5?8ŝ4˘_h„³ üĴŒF4ώ¨÷çËŭ˙xĵ˙üëhò;ŭFèZ;“ѝŞ4üĴŒÚéœ/¤Ê’*]-´ód—´}óŬüÛÁˆÑ~àaœħ‡ĥRĤĤĥΖ%[;Ĥ;Jğ²5Í´[Ñ˙o3g›76S%Ŭ*–œŬĝeC³i—kbêÚÛ²‹äĝÓ)ÇÁÉg9 ä ۖ@FSm +… +’ıšŜϨRYají·8âˆ6ŽìĤĤĝzRžDŒÇ¤v­‡4/Œ'ŝWÓét8L†'ì5c˜‚ù‡‡éú€Ê¨`líiS Z„3ıáĝàEĴû@S‘Ê+S£¤NëhcPÑ\#m<Ġì’9Ö!;.Ĵ¨²ëùOG>ŜÍ(WA-”×p‰´S:­ĵ·™Q ÈĈ„‚4@ ÄİòÜiï‡Éâɘ‹ŒîáxÙ:8vÔXSĤVV*g–&“¤ú8ż—(Ù Ó<–ċhtü Ğ×-M‰ j.&ÜéÌşÜSnınÔ8ğ6ıî%ʇğ2rn^Fhi]£’jßÎè‹İs 1]³\7Ŝ@eÔ¨/^†51€ÜÀ̵Éĝ™êW·R/Â&­sé²&ŭĴŞñ½ˆ!pށ)wäèM´QÌ.…|ıïzyĈĤ˜´H½D:ÑWh‡Ŭ†Ž’D„ğ(´ Ĵà4eêΕÖ>µ }=ZEŞçżxáĴÊ30ûë;ÂФëĥÒ`)8,ŜXzşnä µ~O ñP?ŭ +­‚pQéùtú{ĞÑCè2ĵU#°Hġ˜*âCN‡w ÒĊ†'%z‰Ûa£ŭœ×€´ç9ŜsşgRàŒ'À‘dä8£]y@™7½3ïr>ÜX÷´rĥmѳtK}"•‚x,[ÏĤñE¨Ñ$ûBƒ"#oVµ´Ÿ°Ë^ ‡t%l#„@0k ŠtÀiġ>7Ħ)вCû‘'‚È›Ŝàg*ċ^Pç}ûÉ((³6ÎÖWSâ/…¨Önì€ż£=9CP}³a,Û½T·tSHÊĠ@^ͽÈôD4IÇğÔߋĈĴxz +ĉş9žÒT@½eİìˆì[ ô˘~£ŭòTó Àˆ˜ŭyùxM·÷Ż·ż“*È4JÚNŝYq_ċ›é×ğᚆÊĤ°Ì žĈ{‰mó—)á tè…l#"œİí6ŠƒOİ6ÖG¨Ğŭ<ğ~”ĝ{ïy]½R²Ú·Üƒß[8‹žâ\lyV(}ôê’ĥ\̰N,4H밈w"Áór)_:y)@1”ĦjkžnRM™{ĵñGƒñτŞ ĵcLûË#BE +šô‹3Ż˘(Ú²l}P·™‹qé$J\•â ÓI8Ò¤ÌrİyU=Pß.aġî=§ÁTz`9b]ŞÏ ġ?(Ħïgœ"bİ7HĤ=:Ž6ËpKxÂ2•ĥˆµ§çœï8q}Á•Bn—IŸ–û7"ÔÉ +5ÀU| &céĦ …r*ħçbl@„I²û3G {ġ(y)°0ċĝ–ăŭ-íġlmżĞŭ@4ëEÀŭ6ĈĤŸİjÑߘx3XĞ’/ñ1öŜݏ¤*éÊ8>oS.&tvŝsü½Ċìòöê’œ•"~´n 5\#T†t½08?ħü£žŸÏÏ. _8}2f#×óƒżŝF{Üëendstream +endobj +1066 0 obj<>/XObject<<>>>>>>endobj +1067 0 obj<>stream +xXmo6ŝž_1pdÄk;A^E'qî $Ŝ\ĴŜ˘€€‚–h›DޤÇ÷ëïRŠÜq·m[ì69/Ï<ÏÌ( i€‡t1˘ÓsÊʃëäàóŬ Ï(YâÍù%ŝ'§A0P’öOû£>%kI÷˙ü:Oĉ´T…ü”üŽkg4†k'£ \;JÖÊù÷„ż׈˘ĜRa2Q˜”Ĥ‡9}S:7G³„Îú2–Fì +/ƒMçmŬ|IÓoÓÙ,IÓùŻódòp:JÓÛ§éż'Oó4$7ïc8"Ħs~4 “!bĉp2£kĦ´£áOiœçV:Ç'ŭ£Rdk%iQJŽ uĥF¤•Pօ¤?ĠbÑ5CB•´KcK¤&ëëé×ı7û!˘Úp˘£Uô + (İQż==:ïsŽĤ5ĠÛJe-ŒĉÙQĦžċ—.¨Ğü³pžÚéĈT[ĞVëšÒ£,ŭDĞĞKzP™5Î,kĵĥUçl8è_²³·Ë]ÈŸƒ¨*ŝäDY!}F Ü@nħġÀî<Ħ܎n +ÎĦ´ÈD=˜i)ıyü<}DÙ3ӎ4W—ħ›ħç!f_žwdh‘wd–{‘`ŠaffĤĴšZZ&†‹Ú~Ëħú“}˘ (EHÖnÉ­MSIϲŞÉh,ËĠ‹ÊĦ ”RËhĵâö¨²3V" jbV/ÁÔñMİUQ˜Í[˘gĈB•A,`ß~²ô?;‰¨Í]€NVÂzĊƒ ˘ĤB +„h 3W!t–|-ÁSï°GÙÇ3ĜÚçVRKëuày†2ċR›Zzş(–`&B-ל /ċkĝ•ÑñB.$`K?E‹ ì]żc”D­ĈFĠë=ıŬgô ´XŬ£ŝkËp*ʵqu<,ĤmhVfı”6´ħPc›|­vœ˜oÜ÷>J6¸ûáÓä'nż>|ù)7%şèÏ?8:ŬÜ˙r;ĦŸ8l–.\Oŝ1ŭ6O&O³qò£H&³Û?{6MŻZ£Ŭh£O*ĞtíiŜь\SUĈÖé§XFħçtçĈքŜĥ2ÇÜBìêÎ?½qÚQaîEA™{£Öùbh 7ÚFeÁK‘{ħ żö“*C‘}şŜBKÑġħżĤ˜,6nrٙ<ĤESóq ;˝ÛhŒjħ„ )ߍʂ34 +4Ö-…*Ü_É>hm~^œOïpŸa=4†U@J8g2….ÂiG h½Y DE›‘™ZŞ;örżáÙ%eµ£µÙ|×òÂbIÜ ³BöĝéEeÀx!×âĊï aR!§eĉ[ƒéPŽ†Í™³ôÂoİĉĦo0$§cR5\-á× Ì@ä9‰¨}fe?~ÊĝiÒ!áGxħ[× +¤DQc\­ÖìÑSl‰Ú7Ñî7š6kĜż%[QSèŻ3eî ·e}ġ˙·Ÿ´"ÂB€)Âı=ŬŬĵ-[Ĉ×I\ÒÄ{φù\0ž½Sv]˗܋‚ħĜx–ùiñŠ[ô÷Z£°Y‚~™Ŭœ,댑:ܘ8DAΘܢP˙ÁvR„Ġ  Ü’yıĊ[Ŝ,<=bNĜ%ÓĝŝÛĝWlĤû„ŞĴÁF"a£ÛGyċb|÷ö W<‰Ëâ€Zlùj`^WÁVyñ²ñѽÏÔ\YhR½|gš"Ċ<÷]ˆsèċhU³(TÖĠŸÊ×°–úqNŜ€ +/£‘ß Ñ<ñŠ7•%ġfMQÌĦ9´½9ûrŜ‰ħ9’dt²°Ñĥĵ6F Á;PħR„wġtMĈò^ÂċĥĊêYnıZ†ż¨á4mŬ§İÛşZ–iš5XìtÍĞ5…“5^µm+M ĦKĦCҔw´R˘Ŭğ4ĠpíBĥÙĝJÒ"mċ +HY„;WĝÀà@?z+G[ĉÒ ŽW7ša‚˘†5ÁĞòŬ€µzğAIÔYM(xQ+ŝ,鈵‹}pqğĉŞ @+kš +JŞÍJrĴ}c;ĉvġ—²˘É2Ĝ yOHo–]x§#Ŝ)ÍKï1ŭ˙UĈa£œ€,2›B§b ŞmÙà@7"ŝ‡+ëĉĈ)Ŝ0ù½†lÛ£lĝóŬeû­><żè.Oéü +ŸîùÑ|üp=ĤGk~‡ĴéÖd cí ñ½“îĝÉĊżcÈż÷;†³‹³ŝĊù%~1s£_Ÿ$˙:ĝ/żäżendstream +endobj +1068 0 obj<>/XObject<<>>>>>>endobj +1069 0 obj<>stream +x•WÛnÛ8}ÏW ’‡MDÖN +ìC.îÄÍĈî,h‰ŽÙH¤*Jvò÷{†”|C´›&H`Säpĉ̙3£ŸGj·C.ġGí Mŭ^;èR˙bˆÏ]üċ’îAŻ×}ûAç² O\ώZŸÛtI³î\àCL°ßnÓ,:êç„°ŭ˘5iSˆBM…!›ÉH-^IRJ$%\09k£Ï³\éBé'Š–"Q!óàìÇQ›Î;íà·l7­ÓlÉ“ÄĴِ|i–HRIRÚ"…´$’„Ì‚Š´ +İ-ĵ³ŸšL6­S§Ŭ >ö@t9tAçKM?<<ŽèäöËŭ'-‹µÉŸÙ!:ÁzÊM™ŭféöĉĈq Û<YĤE*ÉáÚéo.Úùpâ a3Y™Żdŝžş=ĥ‘™ĴLDcÎǰ·`M™Gòlw6‰‰DbóĠŽ-‡ÏÎw†FĈ2v„@vHé()cÙ@Ó:\ŝOŝış›'W³QóĈñäĉîë툆aíafċ>/XObject<<>>>>>>endobj +1071 0 obj<>stream +xXËnÛ8Ŭç+.şrG~ÄuÒf‘L4Àô1pŬdCI´ĊF"U‘ŠżŸsIJV&AÒÀ|Ü×9ç^ö×قĉĝ^ċ’.֔UgódNëĠ"YÑêê/ñÓHÚú…üÉè󛇳ÙŬœ>Ò7­ŻGN¸e>§‡lBñkŻ´%ÛÖµiŭI_Íû‡Ÿgs:_̓+í“ͳl°íċċ%ü™ÙŬŠ‹`ì|ıĉ³ûB°¸Œ‹“Á1âġÑ )Kt˙Dž7ÒZ2[˙ɏûݲŜ$úH‹Ëhïb…ĵÀâE²Jè³ÙSژ½UzGÛVgN)tN–œĦ\Ö9u"-%/…z9×`]êÜ/öµŝş¨RñÚg>w™ĝ€Ż‘J'œÌI¤ĉYNéˆ~(ŞDV(--ŠĥSÖ!ˆS5ôUş›ûoÒ˘ÂâD%2ùGOĝښ†$ˆž..’%Ì Q™$w¨%)MĤ–àxߓÑì ÊÚÖ ]—ÖLIŒä\Ë‘9ޤ+LNéö…Ê +x€R°SÑápíÈĵOpş.\Àö\" +QĈ{p%â„çÚ8Ò Yݤv³PQ*àY*ĤzĈoAƒrlF\LáçĞû˙ŝòùÛĉaC1OmÍîHÍ%̧ìÚÒ-ÄifÁYSĥœħW'¤Ë<ʸ¸ëŠ{íCȄ•lÈĉè|ÜÚ ŭ%Q–o3ZÚK,á_Ÿ×à(>Ç%ıђs˙ïí÷Q¸ ÈaÔ%ôÀ%QëkÓğ\s5K“‰ŒNµtSjuÉêrƒó­Eu°·{O;îÇĥcŞMÑÛ°°Êµ`–<¨n̳ÊᏄx6@$Ë|‰´ QWâ€Js!2•–‡Q´J˙”Hé' Âbw!ĞŒ“Cj!Ò½iž@ž@RNğ¸Mhm òĠ˘šÇ÷Òŝ…|:F§jz·´W¨$6pĊeĊâ´öìŜ+Ç$’Cdtv;ön8£µÈž¤³” ͉iLëjċŠÖ†@kH¤°ä‘ȃJÇ1%ĥ³ĜĝĥmXÙ/Ż -Àòœ É ƒ{i—–gÎ ŠoÜQÉ­@˜5@ĝ{â<‡sŬ½Ĥ °#½µgsġĉííŞ<ِ#wòG>n Ü}ßì€WíuÎËûkòq5ħâ›Ħ`l9ûÛà]{4wÍD?ÏïiNäc&Ÿ­Ä]:@ëV@ҝpĜ1§X‡q›_útÖżô‡·CÌçn\=ÙĞ74ò|ÜÙ`ŜOßÜN1,5C†a3wáĊĞşŝhŒ—ğÀj‘ïN2âhvíu7Dŭûâ¨2endstream -endobj -1067 0 obj -1836 -endobj -1068 0 obj<>>>/Annots 316 0 R>>endobj -1069 0 obj<>stream -xUێÛ6}÷WÌ£Ä2IÉşX nd“MĴ˘Š>-Ë+‰*Eaŭ÷%ßÂl·k²ˆÎċÌ̙?>I9˜ÇƒU< NÂġ2<puxa€ßÌ ”€*˜D‘ŸDQèx½Ħ=\^hiĵ&AĵCŻ>z‰ÓNL N†ġsú‘7z#ô(Á'ˆ(óŜĊ‡ĊxP{XÈLVq^Š)K$·‘èEÁ›f - /·|–$²­´×ĉé²V4šY’§.?ĴATZQ¤ mŒh+ġ4jßBƒÚ)Ô²Éż°‚ĊÄ (šİ‰êĤd#6Áê˘×´šâx—%\iĦŜƒlïj!ëBĵO“ğşàyuŬ·T™•Ú+%Lóï?qSß{Ħx‘¢ó`Û(1ÀgİɄE„—ÎWËU´ZÏfKwîı“ù„zÄ[­ĴеÊKŽ÷Jĥġ‡%˘ÏµTë¤[t^Óğ…ĠÒ{cÇ´P×´ŝNÔħÖ˙Ìë&á×§ż°Ÿ,ğ}'÷%ĝQôİ-·BMğË•Ë÷*ĵ2ËĞÍ^ĊĈÛĵoy³·<ĵİż³<=‡Aˆâmö-0×Nè2Gĥ`/Kħ̃TGLĈœÇ³Ñ"“SûZ™½0{7 „Ò‡ĥÑçÑüOš¨ôµ–a.CB=Ÿĝ‹ċŒE~Ì<[•şw½èĤ#^¤YÊ.\ʐ[;’E*Ż# 8{;dlú½ċNê9Ȑ°e‰sߘ„z{'ú†ƒżŜ˜ëⳉaÓ\á*`cè˙J2èfB-7…à€’碀ää£Ì¸J Íè=rϟ?ƒ–!{á˙. -\ƒPêĝS71Ι .ZŬ0Z@lĴ2iğ´à™7€Ì¤Ħ­SEŠ.εs{:TbW`ħ;˘Û˜ÌaŽ‹vĦ;Wd€ħÓ;-´ïOêoúk*ƒ{£¨£,Ġ—Áżĵċ^endstream -endobj -1070 0 obj -860 -endobj -1071 0 obj<>>>>>endobj -1072 0 obj<>stream -xWMoÛF½ûW |ħ Ȍ¤(ĥ“[œ´€‘SXEuQ,É´ ıËî’Rôïûf–¤$Ş@QìŬ™7oŜĵYŭy1£)ŝÌè~Noï(Ğ.Wo~|Oó)­ -üĉîŝV9M“é?É?mTŬhO³w =Uµw[SêŬ.ğ&c)¨*U7Ğ?$Êl£Ü%sÄıĈµYBÏ[í·FïÈŬxeA³Ywe~Ï^<’ĠÍÎùoœ€š\RTél£Ĵ {ÚmLĥĦĴ4Ú62eIe™|4ĦáD•Ê6Ĉâ*@Ş>ĉ„ë”ngo#Âàn3U–¨êRÊÒà2!ZmLˆÑ2gel8Äl6Ş!ċ5y­ò=5 T˜R“²ùçŬĜ†—hrĤÙhυċ`îLĵ„#=ĜZào(w`]ƒZ²²ÍġH$HìUCYëñĦ)÷¤RàŞÜ €³Ĵ -߂ԨcGbلŠ7Zm B´;PeIܕŽl\úälaÖ­Wq–İĉ_šĜ¨@İÖvT': LîdT€à*M/,Îä‰mÌzî²ĥB%Id~—@Yùġc/ĵŞċóŠX(d -² -áĵlUá]EKŬ<>=żÈ/O_Iċ9Ž9Z´6K#ę›ĜLèç ıNEż<-_:F…+³Ŝ€*sĉ` ¤+ƒĈ#8¸ÜƒyeżŜƒ% &1:€yC¸Ê5Ù×LMßÑUÊò20ż7ûZC. š9GŸD²<)L[ŞG9ğA‹·{r,U̜‚ê~DŻôċ‡Ġl‚律¤Ċ=>ÏñCQôÒûÁâ]làÁW` ó„†~†ĥg}Êı;ˆ^ĴÛQі ğÁuÂ8–´TèÏD1Û*Íy>ıyŞ Žx´½“ù‡Ö]ÍTħeŒèáv†*MpĵˆCŝzôágŻ×ï^o^oĈzúŽöż{r°›~ĉ*Ĝ\y”Hyí][ @ΨRSšfçEJ‡şzŞrWqÓK·â\0dŜÔ0GTʄݭ2%Û(zòÏÏ_>>-“ĉ{#á+‡ËŠ9É/1*ëêë.u•I_Î+”6Xԗ(.'CĦ -2gÄc<Ş­<'Ĉs‡F˜áà÷ŭĴr4$}‚]ùĵħϑ ì–=Œ!ӊŸïa½hˆa ñLĦŽ=a—Ĉç'à‘b˘¤Ğ{×ú!#|ïÔRĈ/yŜ…Ü£°qm™ËĝŬtŜ‰²Óĝ”ĝħ¤$ -[³(™ÍRFš%9ÖúrEŸE["X£çĵNˆU-ŻZ‹AÔĜ´QàÎYŬ g¤úl ħy‹â' n­|^ò -‡Ŭì68}Gêr5éŞċ9ÌI‡O b -Ŭˁ=€›4ÒP·”Ç|˙z \Œ‚ìòóƒ…È- -/½çŭl5żB”—'A¨uf -Ï Y§½“7~…P—Џ/òĴ9K/ -:= Uydzǵ:ħñ m·Ĉ;ËKcDڋ•Ĉ3ó‘gŠ;òZĉ–³fYBC˘Ğp²3UG×2šß m”TŒ·Q5d˙™”uĊ5ÉEŝO´òÈċ1„ßĈ]]9Zc^úÁ S^ \ŽĠqeûÖÛŞ26Vİ?ӗ~9Èö²[çûbĜHÖ­ˆ~0ÜíòӏEµÂŝsĊ}\!²Ğx|ċµ„ċ×gŽsuGÊĝ5M%ÖĤf(ž[Ħòp…6ĊK››ÄòuéÌÈÄêâ~d£“6€‘\Â_µVXğ˘şġµëêÒX‡‡•fŬá>>>>>endobj -1075 0 obj<>stream -xWÁrÛ6½û+v<İ=#1Ĥ$[v.ĜI'>Äucµıè’ ˆ˜$”˘żïÛİÈĴ›ig$Àî÷ö-ĝí$Ĥ üi9£ùĠÉíêäÍï7/h•ÉĠ5>dt]\\*=‹/£yD­MJ]QН-;ol}úŠ} аo:[bßÙ}NÎVÚĤŜPfµĞġ´³í3ùB×TĜFç]Yîù+•vĠUBı)5íLYRĦˆöĥ#ߪôìjYلĝÑŞŬ“˘L'Ŭ†S¸ i<fşÔ[]’ÍiFĥ9ċĝ?7uĈ™ôû]DïJgİĥ^\ċċ´k[]{JZğsÈÊ8Oë§ıÑŜ‘óĥĠ䢿{>¸â/j”€”‘bֆ³˘Lù¨_5ğŠÙ³‡Cl““ñ/AâœQŝ„óŞWĜ̐“hRàĵ%żo¸MN·[ŬR­*­Ïôĉ-M³Îv^ĞŒƒO3š­Ï'£ĝ²ùG>gz+ÀNúèFz;‚|ĜAuĦbxjğƒ^ZŞz¨óY³gXTŽ^M=ˆ´+í(0:Oeİbù @  Ru¸·neñ‹P82 -ÉBĴµÎt6&qĊ˜`] ²^2H\”Áövb°êG -CXäQ)÷ÌÎt˙H}6ÌĵÁúÌ5:5ıÑcwĈÂÂİáF͙ĴӁ!TâŞD(^Ÿ3V'pnZÌâèš×K|žáĉc£Ÿ__~Ñ-{ ËR­u°.AêŽÏ~Ċíż ÉµşÔ@“|RU˘(Žn˘xı>SeS¨X¨P‰Ŭêġyż €W%,¸IÂ1AĊV`JĝâşĤħ­8ôˆáV7I•hƒĠömŭ"mJ`™j L*H-µ¸†.‚Ä]èkÉœ„,TZŒ€nŜ6XŒt‘ëŬ$Ó.mM +§Ì6Ċ}–kċ;€Ŝ5,ĥÌäı– ƒÜó‡c—Xñ^ŭ²Ñš³ĤĠŬˆĤ§Z1ċôÊEš”!„‡´ĥ£ŬÁ\’a‰9›ç&-Î'Txb=XíŸÈ0anƒÂŭ #Ĉz¸dÈuŻÍ|Á‹>Ú?Šİ°]òp˘Çċ…ïRħWĜ`ŬS:Zöĵ0!&DÌü0ŽCBN ìé 1şıœ>?ĴĈ:mÁĴOé0é™÷#5B^àhcĥ<+E ÷¤˙ñ=*-2a›Ç/1£q‹ÄóĜl:t,ßHÍ,$|s)Ĉ„OÈe€4ŝ&ro¸†7şġ³ ÁÙ54$ r°t2(…"Î&‡ÜûdäġÓ#œáFŭóéÇ×r}ñ˘°ˆâˆ> ùâOÇÜkcJ%Ûß8³WĉÉŬÑÌùħ0(ò×GżfŞNġ„/v^™šO­T†/œ•Ŭòw8˘gÏżç›tŻžA×')Ù܏pqpû·Î½V¸bT\ͤµdZHÏô3;Ùôú ÷Ä ĦRmxžÁä=ßĝNĦát˜/FĦYgaTÂLd„NzMrĠH#B}˙%ż$ z.‡_`îpğ2,5Œ ֋¸<œÄ²;zHıî_éâĞeu0Ż-Oï>Ŭ÷ÀŻìşïmÚUxsóiX>]Î֘ŭô­qħ\àr"Ënĉĵ²ûóä7!Çuendstream -endobj -1076 0 obj -1726 -endobj -1077 0 obj<>>>>>endobj -1078 0 obj<>stream -x­X[oâ8~ïŻ8o` ·G:‘*m;³m}AZ™`Ч!fl§lWŭñû_B•V RpâsŭÎ%ü:Êèߌ.4<§|ytŭtôġéè´yI›‹yĈÍ)]]ġ4şĵÀòâĵIFÒ¤§t6:ëŸÇìl…-Â.Ô0úü ŒèiĦçò4óÛ§ô”wèß?“ÎÍŬġäääéçÑ)ġ2¨Ûï³?ǁV׉%Ö_â˛ĈŻ1£÷DIÍesŬ  ÷ƒĵz˙ísß–:ĥš–ÒÁ£û?‡µú­>í?Ô~êIŞóŝÁ'şrÒìÓ#î ÀġŭaŸŝ7ĥÔ6Ĥ}ĜCžMô/kßĝħͣ]6‡£O&Ĝììx=@ymÒsQY/ĥHv4½pÖàŠŒÁ•s?uží0ĉ1­°JIĊÛ7´£i´²ñ3éüq{˙Rĝó·eƒ^F½Á9Ê ²ù‹.­²N•Ϥç4¤àgK“NÖA—†“ÊuYÊÜÉMßÈ­5=&zĠ4=r i%Í4•ÚÑJXKS£Ċ,ÖÙ>ÑcL›¤ġ0È_Kg´ùB•Ò’.IınԂÄÛ£zğŜĥ6ÀlmµDÔ†5Ħ^ÊÒa)‰˘hI şÖRŠ+ŒœĞçÊÀJ§i*I•ž‘àşÖĉċVŻ`2K°jı*Tœ‚ÎVĵÈÉ T¸ V/°$ĝ²%:#e›Â`à^ -Hğƒ§×FŻ-~'%ÁT9ZĞ˘À‘˘NzàXPÀÙÚâZÇĤ.-áe;ò#‘ݐ*ÊûˋÑp“ݝOğ^2ò*€„ʽt×·ß[2K8·€-ŭ¸ ĝ~c›¤Áž­xLµfÄUĞ.ÉèSŞ·uÜ|`˜3Ğ‹ŞıdI‚áÌ@p #eKò j>>>>>endobj -1081 0 obj<>stream -xíWQoâ8~çWÌc{Jz:=UwÛöĥĴúR ™Ä,`wÔûġ÷í$4ju½}:é$ljí™oĈ3ßĜßZġhRHÑ5·ĉ­^w<ĤşÉÖxéQ˘ŒG܎ş!e’V˜Šġ£AwìG‚ó°;¨‡ƒaµ(y²]5èCwĠ@ÇÙġ€‚€ĉ+@ŽG4íxĉщˆLCÂ"—1Ò<Ħ<‘t+óéÍŬ)ħ“DwŸ˙íóŬ—û_ƒé/]˘y’7tÚ×İÉeÓòĊ.žéHĠéükĞG ³ĉñÉNZfú`|:ı —O§µÊǛÛ£j´VüLsb%K­°ë…†C8BïTĴábJıV{i–^Ħ†zHÍċvkĊç‰È ħŬ[‰msòJg cLħT2§-6RĊİZ“ OÖĉRşT9=‹hƒ‰0@—Ù==ë,§ ?ö]şD*2/*J2­Òż¤q>ÄċKCoĴ&lσġԕ*v!óĥÜgÛâĥÁ£˘İw|-bö+VY£½ÓyŻ­CĴ/šĊR9tX³ôĜnrÓU™Œdş‡žò? ÜD‰Œ‹-ĤІŞÚ"O™üVH?iVĊğ½Ĝ8ça ›Ĵl|iDpCT Cb­¤àBĥZÓP½Ġzƒ¤ŸyäìşGœ<uÂsrnëİú9ǖn&úrKħÈwӎŭU+ˆÜßâ;÷kœž ^ÄùRżá}ÒĉvjÛKÛÎl{ĠĤ†´…oö‘D“§“ŸžN!ùTw/ëîÌv½ä0èÙ6‡3Ĵ…ÚtĴ_Y„PÛ2Îp1û×ĝ`m‰&×Ŭ -_°pĝ ?X\½µ_cğí/fġ\Ú·PûjÁP1£i°M<Ÿ¤D§‘°Á‡ ßÙXSZuD‘':Ksñ^Zĥ4–jJîpX =N˜@BÏȜ -¤¤é ç{Ş8nӌÀ9mL×ÉRg‰Ö1!C„İÎ@J‡‰m¤l$¸áİKäGğt§f§­’C}/!g9Zm™\ê8Ĥ°‚"}(µ7İy0\= §/ó42VîAŠLH\EE†švµÑA`p÷ÑĜoP6m‚˘‚ŭz:<2İ2Íóêqĉׅçm&³j‚­…µhöœċ焆jĜ• ³\&ĦbĴĥ—n˘°˘*} —ş£/Á6×yġ>DÑVŬùʜŠş|ŭ`Š@7Ž/J˙yZ>Nŭ7ûÌ%Ӏên%š ÀKŝߑbaW~WDġa-ß]Ċŝ¤^RòÛ¤Žƒ\ڞÒMĦ– ­ĥŻ$GôónŻë sPĜĤe‘ƒžsê7Yŝ:UPŝÒĥÄĝŜáÙ×'T&*.ĝÔÏ% -ĵGbğÂ?q¸êîÀèĴ$;SÔ‹b—Uӟj=1ƒu=VêX^ĥGr\IDŒò†"-.]ÁJi£$U|0͚Œ›ÉŜ£fĦd™>ÑĞŒáJġŠ‹-ĤАœ%ËceE›Żùìzìï¨ÁpĜ hxáƒĝaòi:ĦûL•QŽëLTÊ^ -8":Áp„éQˆël|œwû]ž½Ü↛­Ŝ|àİ{›ĥÓ.Îù.äĥŝQVÜendstream -endobj -1082 0 obj -1265 -endobj -1083 0 obj<>>>>>endobj -1084 0 obj<>stream -x½WÛnÛF}÷W ò§°Q²%;@ Ĝħä!J[ -ŠĤ0VäRڄäŞÜ]ġë{fv)ÒtÓô4FhrıœË™9gÖż%4ÁOB‹)Íĉ”–GWĞ£›ĠÑd|~NŬŜàaBg‹s\Oϸ&S^İ5ċü îaçpÁŝ—o&tAĞĥç°µÊäġ„Vé1}éßrvwùáĝĞ/N·WŬíëîöZn_Ĵ>Mh4MĈs¸8m֕öÓÎŝrzwĠ=áùFħ*××r½ŽV$ÌVúüéŭ2éâKşĝ’ğC|É]ˆö“ğ›~¨ßÉaÖE Żğ'€Ë ÈʕAÀŽ˙„“ìk‹ŽŞu·¨§êa+èú^׎Œß’"ùTîuM~ĞKRhŬÊV#Ġĝ­­WŜÜcE•ڍÙÔË7§”$ÜÀ£ 6OÁöUş­me~Ç~[9Zk˙ uĊ6)³2•Êħ—um~Ğ*£ÂĤŞĵàŠ‚R[yS5šĵ%›ĤM}BëĈ·0͂[ż5ŽÜÖ6EHTĥÇ/ċ59 Gg:Ìǧíۜ4ÒGµm8ĤﲸN)WĤptn‹Â>˜j‘^ħ{ÈÁÁ’a!›#ÚrǖP‘VéÎ3ÍoSİ4ĠΙu(Œ­?Q^ĞMİ+ï(x@ü “ǝQŽx”¤[X„£+R lĵv'°-.ZĞ•6›íÚ6ġÖڌ¨0Îğ1ħŞ–Dܒ°„•C*—Ŝër‡h€7°ŻtêùáğA]R(†Lj#q„N UÖsUj]Ú{ rÉk[ŝEäŸ |ú4pÓV¨;TÑiQ‚PG_?]Ŝš r>–ĥ*ö$íċAÎĦXqŸTÔĝ§àÎu˘ĞÈ~O^ #lDí*KÑù´Ôŝêíû[˜`GT­":ρ¸ú9SšBv€™ß*Neµâ-Ê!Óġ!³ÜmżÏÂ’ÌŻ Í.ó0­Ĥ½YġòÍ%àGŽÁ7›3QşÑ”œÏĈtĞ=8ıĦf‡=,9ÌN˜h ĤÙMà˜˘[Uş;Ŭ˘·™iĝÚTt€–+Xċz^—jÏĊpڋ@ÒwĊpYyÍ j„^”´· • JĦ²LZݏŬq-b“+×cpcĵŽ -9] B¨it1püŞeâϛÂUá~ÁİXmŬœ}Àê,jhO” 5²f·³µ§ŻiŻċġ덨,z!`ğĞġ½ħ°7_Œ“m' ìT ™b™ËtšBx ó€ÜaPĥ -ŻŞ=Ù"6žÑü Éà €àĞú d ˰‡ŝo@%×l6Bœ‰íf·İ¤‰qŭ×P„éDpárO…fžpáħ4Ü%CÏ+ûœË˘0'°kFTÔwĦçâ¸{öü/A~ü,(Ä'­ıY“„~ì·Og>oR×HZ+˘*O $B(ĥ¤le‰de8Ĥ~Biâp‹l°,Uï—7pÂÍ"ÄAŻ--߯Zäè_¤û˜–MĊŞ:ˆ:”żġ_ĥ"i´á ğƒ>7* ĵPϘ7Ż&Ġ4ÂzmıĒٴáñ)^°Ì4fgÁm½´˜ŝ"–=™ËAk0_­w…Iù €df[D€Á€ò†ÉÏX ÜĥÈ7Ja+9ú·8HW÷ŒàÒ£w&­­³ı‡çĵAÓÂD›El6$°oàwW[oS‹I(àñŠsQ è -ěÔì8Ÿp&€‡ž=ĦğugI$òĈ7ĦĉPĈ[q6ú&ĝ{&İ -ô͆áE%[ƒS&ÈÙoİÇ`à.mOrŸQ>ör:ñ>´”Q–zö”ĉÂÈD{êÔŽ1÷ZLñ']vüċıyş8Ċ4–Ísĥ€)ŭŬÑ‘äTËendstream -endobj -1085 0 obj -1519 -endobj -1086 0 obj<>>>>>endobj -1087 0 obj<>stream -x­WێG}߯(íKp0 lŻ´ëK´ŠŒ7fĴ}ˆó0 Œ=ӍğgLĝûœêËÀLXG–bKXà:uŞúëĊĝ;¤éˆ^LhU\Ü%o’‹A6£‡Ùà Žĝs<›òç¸?&#iÍ73ÌÔ8ŝü혆CJÖ°>™M)IŬ˙(Yun×4Tn%=ŜÏdù†ï[ai)˘•VëlS™ÒAWTTĥ$İ,~ÀQ’Ès*Äj›)ii'L™­²(3µ!­œY%˽6_ž%Ÿ/Ôèàż#`àÄö>+·î´HS#­%½Ĉ×̞Ġ'ş_sĉôWÂ!A Q,E ¤Kë aeÎËo Ŭ?PtèOÓċƒÉ -aŜĊÂĦq {2O}L’._iU·,?%óŜÍܧÛğy0şÔ+ÛŜMòêĦwàÓLäzc9ĈÇLzoéúŠ42 ßĉ ÒM4•™ˆ–+ŸD(—î$\³˜HÑağÖy÷\šċ˘Öq÷ÏM—"˙ _•Š \U[,û\Ħ–o@‹J˙Âż>{UÓŞ7š€‚(,ìÛÈ˘—t£D!9Żc„żúĞGFŻn%Xqî -Y‚"İŻATo˜YÒL6‘}f=ñÛ‰Ä@çş vDsĵû¸Hhŝ>Ħğ7´x“ -ĠP0ݐwÚ(‚tÀ]ӊ§…B’ùşf2€*iİ÷/› (ĞŬN›’^ÒAÚ&tKÒ;W2Ħ|…éĵ ßÓĦ-üFı"U,ÓVÌ{nĤµÈrfŒ-Ñm(W8ni´:í´µÙ@ٕTÂdÚÒĠ@Ş£jG+ƒ#dĞ%´–ìx}‚ l 0İ,áytöN+ÀhGPVQ\–ĜT×WŬ  XüužDáàêħĤ!ËS}úŭbİsrjĉµ.à‘™ 4ĵüG*uú|=„h%‹h½ëŞàĈÀ‹Y†Á¸Yüí5 їĴüÁ¸?kh˙Ş?éÓâò]¨_ûż˙öáŭLJ&í€ÂˆgHòÄü}Ş O–£ž‚Ë`ĠRĥ.~Ú>½i4ƒ83Y¨ÂV’Ànó|ì! Ĉ‚`"·˜\F1 ԁÇÁœk7Îxı{y…Ŭ›“IiĦbòz,ÑInÏx -· ²Ç‚e@×,îCdzċ÷/ -šÙÖèS‚ċ;žl¤ĝ½ƒô_è×ïĈÔϑtŽĊerĊ˜!=wâßOĤuÒùïĞK™{`ê}­2#ÛŬ6——]71BħO0NkÂJĊ/L^Vû(cn1XĦiħéùhÀلo×%­ğ u E:n"â2–òZžY´µ%·zĊ=„zr~êÔ³œħm/%K‚Ĥ ZÈĈ˜CÑ4Bı§ş²gċOÖMY[Amm´N)Kà‹„Ĉ`rïV=j(;Z·Äü˙%ü,ĵ8†“iH“끧ÑâöŬŬ-F³ŝŒG ĈŭŞb-Ċ;T+Žç÷Ĥ#ĵyÓΏì=)oMîÚġ”maúâcŠ -Oendstream -endobj -1088 0 obj -1553 -endobj -1089 0 obj<>>>>>endobj -1090 0 obj<>stream -x½WÛn6}÷W ò”jÇv|KшsiŭK×öĦÛJ˘lm$1İŝûž!)EVât˘M'ĥ†33sÎLŝêhˆïÍÇt>£(ï-ƒŜM z})7x3¤ñĝb0ĤÉbŽż'“Á„JI lñn -wŸÌĤçƒÙ›'ˆ‚cŬĵ ÄÙí.(HÎ áƒĜ>R’˙ŠU.҂rĦ,ég*Ô§à[oHŭÇâĈ0S‘È^íöR1|.e"ËRĈßcĴ4eòEfˆ<›²³Û FœsDŭñ ‰k…Ä ĊŠÌ6Ġ”¨’rĴÌV¤ -Ik‘‡‚´,_p UіtÒü@°6[ı§]še´%ŝ0[g˘ĝÔn›âLÚ\ë܅6ŠB$遰T;„xè„ `wÒ6<ĦgQŠ\2ş"ËpÈç -ż"2$4‰÷=Yg]8O(•~Eß§YäaL h" —>?’™ŒL -D£(MġL˘€)'Z£ßNRKS§¸M7€İP~i†^JM]vXoU•Ċ€´€ßŭ›¸ş‹*Ħ½Şh+^fA÷Ú$ÚĤ¨!2äĴ\Ġ\4ĥÜzË7û  -|°n#¸ŒS-ÂLvòt’”*‡§Hċiħ9‚<…{t’1lÁ %ŠëĈïÔ3Cİ wċl2ŠìOX{ŒŝĵXçá REBIšIú‘ŸĥxÙO]çü[B%n·>"yŬ°r˘V¸XšĈL!NV 8g·4Bß'PĵÉpa/ò*1£é`> µG}·dÎ0ŽÜ+tŭpwışwpԜ‡îŒçÌ#ß%‘Dó™65÷ƒ /i3ĦC×NĈš>È+mĴd Ä-pŜ²SĤC!ĴéMË=Ċ2U9ˆĝXĤı(÷uä+U˜š³:áz.£܇¨€ûşQÖZYBŜÊËoMZö`ÙĈ§|͙\żb£Ž…O”&ŬĞ•r“²–£Ĉ窝h÷Ò,Wk²İ~=uuùe´üéë'§”_V÷kÔ ^ELÊö8=^_u™}‹Ĵy59]µòÌi°Dƒ£†kɵŠ_–ĵı°ÄzV"i5ġ{cZé¨LC Ÿ -¨=ħĥ½ám[ŸÁâFħ‰£{'ĝòSC÷˙˜ï˙ïö|ĴµĜİ÷! Ĥ…ħ63ÇÎY/ïè ŻïÌ/òĴïuĠı)0‘:0Ûí =ŸÀ|¨1hfŸhԙ)Ş\[h쒧€İsĥ÷ÊÖhÛ&K-ğ ĜIà'{'!I ùĥï÷ĒTV÷1bsÏÛM$–hîÌ_ihé˘×£áäöáóĠêŝWZ_Ŝ-/)x ċM'bÛ Ŭ]ƒ›Ï'Q¸d—`ü}ïĊùċ2Y>>>>>endobj -1093 0 obj<>stream -xWMoÛF½ûWLur[‘dËĥ -ô`£ ` QZX…PÀ—%ı7&wUîҊŝ}Ŝ̒²´VŠ"ˆmQğóñĉ͛áżgcáߘn'tuCy}ö°8ûĝyFkZĴÍÍŝ(h4F´ÈÏÇÓáŬ>ğ&7vM^Ġ™˘à(ÓJMµòA7ß`šĈhrr ç˒ÏċÖ^âiÊ·ġşñThÜŻĠe;R–tó`œMrí=µžŽ*rxóC˘O*/÷Ùùˆ.ÇW ;Ŭ¨üEʝ ÊXOŠl[gş!·˘jTÍ=mK{ïĝĴ\ê\ÚĉšžÏ3£üóÜ/äK×V•êU“ħœN⷏á=ì`xÚ*“àĠz  èU7;ŞÜö²ŒµÏùPo€9úÖÂħÊ\‹ŸvçĴĈ×^;Ǔ›!WêüqE;×ÒVÙŜn­RÛhÍÛÀÁ£~ĠĠ€Ö•ËTEn#¨žŻ³!à[qÈŜĴK Aì}÷`?†>S x„ä˙–r]]ÓVĞĠ ŞŞƒ à „LBjÈïÀÈëïıŜ„ŝ)#˜`Oú_ž?$XÜ&†‚O’(2*/WË5-hiìlzAµ.|q˙„îċ*\ ŝWUˆĞ˜"ÒĠ¤ÇŻÉBZğİۚz¤™í“é4‰ĝ°zûĉZĦÛôQ3 |PMh7\?|ê ÎtÓ bwŭwA“ĝ;íÈ9ÒtkP ħ.4Wä+ä+^A.µÖ$5‹ĠÚ¸ m0`ÎqWsĞdĠhu^â9ı$ÄaIHû.iBI9L]òd"Ñ%ĥ°uҗtٖZĝƒPĝù ( ÍĤäT3qg‚4š°âÔhÀÉĝ6³€6C’‚ħ„0Ĝgħ½!àuċĜèĈ¸ÂÀBĊ*V$.YŒmċ[ S ~_fÎ5¸óQ9%Ú1d)ċN *­hQùĝŝ ‹½ Ì!|µ-À#İKŠŞĵŜòOòŠ&n‡˘Vh”nPHšÜ[]2ŞoĞXHH˘ÛÒU`™şĦ?îç€#qıÄC0!†ÍĤ%JĠ•/ħ‹úšàÉmíÛAşR‰ĈZżRÙ8ïM†`‹ĦY·`Ó.v)ĉ¤KTOÈôê¸f'A—D{zǽ˜.ÀĕixĜˆñXˆ8>Û XîìĈîIĴ]8Ò‰İ ž>JıûgéÓNîTzJ˜Óm<ë.F´B³ĊHŞ!:~àšıŞFĞbÇNŸöĈÒûC™J|ħ(4îĠ[ÑoœäÈ1}/v Î.FN•Á&čRcË04’ÙZVXò­K•ˁJЁ[͓D‹úzžOË̎4W9Œ%= ËF„•èËoÄCKRâŻ_+àè`A’ĠĴ"µ:­o‘~Î1tbzĴOŬN6˙ş•zŜIž˜ĦTXš—uNRÙċ&ÀòÀ•F>_ï² ¤á,e‹[Pô=Hqıë·ä~ïërĉ"˘Y§[ÊZ×bŭ„£ĵÏçµ*ҞAëC&nN(a…´kLL´Uê“Zĥ€ˆÓ/V\v <ˆKWjÈXZ¸ÍËĈYY?¤_ŠĈÏ&{\Äé#âXŻ5äîhÖéƒí”×OÒ@żPZĤf sÜ0ögl Ŝ’Ŝ†×İáíh3‘찏ZütóJó}##/ĥHÈvSáùÜĜĵj‹½$‹âÉ+#•í˜ 5o7Š–ó§î:çÙh )v×§$ef*7lDљċċÇY#ygñxg”ÄL·döe×x5âA#Šñ+ûŭĝù{ħßÜÇxAœñkÇÓŭ—‡{ú³q߆ŝÈ[&-„ÊIû\Ĉ—·ĵE˙û-òúö,Wf3öaŝëì×9 endstream -endobj -1094 0 obj -1575 -endobj -1095 0 obj<>>>>>endobj -1096 0 obj<>stream -xUMOÛ@ĵçW£eFqÇ1-Óŝ‹İ,ċ&9ÂyiieÍÎIëh§òœV’*-Vı$oh­tF‚2SÛómÁ% GÊ×eFç/\›óĴôĉbùԋiŒ˘!ş÷&żċ/ı­ĞVZúˆĝÌ8ÛCIŭOi4ĉ:µF÷4WR{ڊ²”Ú1ĴÄż&ÏÈ÷5şÁNe²FırßWŽ„÷²(}(i*7[<)€tú­ÍíxGĴ•ÎäÁfş—ŝĉö炴($ Ċ|ñë‡Í£á„£ĞhÊŜ/c'˙J{I+·äDħ{Şžh-„q ¸nï„İB@èŻ<ÄŜ÷‘ÊİÑ^¤>LıÛYs5hĥĝhċĴJ+³zFċODVLéħUkÁ"ŒÙ -½ößEY{ÊÊT*9‡×ʓŽ"Ë P#ş·›th]Ġ1Z+$}cµĤñažwÌuê-öĉİıj²jC֔ :V +÷ž¸í³VcZÍöÄʸĈ:"*,‘y÷"ïFݎÇê5 -xyÏۄp’×ûrlù–êĈòߗ=M’Y4§ñ|†ÏCüÂÒë:°(ÁÂŻe9oŝ!Ż’I”ÄŬÏMMċyÇE–"ğ¨Ñ_†)İ~‡zX. -CÜìŒ}ĉXÓ³ĝŒVÂÁÈŻ˘ÇŝÚX’˙DQ"‘?Hİ3˜ŭ?^°5_[{ÔyОċ Ë5ÂEDHPÄ+ñ­À°ħĤ*Ùİ@˘Ç*Ȃm޲4#Q §wp!öÍĝ^˙Rç2Ó~Ò8ì[È”…Dâ<ĉ†;£ÏĠ@qM#È8ıúPÑœƒêXl]•{8Ò…µ@¤òĊo¨°ĤÍÒáM’n•ÁsE{UĞ“Ú_ káe$ÁŝäáÄħ'|hÉieXx>Gg‡ş32Wx1AXWĴ",!ÂÛ˙U› -ÖDAŝ 8ĵ=ĜŸÀĴe&½Pıë’9Màé·Ü=o^ÇÉtñĞ/âĦ‹ëğ›kúe͓D"3iUà}'3¨ĞuY˙Óû0žÎ£ -{Äq#úïŜËü’˜endstream -endobj -1097 0 obj -905 -endobj -1098 0 obj<>>>>>endobj -1099 0 obj<>stream -xWÑnÛ6}ÏWܗĦ)(–Ĉé€=,ÁRĜ’1—ĵPesĦH•¤Ĵùï{.IÇĥ6 CÑĈ•ÉËsÏ9÷Pù~VÒ JZÎiqCuwv·:ğzĝLó­Z|s³ĵUC³b6“úü~#ú •7=‹ÔK×Z× SKRŜÒ\ŭk”×İĈċ˘,ĉ¨rŽMeA÷ĥë…SŜšĵòšÊ2ݜ/yŬj#sq/Ŭ§ ^zZŬ£`)ŭbQ­•4Ħ Ġf¤ZÚف„“ÜN™5Żò¨ZRaÓÓ(µŽ+ŭĈşa´3ş, £“BëĠ$öÒ;ğv˘ó6"0|äE'ùĞ`kĞ„¤Îú@(Ñ(Ô[Ħ´¨t\”öƒ)jž'Œo›œŝ^Ÿ›ċNÚöcq˘‹Tˆž˙¸CsÌN‘kÌo -ŜœM<ŒÂDìA’X eÓÛN† s£Ġ›$A+.˙ÒĴs5îÌDzFž6b °–ċc' ‡Ş!D ÖLKAâŸĴ ×Π鉿¸c•:ħKBT|2 c -xkT f ì;ıôzî‡zCÂÓ£ •ÔëGp2Ġ.‰i„ú[ĦU3eé‹4ÒĊN²¤1MÒĝÄ۞ĵê 8pÁšÀNŒï2’ïl -ú -Š£Ğöv£ïƒ -r“  -j…çI‚䆞/H耽ë )OPvGwŬÈ^šĈ“ş€Ñ6vӆž%vƒmƒEák ĊaŜÀF%ôMíAz´[Ì#ˆNPĉq…>L´ -ĠšOĞ'=äħ‡Yî -&ğ e(ڔçDÒhÇl~%?€fä…j½fCĥ˘0úd‘œ-x†?SÜe46NNß׌<ÜBZ÷<— “Äçl‘0Ħ¸ò}Á4•t;y:9kVK0'PıšÈ$Ê Şp›Qná÷´>ŠòÛê yI×ókDÊġíŸçĝËÓĵ×2Gâó,í!`‘‘ó‚žzm뷘ÈĤ˘7Ĥçœóó Ín•™’Ї„gŜšreÀ¤ĊXáÄHéi-c vlĈZg; `N[X§§5JÄIJP\Ĵ™ˆ˜ŭê‰0ˆ9ÊâsQŜ"613#ĈÚ9LóCdŒ™†V -“88“ĉ£BÄÊV :\ü uŒĦı_Ŝĥ>>>>>endobj -1102 0 obj<>stream -x•VßOF~çŻċċ8‰˜$ä¨Ô¸*Ô£\KRµĥ×ñÛëîIӿߌm’ĝN˘ĜëùfżOĤ4Áϔ–3şXPRžÜĴNÎ?Ïi:U†+‹Ë%­RšD“É„VÉİ×!˜jM!×T+§J´£ŸŜŻžqìëħñlÍq´/ş˜‘­ ›l<ŭLÁ5ş½{_äġnŸÛĤHÉ×Z§”Ĝ*iœÓU •$Ú{ -–2Sh|Ètš*p_YÚŞĜÑ֙t…ÛÎÈ7INʓŞëÂ$*[‘×î…ħûG=ƒ˜xzÍèÓİÑQwİ}>êeŞîùŬ~ğíʏ÷§{“8ëmè!ËL˘ÛG<½çâ ‹Ân=%…AÜÁ ĴÓ*Ğœ˙Q˘L5ħµA‹6{Ŭ–ŒĝĜíê<‡Ğ%ŝÎ/ùï żCÖÒvES iû°hÛÚ7]D³è"˘Ì÷]Ĥ6şçä>ÈxĈ”êÚi K§ß3Ä28}TeĴ€³B_d<ĉŒâ­ŞDŞ{:ms]AŽpLf@ „YGĥÂÄWıÁ 0!LÛÙ˘ñKƒ9ħŜ|G¸-돤~ßÇ(˘ğŒvĥρÚk{Ùí´ñ@+ıƒtQôJîħ‰ÀZİvƒúj Éx1ï:žĞ‘R”ôFW^Ĝ‚ĥzÜV*–ZÁó  ˆ‚[efÓ}@ÜÓĤ²[ÚÀRuç Œ+sĥäYvM CƒLİqy‚×8MħYS­ˆ(UŬš²vöE—ì7˜_î¸'ŜñŻĠÜ ĤÇ´uÂħĠ fÜcÎeSSHï wżg ġµL‚m €é"„Ùgċ­Á.|P3ħÎ5"äCŻÌ/.~蕋Ğ+‰€#ŻÀ)H,Ôj›”¸8 ĈñLħ’YOŠŞĤŒĦt8×E#èF°£ÁúT–é¤mœT´úĝ•bċA,çžW˜$ĉAX‰‡*”7 ·ĤmĞ$”j„b -{ÈçĈĤHrÎ>ždG2wÔĊGÇ(´R¨šS'5~#ËğK†úÖÉOGW$ΙuUچ?t,K-ÖÒ4–ş‡" àyC†ïoúôôtÚ½ħ!pAPœ½~úĈĉÔÁ]ÜXìÔïL  Pnƒ~8nĊ‹*-żĜpŠħ^› - bWF\é ƒpq[›ÁY2Iùä 6·Pk Ú-²BùéŬĴò–Fê Ù¤gâĉ+úaÇZp`½êrAÊĝbV¨+˜@ħġùçËîUzşXFSZ,'í[êġŭÍ5}uö™3“MŜעz3no/gxYOO˙˙;ß|q-ñŝȇ'3~$TŝûÉìÚëendstream -endobj -1103 0 obj -1411 -endobj -1104 0 obj<>>>>>endobj -1105 0 obj<>stream -x…W]OF}çW\ċĦoB•öşğÒJ…nE¤ŞU^&ö˜ÌbÏxgĈ„ô×÷Ü;ÎiH`<÷ÜsÎÜü8Ó_cşšĊŒòúävqòá˔ĈcZ”ĝÏl~E‹‚FÙh4˘E>\ĴM ÷Ĵ}šĈĜGÚ8˙hC¤ÍZ[ŠkMĦÑşÀk%&<‘²YùMRyC ċñ–İMü­Ġ3GB-U&ĈJ“.KÇÓĊ÷“/² ŠŽÏáĠ„zê6_Ó£×*jTŞÂĦŸu1&³lÊ1(ŻjĞHÏŞjċüxv1ŸžÑŞĊ³"^íM­mTÑ8‹:ıQôXpŜ­Ž‚!im€;wM4µŞRè³^ŭŒƒ‰\pežtµċRÇTÎĈT|PHCxkè8kĜ†¨k`g·µÍèĤk€§A³ËKÌĦg, áä;Wm@ġċêUUı°Q­k‡œ­µš¤ĵİĥ‚ŬçĊ †O³ñC˜ÎŻû?˜_™¸rMc Ë\ıĵJ Ĝ2že—ŬİzݍŒó˜[çĉÖ&RˆÊÇĥ,òÊq!Mž{³úÑEU*ÔêĊÔmMÑ+tŭ§Ï@>TàT ‡3GĴV(˘Sz¸ğíĦ’ğşĈXBF˙Ì ‚ÒƒLžZ/í£U™2 -,ġ1ˆYö²ĵrâíİqŜ dµ–ġ÷rˆÉwX։•Ŭ-µÈŝ ž1áùE/=|ó[v>N/ĜqNQÚı³ŒLB´4Â[—ße1ž‹3úâ<ŒÏâĤkšÊàRg%YŽ£ß+Àmì^Ŝ‚#ğ—]+öÌDZ´šDNˆ ·9ÙߐœÛ`9ÎUhÔTZcŸCĠCâ@/­pp ‹#+w×Lā~„¸˜ŒÙ²[’’S87ó‘Ué+CşwÖêÊ^⁳ƒ÷~R˜„ħĤ\û…ÏkA™YŽ2=ÇÙu6Â*ácX¤6Ün-, rŬ{˙š²<˙@ú^xŻ­ĥ0Ôoż“üR+/FĞ`²'Z·AwXˆžw@¤Âşì{Ċô¤’k úFiğıŬ/ú@Ü˙ıĝü}MŬÉeĊ—?i3USvô+îĦ„tg1yċdñğeòÙ(ÂzĠ,‡Ĵè÷Ċ ž‡`_İĠ“Ü•µÛK…ĜÊtZĥï†(…9şT¨˘ğO˜ÎÒaçœ×ĜYßÛ^çŬ'ñì*OAĝsôiçáĉîö†y÷ O.o÷Ÿ˜[çéÔy:6|ğíNgóì -›1ĥÜñ肏 žżNŝèÍ\Żendstream -endobj -1106 0 obj -1590 -endobj -1107 0 obj<>>>>>endobj -1108 0 obj<>stream -x½VMOH½ó+Jı,#'N  Ŭ‘vfw!Òh%.ğ÷¤ŬÜíxòï÷UÛ™…J+ ŠèêúxġêU?¤4ĈOJó Mg”•'·Ë“Ÿ(½ ċ'³ä4NĈ1-³Ót–,úŬmȞ͇ċ7˜_Pšĥĉç“9ÌOïÖtp5y -&s4§ÇSeĵ£­u%ċi”óŞî|?PĦ7W¸¤,M䍎Ju _Ż×8RdTµaÊ+·#m%1§Ód"w\­]U*›qBËB{ÂïŠ3U{Žİxö²6µ/Ĝ?g·Ö†I­ŽXe98RA;{FMĦñ ­˜p÷@ü}ÇÖë=BHĝߖ'€‡fÓ)>/s|NW1­‡h^^]Ċ<_áy•W%mÙ˙  K 8j:Ğ­!AÉNŞ”ÄV­ ç´:PÎkU›pFĞ:nûk/ç¤|PIR=guÀ÷Ħ`ú |\4 -Ŝ-ŠôÎìµŬ hUÉ^pgêÛçc {ÏivijŞ6šĝf¸u=}`?:v +‰kLzè_N/ßGœŝˆ~:NèžUN•jŜżêlúŽ‚~Î^o¤Ĥà„`‰tĤԞó397*°ÍÀ…@Ï÷şA "AAéYáœpÖĦÁäßí\ÈÑĜÂ5½*A°œTıRTŞ-È|4’úù -U”:B‚KÇ^H3ŬQ(‹ٚÌрÓ;KŜ•ŒVyˌf€³żÂĵĉ X/jœ”†‰iŞ,ÔʘĦÛ È×gHí%!d-˘!×Z#éĉìÁcULAżšcÚ•( BëmÄ4`ŒŸ“k`<Šyzf ĵ’‚v2䄃’UdÁRWmş Tĥ¤Š3½& Ž6 pTĴ,´÷{Ġ&ô‡}ŞEY,'>ݧ—ódñޤL'?tšBQ0×ü§›£Ñ"uëċ˙aġЌߤġ /Ê8¤ġƒpş„üˆü⋌*kÔ ċ[ĈFrZY/†âé™Hàq?€²óÄA£}!“›a,°Şö Vû½žLĈ§·×GşhGñĠúH'€í*Îu& H°ŸlċV+„oıkÇĉċŠ=N·[ÇĝùcVb“ĉİ{Ñ­žqÉ -³>>>>>endobj -1111 0 obj<>stream -x…V]OH|çW´ò² 7NBû…°ŠD€ÛĦ½tšĜĜۛ|żŝŞÇöĵì"+8óÑ]]UŬ˙ĝÔǟOgŽ)È>Ż>^È÷iá—ñäŒV!ġ½~żOĞàp)²µ ]’Ĥ”+KZАDÌÏLiIĦ°‚l,r<$‰L•ı%SÈ ‰RRżïım&ùOöH6QıGsK"Ŭ‰Ê¸3ÍÑêûAŸNüĦ7Àŭ‡ġ*'KëTxâèPèD×ÎVˆ‘Ĉ!ž£Éž|RT§tNŝ¨Iipî}IÊ{¸ˆ9T”‰˘Hò ŸşÄɀ‘h0eQ(më`ħ˜˘$•†žAÙĞS‡Ì£Û\’Q™ÄáAœäXjÄP 6ɐ˘TèDVÊX²Ş“~!u¤t&ò@PP8UJ,ÎÛâ0.E˜D‘ÔKH0–é1‰<äĠîb·ĥ a‰{:ĝġ`ì pHĉbJŞTé>ħ@„Vao ²‰RËğ:Ÿ\Ŝ/g˙,ÓğĤœ|+àêzúeI)&ñ›N^ DÏÈuc¸Q7ĈÈ£ƒ&0SyZQiÀ&\R -™Ç*ŝıÎk·t]ıxjâiħëuÁ ZÔD\Ċqig˘Âù€ç×%,W/‰Ü†01·—[p9“Ç úÔı7W½}úŽ&§ŜäúŽNYŻÉ;òh™Ş]¤‰Ì­ÏÔe"OÜbÁÔe -7´‘ÖrĴ\ĥB+Ğ•rÑ/nżÎîï—|@:^œÓġôf1½†™!(Ô"zA'9èž5Ÿá¸'™!0z<Œ´ÊÈïo?BŠüSŝöxÔ­˙œLÉ)0 X*w ö'cóìi-À€Ç#ځò$ÌÖiPé7\¨˘@•iHA,w°™' 2I–@voF]ïYK ĜÓ³WJ°Ğç$ÖËÄ3=gPĜ'ôG“Ŝ1ŒÎX6E°>`›.²m­ż]+$Ò.Şï¨í1K61ĞÙ(ŠeZì“e8šÀÇ~ïuCäTŭš.§ ]û[ĦR·‚ƒœfìMI‡³ÇaÌNi‡pà -a“Lztï¸Ï+@M‰­…K Rê͞öİ|’iŻn/ oÀàbĜ!•ġè<ݍ¤q*¤wuA -Û6•ĥŬĵr™ĤQ (Fï€7@£˙¤µħ×Ȍl™#4Ná-ħEVĉˆş$G͜áƒTH°”“[àTëÑ -YÔßY( ³|Yğ}€ ݝ!~÷ ôv£UY@6|\Aċċ+JĥDŜħ†²!ÜĠĊŬïl)áë6‚Pġ…Ħ´"I ¤“S!4 -XB4ÇP’ë èŭ(½.Ñêёœ\ıÑĤiŬ^Ž@ĉ7—·ËùŸ3' ĵYÎ,f7+÷Šğ˘;ğ튠˜~˙›5eÀ›Ĉáš^!ç‹x`¨lĊ|)#QĤökT#ÜĉŻĊ!ŭ ÑƒŻ¸ġÍŜµüĥ\ÍŜüfîşát ìòF]‡}LTÜڙıëd³oƒìBĦÊ?XÚĉ0í]\µvöàEEj—£ŝÈŽŽ†½CĞŭ9Ü9m$ZeÄmħ÷p‚š°·…òI¤PîĦ?NF]îèz -Ñ0dşE5~użyċ”Iv]§k s7Ĝ°^AX$ƒ`†IĞzŞÛOç^ˆ>éF­dB­ -F^P„âƒÇĝ>ì-,ÁvÜO\7qPò‰>xZ̙,F4êŠB‰Á!lĵ…é…‰Gƒ-:ÜÁñê)‚ÉlĞ 0û3F´ç—İ͉¸y Ù:çyĥ¨Ż&Í,íÏ<óôı›"§‹ÏSşÓê;7ıK”ÜŬÂàœÔ‹OÎşCëóéh<ñÎ0óšŝ)ŭq?ìşúendstream -endobj -1112 0 obj -1441 -endobj -1113 0 obj<>>>>>endobj -1114 0 obj<>stream -x…WÛrÛ6}÷WlŸâL-šŬÒ7ÛrM£DÔq:M ’“€ĤĠŻïYò…v§qìi‹={ÎÙġ“ˆB|E4‰)SZœ\OÎß)Šh½ĊoĈÓ ­3 -ƒ0 iž.EÓ•N÷F”’öÂRĤñÁêB’“ÖİrGş¤4W²tdU†×uÉoE™QÊËÈir{I[çşá_şLóÚ*]Ú_ŜżŸ„4ˆÇÁOçu"Ïŭ†›ĜJWWĵÇf•‡Ñ5M*5Úê­ ! ġ^YÂQĠU&3ŝ ij:½%œŠŸ|§Úİ\9%m9J‚˜#7{•îI•Ñw’*ipD!ÊT½+^érĞvµAĤÈ -Ŝh}µœ/Éȝ²Î÷fd,§S8nƒÒP{l{*Íİĥ’!àΈ‚Rä-³Ŝ­ë?VËëë™Ħ½âœvڑŜn}|*c$î#}'ŒÒµ%Ë™Çdħˁ‘;T ¤”ùÄPıĜä2 >ĦşK‚Ú¨> NxƒŞ?…ÇC2#¸/&hġPͅ¸GD_dÁ r€˜fe§QàŸñ88–àËÍüÓ닗‹qEíôLÙg[|â\žGI^Ŭx™ƒ t.gÒÉÔŭÇŜá˽k…Lך>rQéşä€Ùóˆ£˙Ù5 Ÿ—+˘$~oürߧٜD -WêÄ Ÿï˜´;ñèñ99£p;e\ BĦÈP“/$ċdaİ€R!=,R§PĤӚ_zyĝ7şÄFÖy[ûB@ւ2µŬ‚fóşèó90AXo­8Š h|]m8 hÏ ;A0‹ċöü Q~â=ıÍqIipo$Á…ĉ|l%ù4Pĥdqİ3>°‘²|àĞË֗,ùÔÍĈƒñ˜âpq Ĥ G'Ñ£~jDUèÓuÌ6İ„SÌ-6g4Ÿ]e†Yíô7‰ärŠƒ0HÂoo½nF†íˆS6RXí%…´Vûöò~ŝuqÍr„çħËÀÖ ,˘% ˘_,-#ä9nrKL…ɰb‡ƒá0ĵ½Á˜Dq4Ä1œNĝ3qÁm;U½£3 OUÑ4ôÍ\ƒŝ½8 7z.3–OħÃĜéŠ'¨Jê -ĉÓx4œ×JÉf’SYi0ú”`Àƒ‹çê–Sö Ä"C#0PÏZ€iAlÓħ½g"y[èiĉ(Ž›í͎’=ÚÛ$K‰Ÿ6äÒê\UíTċž'CáËé½ħµF0ĵvN çÉÂĠâŞòC™DcšŻ.P3K’‹ŽáĈSş²oKŝNŬŒ9ƒ\ü@ʓ #h&·˜YŬ—ôîF•™n:^ôÂŭµXafû;RnS|C{°è*“)¨k^{@-ğO¸‡!ú¨ÊúŜg&r†8>>>>>endobj -1117 0 obj<>stream -xMQËN0ĵç+ĉÖT˘Ĉn‹Ž­İ‡"–¸ôâ$NI•Ĝ;¨ù{6M‘ċĠÊ;³;;ŝN8µÄJ˘h“­NnŸÖş˘ŠÌt Î8çEş›ŭX˜&xD˘-ñQğû;wɞġÍ%­|˙÷€£!Fk?-râ |Y♃`ÚÜ hjë"ƒ&De¨kˆs}J8bĊ–4>npH+ßQËu@hókıëĞŬŜ‘Oó:4µëÏÈŭ™ao†Üb7£Ĥ,IŽ }k|kK3€16ÎÔ ­ )Wי˘¸¤KÀjr)ğş$¤b£ƒd?§Ŝ7ûí/?Ù"âÁ}K[šX{7v_LĴĊDK…dB‘Èo“¤³–Sô ä€àêŞé5ù@úWendstream -endobj -1118 0 obj -305 -endobj -1119 0 obj<>>>/Annots 325 0 R>>endobj -1120 0 obj<>stream -xW]oâF}ÏŻ¸â%‰6“•VU%]Ô|íBğ­ÄËĜÀ{†‡ċż½çŽmHPğĞĥ‰DbÏםsÏ=çòġh@}ü(ŽhxNiyt5;ş™ġƒñ˜öf‰L‹AD£qŒ˙G£`DF҂W`Ûì>0=ĵ½ ¨O³v?Ç4Ëü8Ŝ¤'×+ħvÒ èqÑu‘KċèçÙéìËŻŒêµ½!9ËN0yíċGËSúÔbŻĉ5>è BфR­ù²BhÓ0˘ÏÂĴéZ+%SGÚĞ·#–D³Ŭà<à(OÒ:˜ĤNE™ˆŸxÜ#Ò^qÀ÷üôóQtv è,Ž€FI£xŒżġSASF%ĵÑ`Pß,Áà’JS] é$ e7€ÄirĞÜÒ×JZ—kċï”H˘…TFxáŬ!ícÜ'´rnŭ. SatlreƒêEŞ˙,¤Ĵ6Ħċ˄ Ĵ\YĵŬĈ§Ž· 4˘sdh\ ›§˘(ĥ]Úꊔ”4²Ž\+äÍ5 OŻ]4[IşÍ TFO&Gn›ÏOŽ'W÷ô$9žŸúğ„·iR/F|RçÑyÜ ĥòXo0Ĵı0ğ~ -'OÄğ)IIGĥZݵq˙kW„Ŭyîjò8%ŭ‚lÔçt(39?â<ĵışùuò/éEcg˘ĴĤıZKTPnĴ#·AêġRâĦMîV~,V’^K#O'ğµN–ÌAI!Ôsûœ‘ßօÈ2”+ż˜İßä³EŞE@“E]´â(Œٖ)ÖúàdÖ¤ruÖQ[,‚Í°ßt@Ôĉ™#kïR…€q‡ƒs;SY #5·£ ífƒ‘Np6ÁwĤġU§ÒUëf™4‡ôĵ̲Ċïfè(í(“65y„ÚSj<ŝvóiGG DÇOF;êÂD3Ö Ž³ ż‚ĵĵp­j:Œa}m#cUÌÎŻíœ½ğH‚­–’TU&ÒÔĦç*iëÜÑÂè…‹³ ÄS{ Û)qT³{+` “ßk,YiP`ó QhrP 8† - ŭ½­!݉zͳ2‘È2‚(QJp’ƒFZ‹'íħ‡)Ĵ³Ä!sżö.·Óe“°k™ĉ lMôyò0mâchġüö1ӅóÇgş½>€UĉJzıŸÂÁ°ŭOb]RlqĠ”é*´À=UëLÀ¸VöÊÉa'Ġ%ƒœü ï‡×,ä‹,Ĝüy#θŻMÚÈd-PĤ1PODşĝêŞ­Ž˘ –ĴÚêÙàZ§íÍÑ9÷ŻŬ›tô#7H.ÇĈ•ç§ŬĈ•aġ]phˆ´ 6ß<{K~m½(f³úHrHx‰ûŜçİÑV/Ŭ]>½P¸¸Ħ(ˆÒ֔üĈW`"óÁ-}vÁ’˘Q ,"˙ÔXû×i¸ ñ oÉĝ Ê6ŠŽ^UêÖĤhCvù  -›Ó£x„Ö˘>‘[ „ûOç·ÖŬyԁÓîñüm<ù½–áŬ{u;“öŭM0Zz`Ĥà$ ok"\0u²PôÖB h³+Y]’XÎUşà–b>L,†M­żÛ;ÈrÑfËċïWúä&˜IkˆuîĞF(ü8+gŬĈ„·}şàŽmğ>Ğ{ :ĝ‰úï-›R żí*­23`&röž=ò–ÀşÛ@ż;û%ËÚı{Ž÷ϓ<‘@Tz_nadpZô. ĞğuìvuĴÒ˘ÊPĉ7QÍkÓÏ$2 ?ŝIµ\nš7Ŝ°žÊ£ŭapA·D9\Œ@G˙V‡€}Ïĉ>}}˜7 Àß°p_(i†ôE²’PÛ(dÑd„*Ë­Ż}íµÜ?ñŒBxž7ċùkŠ˙²òVÁĈğœğÍ}Ì?ú^2:qŬĦúšG‘Ò@endstream -endobj -1121 0 obj -1599 -endobj -1122 0 obj<>>>/Annots 328 0 R>>endobj -1123 0 obj<>stream -x­VaoÛ6ŭî_qÈ'phËI'H3¤­³ĤÈÒ, ë0eħ£DU¤âùË~ûŜQrb;ë·!ˆ![äŬğwïù½ÑŽéhBIÑ{÷†×gSœáÍdЇ”Fb4Qœô£S‰#AWµ"Ÿ+|ÊrM–I;×(GĞ\•ôy>Ó×>ż|RµÓĥüú†°‚§R’Žä›ĝ[oD‡ÑDL‘ĦŸ­J˙˙:ĵ>Ĥ(jóŽOùí#Ç\ۆRK’îf1}ı™=’­9ĦƒkmLJ÷µ.=Ñû”³M(zWەSġÁ€JKsY,$á+ƒ#—Û5•à䳸ÇĊ†Š)⧇Ÿ{Ñɑ8Éx"FT€¨10·ß ͙2€ç(6‘%ÑBQĤ˙FĠ‹5°WÒ'9eµ-(0°›Ğ^RŸrïĞóá0‘µ5bK'š')J3üÇ(ĠĴ†ŽÁSä0ğQvŽ"ˆbÒĤ[ic‡.Ó¤* {Àŭ‘3ğş0#=zĜ5‹lÖr$èĈ“4ÎR(}£Ä6¨ĈŠĥíUmFn@AièmU+ĤV—K2ĜjT)‹N{Ùíâ›J<"CLi-—KPĝáĥ>ÚúŻÊHôož+AŜ†vo7P&ÛĈÑÉô Í9žž˘Ucü#hĥ/ꓓÉkQ ú@`7´TE@F`$­5HÁïĞÒX™Ò -ˆ¸2Ê  óVşîGÚ½ÖµóJj†ÁŸËıÒDƒBż¸ı‹?<|ùeIÏá &=ÄòT‚X4ò½­ÖĴŝ._‡ˆIu­ ħĉÎ"xˆħG/³(fW†&8*çÉùNNU²,ôΔ -Șéıl­—ş”rÀÛXƒ`·ÒzHĦġîġ+m³êħ,°ĉÖÎĞ"xcÖâAÓżé0êğxC~ĈÂI]kZ‰—"™Ĥ 7P䊅Hl™ŻĠš8 ëĈ›h…Ĵè-³4ĵż š6Zml&Q˙à9ÜÂèx‘ĞT˘3Ŭş{7f˙‘Ä8ħ'ĜHğĠ†_;3U{ íÈ Ğ`6b FÛy·lä†àÖÒKzK[$„Ü—â"UOîâh—Rb)Ή>ŜÓ­„…?Á'·Ĝy{5Ÿ=|šĊb÷Í^Êß0 yäċòIAhĈk-(OVx -ôAĉÌÎĞîgA„ĥ4ëŽÙuà&fИċ·jt½a½HUž•ñì^^ßÚc5Ÿdâè{½ğĦbĵ-ÄÂŝ-ÓSĜĉdâé%<;™­!Ÿ¤6?·Êq -úܟÁĜiœ]!*š :D -|ñâtQ%iÊc(d|éáó€dĥñLe<ĊVıĈlFìç{ġۍ޷˜ÛĴGN‹˙ĴÓÎDÑ—Ü$pQĜş1ÌŻ~yw…CÙò”§6i -ôÒJÀpà]‡íĥ˙ñ~A[7ŠÉç7êG£3N‹Óâ×ŜżDŠÂ¤endstream -endobj -1124 0 obj -1118 -endobj -1125 0 obj<>>>/Annots 335 0 R>>endobj -1126 0 obj<>stream -xWQoÛ6~ÏŻ8ä)Ȗì8NžĥuK[ h·Ĉm0 /4EÙĴ%Q#)kŝ÷ûŽ”Ċé"H,Y'ŜŬwßwwùç,)~RşÎhĥ Yŭĥ:›ÜŬP6U'‹ë%­rš&Ó)‘Ż·˘ñÊRşLèíLJĠGúUJċŬ‹j-șÖJEÒäêċêÛٔ.³9ŜżĜkAŻżÜów|zŠ/ùôËYšdüÇ ½Ğ½5y+½6u4SšöĤÙ5F7ÚQöŞ4ÊI×$jÂeMŞŜkkêJĠ>!ú½7ħŽZ§Ĝ?}½xmjÙZ ú˘Ĵƒ']oèŝàĵŞ$oú¸ÓYŒì\n•ÜéúïŠÒÚĠĤƒGGt.MUiŽ×jĠs‡óè G{aµi]ĥ˘ĈqŽ$^+:¤xN܊Úԇjxħu¤ß*$ëĵ1^è2Bà·EĈê$|ĜĞ3Z(|ġéÍYĥĵJRşšgɔ*šgËäşż+éžk?ĊíìIĊW|pnd˨U&ׅĉ¸#‚dŠçÁĤ­sžBfO#ħşĜzßÜN&Žy“ğ‰WıwÉÖWċ³B2xŸt5ËPùòלŠUT ̸5żY&̽Gî‚dY -ÑsÖ:şg“ğg|[óJÈ­Ġ£-Ùĥfšv]jYúBêuY†x´7ö@…ħŭcp+ 4ÒçÀR+BÄ@ğFȝĜ(÷ŠPrYĥ9 ûŠĴ;ÔœÏé›öşŬ$„@‚ÀŻï B†*:qpìaݧëÀ) ŻdjD¤]¨£ï­q~D!šÏĉ?F{:ŭÚuuß:µŝ¤˙6mEĊ3¤ĝŭş Q!öĝÔ^Ñ­­é ÀÜ,Kܲ!£=:JšÚƒżŒÇIĥşÎġ^ç­(İ€˜÷VÚ¨† u>Î,Ù1Ğ£É^s!‚ïPmĥŒ]†›€ŝéùÙQyssnCP*Wâ\üZùNĦÁ‰úêÛ Nƒ -·X$ š7ĝ[Q–rŸwGĦϲ)Žò]’óúüé=Ŭŝ´nċF_uÍÊíĞû¤ġŒu;›Ŝ$Ëè6ğ~TP-t;â<ŭˆDÌ8™8£ħĉ˜I‚¨6ĥBÍqÉRlj8´Ñ{°€)Tµr‹fM1}Ĵ)ɰjĝ:ĝ rCöÛïsgÌÊ0PLëİÛ4Œ>4oĵUï”jĝ˜ŠZ|ʸÎQǐOü†0ˆ@=×ĞBà¤İħŞP˜u9UÊoMÎׄ͠.BÜ/Äq–˘Sżµñô­u¤pĴ‹Ac쵝eY2£ôĉ -œâ!²Àgĵ;r+½á/ÇÜZ! Î҈<W")ĝàèGĊyEÑ3€Ĝnµŭ +ğKäġ” d8 PGÏÀċ$äÉVğ0{9½xk:F~£B„/ zG°-P*]ĝŽá”'BNo>|Ĥ7çMm¤ß‰Ä6Á „~ûcn‡ŭhhĝŭ ÍVK Î}:2Ӂ*TlĴA§âŠ=Z-e  ñFŞ£Ĝş™*„&0·pIšÜ˘"_Ŝ#1°%ĵêÎà0#ˆhCd+ĴݨŸÚOqZ˜ĥ=Ôz¨çZÜqŸáŠó:Ĉħ†ûum^5 /Ŭa\òH"ġݍxĠqçpû3²ŝ:–œ.MÒ4ĉx –cn%ŭአìĝÑc³×,Â~,’ [aƒk×hĊ u<-ž4P™ôÔOmŞEL°R_ ĵĉ†ñ„âÁ”Wİ!Z‚î†'œ—U°9`Ÿä­ŽwŒ£'´šĦ -{HB—Ä’ŒíktĵÇíq‘ĝÔĈ їüİ=Ú*3crwĠïÙüĉ0;ğÌéĥ‰ËÂ-î9K·Üî­AĞÀœÓĦNî–ŭ)—œ÷ì­1ŭü ĦÇġd/x5ISçݳ˙6ìgendstream -endobj -1127 0 obj -1482 -endobj -1128 0 obj<>>>>>endobj -1129 0 obj<>stream -xTËnÛ0ĵû+9))’ìÚOu^ÈHÚÍ%@@S”T’²áżï’”ÛíĦ0 HÔrvgvv?F bú%˜OÁ›Ñu6şşŸ Iöh:Ÿ!ËGq#ÁK)ZTL˙ÖĜÉ…T`è˜Ö[İr˜]'p™½J2 |£ŭÉ7ˆ\HŒ0FÂ~ö-L)ÀeÓ°6wŸC*‚rĉÁĜ‡_Ŭéá&#Ìħè´PĦôŝM³fĊ"İ֋+zUR†;=-$<*!++mU×àJ0#ˆU^)ÁT;pV×"÷„ĠVµUğv5£Ĥhm†ZöŠ["ıÀkPE"rAwË[››&(µ´ [Ż ÓX)Öòòġ2‚ĞĵWJ´ĤĤĒžt'Û\H5Žbäb#jÙ5£%ħàÇtn~=°BC’ĥ -ĥbÒb% W–_íë=ŻNşo\¨Nċ -`{“‹Â“g -hYCéħD]‘²8céİ"ġ€Bö„%}ÛqqûIè‚Ü´Ĥ - ÇÖu [ħ‚ŒOdM"Û³£ç”ŝJ ğfŸéé,²{ÈNüçşq:áIÉwDÜJŜ[Ë3Sùŝ‡‰ğúkÁMÉ:Cb%ó/Ù#–œ ­ñlŽGsS1ˆĜ'Óy4ó›&I’Ħè£?' ˆİendstream -endobj -1130 0 obj -662 -endobj -1131 0 obj<>>>/Annots 338 0 R>>endobj -1132 0 obj<>stream -x}WaoÛ6ŭž_q0,RÙ²“Ĝ)Plëşvöak ú…’(‹ %j$Ç˙~í:ŬF–-òx÷îŬğÓ?9Íñ/§Ġ‚–wTĥo6żm.ĉÙzMNjßâ˜Ö7Ù ŬĴW¸].³;òšjŜ€g°r¸`ġìŬ=-ĉ´İaünµĤM%ÏñKyġk£ú¨=ċ÷}Ô½óÑt[z3l‹Í× Ŝ™ß¤/—yĥÀŜ+,Í3úEïŞĦŒĈuié ċù¸tħ⅛F“n•ħ¤ŞÊë¨vžŠa _ù¤@&PPmĦ~–kĉü–MÍéċâÁÁğVĞ )Ş\`.šŞÂĜ_ĞݰĴiï -CњHê䜌~ħÁ]SŸŒ­ÉԄE -T6ŞÛêj<7_Ĥ wZw8Gö„kÂҝĤVíqXÚÄ@ħOǀĝ—V³EZR‘‚cwásöŭ¸ü˘Êħñv(ŝäJĠñ§ÚÖm£mOÑĞò‹wŬtjFŸФ°GéÇ&!rl!ÌëŽ[L@!ÀĤ:8”œËT6è'U2wĴHÔTŸeĴrœ…Do*-3ŸyÌUÔ]dŭÔ?B‹,„‘ ždwsö˙ı½;ö7Ü^fôVsl–zœ(žq@ñéĵ޲êö‰D­QbN5Yh4  ˜&Êp9s €Ö $Q -Żë!:X@[@CŸÜ3¨ĝèc5°‹fBŸ¤ÓKŽĦeġ`9XĞN dX‰ ‰’s:6Ĵĝ‰Ġ1-²›=›½ğ'¸+$ú:=™’vuPô;ĤU™ù/c-8[ŸÑçS%Ż ”LNˆr‚&ĝÈt&[À8b#,_Hˆëxè€È“iü u+¨/˜IšĤħdZ—Ħf…L21âìW“÷÷<°ĉ˜7oÓĵy8ċóÉÌŜ<ŒòC7_Ól~f]İìĜ Ĵ)}›ŭžmšê˙?öL°Ò˙’½şKÓ(ӖJŒ0qYZÏìŬŝï:t0>╢>ĉr'­ür|zɚĈċ) < 1î§`Ĉħx”Q„*3‰_°#ĝô<ˆtû' m‹\évħĵᇔµ<…&żì;Ó3ö29ój*OÑe”µn—Nƒ‹¤Ÿ0bŞ… -ŠœTĤĦqĝt9xáê>DŬbj@ŭÉ 7jéX² -ġ˜{É×ġñ]/_Ž˙“şı[g+ĵñûS`#hq]ü înjendstream -endobj -1133 0 obj -1667 -endobj -1134 0 obj<>>>>>endobj -1135 0 obj<>stream -xW]oÛF|÷ŻĜê23’?d@Ä 4iê¨ĝċHİ‹È;ġî(Y˙³{¤e01RŜÇîÎÎ̞ŝ=™Ó ĉt}N *ړ÷Ğ“·w—4ŸÓŞÂÊbyMĞ’fÙl6£U1mUħ6Vg§Ğo'3:;_d—XŸÖšĝÓÛ;\&G§ĦͳÂÙ*}nœ’ĥÑúÍWĉĈĠÔènè÷ñ~(Ĵ³‡Öuö&)"ÚŻ)uŜĠŻÜ×*ÒZʵĥD]%K)µïĞ™_dç\ÍNû`œ ä*ú˘Ú\‘²ĜÌG­É먀AI•ó”Ğb³W D…k·*šÜ4&ĝìUĤÑaŒÙMBR½˙‰j:Íi[x­¸€ƒëIÓ §Âù’HQ0µ5•)”ÍaĜÊi'\– TÓ¨lcQP‹ -œÍèµµ.D:n'·Ġ^–ƒnĠĴ‹d52A`#ÇY›z­=jS–.2ú¤•G"¤%ş™ÈQìè#__܄\ç³78q€ĥ^o•ïaWôÏíW˘FùZÓÎ5]Ğr&Rİ˘°oW' .]-/²%].ŻñïsüġšŞÄów4}™çWW ÷ žÏße—ŬÛ¨½U iïİU•™ŝ,Žé}%pԚsŸÜZŬ>|şùƒnŝ|˜PĞCPÈ\C·ĵd(| ħ¨@3Ħf"Z <OgġÓVĠr?U3‚kż£ÈwÖqä™[ïr•kîEŬB!Ò,ŞT×­@·‘–Ú3ƒħ3ĊWÜN0ċ8í,ĝ*MĊ]ĞÀû’/Á|ÀîĦuKÁU‘?=žöçD,Ú‹BĦ[•w8Ñĉ%/YFC˜ü\Z -є5À!纆 Pħ3QF“dÔ¨GÉ~ùĝŝùôĦÍ.]13Z­EI•cè7R€îl U×0ÂIftéöĝòçÜİ“ĥ +pÂlş½F?úv3² óqĴ˙ŻnXğá×WCk·§èĝŒweW藁ߐİhëB0H#£Ï’µjğPğ‚³Â„.•…+!+Rû܋uÁ´RÛ-4 ĴPÍ BĜ …./  Œ@AmŒÉñ²×"…Ö[aûŸ fÊMŽ˜š A‘½0„-§oAtŭ@tĵ“Áf,`‡|{7ĝé‹U—y˘”v½”r?ÉTYrˁw[oTD×U\#;—N³Ž+´ŒŻd;ëqÔ-¤˜Ì töW7 o†óܛ”ùӄɧížlL:†”ÇX ċòĝTr܉@<á\j°™…á›ÂTħżÔ>2PĠEçÑL63!ç(Ĵf k 9 Ó´ħ,eÁœtË6Ó([wlmˆg4듁Ŝu˜ š^ϋ§à´‰<ĠH’kLîPI$§À9.bx3ÌÜĝx*ŽÇ˜­½óB.¤ŸTÁsñû„@Àü0ŽïÜFĜ HşÎ -A -WB·;v—-gœŽIÂp…NÎôX³ċ¤FÍa8ÍÈ^™ĵ–úav~>˙é0›/—av•ÑMW@ħšQ`˘0{Nàċݟmó› v:jÁÁ·;kžtàYHGSt˜ÂimÖFjŒížhƒÙİ›€NÀ@„Ê0ıŬ"ĝÑlÓ5ްá×Ù<"jô³3%&ח‘Q:¤ ŭx*N šž‡èe@ÚÌÂ~2ħCâµ=#” ÁP ü(j?WhFmòl Ÿï?Lzñ½<ĝñéy A“ħ Iä"áI!’ĊkbÀŽŒ4FQ‘JĦŽŠ‡• -X)8cT4àʽG‹è'HĦ""ï:N{´ĴkLd‡O>›‡î 5ŸÏ²ĊO^G× pnô™Zöż†ĉ‹ëlŽ_^é·Ġ—›ïoè³wß0xéƒ+ÔíŸv|î,m?ğ>çìôĠ‡ëċb™]Ë{ĉ|ĝëä?Oĉ{Ĥendstream -endobj -1136 0 obj -1642 -endobj -1137 0 obj<>>>/Annots 341 0 R>>endobj -1138 0 obj<>stream -xU‘ÍnÂ0„ïyŠ9ĤR1Ù9ámİz¨D‹_À² [5I·ïPSdÙòÏj™ġwBÈxÊ Ó$s•Œˆ Öü"ĞÊ"Y–A™ôşh´·¨]‹Ĉaïp'mÚúŒ—nñâa<ÎĦCwpVàAí’•° d)EŽ˘*yŸóŒë+u -bXOLEqÇ}ó֝6͎@—ċó5Ħ|*$$e˘Bޤ ÛİĈê*.‡HD\ö?Ô2nÏxŜz<ßĈP×.>öĈ{ÔÀ‹¤˜k³ßÄy{15Tô;/ސdÉn(Ğ8µ²éjö>ŸaΙ–‰ĤkœouËŭş(ċ£2çvÛô/v!+QòQqkÄGò ²ùq˘endstream -endobj -1139 0 obj -290 -endobj -1140 0 obj<>>>/Annots 388 0 R>>endobj -1141 0 obj<>stream -xĠœ[sÇ…ßġ+ö-JUağ¸ä%KĞJǤKy…Hˆ„M Jöż÷鞞ŬÓ=Œ]!9ЏÜ9g{zzn½ûżGu5Ĉu5kŞÉ´şĜú×ù#) ŞZ~úŝßò›jÚ.˙›Ş­G ğ¸İÎäï„òûĞêÉ7]U×ò—ĦëÇèŻ>ż^ŜWûÊŝá6U×Dvşġ(ĞI°İf³ÑÔ×,ŬêowŸ²œ›ju^žnùq—Ġ$ĜTuӌ/O÷ƒüċöp\ŜÜdËi›ÑÌCĴ@ ,·—=4 LğhƒÂùêpì$ÚÀeşÑ$T"ˆ³§ŻŸ=•fœÌá]ÒʏG'ĝ_mž3™ŠWNşÑ^Ùub}½0Ż|òMk>ˆ1EáıszD^4ˆ³1ÉĜ‘pv\Ŭf &OħşÌçâĊL°Û‘0ŝG֓mX·ñaì~|żZ~@*0&Që+‘ħrĵ^ċj° - tD ~\ 26ËmÏ xô0·ËĞ•† Ĥ=; ë ŭyÚ;–^˜c‰;5Üä¨Vš!(İ;™>5=ë“;„ҝŒÚž Ĉ,êÜÉôÒfhF2žŬ­o.×ÛĞ)I‰Ĥl§˜“ÑÄ.E*0ĉ鴎a"ÙzğÜŻ“GÀÛÓ˜ìŜĈ Ô!½ ¨·y˜0}j;Ö'(?!5³ 4ÁL_ç2È0 ! À9EĦр+aԂĈşĴc:WpŒ„-ëÍín\niÀ´âT]| ÀĞiÁ9 bËàQOQû“WĉNΛşĊaÑĵ)] ŜÔ-$fzoj½7e½ĥĵÓĞ7•„›2A›ŜŒë0ñŜ”ġu3FTpCFÀóŭjy†ÒĦ 1>wž’Áħ…T`t2˙s5ÉĜÈ8lŜ÷1ŽT˜ûԋ‚a"b·ŭ°şÛ/ë]?ĝħ´É .îj” DڇġÍj¤9{èÁŻáùS§9;˘^#ÎcP낚:ı Ğ“}é„ĤOz#úżß4uŽŽ†gı½ÜMyI#î7÷cB†zÄ/ğğ~ċÂ" Ĥ­ô‡0ŞG$żéŬd€ÌkD2ħ"îÒ#H$³÷V|ÎĠ -xħġñ:#XDÛĈZ ˜Pħ„¸]î7âOX4R½ÓN¤żÓ rÚÙ¸˜êOƒÛš>9ë“Û„ÒqüŒ ‰YşàşĤŻ{ HÈpv\î<7#%‹@tĉşqü$•xmèİ@Á@üÖ$žañ!İ@á5,İ$Ë6€g¤c‹ŠˆûpÉà=ħ›Âî,’$~èy˘Ž~ŸÒ²“DĜ}uĴ#ĜmԘÁH"˜~ÜHÏçJĜŭˆè–½7²ˆ‰Œ@0#ĦFŠ'M$€8Œˆ ûŬ&G!–I “9ž‡7BÖÛĠñr$U|>;ÈP”—úïÄ ĤíD×İċô‚ĵQĠz„I`™H”½ v;2Jo°:HbÑ òä v;\LÂĴ÷Ħ4„š>†Ĵ·Û‘À~L"ôÙLë˜`·#aÚ;Iàw™„fĜŭ8ß˙’[ŠE@`ĥfD.7냤I)ŭI§fŽc"‡iR1u鯊&9\/÷ĞŜyY&Î;•ĝì*bÜX‘ċÇċúFÏ ,ħ¤V6>)ˆ$Z$‘D6*LĤFÏYÈB§ bÜİĞŭÇĠ^§™£òŸ­7µn(¨eé—×UzA¨Ž{Ñó}L\Ġİû}ÙyLŸ<ġFôşŽİÍÉYn@//;Ntsé{ ÈLOÀ½]]¸žCRñz™Ó{ ^Ô°lŞ`:áêbTàGĝö਎°@7 -q·]˙œK¤³LâSä -7kÇ݇Š[6u3½>;–úeŸĠ òYĴ+}-qĵÖôÉÇXŸĵĥ ”~k„äfL0fĴĵğ(¤­,’Áe½]ü<`H¸İ&MñD™|ĉÍya!0S9Itϔ DLġn½m~8¤gĦÓJĥ GÊÛ³'ÍÀ •œëúÙ1Ĵ@¤ĴŽèı™X AˆUŒÉ"Ĉ›{‡C$Z¸Œx%"§‹!H´ ĴiÂÌmıŽÓAƒ‰Ŭ 5tğï—ŭ<žD› -Ñıġğ /?ä] -Ӆ™Ĝŭ8żĈÎË0™"(Xĉ„jdpÄĵĜm˙Ò? -ë@AĠ#ĊÀ‘òn·˙éŸ:8È.Ĝċp1u<Éi•ċL <*]/ÌdvĊ;8rÇIäà ƒ -ÏŻG?Ž1]€/ÖËĞíîà6Âä,*WEĥaC]2:˘Ûï˙²Ñ#çV²gN”żÌê-ŠêËş+YT/È˘Èˆë.X”ĥÔ˘†XÌÑ[FˆA ÄÙĊîĥßJ& šĞd– v?Vċ 5"Êß?ŸêÒĥC.SoX½ v÷˜u8żMa€şž`JÖ2AìÏŻwŜIIË"€Ôž‘ħ"<% Ĝ +à pòîbw“ YHSş‡É<ĉĠêêĈ&¤ÓÓvߌş^ÎŭC/¨q§¨èÑijHCÈlÏÎ iȂñŬ~½u+ÒISÖ2Œ1%ƒceÜ܎d€L%Ĉ{ˆˆŜĵüoߖ$—µ‚‡XRĜXDèñîaŒ“42ǔ}#O°‘\9ùYXŒfÇ8L.1ß=·Ä‰Á)†Âİŭpè 3!şzAĜH^1ú ç§É Q#ċ3fˆ/ŒWğ‹Ÿ0ôI-4+ëKY÷†poœşĤ݁^q\÷L †SşdCÔĝ^É 1NÁx½ĵ½ċyɤ‹ÉòÉA27Öċlm—›”yÔÎ!ûbfÎ&•üÛ ĥïûüÛtaċlÛÉÜ{Ŭ}Ùĥ™¤ÙħޤÙĥ1Ì/H‹â|ÉĈZ+ЈŬ÷5¸gĈFJp&·'£=ˆw˙X$+Ù4aT8,7ï‡ÈE*00vacĜ>”ŭ SúĈŒÏd&'ĥ[“.z Ì× ¸‘ÔÙÏÁuc&“jäbM+‡²ûñr{Üï.ï°c—Ž%u,qo¨ùŬ_zKa³OċœèĊ‹&H÷ Œg ö1}3Ğ Ù§@<=î6·bw§Ï6û yÛ´’Z™½H/È6HÍôqğ -Á6ĤÇB ½‡ġÉ4A’pÔ(Í×ċ1d0o ]‘É ˙D/È@Èñe1½ô6‰ôLAŠ v;28O á5‹°á!ûŽ`·#As Q‘“F'²àoŭ譋=u]–İuġ‚Ĵ+/Ż›#bÛĦk&™>فġév ”–5}²,ë1è5÷+µëÜ ˜PÊàĴ d×qL½Ë›DÙk™`·#£´­Ġ!ٖ ÉĥE-&:Żŭ:½ÖYWNûĴŸt1X·A2BPú‡M5_&¨%ÁnGFaŬLPë:‚1#AwqżRß]°ï6³”iŸ,Ħd]Ĵ&Ë!‰–UH2!Y‚ ‰Y0JëZ’u™˜Aw)ŝÖĠI­E†F/ÈşÓ˜—,‘Öej]#$K0!Y·`”Ö5B².ŒkĦë ?…uqÌĠgr¤5ÈşHԈِ7“ŒgúdÖÛmO(-kúdYÖÑëu,ŝ*íZ]H@ö`?œ5zAfE:I\áà ;\#$30!ĥ`”Ĥ5B2-³ èñg0.²†ÑL/ȸ8b-G³áà?YÏÉL°Û‘Q×ɸL0f$èˆñu×½èÓ`ż?"Kd\=1‰![¨yWT÷Á2"ÙFy†À6˜$ú>Íĥ%‰lĜÈËv?"Rç“Eó)w7~kÑ ÷joÙqJQL6Ò ²,žġž…­ÌdŬÑ"™bÙQZÖôfY2Ö"=ÂWnY9‹–ALWéb°l=ħv˜Ú’ïQËÛ˘Nm·½ŝì¸Ŝ†'ĝĞ´‘#Ĝ}O¸^~äm_R`3LȞXüÂ#°›u‡³àƒĞ#´Ï¤×ù Ùġ•}k Îş3›.ì9x×7 q ıoß7³t›ÖħŒ3 †%!I¤aäĈì~`ŸpuµGZ8½SLb ‚™²oŸDĴ×g9*²ˆ™d´¸Ú ~HŬıÜ}²8H''NcìB{Šˆĵl )=ˆi~½ċÄɊ,Žž)ˆ3ÙÒօ³Ì‚>kĵuAŽ‚è—ê6%{¤^Ĵ½'Ò~s? a”î4ckA>¸‘°F²Û‘ôjµ½LyÚ ÷ß’¤@0Ó$ep¤GÑ {8|7 Ĉݝ–xG‹$0ŽĵNX³ŜnGÂUċžA"t ˆga÷#âûĠawsÇïħ²$ì⢗rerˆZos]XÖ"òübœÜÑÛû 2ϐBzy'ŭÓé­@ĴÂíŬ7Ë­"Ÿ¸ò²xŸĵZoï†\^…ÖĈŒ „Š›ôŠšlÒ~Öŝ™½38 ^"闠µ^bם‡ qżĦwêl=I`qìĜĠB3€Ŭ÷ˆ'ÈC|r½³]}Œ$ô”ùi˙ĜżÁ6ÈŬèב’§1Ϗ&SGĤh°áœD°ò3DBˆd˘öÁĞğ›ŭ+jÈ -}OĝCĥİ]^'’LûE ŝ<8 NFŭPĵf˜ès›ĵFâF]ħ>Ŭ„Ŝiz“ Ùñ3_ÈTĜÛïNëúMvôçÁ.HżŽ#~ӏuúä&Ż‘úß8}ş j—íá€İÁĊuo›ÙÂ4µK‡;úwôçÁ$XŒùèÀç -:€™XG"§›Q^ n&—‡HEì'`Ôkż #[ŻD/Fš4>ĠD€%ùÒ?Ä  F2%>3ÂêċúğŠ^—îE à3 ĝ 3dŞHCë HTË c¤Û‘1L I½fĈ°ŜnG}˜?“İï’gç*a·#Ä&ϖÄÔ~†.ï}nÔ~úóà›] b<1Ġîhb|;ï´ ÈÄéĤ—ŸßĈÊ£Eħ_&o-ât׋ßĴŽÏ^M/ï…âċT"€‰·áŬ¸Íŭ‚PÏá•V'ž×?_^\ŻdĠ€³“—:§5éş3†~H֟‡Ó7ıŭ€,COžaj³˜\­Ìòt3&ÄV3µĵá‰ì{İI'âĊßġúÛ·gçCğ 2i7ùZ3Œë ßîÓcçîK×î ë~ĝן‡Vhb‚ŒÄô0ü›\6ÂjĵŬw‚à­8ˆ`ED³ı#3V‚ĴxrĤɂûħÖ-˙ás˜ú“~‹yŭ&ÒĈñ 5lÊÄáñ™|@ħBŠöxùħzħğ¸Ûà½?ŭ èñ.PWŭ}ĤI×ò+,Ĉ˙óèWé"bgendstream -endobj -1142 0 obj -4385 -endobj -1143 0 obj<>>>/Annots 432 0 R>>endobj -1144 0 obj<>stream -x͜[sÇ…ßġ+ö!ÊC`ì —§”,YħŞ"•ÑQŞRy€@„Mp”ìŸÓ3=3§{Ħ²nĤdWÙX====—Ċ˙ÔĠ˙ÖĠĵİÚYµŜ=ĝŝìÁwO—U3­Î.Şş_Nêj6ïŞ³ój:™Nñ×ġ³Ġ›ëM5\T‡›ĉĉxĝóÙÏ~8{ BİŞ–O˙üۃv6™V³n‰˙îŞY;éġâşz%_äûËêğ§]U×òĠ¨ÍĴÇ×Ñ÷ĥ“vÒM*ŭ6ÂíŞĊbÒZvĵíO^ĵJr(š\µşi|Ŭâ}§˙û0ürw+h[˜íìüáä+˙S/ÔÑÔm?YdS‡ 5µ˜E#ƒöΠJXv“ -Á)!tÄxŭĴĜ”DğŞnùRBè}_ ²jƒoŭìZ/Uá3XµïĊeÂYµiqÓşiqR’ìŞùRlÊz½í ?’FLÚJwd‚Ŝ÷„7ûáŬa{s™0Ĵg&M`8İ€]ÜŬĴÛáĉI¤iÑûgJpOZŬœgİv5s˙T ëWĊ0Ĵ£^ĝz¤žqR5XD_ûj¤qı½~˃A˜6Jd9C UWc!0ËĊ¨6Jö2,ĞvUÛ·“ıĞŠb=£Â#mnÎı>Ĵk9÷N<ËûKwU×t2&°}Rşcf(ŭˆ‚ÀzĈĞĠîÍJ,ÜÌÑyMhq|*½3uòpAĵžâĤíä%pĈ^Ĵúy;YV3ÖÇÛ#Âó<‘= -žŒÉ€xx½½9G/OnÈB`ú™´c´ÀˆsĜĴïöÛcög–´ĴĊŸ (²G áÖF -RJJô4œX`Äa‡&míĞĜƒ#İÀèZ_ĊŽ)Hr„a~Žëáĉb{y·ß¤Vb-züĠW ŒHUä„a!0mHÓ¸BZ`„ıö™A*0So[ĊއÍfw½9dÏcİt0î›ÊDö´Eúxı_‰×HízŒ¤Ĥ‹ĉ䪙ò€Ü/ghCÍ(EéĞ="U3êеMsaŒ²2„ĉŒ?r’ŬcÚ œ‚Ŝ÷µ(ŭ5 t3ŜPßßIÊĴCl)ZÀs^œ%`sħŞE(Ġ#VıíYÄB‚¨E(u„¸Éµ :"ğGhâîx…éÇv<(á }µövI<î°ÙżŬìX1ƒĉ´#fü˜Mmĵ’çC}¸ ï]ŒÇ™Ĉùê=ÑâĴëÏWżd×% +ŒÄ ÷mLàa­3[À,a•چˋɨj* -Xŭn³{³Éq‹eâr7C*`!˜Żj+°€elkĦL X% \Ĵî0X€°€çyÄg‰¸ĵL °X -:š³& -k÷³ñOá+ĦD é éĉƒ£ZœğĠ6ŭĥAŽú }ÍġİÙYSÂġ)ĝ™ŸĝöXKHŝğjŒR°#âŭĞvlg)ü -9üŠAZ`D²=Œt  {ô”X`DĦ L" f2 ۊÄcDqqÁ·Z™IXD,0FœÊn6ġß0ÂQPîÑË>ÁQ~/P7 ÎÈmó\żäHŭ7í4`–Ŭ(äùQ£#˙Ñ ÷=n´ĈTslİHß`ŝó÷̞ûMĞÖÁZ]Ġ·’#Ċ“4<^¨q{Ú뺝”Ş]öĝju{,œä˜o5ž·=„UІeMÄTF‘ú+/‹¨.tŭú\‰îY/=OуU`ÀES CħžAİ8Ğ=jY³ ĊzĈùöpÜoßÜ7yq…ĠÒsħkYİ€g’ž‰U`Ì-£›{ÂÙĜ~u}§’ĴÄĜfçĉıROŞvĞ›Ġey(–„<Ċ( • GâË3Éû> ƒ5‰ µŒkş<‡‹ìú´dŬ×v Afàâƒrsq{ĉÄàôfd  T† ÷m h2Íà£0"W!°ĝşX+6ËħÛ{ɗú³k–iĈŭhĵpAázÚıqż›”\š$bÍıŒH ûñdÜX Ô<„'Fžġh윲8ñÎùĴ™8MÏÎŜ-§eŒĊŞ:Ÿ1ó´Nžô˜{-*£F(œ’ĥÄĥµ½ï됂ğ™ -²°0z›ê¤žĥ-y‰€ÀòİĞO˘zÄa÷f²F†(vĊ…Ô_˙ÍLÛR†ì3ĝöžğVv58ÀˆuŠ}H„Íü˜‡ zÛ3^ ÇM˜4a%kñ-Y&ZĴI{ó!ג³êÜİ ى(‡ÔŸít2++†MfĊ@<‚$5bĠ££Î1™“Š%?Œ·óp%~zñìß)FAíŠH½ï/7ûŬö ÓÜb-HXC°aR*àQßoeŭ™d€`£cžháĵ˜T1;Ğ ¨'ĝĠ8D45‘,<‡VäHÄ|‘Ú<‰êÖkڏa!˘'61ÎħMRAuÜ×݁X ²˜ô|İc+ÚsŝŽ9öK™b|Z:ۘ#-/IcBœŒı÷Pn—:Ĝs1šÚ œHXĦ]b")Ĝäû2˜Œ ˙ÚnŜqRt7,šö–˘\_v7‰ß˂İH˘zĈújusIUaİĝÄ_ Rĥqwf™¸­ĴĤXˆr=ä6wèÜY –>疕 -x–Ùég(8+â*ì%×e\“ħÖĠDħžQ:#‹Äû%V¤QVÈI VS:GÒžt]]—Ħ'!úˆ)„ëœo/~<Ÿ„0(6bàŻŒQ²˜E"qy9ceħ€CPà" 8‚ÔÊÔ!p€qĜ"„-9/f9ħ€¸ …÷I‡F>ÂZsfĞE”Œ"\`+Îg´â† ĠKK!â3 úÀñ g#÷аĝ—Z‹,ĠT˘ûêĵÛŻ2„d€`Ċ×\üÁ#hnĊc‚B=çŬqÄ|ŸwŞY -_¨ċ¤­Š²=Èĉ¤“ĵ4LùĜSÖûÍêXfŒ$&¤ZĤ2‰ì1ğĠá—d\–aĤ‡>%ĥ¤7`RİnWûĠnƒ&C‹ŒĉŸ“·Yïm°3’sŻxQĵ·Yú3óXĤ²,é£@Ŝ1â½Ŝ›QÁ *Ñ}uĈŜ›!ÁÑ,Ŝ;ÎÈ{3!x˜%(ÔW´÷&Pt2 RĥŜLAmQi.mĦöŽî ÉÄweİÂB´€‡ĴŽzz¤8pс1ƒĈĞ€Ĥ: -÷$Ĝ¸½Ċ˜RÊéçÏôÚVHñBĴ$ĊóŜau;^¨uĝÜQNvP|jí<ħÂÚıa)Ŭ Ĥ ‹IwÙ`äP1­‹½ŝċÇÜi4'!˘gĜ`2½ï1Żîno‡}ف$Ħ„qÙd3ñOĦm’H—u? aܗu<„:OQ°§`1fòkXuĦÏ u3Ĥ›#= ^ÊËbñ"{­)¸¸Éï°îá˘£râ‘?ŠÑÑ÷yÜ× Ào>/Ĝ„> hk„—Drâӄ 5’ĝĥlâƒfvĈQ}Î@4ÎaNrˆ}ÂaÑ{òß³3vtd\ 3#ÙŜÉQ[Œƒ7Î욆§ĝ‰˙pT =‡zßCKÖBᄕOdEÁpRúÏ­Ĥ?ŭWLŒĠċŻĥĞ5g,€ċ%‚xAއÉ÷J‰(i‹ĥSBxsÑôĥgĵÚÙ²¤ÊlĠPô§<ÙoñIŜa!0ìéL*à9|<”T`„WÓ-C xĈżb'Ž…¤×ÈO;W-àAaÓäkÜBnî€m:Ċ:ŬÉo|5á‚ĵaêO}JO+kşħı•P£0z#ô‡ĝ—„h,r !“ÈžSVáI=Ş÷„ġ„ëĠŝ2OTÄ_’”°s`ëĦ<ċĉÎĵECBñ)™Q[Œ~ĤˆàMµœĥzDˆ<ɛîe§5zdÏSFŝñ˘xş—ïÑKldIú°ÛlôJ´„GççÔIğ‡)˘Aè}‹xAÛZ$ëŜs4Ÿ<>CbZBêÁ)D²lJ.FÉóv[ܙ4 `–P;‚°ž‹‘„ħ ?EbE X‚?xA:PÂûƒ†0°–QöyY9]8C¤èċëÊDèK&'ÎS1ŬÊï5ĠႭ%͂ß²ZÒYÜ, ŠÄ¨22ˆĜ.#ÈéVĉ #žqUÚ×ĈG0R˘>xMd8ZÀsâŒ"BbĵÂ{†hyıZ˙‚wŞB,ÄħÍûZsp Šc %ġ -ŭšqsş4V}Ĝ˘ޏ­éûHë Öxĝûġ­AêÙĝ¤—ŝb( l1ĉ-ÖO=9î+Ÿ×8‰^ҋpA­éŠÍy¤{ùTX ÑzLˆí1bŒZDҙљ L_ 9— í›>¤–%[¤†•öĝz‹—C&'ÛO_2“ûÖiÍYW,çü |.M‚C*~Iİ´GŝUb„Ġñ×?ßêïŻdżg’(áSä—IF•(gö☤F^ŜUFyû!ż" X*B;†,ÏâmO09+İ€€zi+ĦŸq™üš­PTbe÷ÁÔ"Ŝöˆb’@­.Ğ×Û^Ÿ×ÄħŻŝe''\ħKräąüĊd*üàŻd=3Ìse˘ŭĠ£çß?Ş^qêµz2ĴïvHÓBÊêúË<œ{¸ŬÊ_pRàŝ‘îÓâendstream -endobj -1145 0 obj -4944 -endobj -1146 0 obj<>>>/Annots 477 0 R>>endobj -1147 0 obj<>stream -x͜mEÇßçSŒx•“Çóhû¤Ó)‘KqoݳkC°½ |ûûWwu÷żj"Ž l6 g§ë瞪êŞê‡ñŻ÷êjŠëjÖTíP­v÷ş¸÷àñ˘jĤĠĊëŞî“şf]uqYM'Ó)ŝşşħ|µ]W‡×Ġ£ŝĵŜŸOğĝùŜ7÷¤AhUĠòéĊ·÷Úa2­†n˙4zħ­^Ê9UġàqWĠµ|5z3ôĝ:úŜù¤›Tú]ÛUó…'ÇÛNŝċú|ŜìŻ‚¤vU=m& Ûğxß1nŜ$q–€|WOfV^8À›f^- †Ĥ“Îab‡Yî/sGH„yëDĦŽ:’$µĞšşÏvSS)Ö1NëÛġ1ĜżâkĊ^÷'·úOתDßjûÉ<ûV¸‹˙ ÉÜyPïZ€ċ£QG„‘QĠÏEú.ĵǨЍ[ÄÂj`†RGŒóqıżZg˒ ,1c@×SȝYµë̝.à•)ŝ‡ 2'œŜf—ùdĉÌİò³ı –ĉ^,ß%-’ ”Ĝ ’͘ïÏ§óËĠqóĉœ@,+ĉ˜Iĵ`’6ĦB˜]_ŠB>Uˆ|ïH³6éá„M²Iĵ(6é3Ü´Clnm’ä%Ç •£Œ/ß.÷ĞuÉZ$#×ÔrÚ÷ċı$P¤ñ Q))î:vgï‘Hsħ/Hħsïê §V•ni¤£Vü‹ġr›”DÄÓ;1K é×ë}ہËġĞ›Ğ+Uf'Ù\·ë5| >DĠ8„d€*hĦúD÷Z+JĞ™Ë -—oÎëcR‰#I­ÁÊÒÛBĉ)"Höj=#ŻD/˙r½ş9nÎż§^ IBŸÁè}Ùß·ĦÊBĵ˙jgDxz8ĉ˘‚„bÀ0`„Ŝ÷XvoĥësĈHxI’à̤ö5œÔÀƒ.×§Ua¨4$XĴıT°–xÏÂüS…0yA–G@àÇJ <âä†'‹Ô˔΀žŬ­ĠÒًBPœJĜU1l…‹<Ú((N;´â<ŝŜ ¨Ĵ>hžYJ÷”8Ió$ƒ¨8èmj'AxÀt&ÀŭûóÏÔ y Vb@jà —‡ŬrS<‘AFWŒ6B‹FÈ ´Gĵ\î^-óóÜp:x…$°§4“ßdHÔ5ÊÜO”Èğ9gn1 É+ó*^dż¤,-j—­áS% 4ĵŞG¨1(½íß6{ZŬ!9q*Y‚2½ï)Ëâ$˘Jg €âì"›‘D¤$3]HLĝÚş% 3ĵ>ÙcŜmÎ×ı/$&ë;’Zm_´‡Çd9PZIù†’x -²:ĉ-OJ;Î$–ì0Qw %×v¨ˆm5 ',ɖdà„áI ·=¨‹¤`¸şÁ¨4ûžÁK{$‚ĵ˜ğ‘¨žñÓfyxwÊĉ'Iñ!Il–ÓË<‘ߜd‹lßԈŽĦT‰Ŝ×緖ıŜZ˜„á#ġV4X¸ dÉ>ĉôF2Xd–š§c€ŜöˆŸs½O2!’Áz Û°ÉvCJ"âA²Ĝc Ĝ`ôçë`Ñ1bı ݁ï+Ĵ•—Ù 3´âÊ£d9_S@%1IkSqBÑâëPf J <(W ,ÂX-݁'Ä5 ĝíeÙ.yħÔ{];+ġ^ĵÈyµÔ{–˙½—XĦ83ĴPï!('R ™”™CÏ´3zÛ÷âÇŭĉġĤĴüÄÌĞOT·2ħ6Ŭûžòŭáê°Ï#ƒċà‘3䆒x ûŬz]²{òßdcÛUm=—ħnşĦ\ı9QùĊr à{1Ĝ™’x -ôú -ÉKF”ĝÁċB_›àÖÁRyÜp=ÚȔÁ¤”ÙëcœW&#ŒÒÛñĠ +úаÇötn/VPòûӝ˘0ÈK.(K˘ -q•ĤÀN= -¨ħuaBÔψñYŻÚXí´0z!âEÑNğŬgç<†H€ıl@PÎñÓġ2o="]3‡Ğ„Ŝ÷½”†5 J -ŸÁL“xÎóáí 7aDĈwâÇÎ s)Œ0%ÌĥႠ2eÔ+Ċ]‹ ô€*¤·„akK¸XŻÖÙ,#‘…8ӇÔÀB~ä}:’•Ê>!è}߉‘A`° -ۆÇÒ'Iäçpü%ŻKĥğ—Àí ‚rJĥÁ£“‡ 22ŞġŻ`ïĉŠˆQıe†¸ùˆñt³:N‡×Ċ×C8‚˘Q™L"ûŜĵXï´`L‚À bv£ <Á{†7e›e^wHážôhıĠ-”O2ŝœ)ħrÒkˆ=á‚LÙÉҒK ¨gËè*R¨şŝh!–!ž-wyıžD |ĴÚ`Ĵ2`!×/q´g³Ê ³-$2†¤#–ĦV×a„ŭ;[}ËUa‹9GHçAŻá‚ĴŭŒÒ9žÖYCâŝ3Ä#Ĉó-öYħ9í BŸáĝ•Á¤7oÎ×8B´Y-eğ+gwÄaĈ½JßàqOħqĥÍɽğ}û8S`%²$òpAĤCˆtŝ/D8J:Á| -À’9b=Ä€œ7„Iú Y<Ŝwškħ]#’ÚÀ=è!InXÍ0:ôÊž|N0:TÀxlà·ÛCôñEìĤ~$ëOO2|Ŝœ•h§ñ^Lpႌmğ˜Ì_Îï‘˘˘,ĈDž"Äü#ċġéf›“ Aû(‚àAÜ ½ïûñhış.çOî°\PíZ6pÜP5Hš‹Eİ –œGUİ´ÈȘ“,†ê¸1ÉŝtFvµ‰¤Eı²#`XÀ;<ÀH„°Xn ÚÀ3p*ùġĉêĉú#.>|Âŭ0ħ‰3È, ŝڄ 2È܃—cm³M”‚pü£Ğ nŜŒŸïÔÚİfˆ§˘jÂİSÔQ"ĈzĴS"jì÷×U Q͈ñbŭëÍĉ¸Ŝcëpé;?ŭ*.“Ž<…İXÓÇCdQ/á‚ôҏŠĊŜ—' P‡ñJ ˘G¸XŸĝ\< ɕ)‘A¤ĥi}ĥˆÒK–ħċZÈñLr-~qwÓ0k ,CĉyħĴÑĉ#â8°Ót2]‘RŽ#ǀİ)ú°4œ ñŝˆñŭf·9‡&xâsQM7ƒİċÈLI7á‚\gËGéĤœîOŻ9¨×d‚Ŝ÷ Ä÷Ġ‹Íñ°×gŞÙµ‘m(™g„}•xĦşá£‹Íԟ'zß)Ä €•tÁzkŞIۘ²wgzÛxuĤÈè6Ĥ(ÒÎù-…°™ž@Îç¸GÀ6ĉ{´ iĵLAI!Y5‘È#fSžċ@ÁQg§ŽÔÀSdΘ&o$%…·Ĵ5ĜžhÏXĉĝÈB@Ô3q~~˜Ô`„H`0XPP‚B=¨wËcŜ£fIìԀà9Šö{L…Á°DùÉŬI ÓX“´˜$ÁÁÁ)'5œR^ħĜ!í##Dò,Nb9ĠĤžФnrĝÀ<˜WHêVOêÉşnĵ qèf˘%†òu‘‚§b#'ÓȁZGŒ§ËŭMy…ŠdԄœÏŒÔÀŸ -‹VI ”/—§Ó΀ŭžŜ $"aQ'~ü’$œÇ\ŜŝŝEÎ, ËͰ4c9݁íÌȃHžh‹!"ħĵœĵ5ϓ˜àü‡ċ@Á*Fk%5°ë=$^<Ċè6 m`ì;X ùX3ÌtÚäĊP· -9S6-¤j·˜²(†ÁĊ q™ƒĦq8ŝÔÀ÷…Ë5’£—µËžSQv]ĊĤï -~ŭaü@%ħ8§Ÿ3Ï˘Lß~’‚·Ä„oÚÀ3(ŬŜKXĥÌğ/xw3W˙ásñ$ĴŒj·ë˘Òbí^Ŝ/Ís‡Pùğċ›"½£:œ„B}'pĥż²Ë• ŠùˆċŽèmOĦҊd€ìÂ"Ò9ñ'Džn­D·–‹WÖ~x}!Ÿ€ Ÿ‹ŭĉ£ó(¨mÍÒáì2Kóä_ŝ~:Żwià!¨-ÌĴ˜ïúµçÀ…fĉ¨8 ĉ%ı8O? -Ŝċ×0‚w¨,ÎYÉÏ -€¤íâFKħÈòñŭv]ĠȊ/Bb7ÙCa‚2-âġĦx^‘€8B Ŝ)§P wo>”šr†Ċ "Ô"ż=xúM˜ÈŻŬêoFÍÌv6Kr½>+c%c´x‰™t óR#Ş| § @­7¤Ġ9{0"êÄÁë£xoE:Q²ï‹ħ8Ĉ_88ŭ#ÛHCó8텷Áo{Ô3ĵƒ Br€àe2 ÑÛ_Ĉ ”oüè6œ™ġüpĉ]†ÏĊjx Ëşâ/µšÊGŬ2@6=àĴ–8AħÌQ²GŭĠgÎáċ~ğŽäÄôx˘·=¤œ<#È£>Án,îİbġĥ—qXîh•‘ädL\Ç@ĉÍXğ|D ]ò™‘×ÛĤäh˙˘ëÍŠ-&Júƒ…áSĝŭA,³‡ßü²ĈÁqdDĵì$Gîż|ĝôЇüçġê\}}XŬÈ’|Ĉ¨…ß Ġ—³pÖîŝf³ÑÂä?÷ŝż´endstream -endobj -1148 0 obj -4511 -endobj -1149 0 obj<>>>/Annots 522 0 R>>endobj -1150 0 obj<>stream -x͜[“·…ßġ+ĝ;Ysn$'/)]"GKĞh•ÒcŠâÎJŒ–KšäJv~}N Ìéċ²ÊŜ•­*gç#h4 |PMĤĝWMĉġ¤™MV›^?ĝîi?ݧ“×W“ŞëÏŞÉlŜN^_NĤgÓ)ŝşúöġòíġ0Ù^MooŽÍñç×˙}÷פ@(5İäÓĞï4³³édÖöĝ˙f2›ž-ôâzr!_äûw“ïžĥ“Ş’ŻFmfŽ·ŞÏú³‰~Ñ6“j1=ë,;Ŝw„'çÏ>{ñŸÇç/^ż:˙áìĝÓ1ᘠĵÙYcyZÀ˙:êGĊfR7ĠYíġĦ€ÓżYß\n?…u ´‹³ıhGyñ:H5ı2àÉv³\ßdÉ6“Ĥnü³(×AÄöÛëDa(Më{H 8ʟ²žÏJ},àôËÍÛĜH-'ôíÙŻüoŜ†<™ĠġÙ VÛVg½^¨Ġ~÷´S…m£qfĈHż_îŽ>=É7“nqÖZ–ŜöŞÉvNšÍdÑÈp 5ÓÊèmĝÇöSŞi6““ɽíÇmғ£je`0 ÇÀ+ZáájY$ &ɀÄôUXĉaÁ" šâ!R‘‚5 Ìßİ(pâ1-WnwB2 .t’³ŒÄġĠp‹„ÀÌfOÙct€]ÖĊb ĉ ßğİ€GÑ`'QôA=Ñ2ËÔ(⠒BœĊTœwo*àĞòv?\˙œ0,ĤëüHI<&Œ÷L!†ît!î+“Àž’›ö2ĦX T[ôR*àQħ³Ċ“`öë½ZÔêcâÔ8íñœij ÙÉDXMQÌL…pÙEÄİNQUĉ\fĊûċ~Ĝ?Ŝ됞šĠ']-³P`2+P݆ċċúĉ]xè~ŝ‹ÜîŻôÎż˜mߟÁµ}…ĥ/‹ŸĤkĠÚĥjˆê œBĞ– qïöÛۛKi 4`ŭ[ĥ™kxŝ–uá‚ÚfQĜÛ8%Ċ'WùbŽáoäzÛŜĵ_ĉ$2!ˆÓ2½o?Ŝ.Ż×Wë&…Q't)?Èĝƒd·%B*'),-˘ -X½ġäâï“ ³òU‚h ÉÎ&G ,uƒħqmR ڎ!Iè*Œ[ p|ŸG>k@è%úħ…ZÂÍpü´Ŭĝ›{;ĊLö; }gгM‹q,+‰.\­ÎeaáĈħñ£ -„P1ë'] Š°”à^>Ŝ/—[²UR‰É7Ò=üâVËJŒÖJ -èħځÙ},PTâ úĉp\ףݰ=­düVÄĴ+ĴUÒ<Á2@à[ Ñd}̘Ub³9˜Šh‚qiW+$ûĥQrYĊġ -Âİh½óßËz Ïñ]7 41l7\ívs·~@pˆġÖ8 *ĜnxŒÛ-oŜÙ1†ƒ€Ĉπ†TÖıX!†+ÑżÑ§ŝ1ȳ° - ĴPa+\‡TÀ3^>yœìU2ÂllŠġŒ›a¸.C7hÙßË=ىġóWÎÚf ÷şpAĤÊ rnĴ !Œy,$½`qÒ-—ÙHƒ kCû&f™˜\LšŸ#”·yžaXD-€Ñ’ú9RMNŻ<ÁŻċFĦxÁŜ7(È'Şaç–‰ëet³¤.c]O71³³F ûïž/Wï×79$`ı˜‚ŒSK<ìáj…DKöĴDÁç´ò螲ıÚî7fÄZŞ>·Yò6ÓĊIRje–€¤ħ” -ĝʌñ‹€˜‰3­’ -xÄOÌġ ™°¤£,d6?ñ OÖûağù9,ë9j^tĵÚiçó1čyĴPF³EÖÙğ˜Ì²‡x"ĦBÒÍ ôĥG £ĵÛİNóËuŝW;•ǘíĴ‹µá"YÖlÒÎ:Á ’PVQ#S Ĥ8½RBl‚ñLvç.oW’ &úc&­!Ġ”S“m¸ ÖélŒˆĥqİɨ@ÛÀÀşYÛĈ.nwğíŝ8äı‰…À Ż…Q˜TÀք‹€@#”jŝ°êˆëf÷½\[_ÌÌxn$Ÿ˘‹†6\PW`°Ó³$‚Ü(Vt¸@Ä(Ğ÷&‡ĵ$cN!zß×c9ĤŞX$=Ñùz *ĉ ݆ë0%ŜŻip…/ VM˘{Ĝ¸›Ê"™8kËĦÔAİZRps83Ö3^=Í V†1 ĊzFŬLçiva™L“av1ċzÜôú'½ƒ/’ ö·fŽá"W%A[´²pA†[KöŸc5[íĥ -ûċ2A™žUŭĠúŬ-G[,†Ċ U‰IœQİ€gÙéĄk_!€ġŒOëûÔU,ğk+˘T§&]ôċÇ)~Äı˜TÉRY}m¸ „Ġ‘Dħì‹*´ÚÉ Ĵû$.²ŒóŬpcÜ9édäËĤŻĦ$°!Él"ĝ’`êóğÉġüRkÛĉlà3Cì!qvĵ›³é%VŒ Š>F•4§ìTš³dœ$÷”Ĝ>adÜğEÍğX°‰6 ÉHİ·‰ÔĤ‹Â×Ìì$™ä1ħeôÁ×4Ž s\Ž…ìVĤ„Í C‘ì–‡I -é ñ×VŻìƒ|}îŬX ’ÁĊ 0…y…vÑĤH\ Ù,o–ï† Î†á!ËÓß:UŝÁuÒÈ9ÊiÂuf$g·špAf„-—"ÜÁñĥÔy$B{…MSƒûòxğ‘ -Œôëâ>f´rŽ;ñ—ÒĤ‘…Hƒ¨Af½yŽÚ2œ×n°Ùa§żSyíĂ[iĴ,{ƒÔȤA##— ?ŞĤ½ï Ï6ğŭö#gmF%8ĜÈÀ@cNB{Û=ŽàSŠœ!“ïa@Êö ñT-‹€)L‹PŞG„a"}Żq7Nö„UàO½9—İëÙ2(‹[c×ËÍÄfċ%‰Ê„Š\†Ĥâ’qŽ ĜÇġ°³mbI|e†ŠZ;‹Ä4z˜†E(Ġ#’i)˘Żw–ÓġÜtžëpĦŭƒs­5Îoıİùä<ÚbĞ+@šÁÁqÁ)!Ŝ/ü !%š´­áP GÑè³­ıkH)]#;£–ÓÖ'‰†IÀ1–Öb²"ùM‘ĉpk3ò\‡†‰$ ¸pAŠM7I!é:T²JÀ cBì‚ñrżĊk\›Ü$”ŝDHm1‰ìë²ÛëÛ´Ğ€ŜüšÇżĊ“™Ów5:?/Ì5lWŒ—½Nr5ĉ3Ä>3J´7‚&>f‡‘,Wûía\H ]ƒƒ„˘ìÓnßâtnÜK¨RݏÎhèo.¨3°!b „fSP2OQÇx ‰§ş@ĝIñ}8ÁQÊcĵ™Û†-ĥ3I…ÎD^ġĉĤˆƒJJìÎ<\I(Éي°˜X h‘4£%K -њi$Ç3„d‘¨ĈBbfb5{Wî× 65r^Aĥ@fi֓yÇ‹hfŒR£U@/Ç @o{ÄĊpö'1Wq5ô§!2Ҁ€~Ż,!A=b\Á‘ô ë žĉً‹Ôá,+–p˘\Áñ„w!À•ÖżĞn7S­ıèÍöĤĵj7Rá‚<’ìfÚ\8–nŜU@ì8Dƒ(' B!ÚwLQŻHa‰µâ$™ QLU$E—b}‚@̀0IĊ#ùĵ=@IÄ&‚g3-àk2š&ičĞ2-à oÎ_ŭóûWç˙;U˜Ûğ3ĴŜlMĠ!ߛâĥpAöƒ]ĥ"ns‰ˆŭ̀h?â¤ŭh-´Ğ™˘\_‘Â~!Ô#>c? ûڀÄ~Šç)ì'bW€2}Mĵŭ(ĦĈšÎÑê ñwÄ+!î½ŻÔ›Ŭ£ -oĵċ 5^ŒVT-ЍÈ%ğ“ŻÌħ–ʃ yÀÓí~ĊSҨ¨Ċ6ïÌ2”j+Òy2 fz‹HTË C$ ÄÇĉ9Óè’Pğt ŝ`ċ|¨•cƒŻĝsC&¤%l–ĵê&³{ÌĠôfĞ$νêâÙŽzÛ*#ĤvYòˆŭfrc=âùòCa>A†–‹–ÀĊúzœ2  kOó(‰ë)܅¤BE°ÚGrEâ’VÎĥÛħo“ħSŜ Y8Œ’=†láNO&s0,£=·’èÂYÂÌ…%ĝDwaq% $Cù„Ş`ĵĜŽGËI„öÇĦĝ„Ŝ÷ĠXŬŜĉĵ,d&ÉI<Ğšċċ -1û$ÒJ?Š[·$-àIËËKd4CÌŬËˑ÷£"ğ"~ż˘6@ĞVÑ† ԗá]7¤/éôì(B#"ÁẅĜ™äùíġqmvżF%88–Ù…9 íÏáñĞ@ûĞċ*·á=:GòylWÙñ¨ŠĥL´a5/´YyÇ£ŞmÔvjż#‘ÂŜ„!)Û"°ĉJ–IАĈ€…‡ZiEôĥ•_HŞ2¨Ht ^‚D·0Aï[Â="§ÜoVî&I -gš (ħ-i}8ÜĈž­ï9ÓWMÓîU#Ĝ)ʇ6dog‘Âó+RżZ/ àÜ1DRTÜ'0,½ïĜáÛ-÷ëö&8 -ĵBûÇĜäsm„?ç;ÂçыàE—í€Û°Í˘jLáí„ĠĦM -ŭùîzğúó²ħx/~ӏ÷Ï\ğf ›ˆ™$£>Í²'ĝ`-5ÛKÖ`̄sƒ @²¤ŭĴ°ĵ•Ǥa\›ÌèT`ĝ<ĥIˆŽÍ|#mBĈ"m˘z9ß˜&à‡áp]'F4*JS€Ŝö­½Ŭ³/òvĉÇ‚N%|³;1êh3'+k_rdžĠhI§>żÎ/- 4Ŝ ß[!@Yı/ŽwíWsµü0ΣDf•İÓ+ÑĥqÄ“ûq”É„~„„ê Tϰ?N‘E dÄğàLˆLKĝKŝúħl×ÚÖSœ_;ĵê„7$Ïġ iywİhÄ"f“BžÂçÑF°‹VLYd#á ¨Ĉd˙òYĠÁ7ú xĉñUĉQ„FĈ9\ĵ‚@„x××`ğ“~ŠŜŭ+½™âĈœkΰôL™8ÉbŒÍ‰³ĥ×áÓŭF_>>>/Annots 555 0 R>>endobj -1153 0 obj<>stream -x͛ßo7ÇßŭWì£Ü)û[Ú§ÂI/m€icò’E^ÛêYZßJ²Ó˙ŝ3r‡C¨qEĴ(Â,çÙ/‡!—ŝïY‘ċĝSdó2ĞÚlµ9{suöú]—•yvu“M7+²v^gW×Y>Ësüëêüjùġφ›ìí°Ŭ÷ÛŭîĠĠïg˙ş:£Ü++èoŸ~:ĞÚYžµu‡˙o²6Ÿ-¤qŸ]Ò2möú]ŭhxÓ6ĝqêçíĴ™eòm“-ŞÙŻŻ§ˆŒHÛփ!PëĊŭz+›ŸJÄ"U[e‘ċye"n(eIÈ"‚|ȵ“É&ë -D\d/c§~yíí•IU; ÏcÀ¸|˘À(šYw2áj%m;·ĝ°>ÜP’Îi˘™PıĦÍë#K•Ú(ħ¤BèhAn4ÁIš0\”…PÌ(Ty½ÓÁZGö‡­Ìü’Şħ—T¨u—Ok•kLşÖ+6¨=éê ‹kD`]SĈ‡P• ­˙-Î"€<§‚M;ñİßîŬA²Ks˘rµÚJbĊAIV·5çĠş@°ı†Èúú]#‡&ÔĞ1 öíŬòaߏ>è”ù5+–Žˆ%-³Ŭ” ^ -!öLœ‘Çñ²ôeCCD:"ÈsKˆçŽĥĊˆĦĝóóÇÏWıyÁqĈ>J/™uƒ3żs0´ê<ĴnÌÒ9ŸİڙJkÂĤ ĦÀTñNÏŜ]üĉ4˜—Ï#ñYšĠ¨šIdk:LĴı!݆S­şZàĦžĜBĞ3YağV!mFˆ3*AüĴŠŠÉ‚B–ЇÈ^ˆÖ‰Ġrëƒ^‚Jċá;XĈû‰0ـ–HS†à:XÂjĜŜĴoÓ!”ĥ Á‚Èъú–ôñòu˜ĊÚl“•Ĝ“šañ,äór|ï¤Íi¨Ê²—ç։ŭ]?1´ Ĝµ‘ßôRòèpċċ6lµ 85nĝ֏ñsIÛQ1E_ĵc?LDġnwèrĞÍ0·ÑÛÌâĜ¨<ŬġĦÀÔF@ ` APzĝömtşÔf€`Ó`FÖw°/çJXmJ7‹ ï`)ŭ¸añ—W^\m‹)…×ħ/Ġ µl”Ġ6 `ÇÄÖ²ĝ֗k´ 5Ÿ*DáZˆ.¨&# PħRtŞáñÔáµ6 …˜ PKp—180úk_8ŠĵÓÔŞ#CÙ|ıĈ”-* ‘İ:Ô.B"²Eаe7wçᑽ­׃WNÛ¸|S‰;>Ué}ê„ŞjhÍ> &o IŒ:X'nû°~Ê -^´”°˘÷,a\šÍ”p”%8|Ĝs¤ƒċ\kL° Š2¤|Aác¤C‚žĥ÷ô%S›„rĵˆAƒ= #ŬñiKÊ´‹ò,'Së§6$)ècd …è,¨ÍhRMA| q3mçv 4 íâSލ5Í::ĞĉT…  - ĴçŻúÀݚÓšŜT;ó,>‹XB·\qò£loyCˉ7òÜĝ Í3´ g ñ,ċbµêw!›kC`ĉt"ù‚ĝ áâ(¸˘Ĵgùœâ,rE:XÊn8ŒĞĦYÒüáéĴ1ƒĊĴp—Çû˘Íİé86òĊw°Çġ20”ĝ¸mÒÁ2Ŝŝû’r›êµğœĞk½I­Ŭċ"ıà‹X óúQníŽXîyÂ8éµ;–‰ï%ÈÚMŸŠJ -…µğlíċXDŸJ-´Ŝ;úÓoD§M‚ĝİßöòŜħ²CìáÚbOğ!Ï­#ëíÍ@½goVĤ˜ù;˙f›Żeĵä†Ä ۘ’¨›İ#J–Ȗj ħ6w²Àŭ×CĜ*’”.îGyğÀWÊŬlĤ5ûg3Œ•›Żë!%7”¤5É-„Hf" 'Ñsl|ˆ&'j‚À<îÇ­ -ÖÉÊâÛrĥĈ8p‚éÇqĥ´Ċs”,Kı¤ËĦÇ ,>;Ĉ ²€ş˘7Ù@>*5ÁI›0.öûċê.Z…è3Œ3ua[JK\ñl덪ÁëŜˆĈ‡~˙'ò…&u°ˆ°%Ġ6 à;%ÔĈ–îĥùĴĤ-ÁÁ}8Ë´ċ<ŒpŭY~ÇUĠŞK1%7T@öN/B]0䀭0G4ÀĊC‚ĝuı_Ŭı_ĵ¨ŝĉ]ŭ˙›ċ'm¸úËŬ-a–*nˆ4Ô´·sßoŻûo4šċIÌûż EQïàUċW"ùoüŽ Ĵ&ü˕5v|¸Hënœ_^|xs‘ŭ:żÓĠ–‡ĠaƒÉK{âħŝçœËûóGÉ;żŭ˘÷òendstream -endobj -1154 0 obj -3118 -endobj -1155 0 obj<>endobj -1156 0 obj<>endobj -1157 0 obj<>endobj -1158 0 obj<>endobj -1159 0 obj<>endobj -1160 0 obj<>endobj -1161 0 obj<>endobj -1162 0 obj<>endobj -1163 0 obj<>endobj -1164 0 obj<>endobj -1165 0 obj<>endobj -1166 0 obj<>endobj -1167 0 obj<>endobj -1168 0 obj<>endobj -1169 0 obj<>endobj -1170 0 obj<>endobj -1171 0 obj<>endobj -1172 0 obj<>endobj -1173 0 obj<>endobj -1174 0 obj<>endobj -1175 0 obj<>endobj -1176 0 obj<>endobj -1177 0 obj<>endobj -1178 0 obj<>endobj -1179 0 obj<>endobj -1180 0 obj<>endobj -1181 0 obj<>endobj -1182 0 obj<>endobj -1183 0 obj<>endobj -1184 0 obj<>endobj -1185 0 obj<>endobj -1186 0 obj<>endobj -1187 0 obj<>endobj -1188 0 obj<>endobj -1189 0 obj<>endobj -1190 0 obj<>endobj -1191 0 obj<>endobj -1192 0 obj<>endobj -1193 0 obj<>endobj -1194 0 obj<>endobj -1195 0 obj<>endobj -1196 0 obj<>endobj -1197 0 obj<>endobj -1198 0 obj<>endobj -1199 0 obj<>endobj -1200 0 obj<>endobj -1201 0 obj<>endobj -1202 0 obj<>endobj -1203 0 obj<>endobj -1204 0 obj<>endobj -1205 0 obj<>endobj -1206 0 obj<>endobj -1207 0 obj<>endobj -1208 0 obj<>endobj -1209 0 obj<>endobj -1210 0 obj<>endobj -1211 0 obj<>endobj -1212 0 obj<>endobj -1213 0 obj<>endobj -1214 0 obj<>endobj -1215 0 obj<>endobj -1216 0 obj<>endobj -1217 0 obj<>endobj -1218 0 obj<>endobj -1219 0 obj<>endobj -1220 0 obj<>endobj -1221 0 obj<>endobj -1222 0 obj<>endobj -1223 0 obj<>endobj -1224 0 obj<>endobj -1225 0 obj<>endobj -1226 0 obj<>endobj -1227 0 obj<>endobj -1228 0 obj<>endobj -1229 0 obj<>endobj -1230 0 obj<>endobj -1231 0 obj<>endobj -1232 0 obj<>endobj -1233 0 obj<>endobj -1234 0 obj<>endobj -1235 0 obj<>endobj -1236 0 obj<>endobj -1237 0 obj<>endobj -1238 0 obj<>endobj -1239 0 obj<>endobj -1240 0 obj<>endobj -1241 0 obj<>endobj -1242 0 obj<>endobj -1243 0 obj<>endobj -1244 0 obj<>endobj -1245 0 obj<>endobj -1246 0 obj<>endobj -1247 0 obj<>endobj -1248 0 obj<>endobj -1249 0 obj<>endobj -1250 0 obj<>endobj -1251 0 obj<>endobj -1252 0 obj<>endobj -1253 0 obj<>endobj -1254 0 obj<>endobj -1255 0 obj<>endobj -1256 0 obj<>endobj -1257 0 obj<>endobj -1258 0 obj<>endobj -1259 0 obj<>endobj -1260 0 obj<>endobj -1261 0 obj<>endobj -1262 0 obj<>endobj -1263 0 obj<>endobj -1264 0 obj<>endobj -1265 0 obj<>endobj -1266 0 obj<>endobj -1267 0 obj<>endobj -1268 0 obj<>endobj -1269 0 obj<>endobj -1270 0 obj<>endobj -1271 0 obj<>endobj -1272 0 obj<>endobj -1273 0 obj<>endobj -1274 0 obj<>endobj -1275 0 obj<>endobj -1276 0 obj<>endobj -1277 0 obj<>endobj -1278 0 obj<>endobj -1279 0 obj<>endobj -1280 0 obj<>endobj -1281 0 obj<>endobj -1282 0 obj<>endobj -1283 0 obj<>endobj -1284 0 obj<>endobj -1285 0 obj<>endobj -1286 0 obj<>endobj -1287 0 obj<>endobj -1288 0 obj<>endobj -1289 0 obj<>endobj -1290 0 obj<>endobj -1291 0 obj<>endobj -1292 0 obj<>endobj -1293 0 obj<>endobj -1294 0 obj<>endobj -1295 0 obj<>endobj -1296 0 obj<>endobj -1297 0 obj<>endobj -1298 0 obj<>endobj -1299 0 obj<>endobj -1300 0 obj<>endobj -1301 0 obj<>endobj -1302 0 obj<>endobj -1303 0 obj<>endobj -1304 0 obj<>endobj -1305 0 obj<>endobj -1306 0 obj<>endobj -1307 0 obj<>endobj -1308 0 obj<>endobj -1309 0 obj<>endobj -1310 0 obj<>endobj -1311 0 obj<>endobj -1312 0 obj<>endobj -1313 0 obj<>endobj -1314 0 obj<>endobj -1315 0 obj<>endobj -1316 0 obj<>endobj -1317 0 obj<>endobj -1318 0 obj<>endobj -1319 0 obj<>endobj -1320 0 obj<>endobj -1321 0 obj<>endobj -1322 0 obj<>endobj -1323 0 obj<>endobj -1324 0 obj<>endobj -1325 0 obj<>endobj -1326 0 obj<>endobj -1327 0 obj<>endobj -1328 0 obj<>endobj -1329 0 obj<>endobj -1330 0 obj<>endobj -1331 0 obj<>endobj -1332 0 obj<>endobj -1333 0 obj<>endobj -1334 0 obj<>endobj -1335 0 obj<>endobj -1336 0 obj<>endobj -1337 0 obj<>endobj -1338 0 obj<>endobj -1339 0 obj<>endobj -1340 0 obj<>endobj -1341 0 obj<>endobj -1342 0 obj<>endobj -1343 0 obj<>endobj -1344 0 obj<>endobj -1345 0 obj<>endobj -1346 0 obj<>endobj -1347 0 obj<>endobj -1348 0 obj<>endobj -1349 0 obj<>endobj -1350 0 obj<>endobj -1351 0 obj<>endobj -1352 0 obj<>endobj -1353 0 obj<>endobj -1354 0 obj<>endobj -1355 0 obj<>endobj -1356 0 obj<>endobj -1357 0 obj<>endobj -1358 0 obj<>endobj -1359 0 obj<>endobj -1360 0 obj<>endobj -1361 0 obj<>endobj -1362 0 obj<>endobj -1363 0 obj<>endobj -1364 0 obj<>endobj -1365 0 obj<>endobj -1366 0 obj<>1<>6<>]>>>>endobj +˜1F`^–H>SÁGÇäŽÜF`Y#;ä?ĴBĵàv¨Ž§#87 L]”ĜžĞ+_PĊ„Á¤ìHÄX?Ħ=ïÒá] +ˆ=†zDn*É{íI`ÉUqgŻċĴ6zŒT ŒjAĴ̐!wÀgŝòÌhט’ñxE„IË#›^Ĝ‚£¸@2vù2H-[ġñŸÌäd Àzö‰÷z)„nmSuL†ĵÛV'ù’Bïĝ̐5lR {ك€mü0Ê\(:V4^–2İü +ĝ]Ġ%˜s$aYŽ˘íğ›+ŞEŠeˆ }ò&‹óĊB‹È_C|+déİo#ħ 11² „°•1nÁ¸p-ğ&ˆŬ*,%?šˆĴ-Ԑ t[;UĦ“#˙04²^ì°R+Ĵ‚FÎdĤ$ÄiÁ!I:{hYĴıĵw½?@IDÉû—o™è"ÊvudımY™|ĜH+Kç”Ò–YiŭƒáĤЏxŞİ*ô£MzBxĜ$šg͊ñ<ĜfÇoéÄçZ˜[µk44-)¤âé­¸ß3äµ'-:´ËŞŒÀmÊ~à@2Á!)Ì/Xù_¸Ĥ×H$ϳ րŽÙtÀžxO‡\ßĵ0b½‘ÒŝâèÌío d¸ +Ċĉ6ö ³Âhe}ëä<г'µžxzğ·Ċ;ĝòA{1‹cĞ4álÓV•2rßgİëÜ,êA‘üŝSj4J#8Ŭ÷ßéòX›ùĞe â +Q7}ĜÑıŬÌ@bÒFċ;úw—o–Ì !#VrçraÂmñ’†„tl÷]ß <6HBĜCŸ +S˜ßò7@c™™<ı7PIĝ…i!X ôÜéŭĉÌ˙Ĥ>ŭÄ4ÈĠȰÇË1stÎj €9­Ĵ ÁsèŜKljvê_>~ÌGıúñ7`- ˆ#³Ŝ!9Ó?œ€Ż¨b†uÌ +h +Cf(TÈċI0rGRĥâ,Ċ¸ó“-ú¸3ë²ú …ĈÌ>/Hĵ†ŭór2p>+ ½–Ŭ?;'xß K8£½tÎîN>?$áħïĝJ?z'vbĠé~÷> Ô緄•²ò6ÔIîŽo¤ÙŬUtwħĈÛüê‚Ök>/XObject<<>>>>/Annots 467 0 R>>endobj +1073 0 obj<>stream +xXQs6~÷ŻÀôÉ;+ĥĜÎÍôasğıvf³Ûğ¸³íL^h‰ĥÙH¤*Jq|żŝ>€˘ä(ıig³ND‘|ĝĝÏьĤĝ7£Ġœ–”£i2Ċ +Ìĝ?˙ÍĤódJ×óU²¤‚f‹erÓ>ċô0:Ĉۛ5v…½ü‚hĵ–“klşW׋d Ħ+Ŝ1—‡ĝjħJ´XŻĝ ŝWšv£ÛÍèònA³mv°zı^Ñ&c§´IÇ÷ôŬĜÌ=ıÑĥöT¨5^“ĥiu*kQİĵ?ş*ó¤<ŞšÜŽ•çÚê½Ĵ´/Ċ!ĠÔH1İŞ³T¸Lç6ŒĤ4™]%sè?ŽUò”¨„nÜ?Ï?ĞHċÎê ŝ+͵ިÖ/5ùş2vïi‡eoŠ2ם)´U–½V—Ï8tpMžÑVŝ*7˙ĠÙ@}P5M} ˜J÷·TVvİËe!^– ßĠ³÷Ĵa6[]O¤qKĈR™+|е0²sÙm›šĴĞş·jù„yUĵñW˙ltí“öĜ|‰€ÂeßáÓ^xçÄ1FĴàˆn²qż"µĠrŞÖ6lO˘›a·?ĈÖĠÉ˙ƒĠғ¨÷£ûO và³Ġż~ŭùŸß>}Ž·BĴÚ ?OÖ-…}Ŭˆ ıÖċ]Ú˘q²J֜KŒ‰ùrEĴ½ÇŞĵì@³”NħÎ"( ÎÚQS–¸U +D\²Xbw•*Ë8vˆ\ĠŽaëlOÔÚ·†ĞÙ^>3–‚XË2,×á _üëŻ_0ú+•Âıˆtú275°âÑë%mħôéó=é4¸èuRM?joÒh-:èYċf ÉkdÍ Ž-—l€µôEÙ{e˙żccßñídNf74ıžƒJàŝß]óĤÒ;ğc‡ˆ•Żı­ÚӘ~iù€>Š@ĤżŜ*\([á%Pˆ¤JÍÈĝéÛ÷Í7Dđ +Cpn0Ît­Lî ĴÁ·3Öêjà&Î=&„v9^Œn‘Ìz?›”“>Ñì‚ÎvŠŽ‡Éž’‰]ğ@ ĉ›W>ä0áÇ@Lq ŠCNú˜ç½Jl<3FRug¸#_üÙÙf÷o|àv>#ž¨‚w +ˆ2șÒÈóġ ŝ~°+Ğ\Y2Ò"ËHáߖQ°](Ċd bŽÛlJ…ħ ƒOÁܨ8²½PT˜GĠµ.JÎZ\—_°$YV(@^ÛŻyLĴÓم W@rL´ŻĠ67΀…EŸIk<_ EKhK]yrX4=âJLż7iċĵÛĠœˆ‡°KôrtFĜ†°ħ/FŠ=ĊZY?ÜÌvġÁCÙÒSĦ`*Ž82§ñÙJï hëŬ*ˆ$ĝ0çÄ+N— 2ûċƒ˘‡‰£ @fˆ çY¨`˘UuWjAçaĴ4èÊd XȔ\Ħ™L¸j ‡WŻ“bpkNWpDĉ$ÔÌÎs]9íüyûÌ1P +^ì5µÎO"AÑŜıŒLĤ_ˆ".(îi蔣.ú&=ÄĥhŽ B2—ÚĊ‘'£ùş6Iż *ׄş[}#|ۛ—VE_ĈX"§‹E|‡°ĉZ£=²¨L +SKFP„żıi+‘ IpÖa½K¸Âżĵ›ÒMh'óEèHĜé )×ÏĦĊӏm Ÿ‡ícck4‡Ââç2fÓPuâ˙ĤˆËŽċo^Η\Én;¤UlU$ĝµm$…:Ċ­˙Z8³Ûá¸Üı§Ĥì6Ĉv WÜtrFċ.U’àOÜF*Mk´ptĞSMÜ1ŭև“9é™;dgÑ=ƒƒ,>°†âg!·³³k/1p/ïĉmç4Ž7àı‹Eï™qMΓ +#"f<ŻÑŬ ŭl@6^ô(CE–;„‚ëw5Nêİc˜Âĵ0§²w:ğßKU‹:‘!L‰ˆŻÄĊ_uIŸˆJKċ Ġ†ĥEö_€ú]˙Ċ ú;ŝ+_sF{-ŭspĦ^LÑd›bËVïúÜĠ@3Š\EǃI!lË6ܳIXŒ3٘órtú.ÓÓ&S˙ÀFlcÚË{`h…%@f°¤ëŒm ̓IîqüĝAĵÁNFt€ŠésñB°™úQÎ Žö4L€Öò(PfFϓÈrE[ŽvD÷W=ó4wğ,=4ĝµÇCmÀƒ>/XObject<<>>>>/Annots 472 0 R>>endobj +1075 0 obj<>stream +xĊW]oÚH}ÏŻ¸Ê[²R’ĤŬÔ„îBT­´R4Ĝ8µ=tf áßïı3cÀNV•VÛ4à™ûqîıç^~œĊÔOL> F”g½¨GËËhHÉŻûĝĠ’–üGùOÌŝüíl8ˆq,îp¤ á¸ÂğœfÎP÷£ ?A÷ĉ¨7`OM7ó³‹ÏWiDX£ ^¤ÎiĉIg]FqDFÒŭŒeeŞv†ĉ$ ‰’Deײ´Y"lĤJ2Roŝeŝ ›ìŬÛìöǰٙŻ3C…´k•RVnU•†pDšf|ŬZş–*ÏĠ.+W´ZàŠÔWÜ3S,˘D•KZfıüĠğêÑUíiˆĴá‹Â?Y&zżħ°cÌNéÔúKÖ£nÜT'§L*Ù=3y\m-œÂñóioîĤ³§á>İċÓ×ۏçŻqy$Ş+kwŠvbïòÎRĈqıçĴwk $5)M²$¨B8l§‡\"Ó¸oh+ò, §#š–’/8lëDQŸ]kıÉ÷@rİtá+ĥÑj ×)×`Ûş­ÂÒħrÑ*Á›÷ʅéœ=W‘"<İ5âNT*£àluE™£Ö OÙ5è1#p’ßpQ³U}\xÀÔXŠÄⅰ„w¨–Â0_f˘XÚeyŽg+­ŒÛ´PĞÊ4­?<ĉ<2ÏE- ee]éÈrDĤŸÏ҅ĉ°vĊiy~]*D‡ŽÁ˙„.‘çV²ċŻ x¸˘ÀĈiDßÀ +€L†ìuÈ-çıJ“ŞP‘%|áF"µhĦ²*Ì,ôRáş7;XX+‹eôQ‡Ĵ–ĤÊ-÷.–Ё,˜ FC<ÄĊ%Q +& Dĝ&Žxî~İ‚şî2PħÁ˘‡yğîPGÂ —cn}0Ê9Ë^żüĴĦRJÌ'<~V0Ύ›·ĊĴˆĉÜÙa˜wBÍ=}Œ‘Ĝ3şµ +Oß²ŭœÊ°Ús37ÔÑX!°°"èÜf§ĥ <ÍÏtñ9 kAwMbŠC÷GcjÁ=?Dŭ _ì{BspD_²²z!³7*’/˜ +ĥ^.ƒùaQpIİĞ ĝéáúŝuŸévz}÷àŜzÍ°ö¤7âéö'Q|uÄñżÖ;Ĥ§gU-XħÌd+&oĊcżL<ÁëRĴQü…äQs”vh"ħ óĴŜän?Ġ·½’ĥŝĵz· ’!S%k^3Œ´–ıéÄèV³–ážġ&Xyëíħĉȅ´É…/İ?So˜‚&è}ğŻ›“ċqcߏw·ĠjxÀ` cL=gƒÂ‡ÖDŸaž`Ċ°òfk?×+êŠĵÀ–Üpеx›Éûĝ°ĠğûîV²ÔÎ6ĵŭ>ŭ6ŸBĞ S ŻĈĦyŽ{zc< "úĥ§ŒúÉġ<,c'Ôá½>•Ĉ3/ĜÄÀ"ŒoLۍ<ħ/-ıÀ¨’n”ğϏ2!ÚjµÂƒ ħa]9ƒpúáÏ$•Á oû&_ŬVµYÖû…ÛhU‰uñĥŞàüaˆ¸M9İó<ğż!żœöÑħ“@x„Żl“À×´3ğżıĤŻZıġV%n`ı5ŽƒèÖÇğšŸŭ~5£ñh‚olpÚħíOó³?ÎŝËnŒ”endstream +endobj +1076 0 obj<>/XObject<<>>>>>>endobj +1077 0 obj<>stream +xVÛnÛF|÷WĜ}p”HE—´)àÄNúKnÍ (â˘X‘+“ ıĞp—’ġ÷½P–dĞ—Ĝ°-˜Üs™33gżô݇ï>bJ†”Ġ'½°GƒIŽi0ásŒŸ†ÓÂ>H£çÄÉ ŒŸ;1š<=&=‰Ŝ ¨ß§täñˆÒœ¸×£4;O‹RQÍu!s*ĊJV+ˆċyİK)H.H¨GV•\—âž–Ĵax›7Š´´ÏT=3)´(+ŝêÇô Òġhâ²ñ  ßùÙ-+ÎG{ Ŝt‡oY=gtsù–~}Jg”l‰àT1óğdâġ(è÷˜ £MÁ +â™-q!Ş%@ËıfeN|ŻäœUü›üY³YjôÔZ6ı˘×ô? Ò½­xÖ6ŜàVñĉHÌ\Ö Wò^ŠŽ÷1A³[ŞĝŠWì$ĦtÙLÖ59Ϗ¤’ÊŸ}£ŝ¸ VŸ§Wé‡ÙûÙôXïKĤ t)YóuÁ•"2SŒÔFi^ÉÙp–“•Aa Ú%XÛìpbˆf>vfžd  €ŝJŒ>Šò\*bY&[ĦIpŽà9§ ™4ÏmβÂbŝ‚˜˘5Ż*ó×Ä6OşJȝ_ßÒ§Rär­hšFħaz·JÁCJ÷èĴtÓfş{,ÜßÚ²áyhÂEï&[ÍñĜħ8 _†IĜé#ĤoIrı{íÂVşíIL£€ -ı*sŽÖ @N9’eZ6R…lĞ|§ç:?”˘ŬbeHÁD%İï$½Y–³T2şEŒçĤ=ƒ”Ċӈ¤óxûVŸêµcü™m~@˘h‚Ì™*(È)2=D§Fe~JAMŬçn^³ĦĴÈò{èJġßxI˘Ÿ—ë_|ŽÜAá?>nÀ?ôÁ¸ ‹Ü°öèD׎Itá{œ`ìÎLáŽXN5ë‚ rĈÒżÜP™‘· xİnŒ½5!ŭŝÄ+xeàĵ#íö ĜµÁï˜ì‚U(ĜŒ6çĞH´Ĝİ×Í_zw÷C—ñĜlƒ˙sfot†@{ÙL*;,,³ı‚Än’$†ôVŠĴjVÔ3ĝœ˙9ˆ½ĉ À‹Š?”óŠcŬ13LF.y‹ŝahV†u*ĠYÀ*)8ĉ+2 İ$µäY •1·0Ec[˜£„èŒÛA`ˆîükÏ TH;AM‡Ùn~~.‡h:K·v!¸ĥŽiŠ-¤Ì¸zaÛ0röŝb m·Ğœéú²]Änx>š‡êGêıóVcóbÀĉkö•Û`Öïŭm`GîÄş(á΀Ħ’Ĉ|:p8HĥsÈ4£43Û;rġy²fŜqÜ{ú”LÜïâáÈŜ½Ö>^ĈîRp!$š„Ñ7İíşöÒŞy=‡Ĵħö“á.”ŸÍÔ ™Xo(~„ħҝÎĤ)uı/Ŭ%DíÔü_Ҏ=ŭdŽ' ‰#íĊġ› şiäĴ ş”Y‹{Ä úC\Ç £ĜĥâÌËèdQŜ›àÔ`Œ=´˜Ĝöċf` Fƒp4Cl@#™]'żü ïŻ$yendstream +endobj +1078 0 obj<>/XObject<<>>>>>>endobj +1079 0 obj<>stream +x•W]oÛ6}ÏŻ¸@6ÌZù#n’ĜCÚµO+!Ŝ[€Œ–h‹‹DşüˆŝúKJ–Ĵ¨[ĤICñ~œsïÍi†sşZĊ%ċġهĠÙôó;ZÌhµÁ›ËĞkZ4Ëf3Ĵ䓏Ĝyii™ÑG£7jĴÒ[úzó…6ĈRĦœ·jĵ,?_­ŝ>›Ñ›Ċ>&ıÔŜŠŞ:P-´Ĝb‡Ä˘Ê…WFóf=żJĦß\,³.³yF·˘^ şàXië’ĉófëâ*ğä­7¤C½F~fCjġDîàĵĴŬMäö=ŬM·ĤVığWŻI8ÚËŞâßH„ž|¸ŭ6˘VȒcŭtxzMÚì)xUİï’w6°ĉ)żŻUĜnĊş’tsˆ˜"T’ƒ#çğWpœ‡?7´³ĉQ’@Ȁä7ĈŞï‘–˜‡•Λ#ç”šŠœ´*—.£ŻVáàŸ)~[„œÙeFœS!sċx ۂC +YàP5â=`2NÌÑN8·7ĥ`.„kğI: ˆ(Ĉd*}>VÑfúı=Ĥ Ĝ›Pdċ· l¤2ñ³A‚½4\Ô³ĤĥVà })ü‘7'sHÏyuL܆ĵĜĵ4`Ĥ Ĵô£İ1’?àƒ +÷>|Û¤ÊlU£Ö#ĥ×M£ <ۅìö£P5­ĵÀgÖ \\fħ”¸Ü9`Ĵe^ +­\(BBZĉ>ê‡Ô’ĠÁÚXğ%]H[PÄ&O‹szŞI7V ÔĦ­`%d‡„”#„-µ-ĵC‰5a[’Ñ’6 +%’xŞÎĜ4½k9íQp7éU-ô½>,”çΣtĦPHATÑ£uU}™(ŭ C…y^ İ*³ĦÀµ&ù$êŬż)Ĥcú8R“jšİÈhU‚³Ö_)!w³ru´–2*£GCıİktLFċĝ0×h;´'BŽ­Lyr^äŽûì3UÉ%ztl9 ”ŽĤá6ĦÂ.Ġ4ЁX&GdƒŒ>9Ǎ;vsNş$Gkɓ€ÂàbÖÌ!|Ġd‚ì\î|”`87s*ïwûbıfO+‘I<°éç½kÁ2UÈùϐä›y6kħÌ2d“s.£\[­v;ƒŭ+˘ŭmĞCƒżı2¨÷4Ŭ­h—8ûX€ÒûCÁ5½Ä\›˜Ñsó8+ÚHÔv֓ĜŽ)ìŝÛ6 uÔ<œw-TġÜò%)7çEşĈôĴ‹·ڐzž› }.Òĉ”—½^Ġr$ü‰Ŭ8èž\z\;ˆ—_ûŒĠ¸ċ9Ä·#ĞBGÄ9=Oĝü8ESàħ°ıEÉVŠ5ŽSôöëĊ€°vż ùëŬ ‹xQ↍²3{ݘ½Vî*‘Ç&R§{ 7(÷ƒG¨ u‚\êÍŭ@éĵ +…l†äóBü‰Ĥk§()MÛIô [}9po~<,gĠĥpÓZjċÛMħŻ÷Ž—tğg}FK^°ÀàŬé&WjÌK˙4b.[Œħ~6ìıÂe76ò˜ä˘lDÖo:PìĊs=.x)¤îŜ³…r.pY´ÌZS¨Í҈—´`ħb‹~Kb³˜KŞ·{9ö’Ö˘Ó|2Šı<”ĤĈ|ĥ1ÚX.İ—wÄ5üxŞ)—€ë{rċԏŬ{Ž[˘DQm|ÑíñbEĦB:òRŻıҎFĵĈı°>#^ö”Ü(#¤Î˘Ġa‡è>Ŭ ħuÄ .6Nı–Ŭ½°şġÚĊ\šfÔ¸İožrŬͽc'¸4ç‹uSùĝNáWüA€nÀ˙ċ yĥ6{†ĠkŽ] †AûRáê ÑU2żî>Ò..ÓGÚ˙û†¤—|7.Ż–ÙĠċ5>X1×úÓê쏳%œ’Ëendstream +endobj +1080 0 obj<>/XObject<<>>>>/Annots 475 0 R>>endobj +1081 0 obj<>stream +xĠXmoÛ6ŝž_qÀ0Ôb9vœ8)°)²–Ħ[ĵo6Z˘,ĥ’¨’”ï×ï9R²d9)ĵĥ ëxĵ—çîžÓç³)]à{J‹]^S\œ]DĝwzÍi~³Àß3üI)?€(˙šòŻ_<›_GSşšC  éĠEtŝÉéñìÍòlòvE´LĦ˙úfAËğ e<²;ëdA•°vĞMB‰pb%Ĵ¤£ï–q”mࣣ‰tñÄË%áIĞttNωÚL$z{’èÚèşH~ĝŽĥÊeä2I…Nê\^rAée4ƒ3£JżÛbĊĥEVô6SqFµ•ÖëzĊJtn†§ħ.PexPħÑV§Žîç$ËĜì*'“}Œĝ‚Ŝ홰™´-3e;½ĝÛ:mpL•$áˆ4GQŞ­™ä:ùIJQ“ʨprÒĝ²=Šó‹ı J^éŠ}µ@™,ÉÔeɚĵYŻlm ¨À-UëÚ4÷uÚllTċ"z ³   C‹Ï&ò‡ZûàÚbvNVJŸ³DÇu—`aïñ36Zd.–(ĝ}m Ġ'ÊÈߑN;LP8H‰²Î¨UÍá‰Z›oCÏĉèj¨Üo}÷0FcEt?÷Á3ä*„ށÒĉqËé\ŻUù +Š},û**EfÒû2òs ’ö£ž£h"TêDĉb7TÇş.]{íĝ+” 1\˙™’}nԜnIŒg×nĈTçıŜ2zQcŜ/D_ §â:†Ž ;‘ݨs”›FË­€ğo‹v´ïj›ĴŽ{÷ż„ßî71žäj5ħ2r;_&Tֈä§Aĉ ‰ħxN'êöZZĠm=\¨íy÷ u˘žĈĊ"ı +InÊ1ì]Ĉä“àaÚ:°/LR´gôÑB$x¤yh{‰ŭLëĉĞÜ@Ž' ȊŠÉ§´GC ¸â1ŒTì{GD5xF{J9OHä¨v '+d욣fmDA˘Lhë]V[A°ÜàÂÎÌ6„¨$Ż<ÎDıFŻİm3h7üż€ŜĝyR›<A˙-\;HĝˆGÑ÷Ó +|)âO_@ŭÏÚÉ׏zÄ0#ñ'Fĉ!:ݐŒe 0I0ô`ÌJcVĴ¸P´‡Ì!!X1i•ž&öĜS wLná qr8ötZ{€—òɵÂŜÀˆŜç’W#S°ÖĉÄ!y@Ħ Àï™^o,4‹Ċ3œ0‘0;·PżĈsJ.ı@ÄPÊħ¨ÄJċ`ì;áMT~„ô•ċF]2AuëB6³ˆïÜóœ65zçCşZÎgĉxµ!r™pĦì}ġ\¤²)ù–ù @W>òX#rJÁd^ĤÁ/Y#]Ĥâ>iÙ]ßúÙ8‚ ´Z–°sŸäÁGÔŜîwHµBšER(àĈyĈFwà´{ 4ÚÉ@r•rKf(z°ż?´ïAP +ñ‰7.ƒV>ÖijAC5Żh´;Ú +(ž€ŻO 'ùa”Ö0”ÉĵJkĜÑħáĤcŜÒû,/ĥˆSÎÁûéeŸhşws $ż?Ħў ëj'ûħ@€ĥ +!0RäêO$£ X܆’‘‹ubʆ£§k­9Öt t%G› CÙ^ğ+CżFĜßAûùÁÛ³ĤeÎUŻ'0ò³3Òf=9÷YÜŻâˆÁ~î‘D£XċÊf\f›µÀÎwHp)0ìÎğàì&ĵK8xçàÑÉKZ;”!ç÷<!CäH_‡*‡Qb+°"5C…‰)-Ş*o~³’{ŸşwÂĊŜn)÷-›…ùŞ N‰dÂë÷EÜÀÁ)gb‚ÖÔ½)¸‹‚˘ûv% +Ù¸iÉé5ŜßÜ\Òġí4ì=woîè½ÑħAÑ}/“öÀx1[šdtĤç‹y´¸A%@~vËj~Xžŭröż3ż?endstream +endobj +1082 0 obj<>/XObject<<>>>>/Annots 480 0 R>>endobj +1083 0 obj<>stream +xTMÛ6½ûWÌ­^ RĴ•ĵ)zf›žĥHkı셖FŠtIj]˙û>JvVë ŠÀ° jŜĵy ­K¨L)+¨îĞxEEYÄ)ċëï)ŝ–İ ¸†G˙ħHŠ,ÎİHs¸ô”À½8ŸmósOéê.ÎfÖùÖbßÍ­E—t›çñ™³UŠ:Ó)džŸa½žıuv†™_YggXËòUĉà›ŻÓ·ÍßW‹÷ŸrJŞZUĴKŞš‘UġrËöYÖLOËÍö醤&g¨–„{ÍP{i4™–޲a–iöGcż‘|ÇÚËZŒ>ŜŠĥ•u|S}EÉ;JP)”Œ²PĞf™ÇYLŸ7ôÑèVî;Ċ…’ŭ.ñq +}Aa2­:Ĉ(#,‡ħÜ,ŒjĦ7!újÖvOK2;>ÑAôèÇy+ǎÜkç1,8DŽRÔÌQê}(ÙZÓ:%£#%5SÇꋏrÊCQ’z}·ŭ²İ~ĞP”_ÀmEżPg’‡LŜkħS³›Èk¸ƒò´N>/XObject<<>>>>/Annots 487 0 R>>endobj +1085 0 obj<>stream +x­W]ÚF}çW\)%x1ß)•v“Òä!ŞÚŠŞÒ‡ħ=À$ö ħ!üûž;cp’Ş+••@öÜıßçÜğ÷bá/ĤĊ˜&sJ‹Ŝ(á ĊüġÛÏü†f³8šSAÓI4­rzê]=Çq4ğ:/&QLÓĊW +šŒĉí_½~Ĉét-jÙpşŒ–4ŬGc;]BGxò§WÏ8]Ĉ7§ëŜŬêžĈ#ZoÛ|ħ¤uĉC›´˙f/´4‹èqÒ;ôAÖ8³-é­rUIUʌV*—/ןz#ާPÒ:ğRTZ)ÉhzE"X€íĊ‹`o8™ÂiÏ˘8˘÷êŞ´TFğ 9E˘jÉñI…äz/ż²Kµ­MßXzğu›—t°ĉ¨2éào!…vdĥääAXá£(Ħ%7;•ŠœŽJžĝx‹ Ż3ʔ•iiĴ’Ŝ„O‚Ÿċ^”T9i´IÚZƒĦK¤eU‡ŭÙyıIaq°b8IV:SÙ& £ey2ö3â.Iäı99ÚÂ˙½Úí­SÙĜGĦr‘¨\•çıÂh°äà¤ĜI’_ˆöˆJd”ˆ\è”Ë%Ë4˘ÔĈJR +ï‰ÄT(áÖ àÚÊJŜö´ŬĦ-Ú/ÏLZR—^×í=ÜëGu9zΗN9j.²ÏıPÈŜœ`?y`‡ÚžôğV_¨é^iI›>çCqˆ&Í<€¸ĦÄ"}uŻ˘î$Ï·ŜWÎ’Z$ı¤§D8ôÛĠ“/ż0 Ôè­ÚUœ·’NŞÜû²ħòğĠ¸îÌŝpÈ'ÂeÛNÓöɸ"úE§’’JċċĥH¸J,:ꈤBS"p†–òݨ’3ú­l[w—”˜cr47ŬĉßsòċdHn녷šZŬ­¨ġ‰ARH†½ +"Éy,ö]‘Dœšşıw )˘?LE ÚiQr4nÏ5ŒHħE ‡jùĴ†Ó\ċsÂòyU·)ĝ×°"zh=×.ŭŬ˙Ü2–Ïœóòıҟ]“Ĉ‘ç”s‘˜\N=?ŒÒ%we R_[`(żˆâKôAÇ´ğVä+z·jSŝİҞ‡?úˆ_Ġ¸7Ÿ·ĝĥŭĈɐÔKP`)¤€aE µ 6ĥù¸—š:8%ŭà#)ˆ,(j”ĝ X÷™¸ÒVÀRÁ&ĥjÈ€öĤş,›ÚàÓ tó²ñµ!ŽƒgŒ§U-bV x­~#+ôŽıѳ÷G3ĤŜûğ9F] 洛?`eùâ…YXê~nĉ\oÀ•íuq!ï›16 \ĝ‚Öœ‘J~öĵj:b„qşü3 üŻÎkŞ?‰2Ž4ÀJŻééáwD=µĴDÏíXóĤÂĤ²­ûžƒñ½Ĥ;µħċ$şßħtäĊ΅[À“yî} –ŽÖvòžé„ìH0ā05 V„u`ĠĤìĜ9°Ĝ4 +{ŭ"œĈ5•M°HÍ0ߐ4ûV„E û_µaĤé@qoŬ{ÖÂd´˜ÍŝOWsMCG7´òà‘Çtŭà“^Żm =Ïéŭ­úAɛö…7—„5ƒkŽçŠÛ›*Ϛan9H[(Ç+PXá,i{…öñ ĜUgŭ"{áA?‹\•ò€Ç~gt~fFZ;ȲzûIZ‰Ñ6À”Ë1.É/Y™Úž=Ù$ĝİ€“;CÚ@È×ó‡.É ĉ>èŞc[Ħ´L‡ĝÛS +v.ĥoĀÍIħĊ~Mâhĝ֞}„`?Î ßÇ2S$ +£Ĝg—vbċó֗š­–—­{2ap<ó߀fo(ħ]xĤ‹i´˜/â&~jŭ´îŭÚûŝ +=endstream +endobj +1086 0 obj<>/XObject<<>>>>>>endobj +1087 0 obj<>stream +xu”AoÛ0 …ïùĵ-j7ĥ³Ĝ=ĥërÛ°ĦvÉE‘˜Zm,y’\˙~OĥÓmA— €a‰äÇÇüZd´Â7£2§bC²YĴÒmò"]Óş*ñœç˜ŽÁÇ,Oó˃ûŬâfğĤ,£Ŭı6UI;EȳZÑN.·ÚˆÓi ρş–BÍä‡ĉ`OZÒI›OÁRkµ ñ!½u/äkáĜÓ`;ê… ×$Œ"„ ô(šƒHŻvϋ%ùjwjù³ód =}"z“>/XObject<<>>>>/Annots 490 0 R>>endobj +1089 0 obj<>stream +x•WMoÛ8½ûW rrDñ×ÚéŜÒ é(Ònĥ{ȅ–h‹[ŠTI)^˙û}CJ–Ĵ$ ,ŠħEÍç{o†żFSšàߔV3š/)-F“d‚_ĝcÊ_?ŽfËUòžï§É’ +š]­’UóMÓ¨˙½ ùt‘L{OûßñtıĵLĤ }WrŻÌ.Msavü%¸-n=ĠžrÙs8I‚K/ÓÚİê@™Úîw šNw³JwrOÊ#˘Ĝ.L8İ’”ÄFiĥĥµ—$ZIƒÜ+‹X$ŸTŽŒ¨Ô³¤c^Vâ ! $ÓyÌ3FûżŝŒ„Cĥ…ÍÔöœÖ&“N^K=iëğŒé>ĜŠŬ‹ +ı ĤÂÉm­ÉX<³”Ú˘t ÑvAÚmpJœ[_Q, ¸ÚÁšó Ż”֍û6ğ‘xĠ:Ù*-İë,hÉeDt˘ħ+²BÀÀ‰ +M…A$Ġ0İ{ӜŽ-a€‰Eiı™ÜŠZWô,t-İ żN’Q<›ÛÑċŬĴAÀ˜ ˘I5ùş,­ĞNÏކó-bĈ” O) <ʌĥ¨#żvy>·°j+²ÚËĝ´3úŸ0\=ZN£f7TıC€ÈF ÈG?Â:´ĵÀ×ô'íU•‡ŝ8µË+*,óbSWçGbx ë™r2EûÌż6ĵ`*™q }8f”‘Zĵúíá†JQċ ŭÈÑĈC!MM-ŭE]žslñ(ĉ³<6ŝ‹³(gä@Ĉ.#š@"mtÑ"‹Í·ĝl{ĵfŞms›ê2DaĴ+„Ž)‚gŸF„˜ëç\ŒXÜÖîA,À ™ +2ƒJlÀ)%nP‘Ê–‰ûKuy×÷Ĝ(ßiÇ Ŭt5AÜÁ8u°5c/™XŸħ]ŝüEá:éqôşÎ‹Ŝ+Èì网ÎçŞ~Yî­|M ¸W*‚¸v€^éT` ‰¤k(ŭŻZz`ŽJ  ĜÄŻ¨ëe.uĈ c|E´ƒBeš˘,p¤˘~ÂŝŽoó[ Êu_êν˘Ċ>WiÎÇ0ħϘĦPQPžĵždC^ˆĤÌ! (ÓHD˘Â ÜEـ–½^BÓÍh +y˜‹mmRÖ!1TŭÀġ–¸A:"w^ +‰q½X£<y El³÷ĜîߎĵĵŽé]Ŝu‚ÙGè#73Ŭ!E˜kŞDC4…Ûß‚͸6˙ónۈÊô:{:ˆGâkyœ}6@t‹ËN3ŽPk€ÔšÍJĉ–ìŜÄî ~&t”ñä) Hdä܌Cl+ŭ~ZgΣYÎoż~żŭúôPû4ŝÄRvžŜ "ï½ÁĊm‡i44̖qÀĠ‡ûϏÁrYÔ>téYşóĦ5ç [!Ґja żîó!5ġĈċe÷IÎo¸Ì¤O*NWħړÊBliü7gĜÔ/Š?ÀıĊ˚­’­öäâí JħUĴ,ŭJáŭŜşŒ2eĈĉùôîDħ_°ċFۗ FZ7%4!Òı•Óĥû÷QħNWĤŜ‚ôr?ê3fħħ1ĊbÙÚhüúâÓNéŽaGĴú}jzÙuż•†^ùÎn˜ƒ5rñ0;$ÖÓZü”ôùuv[j& + S9Ĉ•/ô:p§UlêrÂ!œu^ê-=úÑ(„Šğe·ĝ™òħv°r€Ğf àâ8°šġ¨ċXĥnGĥiÖÊM(@Żv• +ÔĝëßgÂî¸ +ÇËÛ<ɵ)ĜóğI cljk*ĥ8>„] çV< Ċ†w>ž1ÜĜ›niqֆ2ġ!Ĉ‰'t+ /.M5C° ÌdçË&Ĝ ‹2ŜqĝÂo § ¸Ĝ6ŽSm&K¤rS[Lċamğ=K Â6oÔ³1$Ĥ_3rşĞÁœ/¸qŜüŻ‹4½uy^ĴÉjy…›:lÎçœÛízôçè_+Óéendstream +endobj +1090 0 obj<>/XObject<<>>>>>>endobj +1091 0 obj<>stream +x•XßSÛ8~çŻĜÉ îLÒ@ïċ(ÜpÓRäÚ{àEħe˘b[>I&¤ŭ}+ÙñŜŬ”2’Wğß~ûí*ïMé˙ĤtzL'sŠó½£ÉÍOĉ“9ÍÎNñ|Œ˙FRêfG'ĝĝÊÂôíğÉÙpábħwx=£é”)™ŸÒ"!ptD‹8ZĴ$ +K˘ ÛĊ+½.(Öy.Š„ÜJ8ZĞ,£µ6Oxr+şùR`wB"ËôšUVš°vžäŞPÖá´ĦÒ¨g•ÉGùfñmïˆĤ'“cœĊş(dì$ìkĵ "ÂɌ`éĈ„%£µġx%ŠG O$Á3iìJ•¤SJaْ.hİᔠLÇ"C×÷aicÌI›ÁÙFĉÚIÊuU°~?\ >$pXNhħŒÈ³P™Xf’ŭ)…q|.a“‡×ó҈îeœİeĝktÄ`ZWFı aÙ³Ħ5>9 Ÿ7·~Gò g™²ˆ)œS{µ"wœIÎ=ıPE½'u%Yċä$xñŽĤÈ2§ûàdXú|2›%תxôJ”A"4<+ɕµJĥLŸ‚‡0Şà\eZVÎÁM`´…íŽÑ]kkÔ7ĠoNè2Sñğ3°iiiÉRU"—‰™~Df_°Z;8Ñġy6u<÷ĴÄúóöĉŻ@—JĤK/bNsM)Ž#QĥÌÄ”Ĥl"Ġ&§_‚ûMlŒpd,F÷WŸż\}~xäˆ>hÄRˆ\>ĵÄÜyéĞŻµ`ó¸Á+â [é.n>Ŭ{ËM(ĞĦRĈ4°ĈîüÀ–÷”]l y”Bñ4żÔAµĉ“ëİöĦÜ'ġbŝÁ‘‰´ħQCYTó­Y8•nĝ™qñ+7ôdÜ+œ’0é·ĞK@‘*™%½Ja-ô)ĦD8ħ9uAŝĈ.1âwP˜A0…#gdвÔĈ½•^Â +¤ÚĞi”ŠÌÖr>˘Ş)ä9Ǣ4t ĵĵBN8t(D›Ç]A 7şFE[žwıïeş{̏+h÷.œÑÙhÊ>t-d{Ċ¨4…4ÎgĈiġÇ7ÒĦ¤“Ġt³“BᇷÈ&C9cQÖÓV^ŞŒu­‚Ħ΂‚M[›NèšMŜµÓO眜+ëÀ[bl™~ĝhtU‚-àY²¸ûF'ÑôŒ‘ĥÔEÂÜ)’јFĴْä ä?‰'XDç@\ı(KÈÉrSK´*|·s+#%ÉLĉ@•)p~ù!4OĈlßìi_ìĠŝË>-•³-oÛ(ö‡ÉàAĉ|ü!èÎZ×ÍĈ4=fzé)y¨şŻ³áfŝhŒĉħ DÎ!Ħ£ùĈÙ;¸Ŝ‘ ıñu|ġ­Ŝc°ġ˘#N=S= +Ħ²üÓw;êÔY[§ +sˆ?âĠ7Â<ħ=½Ħ"ò/2U;Ħl4^y§žÛ-CÛ ‡ċzÎ<(6akk S’èbß1O <5a€Ctà …°Ċ’êÖŜd3ŞI>LáĵQ˜ÁvT( W‡×{)ôf5Pöê38…%˘@^*Żú A’ŬêeidŞ^Z2ħÌïFqL`d ó8–ÖîĝYwt€QkçäŜ‹ +£.O+.\t?z†—°ˆU螋~ú…gÌaáÇCW™¨ íۚgOĦô¨ Ê~€Żtƒ‘Ï$è,Ì ġOñ +‹ğh, ı†4+ïa #FğÈ´Hšî²“Ç…xjǧfĤŜAuI8(†=IÑzÀĦˆ\ŠÂwóÂÓñáwÊHîž(Aĉ_5H[?˜Aĝ€v%ž›yàvħö§ß ŠLûzT_î-`pŽue,:F5<áfp5OH9>ú.S>xÓaá„>jVépw ĤiñœŒtĴ”oè˜Mó}„ +RĝóFv<Ħ÷Ûáûî_ğY³Ŭ–'ĉpWÛ^vȆÛ`Dàk ž×m;ˆP酵@Ùò2cÖYĊ0<@„ƒf2ĝ½a²iš˙Z™c(à§)èĥĞ7ó47÷íyhìZ„S݇p'÷Ÿż’ßi(hë6YscûID£›ó}ŻÓIˆ˜çŽÏòXÌ‹ŻsE˙è2ŜÎ;¸ /Q}Ħk÷¨:şĈŝPt8¸%bĉh iĦí&.;D‘mÉ[›ö£ğ7ˆ ‹êm +Hż’Ò¤UÛ FdxÔc‡żqò²ĜÀÊ_ xw|ì͝r­+LYµŬşÎêÑy:Ç×g'ġ×ÑŭùNjsş3úz*½×qĊ‘p¨3vô Ù~pzŒo-ŝïmvv:›œÎÏpĈĞ'3ĥxµĜûcïf…~dendstream +endobj +1092 0 obj<>/XObject<<>>>>>>endobj +1093 0 obj<>stream +x•WÁr6 ½ç+0>yg'ĥ;í-Û4ӝí&mN{ȅ–(‹‰Ô’R˙}(ÚR¨äىGk‘À˙8™ÓŝÍi½ ċŠ’òäbvAĞĠŸ—×k|.g%eŝĊb9Ÿ]Ĉ/>oNÎï.i>§M[Ğë5mR‚‹ Ú$ÓGQnı½s锓ŽĝA’Òı´Ş–)UҖÊ9e´£ÌXşßv§ucµÒ;Ž„ĉoo~ù/Óß÷_ŝÜ˘Ò¤òÓĉûɝ͗³ÜOë\Ô$H˖2UHJĴì †;@F”rärZÓ)\&R½ÈÛ:żû‰ĉˆ„C:[^"lX]Ífôͤ*Û30o€S…›µħû(×éórĥXÏVl$ş/tú:„îTY!<%ı;öË9H•Ğ +ħÒ§8*~) +³£­y=òÂŜ’B%ÏÁN‡ò*ToJ_ßâžÒĥİk£gô›iċ‹´§ìĴŞTµ¨}áBÂ'-².S”ÙçZ>i²SÔ0%Q8!Rş–V$•VĠıÀĠ8.lŞĠS„Jយ)žŞŠ0Ŭ><’¨kĞ€Ö3 Ġg ‚}IäĥÏRƒ„| IL£k_v{ħêŠŭ%óH*aE)‘şÌ,ıÒ XRkŞÊĜ:NSKÖìż{ƒ&ó 2̀ǃé›fʎ4bÚs²Ĵü=îdÒ IŜ‹ZU” UD!ùä ŬùëK:ıIéŬJ­d:‰–x'véÑo@£LY(ıçŠ!mj´-÷/² ÄcGéĜ|GŸ3 „ĥFk +ĥQ:fŒC!BĦ7H˙ÓTĠŬ™‰B•Ö˘ïtXAaĝV–Œ¸²&‘i&"$Ä`*ċ H"͵ŒSóôiFֈR +H“{o˜Ñdtħ0•BĞŞ) 3œBáĴG8ó5MuŜ •éıì|fÔĥÁ1Ú˘ĉ=ôɂô?è%µ²ˆ+q€Kˆ*÷;gxoy^76sáŜĦĵ\#4kÏÓT˘/ÑË)ù`N =}bRp²_JfMé!ê; 7Ä )ï*Ê ëßĠÔòžFu}ĝW)c¨,¸Ìé ÜaùİŞĴgùœh3ˆÍM$ÔgĊİTÎ-G¨< …I‚§Ħ;"ÙFċ1|§‚–ŭûÍ8ĤQHY!vLGİt DMĤ&ħE²$) +Ó:îĠ.}˰­Hžŭ÷ïL+£éïċMv¨ P–]Eä5!1ee4"ŒésşÑ$Ñu4ä¨'vrJ“vâÛnò:Ħ­Şñ:˙ƒzœ‘Áyżµo ìIrä%Â5ı•š…€tW O|˜óuĠ'ÔN‹7žd‚2„mEZŒş8ĵĜTıf=Òw}X8`€7PÖpD9< iëxhż"I×5Ô6֗Tf˘)0tŭh ÀzÀ4–i i>"ñ„ö[šƒ…ċ×L”V@™ĝĦl ÂNrÉ4y§áŝ’X3’xzBôòbÎYñ`FtöÖÑܝ;ö?Ĉ2>heĜHĈ­1j÷¸(]Ë"~‡ĊÁcĉo’îUIŒµĝHċŽ&>#bOAîrµË ü§Ŭ`Áìoò$ñ|?ÖĊQJşħèEÔŻ  Loqx÷méÙTÉ+Ŭ(=,1Q/<´ó4WĠÈe_3zż>vŬt~7XFwAÉc2dêkÁ‚ĵéúÎó’óBÑB×í~™ ,xîc=>î[o÷<Ö=ĠŭÊÓġ,/Wì +|bÈL›hK½A&Ú²ĥĤÀAôÄ`÷d1=LŸğD6½ÁVtÔ$ŜBÀ&CNûŭ’FylÌÁݏìĵw6X<żğËä|…Ÿh×Kü`ğš]sòo}Ħ?Ĵùñ£[“4%TĊŻèŒöìpál½À³˙˙ƒĉr}9[Żñ›——Wló×Íɟ'˙뤈Cendstream +endobj +1094 0 obj<>/XObject<<>>>>/Annots 503 0 R>>endobj +1095 0 obj<>stream +x½XMoÜ6½ûW rñpäŭ”6zp¤Š4m³Ç\¸ċe"‰ŠÈġzûë;3¤$.½vœ˘((ĉ÷Ì{3ŭv1ƒ)ŝ›A6‡E +y}1MĤĜCŸ}ŝúġb9Çż ÍĉÉjXf üßµ*ĝDó!]½NR›§ÉÒ7hh^&3X­§Ĝ[bH2ß˘Ñ°£Ğôtt5O°šgĵñb½Zĵ6h£IË%­ċı4ĥÉàìdÔYµ\U³ mt-Ŝ9h£UéÏ Fƒ6ŽNOF ŠY6Kĉè-˘•úmûfsqŭn ³lJÄ;]g°)ĉ)lòÉÇ&— `odyòŻĉċĉ Xùxññ·ŻßeVƒhÛêv'Ħ•]­ŒQş1IÔ[µh ŬŞ;ٜLP ­ċóo;½oŻşĞ +:` +Żf taSLşëġ=ĜNµ•#íˆĤ 8¨Ş‚|'óŻ|BÍ­,NÎ(u‡G” +׊[ĦcyêVYC›j¸Ígžrğ…ëwóŜu#ó}§ì12ĉëéZ&-Ż!jE'jie—ÀMs>Üƒì$:àÌĉĥl˘s9ğt&*.@“*YZ•ndï9™\Gâ‡Xë[cdc•¨Şü-;íÌ +8=ŜĤów¤Ñ„ûƒ~Iĵ&),^0ˆ:áĞËŜ]éˆ<ݐ—L ıKĥ…[˘Uú€ÛX9ä°r ×J‚î´Ħïp +bÓïáŽx_HËûù,³ĝjlx´·Ák„;Qí‘MŽĠlßSÄÉ‘8ĤÇĝyŒ(t`Ûé;UÄWšëşVmU…lDĜÚ<ĦwĜ쎜´è€Rä~ZêëtħÏe‘ÀuHpġê€{­ UiҀq(Ùà,şñŠğrħ-½Èħi†Á0˘ïòŜzGXŬ^£+ŝ+E>îz]zè .óĦ’ƒ¨4ˆñû’Îu×IÓjŠZ^ežRĞ›só9èĊp¨÷\0 Äûˆ£ĦŜožĦcYÖDÊt QÍíi@„A˜;Š ĠA]aÔ¸ÔÍeìá˙£N‡MŻÑgP`„á*ñŠ…gj4L—?*Ñ}$Öż’¨ d(ĤĜÜrĉfz>”ít_Òc"Y°mԙTA™;š˙#ìDê`p£jCqràXäb:m>¸d(8£rĠ]Ù׃֧Àw\Ş“ıĠŬч.*0à aġô5ö`Ĝş\H“wjK‰nĞïd“ä}.[‹ıޤ€´.jTZ„Œv< !•0R”X£žZĉ2f´ÀA?œY:nçeq>`i}d׃B$%>Ooç/ǏĈȖ1C/’ù…½ßSŽ…)Á P6lĵĞ‚}OB”+–ħÒ(jĠ(Œ]% ıhhĴ:İqﳘAKU&Ž +ĈÒ‚+R+=|Ô!”i‚ó9ÍRÁĊ52VïA1‘1{ġj¸v$›ö-•Äd :ŒĞùX-÷ô’ÑT’UÂĈlzÎtğUÇï HMüfê™Ĵ$BĦi.-Ċ)zâáġbUŻDçësĴL¸Òàd|Eû;(éüRSqH 2£ú‘&ñm%?ÖıĤĊ7¨e9Sotħü>/XObject<<>>>>>>endobj +1097 0 obj<>stream +x•OÓ0Ċïŭ£žşÒ6ŭKÓ=î²TB´EpĜ‹ë¸ÙÄ.ĥ³Uż=Ïv҇EUĤĥgŜüĉós0£)>3Jç´X/ÓdJoÒi²˘ċ:Ċï9F>,,ĉ7Éşżp·L6sšÍhğGĴĠ:mFˆ3Ò–¸Ì *™}ÚŝLi<_%Klíµá‚šu‰Ŝz&àN›óżwĥÔç'›e+Ít(Ħ²"#İĴ,#½'— :2Já„ħ”IË+ë÷äĜx-“Í ÍP/kĵXFĠĞ$Mè½ÂĈÔŠNÒċ!˜uLeÌdôÈÊ£½,1çŒÜU­m£”ìx”ê³t§ 61vY²şŜû‡Çß!i'§‘­xNÌÒ¤Q™*Χ+TêtġġÓûïtĤ”ÖBŻġħ˘ş„ĥı´5ġÙ"™ûÌ`Ĝ8@Ĉ™˘Š ĠÜáɝ„P^3*ħÂыd‘…à•‘î ĴĴ™żéċövç°ñ’x…ĥt,ô ˜?!mPks}˘êHx”M™”ŽÒ@FŒsa-Á€!—>)aH:´²(¨ qI<{b½ږ_Ê?ĥÛÁJħú„*är•Â$µÚ „†@°!Z'ÀœÇíĴ—j”½ô!! +dµo–ÏĜ§óÍÇjÑĝĈz.!àĝ´ħrž3u1[×(0+ +ĊÖҊâ{şü* ûĊž4{ÙükâÎs0ÚdóĤÏ > ŭÉß#;"¤GŝŜ~Ħl…Ğ'p„C;ŝ…×Iżcd– ü>ÙĴkGÍVxa­´Hoâ%ûxûñî–>ŭïş×ĵ*ËßÚqs`œÎñŞÊF˙yµ7—“ıL—IşZ…x‹Ô˙ġn;ĝ2ĝLŽS\endstream +endobj +1098 0 obj<>/XObject<<>>>>/Annots 511 0 R>>endobj +1099 0 obj<>stream +x•WËvÓHŬç+jÁ"9'–-Ûñƒ]d†™$l‹ ‹ĥÔĥš‘ÔB-Ù _?·úáWg8„œèÑġ¸uëVéûIL=ü‹iܧÁˆ’â¤ġp‡ĊüëÓ'8ÓEo¨ ~o üUN³“x8ÂŭádġùéhĊŝŠŸÂġ/&фŸáİżÚ>NñĈp2ĉ÷ż–´<ú80ÂRA1ûµ|èÍü¤{ +=š/÷h<ĦyjĊäô*U#kGt_вQċŠfmUéş!UÒL GŭèñlŝÍZŠÇÎR.ú°u:ŽâˆŜ—M­Ó6i”.Ŭ›CŠc˙fŒˆĉıReÉ.6ŞÉ¨É¤5ÍYäRyîŭ€ħo”˘QkI_T™êĦğ9U!B&™(•) İ˘Êe!ËFĤìG˜†Óµt;ë|şż˘‡SÉÈZŬĝp3›Q) +™R*ùpĈȵҭĦµĴ 21¤—>&]ĉOä‰QŜŠrʑÏDäı‰üÍŝ(r s¤+ÒT1D"§e[Z´Dš'Òk•ÂâÉe-7bô^Q$oSi^³apŻ,‡‚-uMİ̵He Š›Ö@°ĤÊ%0Ġ[,§Ŭé¤{7ïö{ n’+àg¨­tIİ,D™Úş×‰/egM˜ŝHĉĦ?Çѽ…ĥ·°B€0À‹špġ÷Šz™Ĥށô‹ú!êċşĵ˙òpFȊ_~_X3œÎÉȆŬwö*ŭpZË%Ž7Ú"Ĝ–ġŠN)kšêu· ²0…Ldt['°­dT:ƒğnĥñ10ezˆC ĜOĦxİ<œˆg´' …ĞeIŠ% C³FÔÍ[Üs¤²>§we[üĉñœ“l’(ŠÑLJFÇfĵ#ŭíìí¨´Üh TTXĵvéYħÚG0i*ݵÑË&JtÑ=Äq 1Ñ + íQ%ŝ,œĝ5ôÖ—÷ïÎ^3`ġS0Ĵj Ŝ>×Ħ—I"Ħ+Íú“Ӎ2`0ˆsuÄñ +NèĊ7™4ĉ%×˙ÏÌ>½Fƒ†nd lí`ŭ{+[IèUµıC£ÉjŬœÈµF²@/l-ıûSш$ÏX,MJ?SozħKħ˙‚ƒŝ$Š§Ô ÀÍ3‰‚e ÖBʒŒ.¸|P#D“èrÙ²à‘XèĥĦM&‚†Ħ ÊP!”r€û%š5•?xùŝŜŞÚÊ/§cY³bÉݐ ğ6 <PöêE6ÓĈŽ]§ĥ·`o›dYëb+^ħ"ş¤Eğ:r+Á˜?˜b=¤ `…H÷ĠçP}:H(0Ŭ4²f­´AÙ8í5¤ûxÚİġšċshÎ@âgݏcŠ-´şL0VB•çÛüŽ•9ƒ˜KSĦG)C.-<ĥ,*‡ 0ŠÈ³7 n“Ât*³‹“]ÌF%˜‰5ÉÇL-#şx:òd|ú†JÂŒ4fÊv²§Œgêĝ4Lˆuċm F@Ú6ĥï 7ğÂD ĴŸgò‰XŬ6*W?ÔDĤöc40ÄTTžë ct;£żßÀN£’‘ˆEÚÉd^‘Zғn­ŻT˘ì8ea ™ïP;žğ×#?4OéO½ 3i×{óÎ8[wš>£ĵJÉZĜŬ€ÉğïÂĤñlíF0†aHя:ŻVGşîïv˙]t}ÚĤû1žLğq·w]ÎîáçErŭ³kÍË!ëïR­ÚÚjî^_ĝüûĜ{1âŠÁ ˙DzíĠWZ›ˆÜ…Ĵ_}uÇÂ6aû(ê.ĝÈ/³ZbRaÌñò CeÀğŒYávğÏn šAˆÄżBĞ( ğMyWßݰhÔk…ŜLj)û·%Ùñ•‘e̟²ĉmi´˙vxì¤ÄN£½ŭEä żDcŬŬšÚà”Ë/Š˘+ҎŬJ…›ĵT•èaÌÊÜ9ÖQÎqc +ñxĠ +ğ³Ġ –sĞ:Qĥ–ŝ32ï² +³%Ċ'ŜoċsÈäS3·Ü ?KV*—lċĝŽà° ġ[쎑À@ß8W>¤mpèûy&!ŞÛpÍ9xÀŸ ìê×Eàσg‘‡2ž[í[H6“Ê +Mçä­ÀdşÍ!‹|(˜Xâ{Ĉ%[itŝ5ˆòò‰‚ò‡Ŭ +bÌŞëìƒnıçì9ΗVÙ[µÚi€M§LÁE÷Ĵ1ż÷)<£ñhâ†èŬüäÉĊŸżendstream +endobj +1100 0 obj<>/XObject<<>>>>/Annots 523 0 R>>endobj +1101 0 obj<>stream +xXYoÛF~÷ŻĴ-RwÍÑyHzĜEZÄyX‘+‰6ÉUvI+úûÍ,/)JQ9V´ÚŬ9ùĉ ż\„4ÂOHóˆĈ3Šó‹Q0Â7üòÛż\DQÑl1 f”ÓtLêEF·|šfóq0ĤÉbŽÏ~­ĤġE¸ –4ĈĠ1_ŠÚ_ê-sZLöÂ0‚‚ñh„¸ÎêW|³żĈîrñ½ŬŜ:§(‹Ŝî‚EE‹(˜³àpŠMżÁ½5vÇ#¨ïíöÖĵğ ŭŬnŬéĴĠ’'ÑF†óúršÀ÷E½’ŬŜğ³ ĴógyW§KA~ÂrŭBnvK<ċ{r÷z˜ĉsÚíġ–0vÁÑnóĠŬiüí†ßâ~Hwkb{F!Â? Ĥ³Ŭ%B”ŬĊ§25Ċóğ‡žĦ$ ÈĴİÜĤŽWı.ʀ^ż]R8aÁZòp xĈ$ĉL èµĠŞL‹ }ÚÙ´(Ÿ}ö‹F¸:çï +26іJCÚíŒ-ĦQSµËŒJXL8“Ĝô ˙­ÓLğ+:˜ŠòʕX[ĵÇĤX§› +,Vr‚ÜVaQ¨\'­b?”ƒcbíTñ‰ÖQ r™ .§ŬŞ|.>–Ú*säŒĜ)—qv(ÍÙ~U”t?nĥĜ§íSkıÓ^9H_ècZ$fïèwUŽk‹Ğ_˜§4„œµħ§xànÁhŬ?o܋fàŭı­İ²„r“¤ëCkŒĥĈċĞ€aóxA™J9ħÉÌJe´SĜÀcGŞÀŽĦ˜ŞċÌÚd™Ùs„8'žyï^l*ëôk`֝`zRYĊÁtUĵ%ċèr§Êí%qä”]UÀ••×nĴ4êÔ.S1Û§ċöDŻÚ/@ÏFzс*–\Zêûç?z"ŽhÉfN‚ Ş[…=Ż_kÇ%ğë0Ġ.Aeh€İ{€´M˘-\ +èVK‘;6S+i‹MáĵLïŸSŽĜîÔĈËmŭoœHÊ ‘(F9ì‡2ükèÚÔPOdwZÄZĞżTİĠ܂YÜyğßN¤éL~cYîDït‘ó Ûîĥdr$Ku0Wu‡ò›e„zĵİ&P‰P‘Ks‚­„4iP£,íj\YóWrŠ<Á‘b•GĈf҈ĉͤñ²*·†ÛĜcÚùelŒfSoŒ§Hġ YĦœ™WŜÍ^˙ġqû9r‹ŭTüÓ’ĥ Ĝé!ëĴĊŬĵĵ4]Ma€Ê˜èûHŬß}S…ô}!ò–³3şu€B”,´°”ÛŞ{#bN@~mŠÒ˘CeŸì™Ù0Ü~Néıˆ`:“ĦÖĜ{Ş4Ùâ€U‰BÉıƒŜŻm ?Q ]ŠöĈ>ú.¨‹§ÔšB(şßj ÈÚh{‰`ƒÈuƒH7kœjĊKfN´µI.€Ž+”ëCíAKÏ.…%éúž„aèGŻ]ÁŠCk†ÑĠĉG“çŭ|Ê`>×´W‚^Ħ_ŭ‰¨Ëi*@ÇK”5_fšaLù›ûĠ^gY@ïÑS0 ĠUfc‡‘ÓÎĴ•>/XObject<<>>>>/Annots 526 0 R>>endobj +1103 0 obj<>stream +xXïâFŭÎ_Q‡"-+  LîCÄÌ@‚4`“;Ŭœ˘Ĉn 3ĥ›¸ía‰òÇßĞn IVJnW; ĥğ~ĵzġŞĵżÔ:ÔĈß |êö)ˆkmŻ+ü£?ßÖşƒ;ŻK·ßğ˜zŝ->Ŭ·ˆ–µêwÜíßzÊ]˘^Oö†üî_*iSğ_ĠZ“6ŬÑj˙ŭ!~ ­Û6­‚~kŝ8ġÚċWŝü'ĠTI¨†în[wúÇĠϵ65;moĠ£]ô4˙nt:]9:[Ñ(ÚïÄO£Íżháy:_ž TÂ˘×n·żxz>8:=×™ÎìùÖä–:ĈÂ÷=żŬĦĤ?z]Ÿ­VÙjú2û-Ĉßš.Ĉ4/ž§Ë%..9ŭÖ¤Wo2}ŻŬżċ£Ó„tʔ2MAžĤ2ɢ#‰0$A‰tLIIÌij"ÀYΈKċ/9â İŒÒw…ÇE‚œÑ²_&rCFĊ{P>Ò[DQċàUnlċˍJĥ%û^:-¸ġçu>·^ġ ŭMŞc˜)… +ZÑóÚ-˙‚HĦ =zÙ˄ê3‰Kßb™IµŬ­QŬÖaLġç#ÏÒ<(cŬ&N!ƒPS<Â(› .°ŒtpÂÒzsċ4ïj‹gÊF­Ï£çyuxˆ #ŭĊ1;CŒdI%YF3vh˜˘@.fG,²`ÇLC€e—8˘\Er¨%Ö s ­fOĥ&wԁ̰J4ğ§8réÑRf;´zf, Ïè1X&⌔=#ŝ ­/%Ħ’+l?˜“É:p›YÒ&\eĤ…‚ĦjËÉeú*kÀ{tê Z¤Îݵá\™R¨K:S´—˨_jÍ^h˜ÎV=.Ĥ?àcôhú4şÓäeAĞïĤv\Œ(zşxŝ›†GO BJh c…?Ĝ‰dk{Á°€ìÓÓ™ $ÙÚ Q¤(?.8ÙdÚE4‚ÚE@Gü*Rñ ³UËÇ0-úx4Ê2ïmáï]aZU´Oġ^Ĥ‹³_œ?ìT°C-˜p œSœÀ²WŜmŭ ]&†ŸÉ4…Ŭ‚)ĥnÒµ&%Ò̝bä=JĞB;ĠP ’ƒ #$Tf‰£ =ZÁ^A„²UÍ^j£iÉË'Ub2Ş yCıÌ^ëHĤWWÒ·ħ_ú{ÔVEsà&mZE‰>|sYóJN‘ +Ŝ Nş~ Fˆ>‡Ž²â²H—Ž÷š†T*ÛŭY•vgsX–Û$+â³Ğ ƒïĈĠ•³ BJEû[ÁZçY!İdï6žÒĤóŒ-²­ÉßY-–2âÍFœjˢÏÁìġ>ß[Ed9àÜäÁġží=ĉ˜>.hxŝ#§ÜEğ‡\%ïĝ"µĵc)ß !Ş–ÊXcÁ³íúÌ£׋BsޘP„XA£ñÚwċşœĦĵWRâĵKS´Ċ{%ǰTĴSĊCdoħ_ñĤY§ƒŒ˘ĉĤRBÛTç{[ÛÖdXP ÓÇ˙ ğÔżëyƒ.omËÑóŭ4×?³?ê`%4Ìmxv'šß'ŝĠEħ7€§ŝ½döÚ ÁxUûö?Ü!eƒendstream +endobj +1104 0 obj<>/XObject<<>>>>/Annots 537 0 R>>endobj +1105 0 obj<>stream +xµXaOÛHŭÎŻĦ;]*c'Á Hœ´œÚÀ‘´œ”ôboˆ[Ûëó:î×ߛ]oâä@×J-Q7ëŬy3óĉ͘ż÷òñ/ ~‡ş!Eٞïù޽ġ}üżƒßRҜ7(üqûv//¤0èááŒ:A×ëÔĞ”Ĉ{Í5v^ÜmĴ3êú}ŻÛĜeŬàŸ; ş!Cò­Ċ°vÁˌoĜk,3 +zŒ{s°ıĈ.Ünmá‡ïg›kìvú[şƒÀ;Ĥ ?À™Œz8ÛŻW ¸ıĈîQÏ;jìr ‚°,Ĝ ZğàƒAÀá::Ĉ—À{†Y˜½Í’ÑâzŻħÄâu´Ùcs½Ò~6Ù;ĵ„=šÌÁ”0äÀNbŸ&QĞïuĵGeQ¨²"Aİ($ċËì^–¤ĉT”I^ÉRż™|ÁU= +{UğÓÇE­ë\R˘ġRRµ-„&Q&Zĉ/qò_KŠċ£LU‘Éĵ˘Hx,²{‚vpŜ<•KSH×Xâ2y†X­òT‰Ĝ İmˆ +ËsURàûżé&J>jgġ.ÉqVÓhB›;ĥ˘U&W SĴDi­‰gc=MtċÑĠœ2…‚39İ\²× ›u0à˘¤ċڐ|4hĝ.shğŜÊ:ĵ?LZTQ”&kYĠžF*ËDo75kŽğĜ·(¸{FPLVĈ…úĦµŠQI{Ó&bФZŽ&ıDšâ°=áÑIšĞ4U+"%ŸDV¤&O µÂíĝ.RË4fğ"Ò[ÈĝÄò§cG n¤çâÖÚS*ԃ˘öG*•Ş~Ġ2*şÑ×,½o\`ß°´u2‘ä§ÓÑvt5üL×ÓéÇĦéğz"—À‹žE˘Djş; À°Ñ…Ŝ89Äï‡ż^àğRéôâGĉr+óT<è“İ˙4@Ĝ}߅{뙜“4áçĉúíġlĥ(Ú׋ÇRGeRT‰ÊOĤöùŬs£k:ż½útqKOĞ÷³÷ty}K“wWcşı½M.n^ĵ‹…~2uğŽßĠÙl§$~·ee*g£Î?šÍö_g&6FVĈË(’ZϗiúÌjFk4s[Ùô:(lö¨v"›ĈÔóhÇ,I#ı˘ş4=&Âè]£²!ö'’¨^۠ΞÑ~ĉb™VuËQó9úA]s#½€˘k~0É!‹In˘|x‰n[g÷^¤òùĥ‘?É nßaó10ĥ;ĦaÖuÊe„nÀŭ˘dKâÊnm#qòIFË +âžÓu!óÚĦ‹§Y‹Ë'Ħ·³7°Ê=$Βn•˘B‹f·ÚÛMò1Iċ:k%žôŒäÚµf!TS’€dۉììMMŒ¨~şı. ×üg°o3íÑ|˜ıÖ4JgÀœXÇÂÄI ŞÎìÊFġ”ž-Ö-ûž;Cx’1Tz&޸µ†ĥ™–ÚŒÏǛ´\aĥ(AN÷Ó:ȏagw7= \ĴĦcWÔlĥ™1sÇ˙¤Ġp‡Œß<{dKÍcŜ#`ŻëċQ¤K¤™ÙV”êĦ-”úJĉYŬ”Àqt9€#ĵÔÏş’YMËWz bÊ*:4'#Qì…é% +XÇ>Fšƒ|Ċ<ġ͵<' +”L”φ|Ĵ!u!Ŭ-0Ñn&>ÎĵTb`縟ñ„;φbFW0Á˘rUY-8°È7 ´ĊLj´lqğ’äÙCŽÙœHŝĤÑF"›rJYˆ’9fƒnŻtqn½&q̵ +Ù)0d*JUÄáeH94ÙY5ŽšñÙ¤“ċJ³:Éâ@ÔB{Àj#Ëı ÁŝȝË<‘ñ>+fÄeɊ\CĥÁöh¤ Lò/ÇĈáÚP“Ó:î:Dœç]£~ÈÜÔ%܃nVòİbdld[FŒŽ. ÄWX•Ùx™Wğü™,¤‰†ggÉ3wƒp-<˙Ġ°V,S g] éŬHßKzĊŻGÌÔ#[13β7/6,—A-¸Aˆ? ^P~gl‡ΆèIê Ú ĞhÉN (ÓÙÚî@ğß1Bĝ]Ż–½~Ïë‡ĵ£ÂR/`(“½?÷ŝXŜğendstream +endobj +1106 0 obj<>/XObject<<>>>>/Annots 544 0 R>>endobj +1107 0 obj<>stream +xWMsÛ8 ½çW`rrgbٖÛée§_i3ÓĤÙVìĦZ˘mĥ’èŠT\÷×ï)*Š’v;M˜" àááúq2£)ŝÍhÓ|AYy2ĤXá|z{2_^D ŸOñYR2_EĞö[AŸy?Ï—QÌÏĝċżtâ%Ž%Ğ%ĥĊĝ_KڜÄñ9îHĵPÂî9oqßÂħÄïxxŒMͧ³Ç÷ñƒxĥˆCCü`6[=~2=™\^,Ħtƒĝ+ü‘ğ°§”f#„GôY”kA˘ÊéĤV••5Ŭèښgé7œNp³?=Ž—8=şUU†ÓI<t{>CFÖw²6$ŒÑ™V’ =nĦƒ²;’"Ûù²Ž(ŬI#İÒu)ŠâHV|—dw@ +¤7ôŝ&=?cóSÏĉf_}ü€Eşĵz˙ż¤Í˘(x^6Ĉ’(Œ&ÓìQ-ÓU&÷–/䵞kıw +úp#zy¤\nDSĜ3ÒUqĜ֕ {Ŭ]gT‰Rĉtê‘ë£v +ß~*sşĉhĴ,ƒ£ı–q[EŜB¤*ÒuĜ­vžQ-PMʒB8ŭ£Qµ,%pGt!!YĦ°b˘öŽx¸kdĜ°mž;'~Öé}8şPĠö”'*çħD6} +á ~;ÉazĞ2Q<ċ=ûí°WÛ +YM%`VûĥiÁ!ġ…9­E!Ş Ĥ m„*Hƒ[¸6tÔMG8¸z-9­ŠíÂ]J†ŜèêŒĜ×É%× ³{dÊuĈlür ŭ>#ùNşêF½Ée.‘USş @dş,Q^Ï£hĦ|ŝŜÚa§P(™¨7ĈċC@}‚Y(N$dÔÛZ”>è­Ĵ$â\,@=\ }Ÿ…>6Èê˜ċ`œÒñíĴŬ?ŸLTndtSgĥ2ޤ<İԍ²(ĝ7˘x˜ëĴášt>˘h²˘É‘A'€{°²5ʑĞZ­‰áG™™ñ7œ˘)Ĝ·•tôì‰"*³ÖyĦ´ĜÌF +ÛÔH¤!`âj§ß Ĉsî/H$§~Ñ-ëŝz"óĵ=<÷B”é˘h=†1Ĥñ…ĉe˜‰Èm5Äîè L7Ž.ĵKPàj0ğ–¨8eu}‚]ĈħĵAxkAÜħ.Î'ĞNœóZA)h/²ïb+Û–µċ9^F+žĈ×xħl Û=ìşÍ½k€Ĵ’”@À3ĝE„Ä•oè`qċŽ´ĝ˙?O Ş2:ìĉġ̚á³ĥ̈́qiwq] ƒ[B×ġ4îœĝĦı?EèÏ=HÀ1ŽWÑì‚ĈIâEƒıGô* ÍkŸµ›Y yq˘$9`jwĝ˙rfèZ5°à ™Lï%Ÿ³\gĦTéë¨ÓÈŝôÓėÇíì—ħcFİ1ŭġÈûġYDW™ÚŬËx°4`‰Żİí/µßKß+î§+jtĊ‚‡Nq¨Ĵ–fUHƒ1A‚PœĞëKj—˜ +(.œŞĦÑĵH•”,Kk ^Àċ FŭY,†Â~ż‘‹´_~'Gٍ?ı°bÍJŜ>scJ)ŽÜŝ~4Š—ÓÂe€Ŝé •2ۉJ™ÒDô“ċ QĴ(Ĵ".ÎÎÒڍtsjN_>½wyc8Df¨܊GĈÙqŠg§· ,3³ÔVq‰тÜÀîż­š›·mĦš;äJm8ßÖDgÁFïÏÉ“èÀĤoÍ[} ÷äjħùXÚ}†aTá1Ô/…B!-<¨ÈŠéárµ‚žÔÔÊ)ÛÉì;gŒëBĉ&JҎ}ÉzċFԇvğ˙0¨›žèsè]`OPÖát‡I‘ŭj‘V€×kšá˘ħ÷füîmú1ÚŜwFZW½ +3RÛĈ1ĜÇҎŬ¨˙”ËÀMš³vÌ?°Ùğĵjs4[àmr5Ç[żÙĦk}~ñáċ ĵ£éohşôş?nÉq80^ĈËŭ÷ë]²L˘ċbċ›bó-oғżOŝĉJÄ"endstream +endobj +1108 0 obj<>/XObject<<>>>>>>endobj +1109 0 obj<>stream +xWÛrÛ6}÷WìäIžÚŒnÖ%/çîIÜĤµ:éƒf: IˆH‚@ɚN˙½gPÚyhÄĥBpoçìÙĊ÷‹uñĠ£qŸ#J‹‹nÒŝ`’ôi8óïĝg$-/^Ï.^RŻG³%ŸMĈ4Ëçğ]šAV:ÒKJuQˆ2£\•’H““MŞœ½œ}ƒ‰4š¸'ö>Ë:óŝhLáiÀ?ĵî ú0ûô-„•­Œ¨Ö*9İÒI³İ$§É­ċıëêşîO’Ŝ”û£dÈÎg0ĴJëDž §tIidéhŜQ%-´[ÓR›ÂÎ/İ2zĞ2iIP!EiıßkiöŞ\ùĝîŠÊ hK™p‚³AÍÌVĥ@‚+C҅péšß̕ġ…Ŭ”zW‰O› +ÉœJQ°?K;™çü³qŠd8žk‘£3adFÁ)Â+mĦly~ĊBĝ·ŞV,ŭ2 ~cĵ6‰oœÖù¨´ñ*…‚¤ÒZRĝ["Éڐu²B”ˆÈ“" ~ĵ¨ÀF×e¸p™Ò![,Bу†$ĥÓ>kŞôÙ³>ä—ïğ4e£ÎŭaÀµ—"]O[W•6·Ò;™şšıÏà +5+)”n~óïu“ säïÖgâ?½„èÍ+ú€ö`’"Q£˘p’êÊ”)_Úì}0˘]o‡ż*~7ÀQxÎg>ĠzEûüjˆœ–*—Û^çÑŜY[3³JşÍ²/so=oĉPŭŝáú÷/oZü?÷{ɈĞ2|ĈäıĊw'Ö¸‹JŽFÛ·,s RÀ„’q.ħĝQ“RïöWè:/ԋ\–d™‚X €ğ[HUTx€>~қNkHÀÚĦĜ÷يuF…Ş,¤ÛIY6AF•Ú +£tméH£¨ÂÙdz>ÉGÁ\ÑI‡İ2Íë ,öœÑ‹Û +G[Î>C=ÌW’şğCƒŝIۛ^2yá{Ğħ:½!eŽöƒèpϳ~ùڠ碓`žž|]ž69¨Ëċ–]ë#ĈŞ„’ +×èb0‹çb+i2E–#“I½„nYı\ Pm†Dv*Ï[y‚ñ²Xà™c G“4)ò?5ÔÄ)6S"×+ôK‡ĉĂĜğ7˘˙&.2biùŭ^ĞtCıÖ––ß!†˘ŬCÊ +D‚<£s…c ,0aDz:…ùĝéóŭ|ŝà_˜ÏßÔĈ€wotéŒÎ¤…ßçsŸ|ŝÜ*£KĤg0Ú(Ŝ‰Qĵo%ĦŻÍI]D{KµEA8t”ê„Q ÍÖĴÈO_4é˙rH‹Ċ˘™ĊŽr ĜÚ59cד"YƒH(Ħz‡°Í…9“i8*µ „A¸-$b0\ @—,œş˜˘‰˜Š)¤jŻkNú™œI-=g‘.ğ93nèG£Ì~ŽžO BrXžë]U ¤“ĞBı0ĉ  ` D:Lûá $ħBґŸa‰xšĝ’ÍÏÁԜŜĵœNZóԓàˆ4‚:$Ġ7ÖĊ 867?qŽ“ĦĜĦ{…ġÊo9ÈhitA˜%ċ8(ŝ?$}$­¤ħ"gâ ¤kQ óÎN +ҊŬHoe†á‚†ƒÂ'™˘mdÎI{EE`‹%>VP@>˘$(x]Ċˆ=9–:ÏÁËÜCÏT­!ĈA"lqhkô Ğ,YÍ­—ĴƒÏWìğïa7ĵ[zÎeÚ³ +A×xö•rwŠœ/FӃq>\ñ;~Á+Ì<…ÓP(¨èÓdÒJ´‚…6ÀÒ¤ÍĈ{³,a”óġşiÚnĜ Ġc";&ÊNlP•l‹@Äj!Ó Eíµ/@óz(X¨Äô1ĉÍĥramâJyĴ|*Àcƒ4ùǛA£Ğ†M2ı 97êĜñÛMB_yÀc Â:é Ñ¸zpNıNytˆ¨ ÏvÜäuööµŸİKĦü ġS +9éÊoĜlşĥÍqÈÍ{.K°V§ĵñùuġúDNpÎ/½Ĥ…”Žğo(ŝŠfŸÉĜo+~ˆÜ²ÂŻÚ·t³̍ lW •+Í^ŝ…ĊS-¸ı˙2Ž +ñíĜÏrìĤvàrl䷲Ȱĉ"íq€|=à•zn˘­5FŽżr âšœù%3G–Ú8§T /ïş7Â5}2 ëqß_ĤYË˙ƒŒÇd<š„‹ĝpÀ&ßÍ.~ğĝŒ½'Aendstream +endobj +1110 0 obj<>/XObject<<>>>>/Annots 547 0 R>>endobj +1111 0 obj<>stream +x­UMo›@½ûWLoD*k vo‰ÚF9¤Jk¤\|Y`ħ7–î.qòï;³@â89ôPYFf?fŜÌ{óügB€Ÿ²âÊv°WèÒ×ġ"Ž3ĥtµa)´d[Mo lé<$¸C²Îw„_- ^\ċ‹ċ÷Âòšb§ë òʅ /½›žĠGŜY° +Zı×Ü +àˆ'iĴìöp‘?` Dâbx½–Ú°JÔÖŜƒZ6p[=èÄŒ°C˙Ù½–ƒÖÓ¨y£šÁJĠQ„ü0fâò¤!ƒîĈ½ì*u4#‡Ëğ{ڑħĵiÜ.VZ>"„[ıÍÓĵÄ ?`° )˜RËŜŠŠ²ù'郎EĴĉúÀ´EÙHDz^f9?Ğûò³ ĥbĴáĤu 33tNUx ¸ËqFĥŜƒkû/˜n3£]ŠZé½`°KòzÏŭÂ{§µáّFŜö`#òrŞÒÏĜ:„˜Ä„]ßEi6Ñ<·Á_ħÍz~šħ$vÔ\–;tûOoğâ2Ĥ,HW(GÖkĠ4êĝp°ŻĴTŬ;Ñô\óV¤€£fñˆ‘•)UD^%z-JTeċx>Jä—µhĠ#:_tjìĉĞš&µĜ{'ĈI=Ž3ֽކ,Ħ*&…ORE½ówġ§èMç€Á/ş> ıóĥ˙1Z£°;¤Ş;OĴż +Xĵ ÁîH3Qxà[,:°Gì+Žñ)GUEŭÜòĥàè3ĝ!žHm…°È"˜Ħï•Ĉ9Ż_ì +^ŝ>r]ıĈŸÌ`É{^ÈFÚgÄ˙–Ż’†h)ĤWŞ1e3xowáAİŬ 5˘Ù f+@W'YFê8ĉ}F” a8Ċçĵ` +6â;AÀàJÙĠŠŽ‡ĥzbbTr%Èw +Ô(ö‹ qœÙĠ;o…à[4§žïÉmQÚ(ŭİÜ +Šç3èµ|hì4ĊëI´!Ng°Ž!J6l“·—·W—p§Ġƒ(-E9´hdNџoĝY䄋ÓÍà֙> ˆˆÔŞ}ËOt?É–küŻÂ\IBKßòĊÏĊ_!Ûò†endstream +endobj +1112 0 obj<>/XObject<<>>>>>>endobj +1113 0 obj<>stream +xW]o7|÷ŻX0šöIrIé¤1š‡˘.˘"Ixw<‰6<“<É÷ï;KždéÛê8ĥt"w‡3ËÙġŬɄĈĝ7Ħù%½šQQŸŒ³1½~-hş˜ċ%ŝ;IĠÉÛċÉèê ]ŽiYaÇl eIX=Ĉ“âĊğµh‚t´Èèw™·Ğ•2+şvʄôÂĉZÖŝċò&F™ÌS”‹WÓìq^,²IFLpĥl‹ ĴI+§4™ô+/çٌW.×ÊùµuJé §ŜCĥ˘µŬR°x + Ôìò7.ċ§­ +kú(ê\d#íıôG;9û˜.&Żşíû¨•³5p|üó-ZI83ŜsxòÒm¤;'cñx-É⇣­èH8ۚ2£+ëâ'NbĦ—Ĝ!ùŭ ·ĵu£íӖÊÉ"X×eŭÒËY6ejŝş='oݳ-ò$4qÓ×°(BÇBG×ï˜ (Ĵœg¤,G0R–ĵP.S2ëa-Â`:niA!ŸUĦZwT‚ Ó=h ‚—ş:'èĤE*,„Š,d­ÊĠ! ċ2l4 €‘íhċäühù£îâû6÷²ÎzÀ’TÀbú+ñƒw_†áŭႨŸĵG!Ħé4²7HZĜHËӌ>‹”žú‡‘¸R‚İĥaö€z¨“½][À‰dÇb.,—Ö ĵġĴ€Ï ù:Ïy•dŞ-¨sRË +ĵ[öċĊv­ŠȕkÑ꒴µ·耄x|ŝ]LbÒħ’_^˘,ċĵat5Ĥ7ğK7M•EñëóJÛ\èwaÇp ”]úTÓ Ô4¤‰ŭHo,ŽWrB7w{.SĜ ZÉ@qŬµ²ö B„oèW\}álĠv#âĈĉ߄ŝ9êŒ*ôdñ 6"”‘nʑç{ž;ôİŜPmÔnYMPKFPÜÒ­C‰Üĥáĥ)·\Pğ‹œÛà4=h‚‹¤[éùĉûPNúĥ>ˆy‚€…>ktġĠÙŜ'Gz~BµCúZïFı2 ÏÑŻÏ:{\ÉR8Ú}kë™Ŭ‡up´€Ċ¸ûĉ)ĥމïCĝ„żH<”ĝß! À#EÔ7’tŸ=“Â[#JÑà*Ñj8h•şj¤” n[tŜA“RèyNyĜ{•7?ĞPnc;˜ú.?eóŜo{­añWÙġ£·Ĵ.Š.-nÙI–h[À/áRâFì“WġÒ{îÔlIB£ŭĦÑrŞEäó,T`‚ .œµôçÜ!’c•9ÜŞ‹=&Á€Öq/¤ëߖFèVúĦŬ~bŸç†Ö[L€O¸Ċ‹\ö7İŒ­iĞ´Fž[ö ô’Ĉ:á:äi:ž.˜żä û& oÚĦVqj9˜ĝƒıAm2ôE4S¸Z˘…H§lİ@"gĦ0 ‘xìïK2{.ş‡òQNħÇ9à3˘Fôd€àżâ -^KTÉOôĦÚżĦJ(™NdĠjµ°mĠ² +OM[à Ó×ñŭòäï“˙%ƒËendstream +endobj +1114 0 obj<>/XObject<<>>>>>>endobj +1115 0 obj<>stream +xVmOFŝÎŻ˜êކ“'NLBĊ‰;é*U&UUÖö$^b{Íîš@_ŝ{gví"„ĝeŜç™göŝ „!ŭ†0ÁxIq0 †0ŠNè4›ò5}4Âʽ˜DÁ¤ûüóò`ġÂ),Wdj2 a™™a™͂Q×ëµ,×PiYZÔô­â óiyGꄤĊêŭє\,Ó£Ëa+žÀ*HYÛkz^¤á·Ĉ +m!~˘(Ğ\$,a34‰* +QĤ°•6“ažƒI´Ĵ,İe’|˘tÊÂıÇÁˆ] ½ ,IŽĠé=™˘ ùZı{—ĴdŽœƒ‘E•#à£pßN†bÛHÒö7ċÚ@!×Ċ‰§>ċ!œ´GAÄnĦùñĈÛèç0°E50âŭ‹ +]Ù¸XĦ/k~ĝaËòğ`›Ô0˜µÖ?ÀĦSSO]è‰p×ÚEXÔoèj£™Bż‚3E¸¨ŜPpÎt]6ô½à‚r*î!j­4hŒXc›Rĝ"^ßS/ŜVÄġ“ğ˘"˘"$QÂFÉړŞ5˜'cħx#Ĥ]yĦOWCĝ8‚ÑÙُŻz‰K‡Êe†%ûhá0àa˘…z`JÀ_$U€W WjŽÙ÷ĈĦDL„cjˆUU…)È”4 Œlì"“-x]B½­=@W_˘;ï…WÂ?Ñè?8L2™lš˜ÉNĵä˜%M'ı$è`ĞDä™2vo£ŽŠHS<öJ$²šS#ù7‚8Ĉĥ·£c( a6sş +ÚϰcîJ³:œBçĊ…*„,ç×ç‹ċùïË[¸\ÌŻ˙(ċ-,P? ž_/D f­`zÛQĤdNáĉĉĴi‚kĝĞäĞÚZn!·=*”0T~8=GpsÄı‰ĉĉŬ˜5Á— Ży¸ÏĞk\çe8ŒNÜĜ›áw_­ŻŽ.ŝD” ĉÀÊ‘/n¤üûœÓ D898%K)̎Â;lŝҚhÌbşÏĈ[îࣴĴĝöTAχף HeBܰ4Cž“ĜR<ÒÓh ½30‰ùY†ü4H%êKKŒkr)—A1 I´‘7LÏ3JYŠ‰ôVjiFĠ–°€Ò]äJm€V;|É/~haËë…e4š:ç=˘qŸëûZ&›ĵĦ ò ²]1nËñ’s„çˆÍħç.€Ëí%¨PñʘXÛĊêµ(ıcó&éÚdà,%˘òqqV¨İ^FŞ’ĥ\ BKEóŒŻ|ġžïúŝ¸Y]³`ÀŸœµ“Gm UÍEôóëĤ7+­>mW­5ŬVş4=Îb­EÁ,˜d˜l:ü^Š(EŽŽy…Ġ†+CġâĊ.ċßÄHGŬꌛ}ŭ“3À( 8ö²'Ïe^›$ĵ¨äë4ŬĈ|Äĉ×HÍ%0ìJ/KÚX…°TsXiU´ë„bkn›2ĝeÂ6,mÖJċıÚr äèaÛŜv{bÁGĞEbIïĵ/ÛĜŸpç ²Ğ3ŜżîĜ@#½Ëĵçk5kN}ᄚ³1L˘c>İ,Îŭ|WZŬabáB%î0ĉÊÄzŭVĵ?Ñ 3}Ï 3šFÁt2£ó%ÉG6óeyÛÁ˙óYèendstream +endobj +1116 0 obj<>/XObject<<>>>>>>endobj +1117 0 obj<>stream +x•WïoÚHŭžżb‘JàBFê‡Tm­Ú*×PŬUŠtZì6µ½Î‚Ô?ŝŜÌÚĈ8ÑU§(!˜Ŭùñĉ͛áŝdLgĝÓ|Bç3г“³èŒ&óWєĤ‹9˙_§i}òvyòòê5ç´\Êl1ĤeB8~vFËĝtM#şÑeiò UÎäeĴ +RyŜ×îA;˙byKS[MĉÑ ĥNĜŠ2µ§\ë„J‹ó%[ò6Ó­9Okëho+G7*[)ò{_ꌏW^Gôħ$ɗÎĉ›tÈc›e:OĜâV•|“ŭëĝ<š°W\GÈPĊ&5ÑÎìƒá+н|$ı/ĴMµëDv_é +ÇÛ 9]“#ÀL•ĈĉQíi2švú2×´[GŞÍ\oœ’|àuĝ¸kš–[äقÜùˆĥÊsÔ½4CTü3zŬ`? ħċ*ÓżTj”‡—IEĥàLŜ<¨´Òxîw‹'ğBè*ÍĴ/ñ’†¸˜Ħ:~x€ ĜĠ€² +§WšPĦÂz msTÌaĦĜŞĵÊ´31cRĦ|ÎÇ4ü3èċo•Sq‰ 3v +Ŝr0vGÛ}ħĠı§ÛÓÁhpû‚N§iD—9N cĉŒâ˙a'Gí´À!\cnÎÚ ıÔ=˙rMìPNÓ*Ö`a"Ĝ•°?EƒÀÄr@jeв‹H„j(Î^A +#ƒ=S›MÜŜ’*{ŝ9<›qKMŽcèŭXò£6rĉ%gUZš"Ġá`Ÿ4Uĝ•~ӏ*QÏv[–­ ž… £†Ö…£;.e ’ ÇAŽà†ätżÇÛĥé +8vtIIêqt}òìġ/{şf‰iŻL+”H +Úà^ƒ~dü9ƒ~{|Ñ£@;‹ÄÙ*µM“78Qż?²é{š! üÎÜsĥ^[£ÉĞčr¨DZûP‘nßïÀqZ‡RĝRıR'5+Tġ'ú MµAEÁÍ#ftlHŸĉœJG Ċ8ħrqmıİŬO˜ n|‰Öĥ^Zéä6Û1ÇÀ*| +ċ­ƒ +ùú[Ёólb1„Üi•Œs i_­2SBSZLö˜xiÚsž[éèÏwŻ˙cċàĈ]×J>/XObject<<>>>>>>endobj +1119 0 obj<>stream +xVÛnÛF}÷W N™şX•dż9q ´@.MTŒ+r%mLî2Üŝĝž™%%ZQƒ:1@ï’s9sĉÌ|=Ó˙Ĉ4ŸċŒÒâl”Œh6ž'Sš.ĉxžà·Ò´–‹Éì*Yœş/Ĉ§ż˜ŸĝàÍòlx7˘+Zá{ĥÀCF;Ñ2}EĝI3>ŞjèKçòa^f²26è +w/IN)3•NƒĞrk’kúâVŝġòËو.Ĉ#şÌÄZîÙĉ韗´66/ñëSŸó9eë›Ñh\4[çğŜMi<Ž\Lfìê/W“ßş:ϨPš| ÜÂVj\]Ċ‘ŻËÒUÁÊxZğŞÀ>ġŜôş •Ĉ*…,iĞ<ëƒÊs‘êÒĵL&ìû<€PÒy´µ3yNݳş +8A 9‘àHu^UYV_Ş€KĝèǙÄ,ŻhCׅş$ïÖaÇPs\Ş3ċ¸äÎVͳ +eëµJ^Ú;î:Ĥh‚­½&9ôHˤT´m1ĴEGÚÖò´3a) :*’6àÈLżI:hġÍú9­LDżPımçTE4H_š(Ğ DpÌÀĵ3iċ>J‘ş ŬÁµŝĤŠ2ת-ŭOcŻ~>òŒ;ĤD~]G:žbîÇ8üSû@ïUĦŸî_}2›m ·ıIî_„šBlĈkÈÊKVO7Ù#ó/{ú² /Qu·ó")Pètëœ‰× ñÛPċ·B貄Ħ¸Ĵáà?ğ„„7Bw`Ò qżÒ8Ê܀07Dejâü„8l¸†°ĝŒç@è6úû–ŭ1pΜàG3˘ƒsĤŞĊSÉÓĦš¤¸ÎƒAĜLĦš#çİŞ‘&XW†…Pċ"ĵêŭh Íú¤v=—­ĵˆ\>í:`Ġż×x‘´İAÎVT+ l;Ÿ1íbÛ8ÄYÇÛyç—[{°Ċĝ‰kž Q [iÄħÁĝáWdÖħ€É%Ó[šêY+x–7(4ĴX‡–‰ÛĊ‘~UXÙQ ²:2I[–':żé4ŽÛ‡w’[)+²:çNë{ŭQQ u„'镖r'ëñŜaóèt™xügÒV0äèŭnL*lrŭÄéT?bבíàÀŒ6ôĥİ„Ħ)ĦóŬÂ"+…ÁŝèÍ?Ü;ȅ­ÈqĜ#§ŭOBlġx·h÷×ñ kŝâ’f“иA}y÷ĉµs_Xƒo]ZPUš_t\Ì'XĜ˙Ç>8O“ùl]oOlä—ċÙïg˙àÈendstream +endobj +1120 0 obj<>/XObject<<>>>>>>endobj +1121 0 obj<>stream +xuËN0E÷ùŠğ£H­‰“(v–­‰P˙@“4Uc—ÄAäD–%KsÎÜñ|F1 • ÍQQ,bäI!2dZñ;á;Úè`˘‡çRÁ´ĴäZÂ4`<ŽaꍅÀ•4TÍ]×ÛîŜœYÉ ™ Ê.Q"gióÒŸeċhĊáûë„ĈÙ;]ÛX ċR75ĠȍÑÛßœƒnĥÓÓ2yàDzĉşÀ‘(¤sĤLE2Í­äżŭŞ÷œ×T{7.bUßF•9˙\§P…Á=î_{ĵîÌ8]=d}é{gƒ¸ûw*á]4˙í"S™PıĉM0“A}2Ñ{ôˆ£nendstream +endobj +1122 0 obj<>/XObject<<>>>>/Annots 554 0 R>>endobj +1123 0 obj<>stream +x…WMoÛF½ûW t‰ Ĝ´$Kĥ\ ‡¤NZ£pÜĈrˆŠbE$Ĉ$—Ŭ]Zß7³$EÑn‹ ‚)îÎǛ7oFŸŒi„cşžċĊùÉ(áŝóÇç_ĝšÍù3§ée4İ2z<ıœÍùċl^Î'Ѹ~â·Llr]áêd:‹ĉġżeƒÓË9ŜMç×ĝ{‚˙VÓúäŭâäâ MF´X#ĥĞë9- ßğ·ŞôÚÒMD:lê÷”égıÓĊ7ı97Ï/§ˆv‘ o˘qDw…·&İbŸš"œœÒx\Ÿ”qòQċ+E*Kc½#żE@&ËÌ.-6dJ‹oĵĜdf2rù*ŠMħĤRY•k„ĴèĤ1>ĤĈ×pO~/ˇÀl7tñqÒŜn¸:Á#‹CzK_ŬVYŭ£rÚ.‡‰^Ğ*óËÓ‰ÉUZüP‰ë9O⤛ôûĝ=ÓÊi@ż¨ujmNı*×†Q°T9ŝ+-w +REÒ\IL\ċşŻ'7¤Û‡ûwwŸŝş˙p˙ŝçhëóìĝdáˆÎÇL2DĈ>וE,­Tü´ħĤ‚D{•fŽà?äKıI45XE´@Ġ¤Ebv,‰Óv­qÍùĉ¨\ qĵ.[ԁ3\žRŠ›ÚĊ6]éùsġƒoj8¤w·çż>|Y<üGŠHnÓùä*a-„R+óĴÏh†÷IÙgm”kĊÄÛ*O˘V× 5g)pŻßĤž£µUQ0cë€9"‰hU…ò’UħŻT–íQdç40]Ż Ï¤*äXĝ4uĥúïJ;öaPs#éa2òì‡S càŽJ’”™˘ú(·ÍBv½36İ“·ƒhiRI+t›Ġèµ^X·ÀċßPĴ¤;ÔZé6şċhp˜ĝuKĦO‹:²3İRĤX} +ÍÙxİV™r¤‹ĜîĦM‰ É)Ġun]는Ÿ%+T˘7Ñ$˘{ŒM^f“šx˘<ì£ċFWòş=Íb‹ŜyG÷ïD½Î/¨ZÍ\Î+ëĞ’vÌİċÄ쀎h$…˜ 8äwĤĠÁˆPßA/UV†À`1˘/Û4Ŝr +ˆz†:Yk +ÒĴ×:w§öŬ38ŽŜ³)N1 Ŭx`uêÎ֐|ŽÇi0–P2ö(Xp@ËĦpyOǓŝîÁwô:ÇÔĝ=˘†Xjà‡mz*ÌÇÁĝTFO‡^Î[UlËè8Ĉrˆ¸wİßv2ş&U–Ö¨€ÊĈ³Jʇİf÷ÀÌ÷ÑJ _"²‹‘ƒy–ex\í{àp=“³ü\ğbv›00':ĦÀ‹z†¸ +£ı„ğ­Ĉe+­,““@˜Nú*v÷Ä°À5İŭ³ëÔ: p)SÜJĥŻ>dÜ`Úi¤˜ĞÎñqüíó}ƒ™…!q(7·+ÛĈŜÄ&£Bo # #µd1˜œHMâ.0ǸFš¤:öÖ(+ƒÇşôĴ!VÙàÌâÔĜàEcŒ{{•²€°˙OM.qVĜ„ÎĘċˆëšmXa(M´’2ġĵ‡.ì£îµĥ{‹rcN˜˘¨Ì9˜ó,uo½žF×Wó ü³‡˙aqòÇÉ?Ëb¨endstream +endobj +1124 0 obj<>/XObject<<>>>>>>endobj +1125 0 obj<>stream +x…VMo6½ûW tʉâŻÚÎĦ‡MÛ{"Š{Ħ%ÊâF"U’Š×˙oFŽ•EàÀÉyoŜĵêßقĉĝ[vIĞ eġlžÎiġ€˙ëŬ˙—ĝxMĊìq?ğZÓbAûG6ğ-ísÂöùœöÙÍİÔĜf"™@ŠÚ ½UµoT'çsŠêÖÚXjMĤ˘ÎoÉşˆíI(•żlNÒ/û³9Ŭ-7é(7Ïʞ)Ğ  +ÚĉrF‡`œĊïĜ6 é7mÉÒxäß´g*ë›*ĴWXÈZoâ9}İÏ@÷µŞŞóóMU&ïħĞtÉĜC*th#QJ/Ş>(ˆ“!ż\À›Ğ¨2!’+(i¨*=‡$żĦƒ°í›À²J”;Íj&ÑkM™³Vg)'Ĵ³Ş‚#•3²ëÀŽÓgċW¤ìñíLц8üġ;gW´ÎOK‡ıAvÑy£÷/¤Xw‚“ ’œÎY`†Iĝ!ŭšP¨)˜X·Zdz`ŻĴÔÙkĥġv‚ĴŽÊX‡­?Ġî[Yj³’ƒ5 Í\:=ĊˆïÍFŠááBĤ:uĜ“ħb„¤·ŽĜٌ~ùĈFW];‰a)ˆúuŻçáS)ËÈĤóż´$c +“´ŻvÊġ™Hfƒµí‘TCĉÍ‚jċÑ$;|E*ŞWX &¨Lä“F}'#·LȵQ×M—YċŽ\yv×hèòN‚„]K{$ŭSe-ö/1‘Ž …wµ@tJ¤„‹’½Ö]‡‹÷ġëg™Ò ƒ ++ċS—ŬĴıôk +4˜ÄDÈë˘C °ŞCDO/Ϗ½]&z‹?QlêÇ\‹ÁċÚ +²s£#î2‡YsÌ7h•— ZxjÂ-us˜wôE]UáŜM'îÁĜŭ\”ı=Ħjìí8g>Á Ċ™6×µÍüıáÙ$%’ĜUÔí÷Á˜×4L,ÑÄÎrġ:‘hŻúŒ1ıG*s#irĊäÀŻĦ2é{h̳:%ħToާ^ŬLàÖ'€O0/)ĥ +Ċ ЏTh[ŻoĊ\çwÁkLĴˆò şQwB!2ŒËˆl‹ jˆg,^ˆù@G˘„;zĠ”¸3ù2ġ8ı˙ `¨Pzµĉ'lñ.(_‘Ĝ÷?Ĝ…´ŞËK6L6_…2ž/I ƒl­Ĵ:êw1LòeEğŸ@OR<ħÚì܃ĤW4à$eÈÎ6Çß?íú7ŠĊoğ­óîŜ}ùúüĝ•ŝôî úŬe-C*öĵÜm—xÉo~+UÑz¸˜ûİŬ™;öġvn7;ĵ¸`ë/ ~ôÇ~ö×ì?~ ġendstream +endobj +1126 0 obj<>/XObject<<>>>>/Annots 561 0 R>>endobj +1127 0 obj<>stream +x•WïoÛ6ŭîżâ€a€ +IJe;vR´’Ĥ2 éV{û2ï%іIôH*Ž˙û½#%˙`E 'ÉğwïŜŬ1˙ö"â'˘ÙˆĈSJÊŜ0â Eüġġ×^4™†3šD³pD%˘QxŬ<4ïfWᘢá0œ`u|9ÄŞâĠëYÑt^a-š\cÍ=ÒÑ#ÖĤv#ŻŬ.zƒûk iħĵéìŠİC…7I)+5ü„ddRëÜîè#ŞyEĝÌE …Żïߜhĉ-ġÇDħHBúMċU^­ITô´ ;~›Ûloaä-L(Š £Y8e 7ĈÔ¤Ş)/’ÄŝÌ+@éàs–=I{ûeN•À~µ"o;“Áüó׿˘S7$´¤o'›Q2=53¤~4öħŬ}yì˜ğ m–'€àüŭîÓ˙„KĜÜ1ĉ°Ù­˘X$ÏġĤ=Q•Ġ +À´ñ֛°ùô8&Át)€ŸÛğOß%á4ÊÀïìd% °ñ2šB†HÎCEJ§HUŽB²™l€^*×Ĉ’ħjC ²I[*dİ*âu]ı‰*K<ż?Ċ€`Z7Z)û“_štŽ/Ù%4 ĤŒ7˜mJŭoàÔ×ü‹éï˙éOĦrĵnÒR4V ĞôÏî›Zñġ½í½w$s ŬİäóÇħ+ö¸R #ĥM×2àU;*E’ċ•ôË,‘- + +†“DĊQœÌo)VÄÂÈċ;ÊM_H ÷èG?bÀ6ĜAĦÖ¨cW1ˆ˘ƒ Ç…ÚRUWöHäl˘’Œ_èmtŝ’r‰4m#ĉàœ7_W!=Ĵĝ˜Ú…żŞ‹Žs.ĝmŬɔI‚žXË·U²×Á{×pdÚĉbpÂÜ·)>Ò‡+$MjHCpZjÒÜûu°N›µ^S@{oËàjùît—ëëntM v– +Jyaş•„Db„ÈWȓ›e*_dĦ6‰JİÜĤYšŝÄ}OĠ–û"ɉ–’rtµjÓ5ްMr×ĦšuK(Wf‹ +8œK—€Lm$òÇPë ‹¸dŒŽ–…„.)Ö˘J24W/EqĦ³êJÖ +mĤU½ÎNàĥ@÷ÚK€ üm´²*QĊï|éx WrKËÎÁJ“ˆCnkîÌĴŻS ò3Ĵ™$yĊÊEçB|y4O&ò…‚Uœeù*Ê R(bġ"¤>'~²żîîpìˆĥ#òGìjrÊáŜK¨TËM!$żıĦ,în!Ġ·I4šğCGwÇ8gi—Üğ´´&´i|JhŬúòÊEġşF€ğ F“ÚV°ïˆÇ¨{ ŝĞԕ2ÖDµ#½kŞQ hÑĥÏrwÚżûw&Fs4­ö÷C.,×PÍÎXY^8‡}ÊWƒm#FŞï+àKÉú.ş%F9f²£²“Ú^4­ +è! íZ%×İ×d{½àéQr“in=ĝĴ‘î÷2G9‡¸]­–Áċ[ ŭPƒO56ıżÜÀ•´CN…¸@kÛ·[şÑáÍ­n€BŒOLzGä[À÷ġĜÚ£§[Û1tŒşàʄ)û{]¨X˙ċŜĉèĉ¸4ûÔ5LpŜY$MĦ\6WŒ£8¸n‚cƒûĞN\ĤÜUñÇŝ™˜Ì&álzċ/x—îúyÑû£÷C}÷`endstream +endobj +1128 0 obj<>/XObject<<>>>>/Annots 570 0 R>>endobj +1129 0 obj<>stream +xµW]oÛ6}ÏŻ¸ËKŬ!Qlù3Š!ËP`IğĊE1,{ %Úf#‰*IĊÑżßı¤äĜrÖîehêD&y?Î=÷êëрúĝ7 iL %ùQ?êŝÇżMGQL“Ù$êSNƒQû”ÑŭÑî3VÇhÔìġĞ8šÒ¤?‰f|ö|7O~uç9§x2Ú_Lpv<™ÂÎNΣqóäÏî<ì`ĵŬËĞğÏXÙo°ÄĞȎ†!>G³)>cü7’–~alg!îĊp„0ĤáÁûzyäµóŭµí#ÖĤçÑċÜċüèìfDƒ͗(Ád6yê‘ïÓ<éŬÉgGÉZ+In-éíüK·6fEg7qcĦGmWFW%½ÛßìĞé7·îz”İB’*ĵéżV™^ˆìo²2qJK ˘ä”‹š6˘! gŒiŒÏˆÛ8$-ıÇHW8‹Üw-˜iĴ‰\ĞW è²ĉ"C/Âİ'ÉÜQKšËĉ‹´!$Ž zQÊ͓³°k(Úò:´ä.ÖH1Á; ì‡{²ĊÂ7·ĵ_Húw9äϏߠ +Ĵ˘ë×:=ĦÍZĦ<è‹bb¤U"SĈ:p‚MCYĤ7-_šLä3H8oËr”KYes|%\'K4iލhÎ)ç$Z”(ÖY¨£dÑ˘ŸßßŬS*œXÀÖŸ °T ġ+lvşsY°b‘´[­Li0.¨OH>´A0·‚”1Ëj/QIĤ I^Ÿr…à* Ímƒ‚ĝWFıú‡PsàBâ›é÷žWŭŝĥeĜúg¤ÄÇ} +<äĞ`MXönEQS)u™É äÂ>˘fF„I9 _½äóİĵA •!&˘úŞ’w v`}èĊİĠږ1ß@b×0Ä*âÔ3_ XÂkÇfS-]JƒÎAˆp›ĞgD‚‡vcy–­×övœƒˆ„İ@R´Ó@£§Òm¤ wn˘LRċ(^‘€8L=@ñµR8(èĜ{9öĈ9Íĝ‘ İ 9t÷ +öĞp‘Ñi›êZCmÁ^Èn”KֈÙ‡@ƒħˆ.^3~@K^h“Bʔ;kÙ˘Ŭ!+:ϙÂğ|noÛ\ÁpD—,9KQe]ù’Ü /ˆşu,íĥ*KmRşË÷î=wóßnŸžÙ;=@£”x•ÔÔRŜr%Pô–3çύ ÂL×rzíǕî}íU˘İMîûǓ§µüX¸ËWAÖÉ҆`SÏwħИ|ñ˜š 6MAx2ÚbéƒÓAŒy<`Bĥ6 +jÉ6á&Ìĥ  h(°|Ndé‡>”ÜӐ߇M+VÒÓÒèœG–zׂbࠑe&Xvu‡ŜÂFIŒk×`tâ4îÖO]_éĵĴpÙcş½½Â˜sĞ£­^: +fì*ĴÎ$&Ÿ2Ğ VÔ³›×uiÑçuĉL$‚Néù<Ôz]£wM§˙nwi4êŞ2ùm*°= Ş6òŠû x€ˆ”ŝÖó`4ġ†9z …Ê4nZúT¨ç—ĦˆAŻ97 ÔÁÌÏ#<Ï`ìh,ù‰2Tv{ ğŻ:² ‘Ov‡UŒ_ˆ0ŬOµ×8`Ċñ‹i´yv˘ +)‡N8j’%ÁŸ‡ˆnž ‹—Ŭ\Ħm>H`ÈÔ ,U&mĤțÜ lMVċ*¨dšuĈvUSW–`÷ŝ›+^xz‡ĊßßĜġx˘àä‚é²Ôż2 `ĵQ­ÖxÀrÖĵ bڟ ñŜ6ĉëíŝâöò‚>ŭtÇeqGĦqmè‚ϝĥÛO§1^ïÒŜ½KGxûžNf¸†qh>/XObject<<>>>>/Annots 577 0 R>>endobj +1131 0 obj<>stream +x}VMo6½ûWÌÑù3ĥS ‡d½)t³éĈ‹ô -Q67İ%);éŻïRĥe)‚Ĝ–HÎǛ7oĝ³7ĤŝĈ´˜tNiÙ%#ĵá1|û½·¸IĈ4ŸÍ“•4žŒŸ +zħ:[$×­Ġé|žŒh:ıIĉ8;›La)>ñYxĦé8ڝÁĝÀK­Gœ›&‹ÖZëħ¤ċ8ıi­µÍxżg£ÁßhŽw³ċ'ĝ·’òŜŬş7ĵŸa?­s 1_.hF´Nû˘ö;ݽJ…WFÈÏZ:OŜ 3spô¸&'í^ZRš°œ(%Ä; ×ÚvsMĈžŬ,›CżĴôFt5ž&xîL]dIórÂáċS!…“ž |IĜqY/ğ>Ûß .ŞD%íċĤPÙ°)G J³Œi!3AîŬyY†Ôjox%EÁI8µĠôŭñá/ŞU†”`~Ë?ĵéßBd €£2Í kêÊ%´Ŝ)GİÉ$á[ì…*ÄĤÀƒĤLîeaŞxÓĈ +î¤#£9 \KkƒŽÓMí頊‚6ĵc/3NÁÊÙɎ3Fwa]ĤÈöB{ħ•|* A_ʓÖVùwŽÓïš:|à¨?:S8ŠVt˘nÂĤoOŸ(Ŭ ­á6ċ›H=ò SˆAèŬWà€”op-ŽžEıA=']ÇŻ6p˘¸Ş>âKċm f¸À ·S•û0–ċğ˙ğŻ™ èŬԔ"B‘e1†Žï&"X ŭc3µMeaàĠNìQ Ëe5`‚¨ı5%ĜÚ=ü´ú¨Ğ;>Ešš„Še"lë²à!Ĵ¸ż ’ßħ…áŭu£ ŭ3~kµìY4úşĜ÷ġLÈQĈŽŠŞ°ƒ áW)+žT9 jb* jœÛùĴíìġĥqKÜĥ°Uĵb›LÊĈ_!œ?5JYî>²ċïˆw"ù˘RkœÉ}²SqCER8P[#3´›É[{v€^ŝżX…Qtûڙc8övBŠY²n¸š;>ˆDt-p–Î Ԇùv&TdKÓ ¤˜1Sħ˙Žçsv]B`+Ԁ9w^?QÒuv Á̕f5…CÔg›ê„QQr‡Ò^´w+b>Á9—ħÉ£¸Ì\˙†Ŝ>‚[YħĉD[ h+=sI­&•ñ¸ËŻ=%\î"ÏĞhŻPP“w ĥAôÏÖ7x½ċvôiB·mÏĦí(¨9‚TĊH‘:Ä]yİ3¨eƒ]^û3<ŞIÇwɆ“j† +O!ÈıErUl$ŞŞP˜2<52™t DÂOÒ}†}ô]Ğ·fŒ§Ì‰W>Ï1â°u+QVÙhbvۉ7*·ékÔ9ŜÀ,;0CESĦ¤·ê,³•â•é".Ğ uGâUQc…Ż'À1Gİ÷ÊÍC,<ÊÍMPá‰ŬÉô4R‡÷óÓêêxgyüşŝü+Ÿh+ċĤP$+yÔ3ŝFù3“Öa lı²àSUoÀĞŬıŜ/rƒäĥâ?ĵŝüĦtŭöbl‘…`O¤óŬ''ĉ Àâ;­ûĜʄŜCž‡ t¨ïĈCï— 9šË)ÍF\>/XObject<<>>>>>>endobj +1133 0 obj<>stream +xWMoÛF½ûW rrP[ħdÙrzK‚08n­ =ä²"—âÖä.%Ċ(żïí’M-ÚÂ6l“ğóñĉ͛Ñדı\àk.Ğ…\^KRž\Ì.äj~5[Êòf…żĝݵdáĊâb1ğžxğ>yġŝµ,.dÁÖġêFÖİÀΞ$§ïrU5ş–ù|&ŸĴɌNċW·uÖËF7ÖV>›şÎËŬúċúϓ 9_,aâTÙT>ŬŬŝ!­7vËSäú›Ż˘żóËċlÁpo6İUÒÄcK¸í-VÇnm£·µjŒ³â²è€ž>˜¤vŜeÍ(iòÚµÛ\”´}èC—\1z„ž “êI)y‘ğb/0nŠ}&óËœÁ ÜV[íZ‹eĠ6ÌK۝ݝ-µmĵd†ĦÂáycJ=“ÏZŞZ{ĵŒ]÷J7ĈcHôô ×iÛY\a‚MċA•5‰È·ĤÑÍg7….VtŽÒhŜ +e2e…wp;€;ñxDĝ÷ûw’¨˘gr_´Û­‚QyÓ"Tۘ$^˙àÒĥ8Áâ0‰;U"]ïL‚ߝi’œAŒëF5›8M]İ>âĴ}8^UZcu•4óîiĈ3H½Ï§TIn,j°Î—JḤÚ'µÙ i†4*X;ÔÚï}£Ë3ÑߪYcÎZ›YU˜f/Ĥ!;p)ĉÈà|ÊÌĥŸbâŭ›ÎĠ^ ¨[~ħŸE2<í‚4è‚ĊL@òĝñè@v× Ác§‹B­ëPò\5˙ıÚiIM–òàWéR]DÖÖşç)ó%ÜÄxRŒ-şİB`yĞÌ:àÈd£“Ü:´™Èl‡­z ÁP ]ħTİ&| Ë$mÑ ÎÇDŽMŻC%šÎI,1%錧=WïTÖê: L°!…V³ŻJ"‘W–ŞŭQÀɤÖô…â>£`bÁŜ*pIײÙak°ì |Žú,H„–ç}ŒzjIfXĵSĠ€@PvÏQyih É ĝÓD2YíJAdš¸ğNït ’˘ŭӔĦ°AQ‹ŭ6$è5³Ímè(ú–TŽI’ÜaĜR¨Q­RŜ£RœÇÛZm 7`Ğ]n ‰²Rh…›,M ÜÖ|,ëeëIŜÏŝ%#ÎÄB:$dÈm€làt:5lçPÍŞf¸üp@Q(³µÖâK46şfˆġgˆ™|dàĤéĠd ĊŬúh˜:“ÖâġWï“~\œŻf7œġ`ò—ĊġJâÛAÂ˃~…uxó˙Ŭ}_GIre·ä áü?öÏ7³ùë#F·İĤĵÉHäG.UZbşpŬnĦ °ŽpÖ ,‰-H?An4bǢ9êèa†ġÏċàP÷Ay hò­˘œŒv…‰<‚ +@0úvߎ°KlFàw>ıïGċSڎfÙp0şê:sħĞ×] +ĵچEE6ĦÎ àG Ŝ¸o”¨P@!k‹b|İË PDv +;ĞÄc&-“†ğS,`DzÓhgÀ(€úĥÄÇÚ@FMk/F+Ĉ‰;ñ;ÚRŽWÁun@̀Xâ‰IP Rı²ċşD*qŠ3˙ğۇŸ1ON’ ¸KżçÎbŠwĠİ’La[ċ †Ċ`žĵä¨@ĥ{²‹ğ&'c‹!& ϧq/cB‘§Ì¤pîĞöp̰I” T?ÎĜ³`âkĞ1ÉâN 0uljrûÇçPAßħ/ù=t´#~Xé7H‘N× +F#›É[(w lŽˆÊ÷ègIy.ú†ÖNòċtgTˆŭîá!l 1찌OĈÖĊĠ˜eeï¤0›ZĠû//ñ?pÇpĀ Ëħ™#-Fıâ(›#[£ĥë+LXÛô½ysüô´ĵšñcŬżû4Ŝ“– ÷MÊl–Ğċlu}'ÒĠŭ²>ùíä/ŞÌĝendstream +endobj +1134 0 obj<>/XObject<<>>>>>>endobj +1135 0 obj<>stream +x…WÁrÛ6½û+vrRflY’eY=*q3ÍÁŽ+“| ˆDL @ŠUo’’iw:Iœ„"°ğoß{ğúu6§~ÍéfAW+J˳ÙtF×Wsü\os?NÑ.|pµžMo}°X]O—o}°^ż>a{vùiIó9mwZßVÏf´M'ßĵržĴĦ:Wôíŝó*Ešk£(áĦĦĈ+şßò_Ž„‘”9ÛTdDİ< ÏÔÚĤáÍwFÔzŻŜĊËÂ[Ó÷۟g3ş˜_!½­œlù_Ÿĉĥ5´Ónò7‰:^'>R’’ǖĥ:dÂÉ:R{e¨°žĠ|n”:gé3 ++bJ?.k#mK^yŻQ9j§út+ Ó@Ċl²×ĥñ„:E•5¤Œû<#í)QÚdŒCĝ_(èMÜjñĴBŜ;ëÊQž·_î6ŸïŸž†ƒŭƒü”ĥ9á·Q)*îÀèšDQĜÖÙİjċJnfÈÄ)ݝJcâ–Ä(nrjMílQ ÛÒ +S£¤ *áj6…pß>ƒŒt›ë4§Ú5žßìn°pj§œ2İ’c\7RjÎy·´+g÷Z2µ™­5Á÷:íŠÉ‘·˘ë˙CÑd™H +E›‡F5ŜYÙ0۞&›ğ§÷äHşduqÇ1÷Z #ñĤ0ÂiR†IUUt)úĜQTT"х`yħGxf,âxIv‡,Lš;kôofO%ĵo­“ÌĤşU`zÌÑÀ‘û|òKĊ×½ŻzŠ0)láÓ¤“úĞf?½ŭıüôÍA{öŠ 8SPÀ|>½šÎQ›p™Şé”%žúÊĊ‚}er"…:ĵÌĝԐl&P]h#WGıĜ£Cêík.'‚…Ó3È유UZ7¨1tş£ücqĞ=(ˆ.6H] >ûş ò2wàtӁg­ŒA2Ü XÜ(GVOUĜC¸níôòV×ıEXÄe öŞšŭJ ,4#jTšĤĥ15Ê8­Şsĉ”¨a0^— ÒNG†Œ‚ + %+\%‹rr%$ó'fÊÑ_×p Žèž–ùJ‘Ĉ èšw*ĥ&VDUèW `Dı‰ /Xi +É:Áuèü.ĉƒİĜ÷Ħû™°a…O"=z9òp.S9dÚ ‡,ŬéÔYowuǵpc(´Y;À‹0ғ|G°öĵ%œ!XŠÊd(Ù³T‡´# ùQ$éQ2`”ÌrÌrJaÌô’ĝÎıq‘lĤĞ~È´ŬéL  +ԏA™ Ğ”^F:1fu~@!SÚ@çà&Ÿb¨ënòO€J˜Ròe +’B•(µµ” žŒj|ÍN•ŜĤϰ€VÀş‹ç‚Sż%ôD8r2­YR'lR™2Šf:Cx˙ĝ: /ġ$É#@²Mò˜1Ïq0 x^ôô9ÑÀ!7–·=—LV”*qĴŻ˜Ħ{ʧN'xÔĈ”ş1> }—ìGÖ}nPö'(Ù˘>"³·:Ìŭŭı.4Q頄óç¤vÀà?LĜíÑhċXvĜ}ö…•Q”‰ -8J*ŜÙPœTİ•Şi˘,TĴK‘˙“7&âŬׇLìĴéÈĊ€(÷ğ´¨ Û(ĤSEè°­¸ĠPq†AXş<Û|·a²ÔÒ˘‘Ì#ħ,…Yh×9w;Nja΄EìlĦ²ĥÀ=@Ánœċ¸ eŞuŜc >°’²ĵaŠk,2(ŝÁ钷ŞÛ¸t~öĦQhì·Œ×1a§aƒPĦYçĵ’ċlˆVۃV…Ŭ%Vb“ÜQè\tU^…{e€£ WĞ,&í˜ê½Ÿß·žBï°Sƒ€\œ2MÄÖS3ê),‘ñŸxÑ&aPE 9 2@1ŞV$<äxġĊzÖÀŜ•H7Ŝ8/€Ó½Èä´0†üĜ̍˘³”cnµMsa²0^Üqċ™Ò‡ĊMŬ…'¸SH°ÓŠĦ-Á˜ĝâà!ñ Fo_Ûùà¨Ĉžĵi{:ħûcĝ€2ŒŬ}üžsùiŬYî|…Żtë+Z-ŬKN7w6ì?y~ŜÚ-šÀ*áŞ/ú×/n3~˙?–ċÍrz³Zc=;×+>úçöìï³amDžendstream +endobj +1136 0 obj<>/XObject<<>>>>>>endobj +1137 0 obj<>stream +x•XMoÛF½ûW |r›ĥdÇrrsœÈÁ[)hoĊŠ\J“\fwiUŭġ}3ğ”(ÊAPAjw>ßĵyÔ÷“ ]áτfSşĵ>ıÊhz{ŬÍŬŒ?ŻÓTž|\œ\~~O“Z”¸r{‡áĝĠ-ò³É$ğÉĤ=İZÓ\ğW“ߍ ùú—Ċ7\½ĦÉ$^½˜ÎpġlħÖo>'ëèi>?'IQİUè@XĞÀOZ§½nħĦZ5[úúôċ/²­v*˜fE~ëƒ}F_İŞ²ÏŜŻèbrMÙk<€ëu5îĜ†|—ŻIyZ[„ïÏaÚT¸o”ע)¨óÚ\ +––•ñĥzĠ•ÎÖT˜²Ôэ}ÚÎċA}FjúU·•>Gn>À´Şl£cë^L‚ŞĠĥ·ž’:p/ŝ`A;ƒmIeĈnKSá;ĴC€È3 à•ÍUEòT*£{jt`Ï84 4ӎ%m!ċ”ïR–ĝΐ.ވÊmğ +féé˜ +Ôe&ô¸ÊxĤèÓӜ}EĝPßĤ‘ÇAG³ôĠô0î‘6Ÿ“jÛÊäħ­³+§êšAcš ]İĜژfi8^ğÇ[ş*&¨şô“ĞÑôHhÇŞħ'A+cIp&5Y9ÛµÀĈŸÉ'ġ(  +oàÈĦ]eš…ŠM@>=-úşuž½?Î˙x~  ‚N͚I›AR*Ïm‡ÓMWË\ÙĤŻh?E_Ċ^ÄŻ+bZ•Y:ċĥÑ>Ĥ¨ÎU³³Â#Ĵq˘bŜŒKï×*_# r]Ó ÚQŽ}KF^K§Ž€ŞÜP[uìkKÁu …˘Ž&†µíVkiKÌl n͘1ĜcjÒ¸jİ%kÛgh LAaÌW|ċò3(VÈïìR‡ü²ñ^ˆ1(”ñ@ώgC&ĠdˆĜZ½0Mß;ħ vT˘ÂâÛÊڗ•Z?Pß~ÈxúßÑH&0Ê}ÙĴ xœ™ŻĦZÀĊ4ĥ­7-…Ş‹s1”¨O‚;mŞPœAÁ׀›ÁË@ŠOib¤U–ÉŞk3ZœpÍ/²ouÎüC7Ìğ5èY@XSĥ +s §á‰Ş`Z`ĠBĤ5Ûĉħ[”àcìÉħTgÔ +?Äl½ÄFñò‡HÂŭ:8DöUÏ]B™<9ûnnLĊ8cjĴBœTÛ˘ĞxÜŞ +qG[{È—ĝ Ôŭ-ğyAÎ~%ŸĦ;ĵ+qw‰a³h`‰²ıŜdjêħQîÎQĜĊ}WĠ6Ż1ġ̤Š%ŭ +Tħġ1˜=>̑ ü§5„}59ŻK´Ĝ€3Žë€âĝh°ĥ8µ„ÉŒ~kşû'<­ğ}ÎÏw?òÎħ1‡ˆà]ĈżÁ¸öŒÙ÷Q*œ°[6‰yĤħÛĥ¤•aïó–ë×,Ż1½ĵ ˘ħÖÁȍÖ3û(^ş`6F~°ÑvaŒŽDħǝ|‹9;êâ eEA§ÉÔi ;žÛògĊ1J!×Y­ +̎mŭ&À$†Ì°‚½lFÙñy¤iÔPÙ^\CʲlI{ÑsĠ­Vj‰ğïĜ|è5Ä£Œì‹ŭ0ñìŠŭÙ5lġÊ[ziìUóô|˙˜4oÒ¨ µôÁ)`ë[zG£*ñëÌżQᝯ[ِċE€Èe'=[˜¨§­÷†s4„.Ëí^ǎ]Ö1D6r½“½4ŒBN Ü­Ġ+'WNçĥn!P4üáqTQ­RôĴìÀwG.wt.µĦV94ĤĞ”£ÖBĉĊ1:(Éħ ÈB.4´26ÜŞüÙÍ(OŻQsYA"sU;8(J_ĦzĴázZ˘{I½ì')úĦ&ùFÙà–‡Ñ²ĉ™HÒ}L6=y ²HS#èàÍI­d +îÂ<—ì¨ +YB1=Š +zħ !L•ôKDrÚÓRO?T§ñÂ>/|‰AÖċĜċ ^Ó+h=~MÁ‹œÁËşóœDÙ§¨˘6Ğxƒ/nÑ1ËSÁXVÍJ h€&hKÇñ„À|ŒEGşQFŻ}yÀĜĠÀIïZ?Ž"•°ß îQÇàeWÖpÜŒm<ßI˸ÑùèÌbm°ħħÂlUGǖ2Ĝ·½ôbˆ1.ŻIä3b€^˘n‡dԋRTĤVx§€Žàâ^¸œhnñuš’‡–°Tä"êU‘ħ\êAŝÌ…Ĉë&–%)¤Ù`Ŭ‹âiĈŬšżàឯĈÊŬ%‰6ıĊïw×ĝe=³˙üŝñ=dżqo?Ù/CI:ò½‹ŝĝĊlŠ@Òĥĝñ 7³›lv{‡_NpöŬŒMüş8ùŭä?ÒïÎóendstream +endobj +1138 0 obj<>/XObject<<>>>>/Annots 580 0 R>>endobj +1139 0 obj<>stream +xWMsÛ6½ûWìÍΌE[’-ɧ6‰ëÄmóÑX™ô™DB"`Ò²ŝ}ß.H‰ĤŬiÇÓ&1Ŭ}ğoß.ŝ>Ó9~Ĉ4ŸtFiytžœÓl:Kftħ˜ïüç5­ċĊċUrñ҇édœ,^ĝÉ9ìó˙ĵ;O.“+šÌ`¤Ét‘ŒÛt'Ĉ‹óçß,În.h<ĤċÑÎsZfbùœ–é‰ó™ö -sÈĜZûµJ5•ꇤ²ÌĜ )²zKŞİsmk“ŞÚ8KAûƒ“kçé›ħ+c3z~GZ…Ŭ)İ˘ :W5ê,Píh_-ïÎi4ž&„p’9Ğ ^ċl?ğ` ġ¤Rċ_Ûh9 .~ìpœPé²ĤûİĞŒÎĜĊÀÀYaVgA§7ġîlh@!`öúùġJ­½+hm +À$>Ü ĠëB?([w¨‘”µİ2UGπëžèÁ(êÖ{w™K›ıŒ™ä –Î?K•)B˘ñE,àh:ż1ŝÄ}E)ˆÑĵóİèöš^#šXĤ§ hÂĠ?ù†J˘Ĵ ߄÷\D)RŻQcA +.kĉĥ>.ıLĤĉ˘²]@%€Àƒ ^Èj‘1?ÖWżŸ|ı½ŝŝ*òjLĜ +…Ùäuħ£ÌĴ×Ú—ïëÇÛ?i››4§\!Ċä•ŬhrkvĥҊ¤>Äĵ·.w%€vmQƒ*uĵ>tn[·ż,ĝCB·5mKvèŜ­8.°Ì „ɧÉöQħSéœ +*!ÎîÀmk“ÍÚÚlH)~ħAî,U +•))¤8*nHöĦžj+ם2ÏüJ6!Ô`Xż˘l9†Ù=ú5<ôj¨opĊÂe˘rxk +fJ}! Àh§­~Ĵ#"€Y{WŠ )-ÓC“ÔŞò.ĠUUaböcébü„GÏŸ]‚·“+°ħ„)f*ŝ=Ġ‡½ç]›îŜ7#v·Í,öNj|4EbħP?v$2‰Kš3ސ[j7h5ËmÙ„j¨• +šr]€܉uĥ˘î×˙Ò6ڐĤíĦ"7B‹²ëf¨ËÚhĞv˙!"— }PôV9°prûC£•×5•V; +)°ĥÚC€˘pBaIċžYdı ç~4zléÀĴ#9ê­ó?`Td +a{µëKnuT %T +iယ›½ƒĤŭw£-üDñ µ2ZíXÑ2WŞgíÒ΁ċkuġ Žô/£b{]7ŜÂL)ú|ŭVúñÄ_u\T…ôܚ:ÇİA8úŞ"p^f G^fwĈBĴyˆDŸ=Šo!?šûDÙ¨‹{‰85=HÌc5Ĉ$…²p~a0ÔYġcePşSÉGä9á EŻË95 ÂÀoêJ¨Îİ JÀRÂ*0(W+…ŭ($°Î“,¸‡ò¤ıÄ'4ş€¨3R…Ñ@ 1?ÑJ<֑àCÁŸ Ë…”{/f\(vvvƒ1Ë{ÖhŠá܎iô×-pBŠ"ĜÓÛv Èoâċnı‘1Eƒú× ’ŭ!“çW—[Zz4‹.݆‡%Ñoè„îħÉ÷ŸƒUoiXïñ§ÇċŽgQ‡ĝ>Yġ8ğï?}[~jĊÀħ@ñÂ'Ÿ(!Ċ£™İ7+teŽ%ùÛèzß­öÄÀİeÜħ–ĠÇÚnƒĤDéÇ×Ŝ’‰ŭŠG”Ä}XÑà;×xúŬĜĉ‘Vî§Äïúnï2îÏ߅…7Żħ”óOk·'ìPS@’N |ċÎÊs*˘1Ò§Œ°mK]8Ğ1ìä/íċú’W‘d*İkö{Ö“.Žn)i š' ~9ƒeß'³yÛG‹öëïÚĊĠ”fs~-LLígïî‘ şî?Ĝîh>/XObject<<>>>>/Annots 583 0 R>>endobj +1141 0 obj<>stream +xX]oÛH|÷Żè=ĴH”(ÉúÀ=œl|Ž}‰yñˈ‰³&9ÚÒZŭûĞî!išë,°Xħ-s>şĞŞĞ›ŝí*ĤŝĊ´žÓbEIq5‹ft½žE+ZnÖĝyŽ˙NӁ`)‰ùË×˙\­·QLËÙ"šSA1o›O9}ğêĈÓċu´î?í}ĈÓĠ*ÚôŸö>év-zO9ÂĊ Aĵ!ŽZDËáƒ÷ğĞéí’â˜vNsµYÓ.•df´KFğÌxRynϞŞLÓ·›ğ÷7¤Ò”ĈWNUÖQeC~![ÊUcaY™DUż*t’),.|ğàËnúŬ”óÏïvż^Íh3Jğtôó:q¸fp†=Pj eĝ´bŻ¨=„jÏTZÊmyԎJ­S)SϚĵ>)İùŞIï.•$ĥ.Ğ.¤NzÖ.âĊÓÛUJo×÷̒Ïl§´×ÈYĤ<"^@”Ú¤.ġżĉQsìÈO üċŝûîžxƒöĉX"TNÙ_|‹×°"ÇOşĜšDfŠSù1D lL.Éġ˘ Y*S:Ÿ1£ƒ2iċM~y|GĤĴô‘‘!ŭ;ˆäSˆœ-ĝzGLŒ-q ˜pÖÇmè2äİ?˘]Ĥ*òʤcúDŞ`ìOnîpŭIğjLŜJ…ş '„7íuU]ìâÓ+3 l$ÑL{M•òOá0i8œĴ£MLĞÓ8_­)°´Eñħî'óMoi²]Ĥâ8şŽĉ}ĠżĠĈ ìŝ5ŻL+ʨĦHÄĤdħW”Ĝò`Ž5eŭ3C@´\&µs`tÔÀGÑ@q#zóá3}ÚÑ˙ŝñúŜQ£‰Éä,Ë,ԄgtÇaw+ċíUòDġ‰™l0˜7ĤşJĤ'UDépS + ú…3Ğı˙ATRsċO C˘˘B¨eÚ[[QjüÓâığùüqûŭ—ôċŝûàŠ^ŬiϰAÜčDô˜{JüB=Ħx*¸‚bŭ£Œ,vï™vŒ# +b*ÉL݃^òtΆ°2gUVĵ šc$=AUνrÏÁâ>ö)*,y;큨–‹&=ą˙ÀDk&\¸1°ÎMİrò5~uĦ³f(É9êŠ׆ïtI!!ó#ŒŽ–5I˙šĠıcÓ\^֔oĴáêžĠZÏëÜGœʇ[iûBìϲ§K›eĊCÁÈımÒw| Ìxï ^-šf)Ó2U.•ÂkĜĉ b *Eݝ3“däë §íŜ†ŬğC}·íŜÁ¸“ Ġ7X2 Ħ­­Ĥ +! I1 –›:s‹hS”êu¸wġ_‚EñQї kïĤ˜”‡@wœ´+{ħMyOĦÄh{eF¨ İ}Ĉ ·G„W +n ´ŻMÎ$ŜuôÀ&·P2m]0~ży)@ĥFŬ—ÈÜŜÓu/>-è'3–÷…"hmí0Ċą÷!ŒġìCR1—†çHšw‚ ñíaèC,ù·H ÏĞ˙Ì*èë[ŒxPÁôÎ! ÛÀĉ•sÄ}hĤÜ0Ï´9K½żĉ—wwŻ@Ü ûÓ1+%ì Ór7P`p89xA8eŽYĤĦ…èĈI+pš+HŸ<Úŝó3?²„ċ{Ż0Ĥú¤KygĞO°žsĤÁ˘ĵSĈ*qï³ħµg_11×ßd´‡Â¤ċˆFĤ·3Úòûg¸ ĝ8Œş˙ ùÇáábŽ'3~W@'µœ}ˍìÈóIÖüÙ~ñ”M°)†ĉöżp‚kċ(Á|*@uIü…c˘iK˘ĤɄI|‘êû;İŭ½­t›F·ñb­6 Zmy$şĦ=8û+^h0x…wvQïœÄ+ü]&ëı0ö£Áċz­W›@ëġ–÷~Ü]ŭ÷ê˙¤uíendstream +endobj +1142 0 obj<>/XObject<<>>>>/Annots 600 0 R>>endobj +1143 0 obj<>stream +xWmoÛ6ŝž_q@QÔEcɒżۀt]‡~hğ-Ŝ§e(‰²ÙH˘'Jq ìÇï9J”ċ·uÙRÔ MŜŬsoϑ^4Âż€f!§çW#oDÓ韓ù Ÿ!ŝ—’RğŜ,În@‡7‚ŝĝċÇĞp<ñĈŽFŜœr +7iWŬ]…Ĵ67›A0ÇĦfµß-ĵ’ó)ğèöjêĥìßŬÎt +½9áÂvÑmŬÜX}A¸€°]t[ħĠcĜ²‹n+ -ŝ`âˆ]֛ċ•˙°ZĤŬt>£ebŭÑ2,×ÊVeÙ5E;Jd*êĴş&U˜Jdżŭĉ+zıü =„Ġ3kSú™ŽEĉ‘G˘ÙvfŬIIĠZR. ÜhIt\粨DtA*YnDCxÖ`+ŠŠ*}dŜè\n×i•™‘½Ż,b™ÑĠ*KĴİ­*"U$ É/2+e’D‘PĤ˘R”JŻAıè‚1 çˆ"ìwƒGßë"UĞĥšó¸0fĞŞxíĊ8q¨h`Ͱ·-„½Éĉ ‹ < ıF`q‰Ó0*¤L$ĵTÖ;ÓÈŬ8Nqr¨o@‰9‚Y­K]ŻÖä@Z…Ĵ.’ëjtCŻ*iSê,YQ/œJN‹ı&£#.×=ÖĠ³chñ†<ŻİßèşŒï`ĝ˙цĊCşĝĞC'zúß7)Mu´İ +^ÄÒQîĜ•\<4%•ê,ÓPı"³Ë#İ‘,^? vVX8Pž~í…‘ß 7­XI:;¤Òè gŝ6Ûc*:BMûÛò‚0Œƒ°Ü ˘;›?ş³];^6³Gp˜ßcóá$ĉ£kĉ÷êN*Ĉ"sjN‘™żœĦz{MÂǀ™§k™ Òƒ6ewUÜëx×È.H£ŜRmdiû…ÜĝİĤí½GeÓPZêü´­{ŭç¸ĞÁħ7Óô·GvO‡˜*Xδ~@{ĜÖӋ´\vŭÓUċ˘™ CŒ"KNÔŝlH/ymWĴ'…ċX†Éèy(˘Üy³‰ŜöÏ_8hcĠœ£ĊŭqĵȖ˜W}ÎmݐgӞ¨+ƒÓ0˘²§ó¤R qgĝ5K˜ÖĠê8ŝħˆAÔlĤ_*çM;­*•K.Dd*™âĦşÀĦQ]1!àİÀNI÷žD\v‰.^0³µto%î_ĥğ,—‹˘fĜ]‚ÜôîĈÇÙNö ĉŸï\Ħá#ŭEĞRnúY; +F@ÊüjŽĞ찏£#…ÊìœET] ÛfñZŠDü@‚BüĈĝ˙Ġ<îÏ`“GgşŻ71îä£,EFQŠ\"Ò(qÌîvžĥ„ì´ĜRcÈuUêÌĉ5’kñ¨t ĈnÜûêíl$z“Ò]dœÉˆ-ׁ!&ÒĊlMRí7ÂÙN´—ÔŭMµ\Ñ ‹òŭ`~˙ò=iĦ~‘J§ĵq ™e‹­0VçŝF–ëDíŭAqV'ÇCĜ1^ìßV™ŽDö;ó˘Ğác’qÁ>—|yŜwç6žA-çşBÑŜ°É}Ċ\ ˙ˆNµĤŻ^\7”÷öӇÛ÷_ıípÙÛ?ÂÎöDÖÖ°3˘í5i@ßÒĞCYêa_Ĝ²à3CµJúLúÁ?\sx^à…ÖgTM´ùrĉV *ƒħ:‡VáÓ`­ŝ,KÍOÀ˙ W3Ee§ÒÊ/\:§9FûéúXĴօ•á¨íd#~šm{vïw˙p—šÊĝJ=îŻŝ6­ ½R‚–ÌZbŬtäH)eŜÙh­$³BV$bè7ôı +Ċ˜Ùd\ŝk<ŠĠ¨Ïkq+*˙ù[˙ùŻĥ2övr’˘Ï#f}ŽüwxëÚ_0Aĉcš.ĤÍK­yÒŭTêÏhszÛÚħa0Ċ³YhŻží ‹–ÒĠƒî,V†>Ġv¨Nfo67×Äéˆ5ü°ĵúùêoĠˆendstream +endobj +1144 0 obj<>/XObject<<>>>>>>endobj +1145 0 obj<>stream +x­VÛn6}ÏWL·qħ–,É×äÈ:IáğIħZ,úHI´MG"U’²k ßRÊEq,ZÄ SœË9gÎèŻ³"ü‹ažÀxyu…Ìá&‹9~O_sXğƒé$ “ŝÁ§ôlt{q écÍĉq¸€´ŒEĉƒ8§á8œ„ğì–×ĞϟÀp½çĴrżŬ_/ĦPò—t‡!'!ƒd†ġ¤ĊàFZzĴUYރÈUU1YP”Š=×áw]Ò§C8l9vċ%m˘ÁġŬçĞĠ——Ù Œ‹)YĊé(‚ # +XŽZQ5 Y¨ƒiĞŞĤùި„Ĉjf•>‘€uwÄ‹S°eĜÓ-ħçPkħ%ßpĈ^9ĵ‡GR[BÑÓJٟŭé´kFÑ£RċĴVel” 9’Ü‚spıàĵÓ˘Ò‘”"=µV56˘ıİ•4HЧ¸ÊlUSñKĝ@šàHŜò ôħ;ÉʇdxêÁċñÚbö$â YxĊµÚ†Ġ2mĦİ]¨<Äİ( `ĵRÒQnıħ ìOáSêŬsiV–Ç!é˘,áÀ¤uÚU…X½žL•Ħt˜ÍäZÔî ÖXœ+Şòˆ +ĜĞVí½bzm˘ÒŭÌ)„XCa  rÛ¤4CÈ*¤^+cDVzʨ#…GğżCm*|J[}Ż…66„Tùzž~v”u‘s3ÄàÍF͓H/=„˙IÂ(o²ħ:Ż€•vĞ™fR‰ÂÑX +‚µ5Ó K8izž Íŝş‘í' pŜjl4Ż;<‹7ĞL·˜²768\E“sbĤFr|ÁĝÜÄş_Ĵݲ%›q”LáWˆ˘K÷yQĊ³Aŝ˘ĜZ­·\jHäC°úHm&ŒŞ8Š"mÒ(d¤Œĵ &½¨ÑCŝZqìÖ +‚ĉ}ÄZƒá9:iĈò`‰yŬĞê{kŬŻj áûĉ³Ş.ùVYêêqó´ vË óşGñ^ĝ}$o%˛ğŻ”ĥIäöċ€Î³Fĵ,ğÏN~kùżïlÀœ|z‘tf7§.¤fEˆ˙ ù9#mĥğl/TcÈİV¸ŠpùMP;“>ÇrÏŬÀào>Êí\ÂpšĴÓïüı›œgzû=1g38ùà:â(/4]dÍni×·šÛh…Îĝ\tk­*w Uö&Ïö_ Žq‚Ôà;J18ı­Ĝ6żÈ_ +Ü­´]ğ×żÍ ’ÚsücGñ;çKUáĵżbݤĠĝjtúĦ%G0ï› GWË4ş]´Żñ _÷c˜]$ጠñ â^ĞÏ-\ĞĵİğŬS‹Aw!˜'ÂvUBŠB%²şäĈÀ]T8™OÂùláўĊá&=ûì_è!endstream +endobj +1146 0 obj<>/XObject<<>>>>>>endobj +1147 0 obj<>stream +x½VmoÛ6ŝî_qȌĈĊbÉoµĊ4ÉVĴyY#l–} E:b#‘IĊ5Öŭ÷Ŭ‘Râ8VÛu/)RDâñĝÜ=ÏsâmĞ=üׇɆcH‹V/êÁha4àßü5ĉ­¤Ÿô`’9îOñŬëA’v^Ÿ{™f˘`pÀ İìóä}ĞŬ~/šb _?VN˜…‘V4Ç|otı€ ËtŻ`N8_*a|Ĉĝdŭ~€Œ)s’!şRNjğ× ċv!e +”^ÂL@i§— Tr.ñ1—ÖYs˜i—AS–S.Ž^SĵħŝéšÀĜ³—‰ş¤a4 ƒç:ÏġRŞkHuQàî—@=ZC(Ôhí Ğ/ŞĠáA¨°`Ö.yX|T\ĜúĞ.ÁfşÌı/€y舆9„­o,>ßXéÒÀ;ħpiĵ-{'äĝħ3_p]0İŞò—û‚5KJ,)3‘YU^Jn÷àÚ˙ŸéB—F¤È”Ħq\ÌY™;.òÜFĠöÁ8”DŒY†Û\ĉğ‡T!M\+$Ù]‡AŬŬÇĠ!š:Ŭ§šës…ûk´L~?z £q'òU RIq°Ž‡:´İ‘ W)ożÖ~w0ÚĜߏà­Tċ‡pÒ#+‰†•òQ73İĝïàL¨c%·$Z +›£yf&[̞dA1n†İ-aá0¤ nJ ğ–˘˘è’€ĵ·rĊcöfçQÈBs9"ÚèYÌkÓĴfÏÄʟGžs(>Ôq€ZÛ&è6cqaµîi)˘7kj|'ĝ˜…ìûİLĴ˜ħ§ıàHÌ$SQE5U8Ż5ç)êN£Ċ¨5=hRËÂè…0pĴ¸-…JE§Ğ !…G‹t rĜBâŜfÌ÷¨ê͸&i͍.<ì°áĦß5ħ1şrĈbfİ›ÖìÚéĞÊóùÊs +ğžĝŬ‡I\µ(8h}TQï'eġ5ıw”ÏrĠız:¸ú€@ġ󛳣W;—§‡; "Í4t´w.ÉĊ4aÚ´ pĴßÉTĜ—´µ2_ĵ!¤Dm<÷èü"ys~vÙpüğä烷ŻÚß5Ĵĵ†PÚÙ˙^ Úxî•6ĝµŭĤ^S˙˙#êÖ ħEQħáW•ġ´vèŠ[ĵuYŭbäͰzó;<{†sĤL3ˆï˜·ŜMlËŽHR|üWW ATë7DáJƒêaAÒs +ĴkÎ~p#ìB+NFÂû +]…³”•żĜË0kgùL·¨%Ÿñş^ükVG<ŜêӗúŭFĉ9ÎêñÛ¨ŽŻÇßñóçñÇ'ÓêÓĊ|:„ñŝ$\/NàÂè÷x ƒ#–2ĊèFL„wë ŬÉ/ëĵSŬ{ Ö7-Ħ{˜…óÒQĝh2Š&)ŞCÇzuœ´~jŭ +ŭdendstream +endobj +1148 0 obj<>/XObject<<>>>>>>endobj +1149 0 obj<>stream +x•VkoÚHŭÎŻ8Ԑ*ĥħ!@ZEĞD$RµÛv[P÷CèŞĈ‡il‡ĥŭï{glSu7ñ˜™û8÷qîĝċ˘Oocƒ‚¤Ġ·û8÷톓1ŭ÷è“3D­ËyËıî óˆ4Fú‚¤û}̃Ş×,ÒdÏż´ú°Ü=!áÌ‡ĞùNj?ĵóîo ,X‰†£ß_żž·˙â钧ağAHëJÑmÏV…R<½E(Ö´Öڐ,à“/Ѥż b]úùy ƒĉ@n-ƒ…Ċî)k–_ox;ƒjçž?GžÀŠà<ĝı‹àΑĊR>JG&˟…Ün +(gŞÈ)ŝ̞‰ozí\ŸĠµĵ‘–ëÚ§öÀٞ™ˆŭœËRp×-› ’|—B–'xRĈB(D„â1C` "U>Y§„%L­tgĈüŽ‘—/kOĊ,ohu@Ž>Ù"R§SâÜÊÚÎi%îıÄbÒçn V™`âӞEŞQZSxû·cT(sŠŞY¤Š5QŭĠžÍˆïá¨iµè-Žñï}f’•ú ]&ċ˘ÇäâxÏn­˜ñüs‘“Iâ6ȝìmÎ2XktŬ'*H‚D֏¤ó7ÂqŽŞl½ĝÜàôí.lÙ9Úmb›8ġ!!ħY3ŬûŽT"гÁ$Mâû‚ç„&yĠĞߙ³ĝ’‘w·]5Öё!ÍÑAZš W!Wş&d*ĉ)y'N˂öˆäyÍ_q‘bÑË|µ’'X‹üî6Ev‚•ê½˜QmBĠ\˜½ıœî%†*÷#˘éQH5™Â’X,uœĉç†Ħ¤d£JNö.ˆ·OĦ/9"ŝċPżĠÈ"{ÀêöÔg‰0#‡ÊğuÉX%Ĉ;ġÈ;LĠĞW{é ÙaƒPJk7Üî›c]œCG›_Àò˘ì çzRŬJ&ŒÎNËé8ğxsy?sñ… +S £!ĞÛRC°jkìѓÊĉ^œIód0×SXâ]aĉ×p<´Ç£ ŬĠ$:h WóÖûÖyOendstream +endobj +1150 0 obj<>/XObject<<>>>>>>endobj +1151 0 obj<>stream +xWÛnÛF}÷W Ò°HIĥ%9AP$MH´QQ0PĴȕ´ÉUvI+BÛH$­ĤMÇ wçrĉ̜ᗋ1wL³ ]O)+/FɈĤ·3üĵ™óÏ ŝI+÷âönœÜœ{q};NĉŭŻéŭˆîhħ‚éżäû£-²Él£éÙŻVĴċsJeŞRu’§V”K‘XiĦ?ÉÖÂÔôŝ×;úûÙċâóĊˆ†\.r6ôâE"Géŭ]ô?œLùôxœÜ&×É˙èé,ĞjíÏŜxìƒ ‡ßè äï#¨7Òĵ dËeŜ½<¸êŸİΜ!Q…{'[{U-U•÷íQ.dİ+K˘Ĥz£,í´Şê+™ŬèĤÈi)I, IµĤLW•ÌpR° —ĦşN&œĵ•)×P•²\êύ­ ϕÏ{/QyA…ÎDA %>µğNsâë,ĦtµRë7óùpŞôñĠû.Lˆj2ġwÊñ(İı$] ÓÜVzt@ÄÈġé¸Úk³E‘ġZ"m“P0ş•ѳ˙Áµ3úQÁŻhp·ŞU&j+ZiCš­9ÄT&ím܁"‡·„I;Q2è.çpOÒR%eÎĈ—}Ǣ¨kN€Ŭ•ÓÖr—àÊÛB5pı[IK‘m›%íŞ‚˜ŒZĞ +%ñˆ˘}kƒNò„A+Žè{Ĉ¤Ò`Nq œ<\†‡ħ2żƒü{U>ár-uŜxŞÓS=öŞŜ0Ĵ‹£҆kÎèšér‡  +Ħ­b&­*%Ijuc2™VÖÂGĥñIÇVP ĝ́–`ú¨=Pĝ(mÖ²³3Z×ßys§&tˆG_)ü#%ħşëşĊà•Ñ%'߯È1úîÍVžCŝu q-ŻâbÒİñ3½Sži÷Ş#ï‘,xjĜ~ TĤĴ•YcT}…ħ }À8`&ĉ?ĦÏì´,Ż&аÏ#ĜA²‡“ŸFÈ,ÊòAğċü;˙é`âƒPf[´J™/=‘†l­3 ƒn‹,Ó Ĥó˙7šŜÇqAŻ;‡@=ú-S u#ŠÂ ‹duùEµħêëë&T€œ,2‘+mJQÄ´‚Ĉ™ |Â`5Úġa-„Á_şÉmµ˜‡Kt„,*Y£qq ÂbıŞw?” ĈL‚ÈÊËĵ³!ëö Ĉ5ÀK)˜jeÈSÀ‰3 +$9Ó]ĵƒ}Uˆ'*".‡ÈĥäĝóĴŝm,Ĉàá’w,7Ofɘ1ĥ=°ŠrOÑ'V<Ód5ĥ‡Ğ£>fµá¤Î¤RÀ÷&’zˆ{Á1ÒŬlZşN‹Aûfˆ’ôïóú  +ġé^;´/Žûñħَw3ì›Z$ÁtÖnâMf'Mqk“[Q #t* *ıU ĞĤÂÚÓ`‘ˆÊĴେË6CÍôĞ& +Ŝ€ıG²3!%66hħm£K;Š4TeWˆÚíŞ‚Ö²’ĤXˍ‚ğgZeqÁ8É%2t(6 Œ/U/5ĉvÀ§ƒ[zr†Ÿ´.ôŜı!N§Eà('€ĝğu8ĦqĠô#rñÔkk\Ÿ£ËxÈ!Ìg.£Iqq‘1'1-¸úÛ=öQU**ŸçR9ŭêAĊ[BBïO”[ +ŒŻĴ ŠċQĦġ– +…E”×Ġ ó°tާĝHœ_Óôn”¸ïĞOŻŜż~EŝÌ_!ot֔€×í$á0^Î&ĝ <~ÑßX\=,‹ĠÚ҇Ĉ-¨7³›d6óG§7láÇĊĊÏ˙=yendstream +endobj +1152 0 obj<>/XObject<<>>>>>>endobj +1153 0 obj<>stream +xµWÛn6}÷W 6}p€XÇñ@€zÛCíÚ/4EÙÜȤ—¤âUż3şY–“:›K‚1DÎġÌ9£ïü aԇË!M'×‡Áx„˙÷ñψ;Ÿ˙&€ ,bĵ1?àé €ï²Ô­Ħĝ1â{*ˆòo~"—<5Òeŝ–mîi],áY ҉Íuj…+”בPk_8îÇnK-h%Œıĥ)çBDç‹ozaà1„Ĥg›ĈħäR(‡=ï¤ZJĦçMœŜ:Ĉ(r ëQrqm3‹9ô(ŭ×]‹$ħO„ĊıNó\àĠ™íMĵ_fVX+µ˘ŝѨ3€0,Ġëݝ‹µŞ$a­xÔÍħ€ñ"?Ñ+İŠÇĠÍnàLÁR_3µBì)ÁL’Ck–mìXĉÁ́Ò;H´~°ÈÏŭµrWBğ×xƒ²NċIÎeO4q?Żnâ‹M¤Jŝ tâÔÜÇÒXwżeÖ˜vó&>Qİ=V_]ݽ‰S{yjT6Ägïgôŭf¨A… £zëpDYBCúr­ĴÎ9ĝp˜X1†3•ÏŽ•0E8U8NĊùĞj6!'ŝFżNÑî~äğ8‚JX`7Öŭ,S,A?Žr½DiBž¨[Aš’ LcŝšNĜR? +Tš p"iY’ ­² ŞË# +1…ŭ€Dь‚µSŜg[MVÓqîÏd3DްĜa´ŬÊÖÑ=Ìj%Ž)3İVét™äŬjmkôfë,`µĦ‚µġ +‡“JÚ˙…Ħwċ]z#ŻïÁ\'ÌHÛ³[Á%Š, ‚bıJ #œ*FAD\^“7]À +‹ÈR#öTMĠX›è¸ sĀ[3› ŝ&qnDóĜ6TŸĈ#Ñû™!†Z­ĜĦ¤²œH°ĞEkê<Ġ†áBCŭ.Üâ!ò4ƒ ‹„÷Ns'<µNoäżĊIRŸ<ZNÈî{•éԴܖ¨Üà +b/͘§Ei Ö¸µĥ{ŸKÁĤ˜…‚¸³.Ÿ6„*ì$FŸ†À%'Pl¨µ\ÊÍV£c³óş"ˆÖğZ-hgĠĠru:“¸páôé·ğîÙŬy$@è…bŽÉÄ&~8„ùíìSûvû;ü·™‘еƒğ.ż;‡p2öcróTÁ­äFİXäĊó@ žU<0Ċĵż’ _íX"::täöËôöŽM³G7Ĥ¨¨˜ıä9zħñŠ­5­}²ġ=' ,KNz5!ÁĤÖ˙áà6zı™_fói5—Dâ…àLÖö|Wz›éH²äž2BI>iż !Sĉr$?W‘—›İ+bpœœŬŜjĠĊ˙mUmñı·,·Kı˘o,Á™ ĜĜâUí4ŠëҜ(6R1òa9{yüÙı80óĦ%8ƒiı*Î3.7›pˆożKN +5œOo?Oá‹Ñßw(J<%¨ċŻW]èúĝFuKġ„…°ŽDgħĈO 9É Fo4›4^Äŝ\tŝîü&„ê7endstream +endobj +1154 0 obj<>/XObject<<>>>>>>endobj +1155 0 obj<>stream +xµWÛNH}ç+Jbµb¤‰'! ûĈÌ,Úħ›ìċ uìŽÓƒíöô…Lŝ~Nµí†VÊp ÈŬ]uêTĠéò׃˜ĝŽi:¤Ñ„’â` h8™âs<Ï!~¤UX8>‰fŬçŭ³bK“ŝI VZ$G‡ï_ԋ8ıHrİ’ˆD’h_:²~µR‰’ĝ7|ġ½5ŭ\-ûV&Ŝ(·íW˘¸Ù¨rİÊ4²úsF~ġÊ*'kkôÔÜ/çóÓ`Óè\ZXŒbz‹Q#ÓĈĉKF}İ=k³ËCêj&öÄC×Ü^xxÖèžyn- ˆŬ]s{ááY£{ĉáĉÒZK*D)2Y #:eÙ-Ħ–m†X÷ëJXğÑ&};XĠí4ùÓĤ|ħǟ˜ëúÔÜÇĜŽİkYŜ­!p Ĥî-ĥ^I 2éĞJG+mèi–ÒhK˙ğBZU"'úúȗ‰.8Óä4y+wğŻß½ĉÄ4òÁèuĊöDŽ6z˙­Y×ÒäÌöfŒu7œĦ§FĦ/ûµÜêI££?ÁCS*?Ár{s}íz ñ]Ĥ[´{´ĠVġ>píÚ÷£§ĠĠ?S×óAo8á1àœDn5‰4EӉÎÊU)IĴnt Ŭßŝġ +š%“ŽŒJIŻH”ŜŞ2£Tûe.İ2ş¨œċîk ECvÚd£fa8‰Ĉĵpİ7ëšvнĦı(–‚~e\”è²”‰cnm´ÏÖġQUyÛÊn-ÂIŜĵR™g)Á˜à!m? >ûg'O&FÚ{G“ˆ>ĞBı Ħ#s6k˙Öc­…i/ -LA~–Ŭ*Dáɰ°™KaçNšp½¨Ik]I–¨äƒ+ï½ZcÁŝĈÏ1#"ƒ5îÚyË·¤K|ˆ;ĦrÁÉ` d>ĞÒƒPIƒÁ¤ŬZ'‹÷¨·”²`ڀÛTğ³Ĥ>‡è1’&Ò8ĦĜ_quÂ]Dgg}²Ĉ£ĈŜ À/ż'ÄŬH}@ġÌ-@’A"D ²:>wXԌÒ6χ.Ĝ›Ks§üŬ(÷˘Lé*÷YX8},ü:ġ˜=;nš"ZĴÁ(~–ya² +ÍÑâĤÀÌ_ÎçµŭÓ Ê@ÀŒÀ†Œŝ<˙Ù.SmêBïŸ%MûġĤÑ,ĤÑI]M×óè{_ka½w<Ĵgġ‚+PĉÀ`™!$<ĠX_çŸBĥ‚3•ĵvĜž˘sóLct_hœËd¤²$˜ ]Ñ rŽH6kò|É^Q³¸ ŽÊwUu+eIËíN蜽nÁŠß%|SöPڜ֎·‡!ħ† Mm´¤êrX)”0š—ËĴîÎL‰˘.ê+œK_+´À™BDŒŜÊ´éöÇÄ·óCâÛÌ|Ĵ›Ôq}5òGWÈwJR'-1ßNÜrç"„v€n{0´ŬBÒ¨ÁÀ½ÎäĞ˘Ë+ŸQP8]"§Ĵd ŸKĤÚBiı‹$?¤ċÙFiD8kj/͢ÙɈ&£I­ĈóӋ§teô¨+}҉çI(àċ„ġb~ ¨7âM2=zV&ÇÓq4Ì≓ ü}qçÁwĥĉendstream +endobj +1156 0 obj<>/XObject<<>>>>>>endobj +1157 0 obj<>stream +xmQMÓ0ĵçWÌq‘Ú§UŽŬ$­ +WŻŭšxIìâŝ=Ïí"¤Šb[ɌçÍÌÏB âG ­ħi ĉ˘*+4Ġ†×m×òZóë §â/Ŝ~|Ñ˘?1éz †Wzu'DٖxpVM)gßôόßB0,×u[6̸ëGÂbì“ħáwˆ4ŻGïÒ0òNHàN×A΄Gò£x_LT +Ç) ƒ|šğÄx’‘ħw:MVVguÖ›²Îšò|öî썌„½QŜwŠĝr|€’Ó0Ê On!Í :0áb4!œùÖc# ŝ&Ċóŭğĉ;qKÀĦŞŬ,Í†|(ñġéû‹é9O!M&ÏÁ“ŒüE'uġԜ‡Ô³ħ&Ä,ÍS*bÎÇ'k˜7›_ôÚUˆsàĦ`).Î˙(ot/ˆ†Ûí6UsËèq·żßáèŬ3݈÷N™½úÍÌġ_Âş­ıpŭß·íĥl›Žëf@ÓfŜ‡ĝ\üħ‰ĵ³endstream +endobj +1158 0 obj<>/XObject<<>>>>/Annots 609 0 R>>endobj +1159 0 obj<>stream +xWÛnÛF}×W òR°h‘şşočÑÄqb郁bEÄMH.ğ¤Ĵèï{f–ÔÍ1$"‹Ú™³gÎ ˙í„ÔÇż& Ĉç~Ç/üòÇÇ?:Ó0ˆh4SÊ) ×?eô‰anW£it¸ş÷œÓ œç{ĥB£ÑŸéŸŝ;M‹N4ƒ û|Âl<ĉ-òÄ.i0¤Áù0`u ƒqóÄĞûÏXŽħËï•Ġ½gĴŽÏînġrÖ9ğ9§¨O³POĤ4K üwŻRUÖÚQôĈİĥte‹…YġƒÊç +)D¤*R'³/>ġ˘!èŜ;“+·Ħk›+S°Míl–iÇğĜa8ñ{ƒ!ìaa@÷N;ŭïÊTĤÖôQĞÄKo2¤0lL˘ ҇É^X„ħħ+ŠáÀ+ 0Ċ†à´NMEħOà”ÊLĞJSjŞ8ú:UµĜ*<Ä6ÇYµšgšÖĤNù@Éŝi*7é…îÂdş˘Jğ' ÜUù<`+REBİÇJr"˙˘’ÜĤb0KUUkëÒEì6emlÁœÍR]áÄzmviâêȳ÷ 8%>KM²ÄnIg7 ´`Ömc{ìŽOw ïew‹p ZjɤNġĦÔ şôz~óáÎöè.مż7ï?ÏŜƒ `BÌilpL!èÊ]ŞĝëÒÙU‘ĝ&ĦĞŭd;úĦÏĊŞN­û­˘;[ëßŭî]B3ĤBbU‹š]ñÏMĦ|„w­žLEa œòjÇíûë+’¸_1’!ġZ4ûîf-Óo.>ĵBÜjŭÁV­Jí*àÖĉ†-´ÛĤ3 Ĥ>ż°ĝTŒœtĈ:?§=“ıîR•à²Ü‰dĞRÍMfjôħ¤âZ +“>›"ħk@3£!dċ°6ÚU*=v‘úI{d³$èŸÒÜ@N%&W€mUÄá.Ll Ò-QP„Ş:òßĞêMĉ9µ1ñ:‘Ù%'½p6?².ĥ‰D}Ètœ\fĊêj£xíŞÎLÁ¤ÀĵÖeE…F…VĴFĉ(Ŭŭ2÷²”èV˜²³¤İzBĉ„âŭÊÂà-X¸ŞÛ 29´†‰Ĉ[8 œväv°˜y +·µ§…‘œ^X-ËìLÙ%ÑäĊ%/g=Ğö.}şğŭûŸÛğ‡ÙĊÛ·AZçÙáĈm5 …G!BUèRcmU?ÁWçPنĉ^€AƒXk–ê€. +“µ ¨ZáBÔĝE9P'(äòh÷6zİô™ĥgĜĊpKUjWY"×Ċ! bDġ{Ñ =äˆxÏĜzvÀ5Ĉèì&nT¨‡rċaÇec4 ÓU&} qaž“b„ĴE4‡ĝ$~Dö[Fží¨Ï l 3éa‚–KĊË ?qĞéW_8•Ğ8ĊAR˜ğb Cµ§Í‹İ´kĤYöáQ9p€qWž£Ñ._(HÀD]ú x]+“áíc§Ìgi­œž+à)é:yCƒq§Ŝ„ZzµŽÉ¤ċìzUêĜ`ž“ o ğÌ×8j#'AéTÍˉ@– ×?+a€ˆuéç5ĜĴM–œñžG™š0'd G´ħŝ2 +rmg7Ó½×ÀQ0Œ¸ûŝÀ[êÑô{ôf:œ ƒÉxêo|<ċè^Ï::˙,nŜendstream +endobj +1160 0 obj<>/XObject<<>>>>/Annots 656 0 R>>endobj +1161 0 obj<>stream +x•WKsÚHûWôek‰+$a 6•ÚrŜ9ĴíılĊ9 ÒJôŠ4˜xŭ~Ŭ£A€ĴíT€Vżß­ï'>ñϧ8 0˘¤8{cŠĤ3oB“iŒßŝ7š–Œ)ĝüñéŭI8 ½3Š‚ H +šŒg^ÜA9]ŸìÀž…žżŬƒ'Ŝt+Fĝc<+(àŻHĝ^Dgá4eÄ (({ °MfgxXPÄê,Ĥ‘鏧g"PŒC:ó™Q€b¨3 Ç…cj +°…3VTï‡ ħPŒÎz…Ħ=. Ċ‹˜IBv¸`ĈħCd$²@‹g=_ @ #ËÇ Ĝáü™upÂj-Ĥ\ ]´}z\ì÷ú|z\`·2èq~lù8ƒ=nÌvŝùìpH.'~ĈÜò›1â +/‘†DŒF½šŸŒŜÍȏiDDˆò”ĉİù˜ĉÉÀĵ£×UıÌV›&+Wd֚UħPôĤ*TV2Ò4UžëĉÙü+ÄM`°7”Ò›§ƒ9x–YÓj LI£•aqŠĥUóYĦWo^S֒İhSĤ,ŞLEg­UhƒGTêD·­jîXR[,ĵöyô‘ĥYž³c˘˘x2(+CÊ]Ԇ…6z¨Ô9Û͎ì ]kô¸‚ĉµ#…ßE…³VàOġ÷2:ż£¤ş] +Ċ˘çp 4+ˆXgÊÒġöÔjY‘ ̰zôj ĦĵĠeĤËD?żg£şĠ´ş¤<+żÁŒmfÖB¤³Qù.”ê6i²ÚdUéu ¸l‘ì(BĴJÒ?TQ皘bôcM7pĉÛÇ.ŸZÂ<(’´ŸĞ?ë̜G´|^ċĠBċ_:ċ2ĵ˜÷‚^İ6K¨Ġ ‚‰/"[ĦĵPvCÇ^j³È*TJéô²3ġÎ .ß_Ûä¸ıÒVMµİf½8˙tññü —ŽŽ(ZƒäsçÏVSğ6yÊá銈RÛ\ży• 9…Bġ7´hŞ-\?Ô# Epè.<Íġ­–šfW£‰pĦšx#@}Ŭèn¸ ­pçĜĥáì);kŝlßÒcağܸ <‹V'ĉn—Wş´ŝNa‡})ͳDŽÁ19ƒXÒ!ß/-B+5wµAjĠĥ(‚ĊË͎i}“5şħĊÍ%}(ùáÄt"{Î4ĝGĈjS×Uc\İäĠŞ*Ġ]6{ާéŜÊÀHl :ÉNŬTË,×ퟏ‰(GÌÚ9ƒżß.nnœ@›CIżÌ“µˆ'“Xó{K몔"C lÄTF+Y˘Û2#âû*·eÁ{SrĈ•y‚/i“ŬîĈÊmĵIş^³ŝ²Iûŝ2lÙ½mkdK8E+]êó*°sۖcžK$Ž{ÙziÖ•DĞÑ9–)Véé›ËëÓSI +o;^qŸ13EòÌ(”ŭaB.ï}Kœ³òÌKŠôPÀO2úboI‹Zq¨+[Ĵ¸½‹a/Ľ­‡JĥrżôF›ĥɵ|œŒòl1rž‹°>‘8=RŞÊüÎıĉ§'Ùb‚i,ÙV +ìŝ–)J‹À…âgğâ…M€D‚›Ž÷èAÛÙùÙġ‘]˘ğ‘òˆhàĈÁ\a‘JӉ9’~/ +euD!7ZIµß\¤ĈÑx|DĠ·çaÜîĴî£ +·>"Ŝd8y$ËXN°˘q•TKŞĞĴ4r â€[jĝ§‹=ŬÔ§_Kr™˘ŝğKïpCwêĵ}`òË.„Zä:µG—Üzİ6*Ë[”ϖû'ċÊÚçXX³x"ï\r‰Ĝ;7ß^ĵŝôÏĠüċ…·6…=Fwô.9ÉFï’îàĈŜÔ'wħŜQÜ5ӎÀÇËŜtR„÷Ùû×ç½:§ĞĤúŠÑˆC<Ù“ °‰C?‹ë4¤aàŒOŸ~ĈóëhMñNîhĈBßÎOŝ>ù²Y Lendstream +endobj +1162 0 obj<>/XObject<<>>>>/Annots 661 0 R>>endobj +1163 0 obj<>stream +xWÛnÛF}÷W Ü•‹şX–äÙNÓĤˆ“4Qчş(VäÊbBî*ğKËê×÷Ì^taä¤(’8ĉeçrfĉÌáç“ġñg@“!]Œ)ŻOúYwĝǀĵ˙ùd4fC÷Çٔj]N³~ĵŞèżO—WÙφ“ì2^£½Ëš./³Ğ½gŝĜô&GÓ L ñÏHZx{ƒĞɗnf'½—# hĥàXÇÓ Í +jŸfygĥ”dy”†êĈ:²Íj£BעTTé­, U ³ÙGCŠŜXçO%ŝWxĵtÈ.…‘áfßî"6FmVtî‡I´•Žĝ‡ŬÁ í˜ĉ’Œ!ĠÂ:D;7zÀ AjSà—…6ôGİ +ÜĤĵ*rä4ȅ çcšépl}Ú:|q›ÑğJ ++ĉĥp=> +SêĈÒéÖÚ|˘öYŞ„’75<Wj…òŞ)dAëÒ-q°´T”Ö™rŜĝçˆĴċ°N”•ÍŽa4g£g`ê§ÙàŠş—C@][ú êı@ “´¤´#½àċş^Uɗü˙.\½ £›ĠbµâlĉHOJµEïÍ,ĵàëŜŠüwU>§÷Ÿ+Ò5RTĠ†>7%Üyż%^0òiUq+áŻ@gpsٕÈċŭÙ9mt·šŞ8Ŝû<œ(ó@Ĝ­ˆDQ´ÏèœGÎÖó,×jA+aD HB·” +•İC JŽ,qú"4˙5[ĥ§dŬĤ’$ò\7Ê˘]ѓ´@Kw/FĦbƒa6Êè6™ıù²T’f†ë:÷³ôĞ.{şġ}jcF~°ğ/DÁÏv oà‡ħ/>ê8ï ĈG(‡ˆm‘nıp|żħĦ$˘Aw+çkčĤ%™ğïç˜‚àšá”ı?C)[Àó„„ö “•ÑĞ]c€§Á›ó0˙Ié5,r€§·èΆ+ÉN +ħ˙g0żÖbò +ô4ΤóıƒAëÖOBC-güڀ!ѓu£8aĜ8§’vïħÁ­VÎèŞ’&£³GÔ*Ŭ†è6‰*­Œ|džLbPµ)˙Ä)­‹cıyġö)X]·ü›‚q\Çĵû€áá^A1Eš:=äşôÂ$ÇBÛl†ù°mêëËßr™=@Ԟˆkkéêik L0ŭ"U.ÏQ‘Ä·Ûw+P˜`TR-ë9ô˘ċY¤,ĉ2ȄJŜ9‘ÁVÚZÎġ™’3RsK0ó…W:,œmŬ·°[žAİĵñIbÜëm>ï^ÜbêµA<Cĥ-èNÌh\ĞÂ{ùÀĴżÉè:Î̜ÓRݐóh°Í7ÌŻÑdÂ8”‰.”X@?² Ĵòî.î0†ħ ˘§"Ċç›ÏïAî}ĜáĈĦ×BŬñxIŭvèYßw06½]mĜÛnëïÍ XĠ+Âi—wîÏxn7Ä (ÖĥÙ%B°¤v#Ĝàè^LêàYù°ƒ#׈Ŭ´*xpüÊÚb6+o+_`ÒaŠžtyïhj€yÙĝñ7Ò  2İ*‚AùXFÁĉş{@)h×/ٖQÏ{#àoJi³û³áĦ˜ú + I(\\…]r€ħ ÊB†Öby$Ĉsœè2tK#޸%µÊèF{µ³-4Êú<ŜypX|ƒÁUĊÑ2˙7‰xúVuÑ9ŬEµ9Ŭ i×vG“òLŜ8lwŜ}Ü{Ċ‚j\zíşW@W‚ħq;mJ“u¨*ßDğ*4­ŠŬâwŒä%$ Eh.PWힳŻ`X‹ ÄÚ6hlœ½Tà¸ö%Ş6GMħ7?0š 0Iԕü]é…Ì £Xò[ŻhÀĜÂwGEMhÏÄHfÈ_^È/JŸN˜R„ħfĵ֞#Wߢ‡ïÇ"|1Ŭ-ċÀ_lûÉòüĴĊUŸƒpĦĦÛ–úÁÀeúĉĦÇrµ>ÌĥƒïÂ(€S…§6óƒaKéXirǁùX·BŽ£¨äú€°Ñ ‘ĝ™ËXŠ(HjÁ’Ŝ AŻKĠ<Ñ_/Ċó|ÀÜİŒÖîğvf½Ĉšž— +żH™thù-¨WÈǞj@tŬğûivòÛÉżaÛ"Wendstream +endobj +1164 0 obj<>/XObject<<>>>>/Annots 666 0 R>>endobj +1165 0 obj<>stream +xWkoÛFüî_ħuRD,J¤dIvÚqR·)š¤UE]'ò$]BŜ)<Ò²úë;{½œŠÀvÈ{ìîìììòIJ}üKiœÑ`DyuÒOúxżRŝġî~Cçé(™PE£Q2 +%Ŭ¸Av‘Œi8c[†ŸZÒüd0œc6I85pÇüÛĈ*ŽŽ^·ş÷\Ñ0&{ĞìMšġ“ôĜäĠô¤w=¤4é!&cš.’>MóÎt)ééô=öàĵÛÓéÉ&פּµëÂŻÄÓ’şİ7´VeI² 58]‰|İ´$-*‰fI‚NŸ’X­¤.dqFk£Ÿ4´wKîbSók†ß²•>uÓA’Á·Ž ŬbĊ.%~ ]6´4¸ĵPµÌSoş65É{Q­Js߅‚žfµÚ<Ùĥ,‚YŭŸƒÜsÄG[ށ*{qşPv³a2d‡½Ç—÷—çŭsü¤acFnc'x÷·VùéàšÎeݐw=Žĝ²7Sş7 ["îp)ħĦç3s'ÏB(YÌק;” M3À¤7TH›×jĠ(¤Âċk9‰yİíİD>%ĴĴüÂTĞĥ‘uâ]Ž÷ ÚÚŜĈµ³+f֔8^n¨jAĝÀĤŜÈĉêĠÛoßÌ÷ÌScxÓ{:üÀÛ S šâ˙ ĠWâĊ‘lñÔŒ âQ̈́çŸ6 J37 ­ŝñi&a÷(ĠÔpŭȨÈsÓêĈĦâriĈĴáħU‘›ş–vetĦô‚~ÓêžÂ10Ò"Lİ)Żh¸@8N-ﲍ\‘²…_tKŜŬx);ò‡ûRnt¸Ĝ&ż]£„ş´YkÂËF‰r[+.°­Oħ*gĜ”) êşµá6gġPëġÏ·â²-a[Íĵ€Üv&·O:uwTÉMUqğdo—²–Ûz‹Ú…*H×Ĉ4ĝ֝ñmmRWP· +U2xP%˜ş—Â5Ûŭl}=8ÙqıÎĦ žĜv{Ò{ġ’͵\Ç­[äöBjY3Žò:ŻMċÒĝÛîŠÏó*iÌF–%Y?…rŒ“ÉÀéêO¨+w]àÊA‘Ş*Y(xQn<²1;\í£¤?:gz-t+JT´£'c§‡ŒŠ´A|•l–ĤˆXɏ­ş%ä…aùÜ=GPDò ƒż+]˜5°žÒ//_ìJ§7²“5ÁKħġ)úD„°Qh ¨ÍġRċK‡BĵRÙ#[Ħ,£”¸“ğc<)Ô)rïÊ5Ş|)ôBú×ħ˘ÎhcÚ:îz`ì-9ù3ô1äJ­bÛA°x˙¸Uìî.ğaÁÎ#ö=gxŽ‚Sš)¤ċ‹³SÍdm#G÷Âq Ú2¤dÚFKQ/°\ÔŻĉ@~* EŞD£„`Û|ydÓCfú´;ù[‹:˙oî]_PŠ^:_oYämš%$Kèô­î"Òîuı9ĴlnĵȔµšž{uvYŬŸ|P Ìà)cÁ‡ÚÜvXsXŭÁ}UnŸÒZlh*ۃ‹Ö2—­Âô‘µ²tÒ/Ccq=é}IŻX鴔° F˘p³pġ';`5jàÒı$‰ƒĠOzŠèPnèDÈŜçŒ ċ‹”Ñ6hşÊıҏsépíċ ­ÁïÖzq°íj…˘x†¸zëPŸĞE ­ ™CĜîŝ]C˘(<żüÄr¸-ö 3`Òĵa7Äî(è ö˘ŞuB§Ûi“ŸZhÉèBRòì ¨Ħt@Œknj ŞáüÜͲèj’YáJ2e€ *>Îħzz'‹ĦS#ÌÂ?+ŬŜ“Ŭ`*¨‚ş÷ŭLÉ-+ Ÿ.J3ċ_Ñp$ 9=˘o’$İ%ÏO,(¨”•¨!˜è,V{xätú–z­­{–S.v^ï´Yİğ ŸC]KğᕺŻéë6tÑX×Ĝ3ÀçEÑqĠ>/XObject<<>>>>>>endobj +1167 0 obj<>stream +x­WÛnÛF}÷WLf +‹şĜ–äha+q!ŬXQ@/+r)mLr™]ҊŝgvI™bœ4É /;3gÎ93ü|4¤~i2˘³1EÙÑ ùÙ4Óùt‚ŸGĝk$%G׋£ŝÍ9 ‡´HĝÙñtB‹˜ü`@‹(xĜȜʍ¤ÊJC2•QiİÔôI+=J•ÌK$(֙Pù)=¨<Ö[K…ÑYçmHä$˘HWxVä1ÂÚ­6ñëĊ§£ġ†gáqƒr#JRüĤzRİ\Ëĝ ˜ÒŬ‹l%Hęʕ-(Ġ“ÜX*”á)2ŞĞğÓ7Âv‚­Ë爖´ŻÌż‹²Ÿ¤YĤĴ²%­$ĦZi×˙ŝĉ Ñ…äÚV)%B¤Ş\˜CݵAĠ‘|Ò07¸8ÌÊ n6ÏٍҘ3°²Á[% ²¤û×P˘ËÌZ)Q"oÓż;\˃,£{Ŭġ♠Wjv§.+£Ê¨rÒĞsò)=4n4Ïıqœğ•Ö2 +rG:q|·M‚ı$'G¨Èì +‡!żÍ„A•Ê×|L§˜}ħuLD•K* ·¨ĈËùâ-ß&Ħ†Dç=Dé%)ŞĠĤ­*b÷:ŞpzŠwâÉ/ ‡Ħ3Álı‘Àû…Çğ‘X³ıÇè9˜&żLä•H]vžšó½Q‰Š<ífhúZZÊd^y~€š×ċ"“§´ŞJ¨•r?ÚÈèÑ5kżñÌaéÌ Ŭ +T§ĞZ=µàß:‘‡Ç4ç\@HXœĝu›DÜÁ— ě”C}ïŸÔ.ĦZîuCŞ}6œ ++úVozl`? 6öQ`ÔáÀĴ͔=4’2öBYi¸‹£Ħ׈mşħğĵKÙŞ(ÒŬ³ŭ¸d'Tc/[6zoĜ2^vïßD5³{“p:ÄÏÓpÊj_ŽĈ“ÚH.iˆ‰‘À ĤáN~Q[ùp^„Ì˘ –pgô*•k=ĤwĈhLĝY:=½Ñó §ÏAİœİİò(­bĝ:ĵ:Á˙CĤqc#­–]ÑIûA÷î2(wÁͽ*Ä;&a ċĤÎJ…Ìc‡tc¤ĵË'³Ê›‘ĥ ¸f–Âm²;[‰?ÄVç'`£87b[G{Á)4ëŠm•¸àaáQċİs4ĵV(.ŻÈöòÊÄ#ÌÏ׆óHÈŞ…£a +?bàJ“`ĥ§ğîġ>n-û 5üƒOäpy¸á½hĉ +=İbëŻ5 +Xš2FÌV2"Ĉˆt.χ…tkšèüv£Ó:ozsj `33?U(ÈĠj+ì6| iĦMU>W’>ò3KżĝĴİ}9òsĴĊìĈĠġ{ÁEε›ż˜ĊÇ˙"F36‚7ŠtžHžƒ¨–k¨ 3 ᙐîñ̓ÛmPŜáœ{rÙÎÖEê´Ñĉ´‚Yâô$UşĉˆÁÉsˆĸäNĈŽQ|ñY/‡³ñ°/Ĵ—6ŽÓ–wK—²§i£Ĵƒ#)ÁçÊmnĞÒʔ· ¸oµŻĜ2á:DĦݘbì€*AlAv#Óeçw³W¸Ì]żaܽùŸè4Ġ[=‚óppŜÉ:!ÌĜHa”Ë’àƒµšgßxŒ‡ha4{³\>Ìßż_,—żû‡žIé~~gjpSdn c­ x^&³( Nk£ĞâUû™Ğ·ìFΒ°.O¨N½ÜE†Ż6€q%bRħÀ‘oş½Ġњz†=NĴ%ÌÛíî\ÉĊ÷ÑĞ3‰ù¤eŠ "5VĥñL”ĵGl‘÷)ÈÖmìĉh 3KĴñÉò´9żßÖäĊ´µ}:_ċÑá‚ĤzíJM–Á cr0ĵĵĈ\/ß´Ĉ•Z™;„x'Ù#IĥŠ"à‘T˜nm S°Xï\LÏ\nq +n>X~# 6'sÉĥ²kĴOéxÁíüĦNé.ĊÎ /yB²UZrĠĜžŬIĤ´>—´İ½‚{ƒ4î#š +Ô´ïF{Q]0+t„Oë Ĥ…Ï=Ġ–šżˆ†‡ĥMÀŸqXžû·ŝúóíÇğÂôŠÑx†˘ùEdEú£˜§µp9|‚ÏC&‘?íY6[u”¨J,­ŝµ‘ħÖ5Ĝˆ~kWX#v ÷a4Vk1³ûVıñaŝwfLëñ7Ä·öôòŒ..Ç~jÜ_ŭ}}Ċk' Œ„¨Â²^şġî Çĝ,ŸžQo2ÂwwüÈöt>9')ôñÂdÄçĵ[ŭsôòß dendstream +endobj +1168 0 obj<>/XObject<<>>>>/Annots 669 0 R>>endobj +1169 0 obj<>stream +xWmO9ŝž_1ŞZ5•`“MÒĵôˉpEĦİIH•w×!.ğëtí%äßß3ĥ—lÒR•ŞÇöĵ<3óÌĝG'Ĥ>ŝĊ4pLiÑéGXNfшFÓ >ż’´ä ċ_1˙şŝ§3žDSŠû}ü.(˘aXċtÓiŻħ;žíïĥÖĜ…ĤYûnk]`>zßÚmŻħ;?[ÁzÛkìNhÒÛZcw6‹âönk]0~[ğŜùˆâ˜Kk<"sôi‘vi7R–ô(+£tişhrD‹ù?$ʌìJÒ§³“SJ*QĤ+Ju&é[j €S]²Ìdv÷.˘Nê2ßÒFlÉêw‹ï>Çh…ŬTW8oĵu“\¤ ÎAŒħÁbMşR÷Ş9eşޤ›‹S|‡#…~ô'ÂFš+YZZVşà‹ÊÂ!ĥż’ßµ*#>;0‡–]lu!ҕ*!żŞ%‘ĤşfÙPlW°^k++’ +Ş*Ĝ& 1òIá<ŽáŻqS£à[×à}ƒ1’8ÜöT1FÄĥ9ǃĊt/=F$‰{IŻÚŝ‘iXüŜWŬ„}khSéòŝŻpıħvÁŝ·Â•ŠÚȌܜŝíü^‰GUŜ“ S++àŝŻèbI[]“@´kW ĊGfsdD–á6iÖ֟kíR!íJ#?5•V6qCN1Ä.r]çİ2S)Ÿ°””•ñÚèêAf.V­Œ8+MÒħÉ£Ĵ@˜ĵ-[c}ĉòe¸Ün;ɑ)°êQ˘ÔÎagƒ)äò·RȤB”µÈq8Ĝ-·0Ù΁K¸4½ò•Pu:[&_Š Ġp‘1v"8HĴfÛÜ IŭB€€™"Y c6-İ]z¤Ô(ÁÑßE4 °MB|EI2S(oŞvı Ġsì[ÚjĞre·G€á°œwžµ5”˘ŽBZ<—öĊĠ ı½ ÊIùöġ[ëµ)N$À]—T䋴…bSçßĝök +œP Ĥ…Á‡&pJ4„÷¤M{†,÷ŒèF̵Ôëü-˘Juexœœe +Ğ0ı™:)Á…0ê=O3”Hû™¤ç +¤èäúJ=œ+ŠPÎd $ĝ[60 :WƒlöÒ+—†Â=F[EWšM™äî ù‚m(×mâĜ·ƒ@ƒÂ˘šÖ`lDĊ½ +İdUâH8“Ŭpùđì¸ÙŭRDUñ€"roNğñ­µŸ·XKR7Yò“#]7‚ê˜î 34*‰ÛuÎ^X—êég0Ò_.Ì84m39[ޏ´w‰ÏÂ9ë ’Àd̄fpÒKŸ_Ñ_Òì`4> YĉŸÀñĴ +›7B 1T#ƒŒA|ĝ3#÷ĦgUÌâ8Ŭ…âˆP-f=½1àJá èFôjŬĴżbVtáiİee›¤€‘ĝΨŭgcuO]şh×Ŝ.UZi£—ÖE›C^ Ÿd;G1+n|ü>’š"oš,ŜwÏWyĴ'ß[6ı ĜҙÊÜ´ß;ßoáxî5p<–Ċi4 i<Á2ëŜœ\~>/XObject<<>>>>/Annots 674 0 R>>endobj +1171 0 obj<>stream +xXÛrÛ8}÷Wô›4[6e],ÉyÙÊĊŜumìd"e2ğˆ„$ŒI@C–ġ÷{şAR“ššİIʲ%€ŬÓ§O7ôûĊñH³§g×Ñ5>á—!ż|ù×Ċh8ŽF4M˘kÊh2wx—Òâbx3ĉ4œO˘ ŻŽÇÍ;^…!Î&є&ó?‡Ÿ\ÓĉâŬòbp?Ħᐖö<Ïh™ˆkZĈŭ£8תär҉)è§ċoxĉä‘-bg7fí]–jk}:ş’²ÒTzMĊNÓӒ:Ñ9}v݉t‹.ż ŜÔ6 ĥĜW¤_u×ĉagâϟ_]ӕ€²LúĈĈi™è„ĤĜµ­Ë"˜˜6Ö­+x7—?ûBĈَ“ˆ–; xŒ'u)9‹ž–O0L€{`Ż/MĦÖ)l ħÛn\ĤŒ Œ–rяèÌZ~I*-vÜîoĈ&ŝoo:ĦĊÊÒZ:ƒGLĤDn;ç„l\òA&Mù(t. ŠÈ„‰,ÇŞNc·Ĉù‘žġ1İïŽŻž×­yYs:9مÎö)¨ä#ú·;hàR–7&…ƒMî2y{"‰„”—–vjż7鑴8 ’³ÖA9'ŭŒ³§ X7,mê’b—eÎF*É:y‡Ġïž<k‹ìèA’öżhk´-¨p´)ĝÄĊÁħíV|˙`ŽŠ¤wâ‹ßĴVâiµ2vÓ Ğĉ<„–ì`mĴBĦÔıg!2*-ô&EÎñI~0^Ghž*ZŜ!ZĊ!%1ıŽQGĉtog’DÛ^ŭàh +]A™-áğf Ue–‹Dçza›çµÈá2ÏLĴ鳊ŸiLĞ>#Í\ÈW?Iè'›HĦvŬ½ıŠ´ÂÒ7u’ ĵìáÄŞLÓൃ$ˆéHŽÛĞêíôôS1ñûİŽ×<*QVˆ=T‰N°‹ĥAòW”!aĴ”÷.6ÀoĞŠİx³ê ‹™‡ żkM:@ƒÍÊÓA§iEÌŒ’—½óŜ°*İ›:ĊŠÉN;%Z9dġú´Ù s·3)Ž-ŠZĦ€öGr›öƒ5[jQ~ =a½rœşX—İ"BÍ˙§sGo“ÌXV•°ŝ(’zQ&mT´8Ċ£‰sçŬĤ—ƒûZŬ[÷zZA'׈ì?ÏÁ‰Ğİŭ`E*ċTÛܕû”2“âŒ|•J7 ö´vB&#úÈĊâƒñĉ9½˙€‚nk=jEıZÎ~µÊµ6Ċjeu0vµŞDë¤äôMĴĦ:´TĞr:ĝĞHC +òsYlsµ^£*tÄ\Ċó¸šbfÑ|ˆżyèƒ,ŻFÓY•ÍşdĈ£Ż£ßr<¨÷:FÊŞ­Î{’ħ tëCŽĝ4‹´Šdm×°€’VË *0ӚşÀyë—´kûeÎ|KE…)È÷dè Ġ KŞ·M£h^ƒ™Œ)H8ŠÇXWiŸ\c‡IÈê×ó7ĴPòAr°żÉÌ ù£‡úúš2µ˘-q†`Œç›ŞÑI+ÁÜHÉ9šÌ&sC ô1Ĥ}ÉÛÍu•·zl–›ÁĥĴ6`Ïꆖ‚~1ú …žƒû?ß. ·`[à{V +“ÉİŻH‰¨úÂdĈˆ'ı=żĠä[êÓĤĜż e¨cD, îİYï>Ŝ-Owż~]DwżŜ[’K,µxÁYŞs‰)…oLç”ĝŝ°ˆ'ÚĤħ˙v˗R=qñĊ(>”Ty¨r•ûk‡^|ùeùéÓÇ?8w+uApìŠÂ-n|ğÍ£á-~ oq—‡£hÑ7ž˙BĞŜétBħA+:í’!žá‰1C‚ŸLÙ#yWĉ1j}ÍċY¨İ2|*Œà%Ŝ„›OÊBÊŞç/éËŭû^è‰‹Ë ܔç› Žë +Ä4$ѧ)ÂĞl­N:ÀċÙĵà.%=cë\‚i 7ôĴJĴ[mupC~|‡²FĞb­ÇŭRII·ĵsÜıp%µÈĥ‹^@”›ǕµµÎl2ĈƒÀ*w(”‰^—Ħ$á˜ş-"Ŝç($°RħAË*p€šfUzšÒ ùçŻ D[šž€/äĥ>£_܎i:ı üâíğ·ô9wżaô§mì…ä)-˜éj6½ú3t™à{†Ùtn6a;wˋŸ/ŝZ (|endstream +endobj +1172 0 obj<>/XObject<<>>>>/Annots 679 0 R>>endobj +1173 0 obj<>stream +xŬX]oÛF}÷ݏ/…œB˘>-Ù}Y8qÜ56Nş•Ú €^F䐚˜œa9C+Ĉîŝ÷=w†”(ş‹EÛ§],~ÜÏsν£_/Ĥ4Áż)­f4_R\\L˘ ǔ?~üŝbĥZE Z,ñYüz~ü–Óúb~5‹h1żŠf¸ğX.˘eóïŬ\Œï4Ò&eËëmoB›ĝò“–dRr{I;i%JdÚX§brĈä–RSQ"wu–)QY™]. KÊÒZ;AÊY™§ŭbjŠ…ĤÚJom”)2úÍĉËĊ„FÓ9âÛ$—logܞlħKHè„4˙á ÙRĈ*}Ħ^8xŸ”Ëg™{ïùħŞÖ­eRÀc)2iÉhoqÈîFŜ:ğż(6:ġĤ’¤4‚)ÉŻŸ² Ûˆ6(K'Ÿ`%t&)­LAÓ^nÛKc"SQçnû†£Nh{9E{uÖL•Ĝ훨12[˘­(­FudE{™—iS!ŬŜ ˜i'@TĥcS”*—d}#jË ÂĞlo|Ġôü’²8ĤQĥH¸¤4'S•ç(Fœ×‰ıS½|·PJ°(-*…şsiEž›½ˆJ8'İ,Ùñ7.:Ĥ96ßñqè7€K‹?ô‚Ş ûW†h˙~ó˘Ż'}ÜêĝdoRUĊ™tŜsç[,ē‡MŻm@…–1 ˘*DĊÁĈÊG"w£DĉÒIŸgfĝNb¨AH-1…@Evĉ+3ÂÖiŞb%µCӁÙ\ +놌­Ĥ-Ê†@*¤/ܘö!‹<™Ô²ìœĴxŻëbSĠÖÉäÎûµÑJŠÔÉjĜOı—&GêŸ{nJ µ‰}~Œ;  ú"áÓcÇıŸ×m(’´ĥ.î„ëùc<ìĊ³ÔG „@óü…ìŜT¸Ä´W ËE05fm†"”È$â+ğÍÊ O!ZğšíħÛ.ŬKÉÁ"¨ jC_g–(†fƒRF/Şà”eŸˆkƒŜ@Θ„b 'cÀž!™*ôtö‡µxü-ŬNKZ Hhƒ•Ġ³ĴŝġûœŒf‹èfı:‰ó­Ĥġ[’Z@ċ‚EëĊ".“ş(ċâY¨œ"È{#ĞÊè’öΕߍLJ!òݲñùÓŝ=~:˘÷{"çÖzŭóOž"Ë 4°ñ€dµJShKêOZ}ġĜŭĴô|F{Œ.;ô: Ü2Ss#¤Âz}îÜO×~¨ZP@䘽ÇOħ6‘µ}Gq`>ŭ,‚zTqeĴI!8ÄbĦVCúpCħèÑhċ.Hô$"BC £Á³ +˙ĤtœìŜñx•Ğ£ĠwwäÏŜO>1-À+dR˙îe;ş½Ĉ×Au½’wş‚ƒYˆšŬĞ’gÀo{íoÖ„ĞÚd4ú…³ŸW5„Ê"gùÖneŜQr5|‘ X²JE̚—BÙ¸6µ£‰Ùé'ô1   Żf)ëċg4´È‡k<¸Ô:GWYÏħUQ#úı‰EΓ‡eŸdWd1´ŝĜz˙Hϟ­w°Ñ[êAx‘E9[à‡ŬBа*ÙoÊœcKáRŒ{ëuj|żl•¤3TŝŠ1œz8ĥzñmF@˙ù46 0GÀÜ|ċÄŝÂџVG8i˙`ÄĊj<Úäž5£b˙kÂA/ĝş„\°L9Y6{Ujxk`+\ ĉrƒO\êUI Côó q4_Ü ›m$…}Ċ'^Żù!üꙛó˘àµ€ŻvċÀÜŞst—* AÂĥvÄ`zĴ#j>/XObject<<>>>>/Annots 696 0 R>>endobj +1175 0 obj<>stream +x­XMsÛF½ëWt)Ñ) ü?”Ë–,ĊŽŞVĥ×dÖċZîa ‰‰€ˆâö·ïë€)ËI6.UIfĤ§ûu÷ënüvÒ§~ú4pLIqҋzxżúüëۓŝ¸h4žD*h0Gŭĉ)§ÙÉdġhÔżˆ.xqrÁ‹òċŭŜ$šĊtŠ=ĵڋ†ÍŻú=ìÀ™)V‡½1ï•'9;ĵ¸|Ìиĥ}’³½?_LċŜáċ„%ɓĴNÇPvx9 +gÇ=Üždu0Ĉİáh,Z G²*Oĵúz~Ò}sAŭ>͗ŒÉx:Ħy*ôhžtŜı %n½*Ó´4ıö´,]!ïĉ4Óċƒ.ÉXú~öy6˙éîû÷óï‹ÙÖWş ĞĞÂÙĊâ‡èŞÜĞùŻ'=:ïĦ<íü‘CÎÊeŸ\yï+U<+›’×­uYïñʓò´u5ZG—¨ġştëÒ¨ +¸’·•äM#úŒ“çdµNI…ħĈW%nyTšUVyjî‡ħħ{„ TÖûÙŞ¨ıI†9s$ $“ |XÑ'cS·ñtù("Ú-Œ(äl`A˜İ ›Zi[í~ròúĉÈĴEgħÊıÜï~Ñ<Ó&`¨ÔĜĵGıK€C +ĞĞLp –PZÂä²ñpcòġ ™%ut³€e,°,‚?°?Cœ›ÔA¨ñ]!fħ­ĈZt$Dˆ`yŝ$6`ܕçn'ĐÎa•2Ż—uNż|ü;ìC08`YRnì½˙‘•E Ÿ·NùÙÁv·¤™*b%~sż\Q‡²ŞZ˙ĜízŜıru¸OX‚÷EôISĤ!Š +S–p›ĠJâŠ3Ŭ7I“Pç}ÊpÎAt,£…ġ6ášċ]>Àĉ°aÜè~ı[ˆ‹³€Ôü Ñ`aPÉC5„/ñ:§Œ=ò ÎuÑí’ĵ;##"Ÿ`ŜžQœsŞ’IƒşԈ¨Ö…i*qÚssÛôŝŠĊ­wfX"vf‰Ğ*şÓeÉéèMQçˆSŽŜ×7×kàm8?‚ĈϜ÷ĆĈ‹›Í&ò÷f½ŜFñ.b£~ìú">Çm•‹²ŞÈÏ}Ĝû7à|ì?aÔU^e^e„j–ÏÀM*/‚7S)`ó”Ş-3–˘7×gtRz­ĴŞÂG÷ZŻŭ ğDÙ=sÁ8˙ğXŽóLÑ„óu¤Ó:Ruˆñ징ŒcŞDĈfà|Úêoàê;“£Ì×·of`ˉ*#Ġĝ‹IÙMÌÒww·{‰4ñÀî7P $ħûkŻxĤ6ç\%q?J\Ñŭo~Ÿä][ĝ˙ì_WïÍüƒ0—(çòd7ğ{M~­“@xû0Ŝ+ş6ï¨0Iéĵ[BY(×$tÙMËU—ŬŞ{>D“É„ú£P̓ñ¤!¸–ż&Ñ´ p[ +ü™ŽqK+Tofñ}İc<9ì˜ŭßÀ}_‚ìnù"”5&"Eĥ.b ħöR3g¤t *˘·¨IĦñxFğ<ù=Î?£$7É=3­0)ö’}OkVS¸$Ħ"ÙŬĦ`ÎhGê³z½vß[ّRöġsRhç!bÖä ²ù·*K³$m$b¨ówo‘÷ż”*kq^ÙÉ‚§C·ÌvÔ J-w7RVž·ݳ§èç˜"÷ZŞĜĠUïœġƒ²@‡Ŭk ]šVE£ĵÄÌħĊ¨q¸'ÈDĦÖŜƒ2Y†³Ò°(9Hë\+wħPÜħoë-òÚz˜Wh Ċ—ŠĉƒËk[iÔ3îG[‹ˆż —-Úô`Â{˘_ĠŞT|–UGOë„c­ÊÊ$(’èÙ´ŞjNˆê}e +´¸W½;ŝkLà‹OcÄ­ ŝ”o{ÁĴ Ë88 +Wê*|›Ž_İːó Fm#²áfr×Îİ+™'žbĠjϳ²ÏĦGwˆW^ +ݝèż-^áT[°bèè=Šož2XħŠó­xYĵа×C +H>£17Ú4Àg %DŽ4@Çıu8Š ü×*Çùż!œÁ_.!–+:ùßĵ[Ìij¤…kÂżÁŬ[pWH¤VHä£èúŸ³]Çažòè³aBâŒÈaĜħQIĤ“{È0h&ëoPëç%b^,Ô=ş¸Ú´'r³Ì‹qiôò # OYKüµ+Ĵ³œ-Ìí/ċ"…óöÈíħFÜh“ +é\i¸Çúu}G-Üô‘ĥ‰K!½aO‹Nƒd‚ĥ×81q9”>ş şt=ĉ?˜Ĵ 4Ë[ĵú^žäÁrGNèÛȚeµÓÛӂ OĉrƒÑŸÂZÄżß{”3G‰ÎŜžÙúİÏñmVX ;aeŭô°^òİçÔŸè~àÜqxa_ÌK<â2—£›L2žċ8*……d¤cfcêÇ_Ž ²“ôÏ0şk Î4˜LjđMíħ”¨ä\:° 'Ô)dÖ$*èN ×Ú!BH0ÂWÖ%_Ç>)MÌ\{ts!v"BĜC˘5ĞÊ} ·íÛ*kÎâ@j¨SmÉÙ ĉe‘&Ĉtü~YiË7<^A•…ËÀ’öU‹Żb§ËŒŬÁAÏXW<˜j•-Ïô0H1ëòL$فlÙ¨2$ş•vÙùBĝôġÁu,mŬg°JMò:}6ÄJµR2p=íwr‡1C)mJC :×°TÇ5Až;ċ3‡ĉÙĦƒżƒ^DBĊŝRDx-Xiäyeà3#Fèi+d­Ĝïì%$DÁxKyÄìÉn +^ó/`ò,Ú.xˆxĈ“.xÚ4|ŭá4š^ipÉ×:³Ğğ×WôĦtż2ĠÜ4Sĵ|‘˜èco:¤óÉ@ĉ—>úl$טĦC:gf+i¤Yĉ/‰“ñ4|i˜ŒYÎOó“œüäî:Ûendstream +endobj +1176 0 obj<>/XObject<<>>>>/Annots 701 0 R>>endobj +1177 0 obj<>stream +x•XÑrÛ¸}÷W܇ÎTéÈ´$ےĵí´cgÔ3µµÔfô‘ ˆ˜$”˘żïı(ÓÜôĦÙlĈ àŜsÏ9÷BßÏĤ4ÁSZÌèrNiu6I&ĝ„˙™ò?/ŸÏĉ“dI×ËIrEMŻŻOż•´:›]^%—t=_$3<]ϓIüŸbşž.°âjıÀÏ3üo$ċgw볋OW4Ò:ç³çË­3î„Öéh3zÖÖŞmyÜ| ‡œŽşBì% JuĠ”ÒIŞĞtMΈTÒfDıÑıB’nd­êéÜ˙Ú¨F’ÓŝgiŒ6´ùaŭíì|BçÓKĽÎFĵ*j²²Îü‹I>Ŝ>SJié Ë2á5ŸÒôùĝ\^R·fv=ĦJ—W||6t8äı”Â"”BĠŻ8ÍÈĵ-Ë#meŠpN¤x´CŽ™NÛJ֎FT²ŞL裭ʤĦFXÇ/r²F–r/jÇG÷j„q–TóŜêìĜáQIkĊN&´Ĉr+Ş­ ŜŸ7,•ĊްÂıT´; ÜV[ ,İüÁ ÑCGe‰’È̗¨ñ§UCĥÚ&İs+3L™:mŽ˙ĝ9²l=dçĝ³Ğäf ó˛dÎŝS=N:Ä +˙.ĞxHW@ĠíżÖZ>ÚZTŒi÷ÈÄ3Jü£qĈ %5%“Ytˆe‚>–š”óÔéÓí3#ì+ö^mfG#*œk~ı¸µH|}mvïßöċ·Ç”–*}%!Ä/Á+ë¨Ržé"ı>½ Ž8ŽhĠ66ž=o‚t^˙k]h+O °P8 öòpV‡ĝ(Ħ/ 4…h,„&ßgäŬ&ä/ÍàY—mŻhQK™˙ì¨Ñœq µí¤ÎĝAğŻ^(*ëÊ:uRàë·ïĝ'9œñGıˆ-êï{³‘e@ÖÂiÚşä\!p´Ñ)˙’CAXŽ[ >Ä1I’à3=πNéfì`3ƒF74…˙ċàä2™ŜàLpsÉĵžÎ’eBżjàZ³ŝÑ%Á.èĞŞ3}°tóâñŝ=³Y2›Lħ× Êğ =×eİ †…êĝQ:lkİjÓ˘3mÔNĠ˘¤_ż<Ŝ><%î‡ .ĜıWşµ0,U§e›!ۃryx†÷XñĜÛ²3ŒÂ–ÊÒ˜1Y ž×JÏ£ôkȤ“9èÙȔ—ŜgŠcÓż-§àÏ|Ÿ5”°=ҋJ a2~Ô×Û +62ÈŠàı…ux€™ġ‚ÚĵîŒn‚”HŝİCÒ'ݳ}ïĵ™ISYĈ ˆ×Ö "xœ5S9H%kĝ÷dW 5jÛ:ħċ>ÓâŒÚİTĝòdsżÀja­Ĵ09wŽxìı€‚ĥˆ´Ô¨‰ÔóÑx ,ĦÛÒêññA$a *_Àŭı B;ƒĤ‚ó°QkA/ñĤz$Ûú×CïêĊŒvL'ì×ቈPjĴŜK38}3zZÇ'Ŝl4rGŻ8Z'ê‰&o/Ù`TRÙ1÷äLKˆ›Ş Œ ġÓgŞġaóĦÉĦ€ĠÛ û3V˜’¸ÓĊúĜ–Ûí°Î…*ĝşIď†BôÙÄfÖ-´…nKpÈ4N|"N+–ŸŞĦch?'ô4 ċmíU*Jċ|/ !r|à@ÇPT³Àšr1ż‰ÇÈĤD]PJ°îċË×ĠÓgÖuBŽbä(x­Qîq jÇdÏ\íÚƒq×jfħ´Ħ(C´ĴmQœ)àu/ċyXÙiĤҙ,½ †´µlˆ“ĞÜU‹À•gî²ġۂŬĈ1ÀÔ¨Ĉ1aó˜ ›§:86\ôqu2Rŝµ‡+żß{zó{´Ùžz—00èŭ0rĤ9Ĉ7ï ï҈w”ü +ħ3Ûz´dùv”:([ ÊÔ +Êh‘Ìv#ż`ˆ•£]1<3ƒùäÊà5]óà;ÊÈĠÄlÂĤ$é›Ŝtö <g*<ˆiƒĈBağf ËÂ`ke¤šżÈ*…0ˆcš,e'²)€B2óŒCaÑŻyĥçİĉG^]ÖµÊ0í#ÔH×Ŝġ%ì;#X ¨3€ïRyÜ P F^dŒI•mĉí%°8•=D–!&§|êXRYYî ìçj•Şş ] +†™g$‘<€Áê3ê,}oRíšš-ßb•´Ô8–ğí^ôèüÑ†Š mĦ˘_äŭÀú1‡ŬĵŻ~65Ñŝ,#rßÓ0Žì•|% ¨ŭ5,íˆnZsPÛ­p żż'˜à°c”}'HVF–ş‰ù5œŒ™"ĥHÔ'“öĠi4]ĵžèêv˜è]¸,•ŝq<‡ïj×ëà€½ġʵwìd¨³+ VŻÔšC´_•“ ĝq*Â4È“+6Xû…ŸÎüv€šb9)•ÇĊßsOÀŬ0ݍĥŬĤĤŞĦÁ-á_Fħ‚!A\¸²ú{" ċ5w_Väo1a‚ûÛ4ŭ;·ÉŝR FN ĥGŜ5àîp +’¸µI°ç;͑ŭ#|1ğhĊĦq ˆ8x<;%·@˘6ĝ³şùÏŭ‹/9×Ô9ċ4ñc2>9Ŭ÷ÖoXT?ËÖ³÷Kß²Ç\*8q2„yÁû-2µ~ó; şŭd‹aŜÏ˙Œ†/Ŝ‚w;¤}NAwßÌBŸ–ñ5½Â·ËKš/–É|~ÍÓŭêöñŝ†Ĝ1ċ‡Kż'0ù|ŠŻUxÉùb†oEŝŸÛÀĠâ*Y̗ĝjË Ŝí~}öÛِ°ÉFendstream +endobj +1178 0 obj<>/XObject<<>>>>>>endobj +1179 0 obj<>stream +xXkoÛÊŭî_1uQÔlÚzXEaÇö­k;”ĤôeE.͍I.—Œ˘ß3³\JĤŬĤm‚8ó<çÌĴ;ŝh:¤Ñ„ââè"ş ËÑ?dz)~ñŻÒ”ʍù4ġŻ_/ÎïĈ42e“Ù”– ÁÎĊ-“eĤ)΍.kŞ3]Rbµ#EşŝúâjġĊéêWûlKxù­Ñ>mfâ _ëÊèïxŻQİ +M6•Ï ^ù££œßú°üvtAgƒQ4„×WfSG|ġ …Ë£ˆĝœ 'јŸì‡Û²Ôq oVœ >–ËòWeBNĞ*ÎPj+ŝĝÖŻVi“Ġ*ê¸OıŜgäRu…eê/Ä;âĵİßäçġ{—oR;•*˘M?u?ŝÜÚOñOw÷żDŸž~ġÜĜÜĆùĵFtÏj>êŸĥ:À´÷ÊN˘A‘Ĥ>Ñóğ9  G)„é’ÎĈc™Á0šEƒˆ>Ú25ÏMjĵ/]]51vbŬÚê…Dgħ—a´cÈ*,*W03“ĤşÒL°5^ÔbEŸn>J ŠŝÄnÍxYA™êLĴƒiİš}Aè;)ŭ¤œC( Á|µÛHĴx”‰Éš²$°ëF`p~·CälÍx.!ŝĠp2éŜç&7;Áß~ŝpÛħ7ħâ}cÓÎQĦâ̔Şq5İ8†R×îòz6DCĉûœ1>*9z(Z¨bíĞı5yN*w^à‰éµUi[ï—mÎa4ĵàñ„ôF~”a.TĤŜQaĦALÍB9ž ë +ÒUŻċBÁIt1ılûÎC‹˙QŞ·ècÁŒ“éV¨Ñ4tŒ' Ö@^6äX~È.Oƒˆ$GʐĊšñÂâJ‰^Ğ“à`ôxoœkdLo3 ¨2Â0Ò°·)Ŭ–MŠtcÀ{]Ù<ǛÀĴ;ĴTŽ-öÙ +<–-@°ĈÈròeqûù5N$²e{mµŬ5¤m¨0*A\g‰U+Î1Ó½ŬÎĠâŻWŸo{¤a|í 8!•ÀúÎÀÍÓĠŭcßwğïéöóßߤċħŒs|5G’ßèô]UĈkäcñp-CrlUyW" Fğ]Ċu6Xó`·ĠqxÀ> #s-é Q˘˜ŻşîiQp(Ĝ†äQßfä^‰ZX‹R •[ñ\YfK²Í2X>{VŬ|Œèkfl +…n!:xcê›5nżBœêùlUt îĠ‰’­ éŸzš‰?4#ñËʉR€W_^ĈQ\eךÒWX˘WÂD`dġ]?[‹Ŭ1ъ#t6˘bbğÌ6y‚&şX39ĦĥR8µÔħÒÏ)w4yìü~°ĉYp}˙´-™ĦnD§2È 1a)ëfP&żrŠ6ä6fzó£Ráv,„'Z]ġy?7ĈeŬ4Á+½âĥEl=\ûB ċéŠ%ÙÑÖĝeo/üšÛñÑßÀLë$ ġÑni­bQ~S `I:¸·„b#}¨˘¨ŞH +Wı¤ŽE–ˀoµ½—YfiT4ĝ\ğh5ës­$@Î:½ŭr“p™yka#|àߞ€œĴ%ŬóË,¤”'‹CÛû F¸ +eğĴNĝÛñ& hÒñê½”<îe9Vkì>İ^éùġ}àĴ#šÏ˙Îaµ)0ŝ¤>ŠPĝ‚ÜZ=ˆ;uXOh™Dž]=§Ò ż€wšpŒ=µÂ‘İĈiÔĊŸO‹ċËĠêDN˜=*çĊm'óîNİ2ÏYŭ—Ġ~İ ¸ Ğ@‡‡C̭폠XíÔj‰´08Ċá/Ñİ)à€Gß'¸îözÁÊ â…kç´ßExíoEDċ[µ;À¨£c +Ġj2HĠi­]Mö›i𛌰•úŬDöÓáŜOşı†€ĥŞàš|aĵjÏ{œÑùŬ¤ÚóËh6DMgÑĜğx|ZŜŝÎ?~ıpÒêÎÙll%d=.۔f­·é NF4Á˙Ӊl[‹Ğ‡ë+Ží¸H76nx_’Ù)ŭLːوÎĤCYL˙ż }<áÌïĥÓ[]ŭíè_Šq endstream +endobj +1180 0 obj<>/XObject<<>>>>>>endobj +1181 0 obj<>stream +xWkoÛFüî_ħ `Ä$F˘=ôCœ6­ÔMmÁ‘<Š“<…w ßÙ;R”)·)Ú$òğ³3³ĞÏgSšàoJːf Š‹³I0Ħ§ËI° ùj‰Ï!ŝW’R÷bĥ^Oz1]†ż˜ONŸ_mΞĵœÓtJ›—/VKÚ$„‹'ÚÄW2Ġ¸1Q&QċŽ2ŬĠë2Uğï*- +~ħŻtŞriF¤,)Cµ‘ióZ#Ûöğ*א(§› Ċı’5—›OgOgAˆğ/TħÏed3i­÷˜ ].‚9Żó§µgà+èFÚwFV?I{]Ĥ`}ÁIš˘ê‹ĴĝÛNş9Èêħ9ÄNıŽ…Uş ègŬH,ñĈA„fŻK„–hi¨Ô–2ñ….„aä^TÂÊӃ)U2OF¤ËüÎĊÔFéñe˘’m2ÀWHQĴvpğÏğC›°i[İĜʄs‹$—C•'Ç'Ş’ħĠĠŬPöċ8‚òíó_^é.éÍë–#j2gL+B,Dyç³âҗq^'|˙.eFf —¤œtzo—Ŝ dêŭ^WÖŬ­bş%*MeĊ´á ¨ĉ~òr}àù8\yM`„Á4à-‰n ‰-ı8èc‰Œ;nÀì6ìíd\.ïwıŽDŝˆĈL*ÎÑQÀÚÁ3ÏÀTçınħíG.ż +Àöò™żxBk/Íq8÷!ç${a3úžĥĝ×ÁàĜŬe2ñòíöüŬv[@í~ĝ@zĴ j“ÈTÔıÔ2'ġŜO|íù?°=lD($XÍïŒ("áċĥŬ2ĊùŬ!ŞtënÎù €Q}QñPg¸' ~ZÔV(G,rÜyéĵgц×íè:;];IÔÎĴ@BÄ­€_&]ĜÈ-˙XÔĈ~p³·Ò­uš$³—ħ“ĥGEˆ*FŠ(—Žfa„“)e°š9G{ŸßĈ9… QïÖ S;d`WĠΏc ԅ2vö‹BSNrX •-§ĵµ ˘? à#i)KÈmÍzüï/bèĉ× ']y׏$û£KÙĊÇöN̙àƒgM§§ñ!çu—sĞа×Ĵ˙żè +ÛZ|µ\œËç‘/óà"Ğ@2+Ğ€ŜşŞg‚ŬıAòÈ>/XObject<<>>>>>>endobj +1183 0 obj<>stream +xXïoÛFŭîżb /r‰ħGvÇIÑ ħğ(×+Ş X‘+ic’Ëî.# èofı”ʤĊáùArgĉ͛7oŭûÉ9á×9]ÎèٜòêäĠâäé/èüœk<™_]Ò˘ ³ìììŒùéù,ğÊfÙEFż˜ş°;O/ŝC÷ÎMİéƒmódñ'\ô'Lgóìgœŝ²Ġ5)j½v´6Î*íĈ“İÉÖG§M(l5^ÀyüjöúzAĈSî´ +ş˜ò¤^°eĦ§Ñ‡ \ []·£ Ç>£éù³lĈGݵĥMh„7NU~DŞ.ht§ÖÚb”ÑbнĤÂ8ëŒĈñx9Gı­ƒƒ§)KZiŞ´Ûè˙ [I³´ı*Qż"-ckOçáe˜ż\.wŻċ²‰hùċ’ëĞUßĵŝ½E4†ĊÔ8¨So$Ne2äÇkg+Ò*ßfôĞmÁ%ÑZ#l°ŒŸ|ŭÛĤ´+U~"ÛÉlÔ8íjÊŜùöÚ3H~kċ÷FÔämŻko‚ÁÇ? ‚×v$ítè ÇŻ”İ~#Jc‚*İÔ!pÓ_*o-ŝĦê=ÙµäÚĦ“ú›u!‰­-„$Ü#Ä@Û"Ĥ£:ö\ĊZ;]çÚgôvM{Û˘o}³¤ëµuı½ùèċ p–ĤöŒ”b—Ŭ^߁—`MĦQĞhçLÀù9˘{Žĥà0$aÔúħx_KÖŭ8=lùÖÔzB|gé:[Ò½ŞuIàOïwÖ‘¨^— ñ…§YDPµÊ0‘ütPƒäÀ5P@KâT@àĴޘnGPd8ó˙ó„Vm ÂÒçÚ†Ï µŬIÌÜVM‹žr˘NŻĴ Ràú‘Ĥ<#N˙ó˙׌qEɨŝĤ42Öѭɝġv¨{ìéŽ4=’p`ADƒĈïì†G)ß-èµešŽEê ¨á[ÈKĜŞê½3•r{Â7ĝM2àúm>8ġ€`”œ Fŝ‚0ħ~!œÎžÓô9˜ĊícÍSv ÍäzÖGhs]ZU Ċ"Üô?ĠÒĊVa”ży ”wT8ŬY°Ĥìq‹hG"'y“€”ħĥċÎ4ĦÑaj˜L—NüÀŞäÒÔ' +uû—™Ò8á mún:I‡ ˆ„§™£é hE+HmXa"! 7ıF5ِluFùĴŠTEê"Ô:bPcxÖX–}K&”qee ‰ÂŭĈò3ĦĤ€ šÌÜŭ ġAĞ‚súÒúáĵ>ûŞïÍşË]÷ŞZħ2îÍx$‰.O1e˘ÍxÑGH_†G?˘2Ĵ´r8pôä¨FNç€jqdLÎKŭ_ŒG—KÏ!e âk™Òĝŝ tG<İ +ğµi°Ĝ°jÂòÉDD,cpZĵ.:P‡M{n N’ŝîcác|+ÒnËrO_UiŠèNÑÄĊ½”Dz oJ‘$>^àċŝXë·5°ÙÀ­4Ôc)pËË×ÒNóiŒSAċûG·hŒ=?ŝË +òΣÊBŬá‡Úùw†§ˆŽj"`‡·eÁH­`× §ú‘—HĴ7O`%`— מ|£s³6¨´cä(6ŻQa;°T`[͚—m§ÓÇ^ïï,áŭ÷}`ò$#-îç.4 –)ÙϤ*9v6*1#xğ ëcôm#ĦÛ`~(GİcğĤċi×ON (R1Ä _UĜ²Ş˜ÚAVâ5jz9]>/ivP™.PĴ¤u8ĵóϘpħbSöb,ž1ġAÓ¤ZñÀRAòj}§Ĉ´gL˙0Ò Ítï¸÷X…\SÚ÷Md="×İ^Ay5¨‚%ĥÒħ)p2rOż.ApXMµ~ìŻĞÒû}żÉ Ĝ€Ì^h)v÷†ġlá–|⍗­ßH_ŽÖ÷ѧ­>/XObject<<>>>>>>endobj +1185 0 obj<>stream +xX]oÛF|÷Ż8(ê-Éĥ>Ü'§nZáÖ*Œ" +‚y/"yÌŬQŠŝ}g÷H‰˘óN…ĵŬ™Ŭ󷋑â÷HLÇâz"âüb Ċġ|Ž?ofSü9Ĉ—Ub}ñ~qqġáFŒFbħĤg'³İX$χb_L%ö:ËÄZ‰…P…·‡X+”ŒSQ9eûÂĴĊ³5kİgéÓH<Ż„O•ˆMáñŠ£'|ޝĜރX^fzвƒFĴÔğĊ׋ÁP F×Ñħ/ğċrhfï–Ë2œŠï(P!sµ|×§“ ‘¨LĠQèV|Ύ˘[ġ­ÒV%œeDg<‰n(ΧßkÏIZµÑe •hoìg~ò꤆•ÛëŭßOOżÓI'Ĝ.ĊerÒĊĉµ?‘JŒó"C8d ~ùò’QP]ˆZYü„¤ÛÒÙı„;àIċNżƒyiĴ—…™rÂ!#äb8mQ‚ÛzS +Ĵ‹²†œ„'œ—Ö‹\UÔ&áœêvıçĉrKIħ’ñĥ*)CʋIRR°ÈJ%*Y벸 QħBıBb]­×À™´*7ğ†ŽÌÄ2ƒöĴ’ÉÀ_Ş“Br°‘säċ𠕇ûE͎ĥdjEžĜì ‰ zSü¨WÙë‹^Ħ|jLBߞÀëĦìDôpŜĈÊÜġ Ú,QÖq…tätâ:”>ÌÇAğNI‹ĉ£.¤ˆÔ?;=żŝ)JéÜŜĜd£=İvB´‘ZK9g ‘ş´?Ĉ‡$—7§à +2³¸Ĵ+ ύ*ĉ·"Î4:ŭüíÛ·oÇİŠY›oP˘Aĥ„…€'§”è!”IŸôH™ħĠ+ˆU̎€lùáwĤË˙ÏÇû§€F·ĝ 8VÓÔ>  Ĉ·bp=&Ñ# öUĉ _İ3×Ü1d†;™Ż$¨IÔŞÚ@ĝR;<ĴÏïôwÍB !$”sEgĞ R˘A,ÊʘÑ!tÔè*Ȁt—I•s×Blı)"ġ]…3cĥĴê2e-ŻÈ‚ÒZŽˆBÈïƒUÄħrœ&L˙i!€ìŽœr+˘uyŝµFĉ¤³š>wŞ™0p˙àtÇsז£}”[¸ÓYÁ*1ßéì0JèûRn£â(êN D¨ĉ ”NÚ§’]\˘áV¨Rżëì;™Aʁĵ?'|ġa~ YhĊÑ8šEJ­{IĵğE§{Âo˘!Ċ>͋⯄Ĥäŝ­A`ŽğĠàóŸÈ$4p£ä£êá„$;Œ–H,` 5#Êɞ8ħÌàĴf/\İb½Ö€Ñ§ÖT›”mċĴûJ ġaàZ†b<ŽĈCÒxÍylÊĥq&FCYmĉSLD àè@¨Ä7̝ĦżÄ/îŒAĠr™š\Ĉ}`/Ñ.FŸÓtòDÈ Öİhb ” +@ĦxVp.uáñĵCŞÀp ^ñŭ‰C.e¤ •¨âKaü¸šqĵ˘´ÔŠĠ¤ ŽV*40@½ Ñ݃p>wÒÛbúó¸ĜôĦOT€ò(#:Ž6N•5µbmMŝ6ó°´ Ŝò!à|MíUSÄgĽÜÁ³ä +EĥH86­ô\/_w'VïTÄ…w]jŞ,!‘ Ú^z×ëäŒyĥ£,lôvŬ˜Çw!óµ*3Ç^,Ô M,ġN4Ò,s¨2ĴĤǙˆ.Dç5=ĝr\Á tHh8†fÁóİÊà 7uŬ´Tˆ˜ˆ<ÌN™„nĉLÓ}@‰yü ìpJCäé4”!hf)aUpTÖËŜjĴµ²ıvôA¸gÖ×U–uÂ×ùœ4EHGaŸ89Ûy:XuŜĥìš[§î6lïä&”B½œÑ ĜGDı3UĝM%Rh§ Uċ²¨0'ÌPëîÀlKȉV(šNŒQPĦ\•C5Ğ*ÀÓ O,zEÛ4ıbpzA5$P](ueqĞP,öŻ8&'¤żŸßöERaÚg@Âd‹F]p`z脗›cÉêïPt˙Žs„hïÇÈ!<f,6XÉ H헆çóCk·ĤĈc˜Ĥ íG +ú4˙BNätİWJ‚ĤÀމG| w_–™gÁƒô2,¤†z+ÌiİíÔÜ{7ÚfŸN‹í ß +>âVP/ĥp°Ĝž #àíTĥ&Ìë› }ĜeM{7kî“ĵËʲÄĉËk ùN¸şà’;Ëğ…µ‚‰²²%<œ"Ĉ•ĊÈ÷`Ulá}E§ħ‘ħŝX$¤3_ÂĠàWÜb­Éij,TĈÂ6ċY‡MżáÑĉÁVïKġ ZŝèxËrë{tY²B!,ZdĜ²(›Ĝ }ÜlŽĵü‡Y’˘ħÍáĈÄğ@“ßÈĴ:ÁÏ­(…µ] ¸ú_´GûÊÂ1S‚W˘K¸xôL"ùŽ E3şWfġÒ4šàG³küŒá&šLniu~ı˙ĝŝžî_İ£×1­És(żAóÊ`:ĉÛH½l ²Ö›Êwz,p{Żxv¸;ñR/íïz5ŭ‡4˘/—7ӛh:™á‡$Hb6˘Xż-.ŝşĝd„¨lendstream +endobj +1186 0 obj<>/XObject<<>>>>>>endobj +1187 0 obj<>stream +x}WïoÛ6ŭžżâ``[ Číĝg€~H›°8YĦĉ! %:ĉ,‘ŞHĊñżw¤äjZ×ĥ\›âŬ½÷îŬùëِĝ;¤Ùˆ.§”äg1 É`(f4žÏ~„Wİhbò½/†ƒİ¸ì~ñ~uvñiL!­ĥ4‰ĊhDÓùDLĤsZ„Hƒ­’7fû$£á@VϋġI“ħ^'ŠüNzZè‹-÷ÎKŻ­!ݲÌQ^İ=iGİ=˜ÌÊT›g’T”vĞ3¤\ڜäÛĠßgê/ĊA߸Ì(Óf/è°S~§JDÁĝ'_É,;âE‰têœlÙ:Ž9‹à‰5[ŭ\•1'í\…ÓÒÑQyĜoEĴÌŜ żóXM.÷ÊukzB +f˙OptN0¤D!_kBdIıôž3ĥ´QÂJċlö˘ÒżD“Àh*Ĉ\r„wt‚Wnù'ó¤T?+çQN‰ç kRe+‡S[[™•™/à +—ıJÏ;ĥj4xy3£ÒšŽ:.î~Áġ•É”sÔs*İJíô.„í…€=äR‹h ÏB:w°eêpĝ¨\Öoœb9€qĤŭòç?V·÷Ká_ŭú-“ĜC×!šË(~ÚİèéBÈ46NŬŠ£­Êċêt”RAu€Ĉn9 §ÈĴUGeMAsœ¤ŒÌ)w‚T™$ ô409VöŻ×KÀÈgWCX› +Ü9˘ù­|xžÙk„h_˙˘Lè#cË<¨½T_+]âĤÍħ“ Ĝ/)ɔ,û^½úoĦ˘ĈÀIGb“Ĥƒs h›çĉ`‰Ò&É §•\…\ı׀nxß4ïS”ş{:Éıİ‚Ñ D?ċ•óOĴ°…àúċŠĞ7×+p~²ç–1İôĥ<6Aϛsw×ËXÈĊ§EmRŭÚú£…˜_ŽÄ\ŒÄTm`4Ħyƒ|ßoׂc[ Ë-ԁ[çmAıB%z{ ^e•ô;T£/3½Gu€ĞÌlŭĜpeî—Ĥ¨1ÄÀIt+ìh)ħU–6‘âí|a. C:Ì9 UŝKkÁó$òŠÍŝx÷n`o™e‡e…"_|× ‹ıĞ]UĥñßQi óà Ú<ÚT ôLN– ÏC4rŠŭA)C_“à ‘0ƒHĊ¤Ĥq8˜`ĥLq÷ĴĦñÁz~PMtùĈ>WèÁ “/ŠG*SG{—úĴ–†ò +µ~ËúßIÌâÉ­Ĵ2 <ƒ˘ Œž5ŝü´ÄëwÁ]Ô‹Ñi0ò`))êı)z;aŭw¸êñeÁeú‘ĥġš5fdÄÍcôĥ-WÔʂ´÷÷qéµĝx×Aù˙Ù=ĠÓ£/^AÍ;ĞÑşi)™ìŬÖħ(&ĝ7ı;ácy3Ê ġŞş›@„ˆw¨naİĴL\XFÉĠz}ĈxèpN{’݈]uú?#m7/ÚV8ca8^5Vv°Ní0êĊ¤o ÎïĴó˙™Vëá¤f%tj¨Û)OUĦÄgÇì[ĝ>L°ĜöâZF ïD­‰# aAE…ÖZ‰äN…ĦL°–Žçm£Ş·µÓ(Ċu +ë%,žaĠŒĈ…/ +½cZ´Fì9ğŝFn˘HSÛI'ÈÌë\]°%b, É0]t4ħ°ŝĦ˘°†Ÿ†+1*ĴoEí£ħêÖnCaÉäXíU˜ĦÙêĴqÄxoÜà[èĜô|†_Ö^•N“ëzQ&Hc%ġäk-2Ŭ8öô”Zċ°f—Ò¸-\蔇²kްµò"Ìü·6ƒ˙|é7L]N𑂁µtsw}ğ|úpż\}˙•WNşjŻ +76—Hñ§h³:3üŒ +ĞùÏôÈk8zñİ™^£‘ †ÄB âò`ÓÌà}3ıîêaŸœ7so<ó9˙ȚŠé"Ĵ/×wïŻy’ŝ²èĈ&ïda­àgûCl<ƒù%ġg#üKßÔS˜ómŭÀı5ΗU–Ú+zTŜó|Fż|ĥ2ç·ÁÔ%t_<žĊ żóÂóôquöÛÙ?üĥŻÈendstream +endobj +1188 0 obj<>/XObject<<>>>>>>endobj +1189 0 obj<>stream +xW]OÜH|çW´"EÙHĴa² N‚@î¸; ÇĦ“öeÖ ĥǙ³ñŭúОñc8]Ä ëéîêŞêö÷íoFGs:XPRîœĊ;{_i6£8£ù<šïÏhqü)ú´8Ĥ8ŭhŸâdçʒ¨kYêm„%mԃŞDQ´$—k#SZ·ôğÎ+úbijëŒ ‘Ë%-Eı¸*JUJ8LUIѤx)—FRĤÍÇĝÛÎtŸĤ³ƒhŽĜ“Z['rmÄwö,ş,§]šÓùQt|ཉ/è$<ĥ-fB1âℒŜëR¨Š>ëÊ]ÒĵóY k+ÉÈB8äá4)‡_™4üż$ÙZ&*S •ÏĤ\ ×*+§á”8ä e— G‰¨¨İRi™Š–Wg”úĝ½ÊRm”öñîU•êë˜–Ò—ôJy÷L$MŭúÉĠÇÈKΊuƒmĤñşĤ›ċŜœî…İ;bïÒ9Ĵ°Wár_£‡ÁOV•ŞbÁQÑÙ]šÌµM’ÜkmPꕊBƒŒ ?`÷¸}ħĤRT-ĠRƒ}Üoĝ[‡ġG’5ĵŜ…ݐîĜ²¤’B +(ÂʌO@KÛAd²-\­D^öĥkş™û^ùÀbjr‰ĦżÌ ‡À)蔵Ï]$•6}=@F9% +ġO`“Ş ·2üÏÂcT™P*ÁYĞ W#ż7pïğ +.d #A–ždĤİ<²à^EHBVOÊèŞÄQ"}˘šoÖĝ‘&NÑY-pÏÜBFëف|ËEMÛJ”xƒÇRĦE*ÖègĦÖÖÙĦÄıWɳŒšZW]BŒ"qğ|ë0Ĉ‹Ġħ Kî´Ëƒġa €OáW)ZŞd0l ™CïÒ b fˆj=ÎüàȘJñ07öŽžœ…Ĉ4 +Ï, _ŠIÌġrrx—`{Ê_֜(f_[^7Aħ ĝu`àoŸOVĞûËëëxµú…Ŝ&p}CַZğ÷ĞUĝq0_­X6êĦëÑÖ,ı%ˆÇšïÓ\-àê5³%˘ŸÎuœİLrŭ"Ó7òBOԓôóĊ´šN‹žô­n`-v ­„2PP0o3LQ~mÛ"v˙&MŠ…ĉîŽxğ%7îw+’•IÓo?ƒV€Ğ˘[(†(îR?˜‡›‡—XĜ|°qĵœF>K :çÌ1àFé1G–Ÿïn/żğ \;+x{ïŝy3 {X)ğ +ÇÈĈhêK€<$y*Ácè÷Ġž&Ĝìöĝöİpï*’ú}ĊÏlĠ6P Ka2żkĵĝ„b*úq8eŠĝÀ£×Wás²Á‡ ÔŜ£ŬX8úŜ—nlÍGÑŝñ>cçÑbñ‰×sÚÙ)v\ŭ DĊĉš4ĵ‹ô_pÓí+Ó£9vÓÉlGóˆ?1ö¤Kìòl8ü-u‚]ÖùïŭVc`´zˆĊ;?'uxtáKÚz|À—.❿vŝ\İ9Jendstream +endobj +1190 0 obj<>/XObject<<>>>>>>endobj +1191 0 obj<>stream +xmT]O0|ïŻĜ·+¤M)Màò!ñp…£9Ħ“xq’Mkˆ`;ôúïoì´GĠ;5•{wggvìALcübJ&t>£B Ĉј.â$Jiš&xŸào˜ŞÁ<Œî§ǔUH™ e%!|<ĤĴŠÂIŬ Î²Ħµ°ÈúèĜ:.IZjÙ(éüÇFşµlÈ­™j‰5KşÂ—p!óBü”5ŻĜžD'ÙÛ`Lg“Y4Ü0CÖR¨\cĦóɈ×eW 2°ĴÛöċ +ÑPÙİ6@½ÈĤÔK‹Œ–×ßI6N“Uy+ĴŬ”Ti£„ğ"ËĵŒÏ£‰ĵ[Ü<˙zÊ‘ûí| rûpOÏWє4jğ|d}‡£v²ĠĦ†…ğö•4µPéë²£Qĥ†t•(zVx‡¸UWSŜ9½F;ʙXXYoŭ^I %U[³âP`j¸­e!Âp°Ù‹g·˜‹²ÇêîEò,_´y_Ŭµö”öë—§äIîż!Ĥ³.”·aoÉĉ“ġíQ+Œ“…l…c¨Fâˆê­V˖‹Îĝİġ]ġ×B7ÎèşĞ|{ˆ ƒˆ`š`œıAĵ1\8(ÌJ:ċžá~œ×µÒ˜#Keż‘uŬ;éqqGOF*Í]s7û& ½Ÿno`IzpŜÑ%[iD^sß0‹b}XñˆkhŻ1,Û0ÍEñŜµ˙Ċ™œ]…C룁 2Ĵ·ġ?N;+˜ NäÂ2Y}íEÙĴŽšŝ;?xéK% }K¨Ú—/´jA)D…íOµá•´ÎlF÷éîĉˆg¸UÒsŠ/ŝH£żù5d×oä(:ïŬà(ßÎÙ>á,™à˘)‡ñ$J£ID˜Lroí‡X]¸ƒì-Ù9ñ}>kĦüëO-ÂĠb}ái2’YŠĞ EÓİ_şË?W£Şéendstream +endobj +1192 0 obj<>/XObject<<>>>>/Annots 704 0 R>>endobj +1193 0 obj<>stream +xW]oÚJ}çWŒÔ—T¤RUċ£ıÍCÛ܂”+}XìöĈö:Ŝu)˙gv×`œÜĞ*Jìٝ™3gΠϽ˜†ĝ‰i:˘³ %yo ñ„˙ÄüçÛ_½ĝlé|:‹†”Óh|ͧŒĉlOç“Y4˘ñlŠ˙Gĝ­$­Ü‹ĝbM^{1‹qIçÀĠ˘wz{A£!-Vˆi2Ñ"uĦàIrr½•Ċg}Ò[²š.K +‘<Ġ%Ŭè\¨âíâßŜ£1ŽŸ\ëÂV:ËpP°ĵŻ+™íh.ò ŭË´u”cˆ§>†ÁÙ‰á8#şŻd%Ÿke”•ôMŠTkövz;Ĥ8GFS¤Œ#WrÄNה UÔÀ¸3ŠŬ(C‰ÏİOe&…‘”‹'I!âµ°îĴÀ‡Dç¸ËŠe&iĞì†/\İu]Á?‰/BtĦúÔîošTš¤RK™z—ÒÙW¸ZӉÇc€CƒO__ÍĜ,òÉ`fç‘+şÒu‘zWPyàĵıˆjP} ğ*ÉF6ĉÄQoQ˜- +™éµ.€ċs-5´ŞtN[]=+Ĵ҅q•v) AċAİŜú²Ž#zĜÈBŝÄ}‚jŻċ£ì‡Zĉ‡›û( *pxÀ…(d‚ ĝTÇgc+Ağ˘(O†6 +o$nĞܕìżıt0>Òŭ²ğÒW)£Ğ +#Z ”#Â7İîY]£2SÒxÒgIݐ#Ĝ”;Ĵ­íŜSŸ†ä/‘ƒîi™‰)#P˙™#5TVz`ĦL'gcÁùÔäMWu–‘Ë ž>~Ñ%žşhƒôü­\-6§T€ühħуD ËéMâóËώĦÜüHš !pî!ğĠôFàeiœ8ÀŬ˜›­6L9oöŽ.Ñù*ĠîċÁNŝßOCßßş:j0hĉĴGĠ˘„Ħï'W|Âדğ–Ċ*JĴ\ÖĵD—;Ž›µ²lß39ĵ§ ZŒ„ĵk€Ö.*JÉ:è`ġ(i`CÌ4sG›‹–’R¤ÓIMÈ4êùŸ)ún?jiViŸ£p’84ı›$ŝ‚_[ħ#ċU"hS|ÇÉvTÁġZĝ ½‰€^{:˘Î +mœƒ+â§PËLD7^V…NVĦC‹V‡p83ĴÔĈ0mZÊҌږŒ%ëĜL AÇú\ŞŸ>Öĉ&'v!ĝ.ÙçŞ@ŻBÑ TƒxĈœ^­T˘àc‡ÙR–˜$ nTz Ħà)ǐÔ—ÂîċïêQXÓG?&YŬŒğVË5:9bW`È˙ıg&U+ñp6uŭဃG@6ħ ¤LċĞKĜğG{‘o†:xĠï b4*PŠ +§ÑNèùêÇuĤ—"û10PFÎ=´ŠÉ—J˜atnŒ´ïĝÖÓÛ!]4#{ìĠ‚•çWIï}lû!ĥ¨IH!4ċ{ÚÉ=EŽ- n Ç ‚[ĉ"‚²ïl/•yA¨š#[#h•\+§ĴŒÑiŻîÎɗžİفË}'c>òp÷eì+ˆí%êQi‘B^0e½4fƒŠBN‰wlBpŬÑqX +ËÍ>07>CËWƒw;;^èMĵô҆9Ï}_IlڀÒñwLl¤ħ…9d‰°:³ŝ`g‘0Oı“R–ŠbçŸa­†ÊbiÁ"t]4cŸ–aĝĴ’J½²ï7^‹/Ì&ż™¸Mq·Ċ#t^0ttÀÚŝԂçÊÄ£‰ŜÎ úĊÈ/è×ú…˘5Ży1ù“/é8šNfĝ٘s ½ż{ż֓LÒendstream +endobj +1194 0 obj<>/XObject<<>>>>>>endobj +1195 0 obj<>stream +xWÛnÛ8}ÏW °Ûĥâ[l§@QäÒ yhÚEĵ(È -Q6‰tE*÷ë÷ Iيêd‹"¨m‘s9sĉÌèÇɐĝ7¤ÙˆĈSJ˓A2 ³ù Ñd>çŝ*Iı09?K&ÇŒÏ&żŜ¸\œœŜœÓpB‹NĤs|ÈZ¤o†dœ údĥ”iI7S=Z'œ2šr3RÎâY)”ĤÔhW™˘Ġ‡·‹ï°<Ħá0Xîf°üĉ‚î´m™À-·–û‹Ï—ĝA8Ú + ‚ +“Š‚j++r†–’D ÚİT8™ÑZXŝŬGr0ÄŜÔGĝ#özˆ‹rS‘÷’­ 9ıµ²´Üá‹Ò+xĵ“îòöË=iQJúQËjçoħġUeêMxàü6LÙNǝ°ĥ.–ÏCŠtM&÷Y–ĝĴ4ž(G+‰ô–"}¤ĵ2Ì?ċĵ”ÀN…Ĉ˙v 4 +³2şı’°aMhaHGf#5Y™Ö•r;Z›ĉ—Ĉ­½żvĜ8ghe!SöáÍâËġ—wôˆŸ]_Qş6VꇷżG‚mU‰0Q%t‘;.%—˜mĥc€ċ,xâr˙n)­dĈ…E<\&IÇ7G䰔=ĵe2°Ŭ_"ꑰ\`f€Ĝl*ó$Š„mµ ?˘{@ÏüQBßÀ5.Ûü +´DHÙKôĉÓò ù‰ÀĜ@b„”…^IâšX{°‰Ż‘À vf´$tUtċk¸ç5|ó…nòmĝbƒ@ßÈ×%z2Ŝä$q;ü…TKaıLİÙì:pG*ìûL¤àuLĦ¸VÖEħ{ÖşžÎ|Á£Á˜0‡Ò@8X›úÉ4“„ ÷˘\ +Ż t‰NBk^!şzUˆ’)Wĝ›B V–•l”Œzh˜’†ş=IV*d eŬ,6| Ĵq&5 ZàwĜN:D’ä5§¨ÊM!KVfŜX½ñBŠ’IĊĠBÀr­3„â@f/BĴЍP*Ġ8Ĵ5wO´à)ÄĦpà²k´3³•ĴG˜ŽĤSFó–5ɗn çĴë(ĥ K~Ë`ùà?_’ġ•óš_Ia?Ûq¸‡Ċ“P…XŞ +ħÌ;FŞÑ DJ‚İ,]X<ûŬ‹ úĊ"Z”ŬµxRİ ’ˆ‚¤mӍÑñÊ­ì‰ĥĠŻíĴ™}@'ú1ÀrLıîY0·P$½ŠlA ħËßq4˜ċ{ĝÍ\\cġ„ıvúùâêÓíŬÇäŝöš”×Àœ'ƒ”-*ò=À _‘R@#“*P°Ç“FÙNòU?;Q66˜sgä²ĈĊ _ˆ3(VFbQàz{Ûñ X|îÛ˘ĠtuÇ#°ê‘ ÊÜNí` J£˜ĤÍ,äE)ÇċX£4ŭY2RŬ‡ÑtFì°oĝçŭñy(£û§V?ƒ&g‰°íDìN§ëÊhġ÷+!J‰ñ Ĝ0š9ÚÉġTşôԋÀĴŝ{Xĵh4ŞòŻyâGÚt•BYŬó<Ô -‡m°™ìş’ĞéŜ0˜÷‹ğÛ{œñ*ÉÁòaîwlU˘Ž/Ĝ‚e/œ'¸óBĥQ)ážO§…‚Bċê"óZ‰<¤6ġjÍChïË?ï8 rFb Â0‘ĤÒòÚd;5ä“k酊³Ì!6uĠLç„9%sVŝ 3ġƒég?šöœ‰ëê³^µċ2–û@ç×ËÛI– ĜĊrIKôĴĞTú¸CÏHäx´ü‰ĤĈf†)t´šU÷Ċܚnı;Xs~{$ğfŞü×°™1+Á˘ÀNV{VÂ`³i6¨;ŒÚâé‰dÛĈ°Ŭc„óvÏÓÔŒ$Ĵaŝ0{°;Ŝ-ì'ġQŒŽ`Ô͓á9ġŠÜ(Íĝ•Ë7Ä£Ü`Vóû‡ÓÚżüPDÛÙà:Äap¸§7:o^‡â2‚8ĵRŜä5\{lìÔ÷h£|=-½Ç>âċŝôfĊr8Ċ;â|LÓż˙ŝ~¤Ż•ù>acJñ²‚½İĊĥûͅŝl„—À¸ +˙ï—À ÜÎĤs,p05Ÿ²‡‹“?NŝjYŞendstream +endobj +1196 0 obj<>/XObject<<>>>>>>endobj +1197 0 obj<>stream +xTMoÚ@½ó+Fê!4*bÜCU…|¨šĤ݇އe=Ĉ›ÚğÎî8Ô˙³kCíİB³Ŝ™yï͛yÄ0ĉO ó LĠ`!™&Q³tÎÏŝZ„<ĵ˜—Qzúbħ\ÜÍ Žas$:Î3Z•*~lK³ċϑCIÊh0y8wĠ&’Fçû˙‹›ëօrP‰_èÂ>£Ë–l•#´áT‹ +auġyqġ&–o׏ƒ1Œâi4áê˘"\úĵ_CûŒĥO˙µÚšM‰ˆÂĞ\ÀWÜ#-–_V°µĤİ!\ BYĦdNŠn3Ĝ´PVŽƒ˜ĴFĉ# Ñ@¨…eĝžÊYf*Á"U"0ûÀèÎ 7V‘×Ĉ—;d?İÛk°]Ħdá) h´zj@"Àg䃙/ôy°Şĥ…›ĵÑdMY²ZÈĊŬ{ˆg]_GÓ8âÇlÈ_FqŸÌ2KNZ—J +ò\¸ĦµpnÇ5T‰ğ4/öMĵ=†ßú˜×N8 +ô:;ÔN‘zf͖…ï•V9órî +ÔÈmÉo½X&Ôg5@°î•È08²Ċ-ßoĦa η€Q›ġ |Á¸7ìk tv„à@9ۗ ]ZbOéí?āÇä„ÚW×È=w܍=ìIÒ)~Ġ™ôO ħq˜HéŭCĝ›^8áS£žE‰šÜ;PUˆE^>–•Ĝ ¨mkbĞ/£ïŬNÙż4ónŬ GïDëÉ:äàú¨ÍŽ<Ôı5UÈôÀ#Û7ÄO/³,|xِ*ñ8ğV˨û)ô‰ŻŭuçzC“ÚĠĈRÎ9,sÔ1 +˜¸„k‚sż.ÎûÌ!4gŠ~+˜†Ĝ°ĴŽŬ÷ÄÛ!`mk
>/XObject<<>>>>/Annots 717 0 R>>endobj +1199 0 obj<>stream +xXÛrÛF}×Wté%T ĵˆÔVíƒÖŠU9ħb1ñ>e ɉ 2ˆĉßçt@@”ìRQ šKßNŸÓ?.bż˜šŜP’_Œ£1ŝÂ?bŝñ釋ÛE4§ùdM(§I<n›ŻŒž.âyÌßñ$cuÏO_ĵ:G74[Îñ3§ċ7„^ë}ĉOa²·8ŸF1Íâ[9ßÎáAĝ›‹8Zl|ÍÄ£y4mx•/š.§X›-ĝ=sšĥ1ĵYÒtK ñ2†‰%—öĉ„MwĞŭoĴN—ŻW{ßX½ŬîìżV×ïoi2ĤĠıY,i•JŠñ—dnŻÊJ;Šg=U֙bGO*ߨï<ŭêµğŝI%{SèĞĠïcMf8=¸K[™bk]*c üNŞ ÷wtoœNpבħñxŒĤ3D `-ŽèħvġrġġûĊq³k²@|ĜµÚOİMê\XŞ}âÌF{ÚÛU–jŻO&ÓÖ$Á#òŭ@xŸ#ġÖċ&$@J|ŞœJ ‡˘²ì(W蔣Şöš|)•÷‡t=˜ŻŻhk2Ñà †)ĥİJö:­R6˜ñ/GÚ+ìĦò&ĦşÀŠŻT‘ršíöÌI^b‹D—isĝ`Ŭ3è‚DD/=ĤÀYĤӈŜ#üÜqŭÚ <|÷™9ċPÙ +•Ş’ÊĉÚÂí‡TfZ!Noa éĉ–ş(Fbëu3ğ h_Uċ?݇Cdħ9KUY·ğ~½_ûŻß' ,F‹hÉl#ëÉ͂xYµ•4™*tu +çHO!_ç•)ċ`„>QŽ›_Ÿ²ŝ˙ı8š,£ĝĥKĠÏĥÒš×× +íIĤ>~÷I†âc½ÉŒGî^om“4`ĥAİíj“ârڑ;âéè+Ó]š›Âx@‚C{“ìqè…NĊRét@AŞà­Ŭ’VŽ›£Îsí† •ñD0ÀÌ@`u°¤Òĥ“—DŜÖ.̂É\İtöEœÜhÚëĴÜÖ)'l‡Ôj¸ç+Xž=Ŝż1ĉF?~üĵúĝ­ċÊŝG§nŽô°+Tb,½³uİU-1üoXƒ{ôóŠr³CN™™¤¸}·ÎĉŻéJûp˙ŭŬ‡ż^íŞ)L‚LÙffħ”ĞBí´0YèԝƒçÌNF_5BÚ™‘Nĵ·:"-*‡îE/ƒaĥfWżz{MŻÓZoaòċipĜ—3-÷ v$èâäËpwÉşÔEâŽeEÂÀ֞ŝIGí/ż•?DÛ*X„HË4Ž–.„w;ÂçW:!wwùì“iȸ—í…Êġ>üt ´îq?í…@Y1à/%{U z•ÉùÏL´­m3µƒž)4ÂFkI]݊,c½'IaħĠQD'`ÄPòzĦ2HˆWé‹B+ìŒÂêĴa%š:ē™ĤÚÎ)Sn×Ê Œ˘Î7P2fVWOëL·ĠŜÖĦúġ•@ìĴ‘r!W@{–Qfís]zÊk,€JíxşÀ•^˙Qc0,Ìŭ`^œVn›ĝ$‚/³ˆ?U{VÀör\ЉB:"³;´ëz` Ö56<Ìd0ç=w2R@İ˘½`:‡1–@°äžÏln,1MaĥZ_ á.BċL·a)¨é bˆ&xHıo·ĉÍ\ħ|z¸o¨á“‘¨V}ZTŜqGa¸¨³ŠıÉÂĚbbM TCĈXĈa`–y%תÚjŸáq.mƒ yLé€Ù=ELFĠTŠÚK+˙ŬC3ÑÀ(† ¸“`Êf 7‡g‡ô>†ÉÜ 'İ›ö€.ħWyşAyé­3ĴÓ/ËäĠ³+Tž%2òËq. +Ν /‚ + ä-ħF2ï~{˘ÊiÍ´ ĠnĈ³ 4|:b&Mîë²´ +´x†—àéF%Ï8]t´‹ši|ÒvŬhÄò1âáÛÏ8 :ß_›·ÛñÜrà "ĥy‰§—(iëd[–5ŸXÁ9”'~Ë2e˜"ÉjžŠ‘íŻ›˙†ğŞ, dKւa€Ĉz :î½M ȍİ,gHûyÊXÇE÷ƒ ½š4îċ|zkHq€ÌLuìÔCôŻ2(8ô˜Äĉ-mŬŽÏ=° chy(²&’^{‘>QkQ™ĵlâ!^žˆä2ĵ”iòäภ„!Ÿ!ËĤú°Ž§Ž¨Êú ôßüƒÂl1‹7Ë\.Ùĝ÷Ğ‹_.ŝßX‹­endstream +endobj +1200 0 obj<>/XObject<<>>>>/Annots 726 0 R>>endobj +1201 0 obj<>stream +x•X]sÚF}÷ݏ™1™1ܧR§nm×5xÒβH l,iUíʄßsw%ÄIÚ8`ÄîŜÏsϽëÎzÔĊOF!ġ‡gŬ ‹oĝ­ÇoOÏÂ^ôér8 +BJİßWĠSB3ŜO—ƒÖ>‡x’VgᰋcƒË0ħñ ŝ‰ şƒ`¸_ŒûÁ¸ħÊBƒw í]]ASĜe-)…£1„û§Ú–“t|ê—ùYçf@½ÍWv8ÑŜı +e­v{ĞìĤÄ"7"ġ‹µ%-е4”iKyĦ_U,‚:ş›Nɔy [YÓëmXSȕ, +³~•9…v£ 5\8ˆUY””ħü‰ ½{§&”J‘Ò+äÊJŞlM‘‰(Òef!}‹Ô…„V…NIdôIeħŜDȘDV½JšŞBFV;ÂéWY¸ĝun˘*íQ0fŒÁöE8Uáİ#àÛµsGVċ‰ˆĜ¨Ž´Q'Ĉl˙%şŽƒŜĠÁeĴ‘‘ÎbRVĤÁŸ%’ +wÓ?Üŝċ xkT hâ›R- +Äħ™ "=Ĥ‘$[G´ĈÓ֓œ‹3dĴ0°—o:âz>Ìü}ĠÖ g@(9‰Ŭ@Ô0dђÁ:`"ZĵŻħ=ı‡ǨَìġµsĤmt8np\˙Q¨Uµŝê^s›8 ˙>éÜò9ħoĊôçâΈĞ(Ĝ ul×Ŝí T"DC ï:Iğ+ó:E,ó[Îaú€ŒAK•ùëÙaΈıâ`5F)ĵû!ÛÙäñy˘Ô;ĈġĉU w +ô•Ċ<ü\“ŸwÈz‚)şJÏZÚ|›‰tyû‚¤ 0%GÂm F³żžèö,„à"Ğ”şJL€ĞsŬĝÊŽZħÊ`M’€S8<Ğ2mKg<1FÀÈ&ğ*É D`ŞÌÏŝ<ûoÜFìendstream +endobj +1202 0 obj<>/XObject<<>>>>/Annots 729 0 R>>endobj +1203 0 obj<>stream +xVÛnÛ8}÷W ‡8@,[²ËcÒnŠği·ñXP"m³+‰ +IĠñßï IɲmĐLòÌíœáĵ b˜à_ ‹ĤsȊÁ$Â×xÍaĥ\às‚˙ZÀ–p+}ĊôġíÓ`:§ġy4ƒîfÑÊ?ç<8½0_EÓÓÊz0~\Aĵ€ġ ϗ1ĴıƒÀ:˘áğ>¨r+wµ–ċžY‘28Hğ‡??Ŝ½Y÷30šNĠ5÷'T˘¤f*ŭħFŽ%èÈ2Ëk.ÀÔU´…­Ò`÷ĝNvï³LĠ•~™Ċ½Àʓ.5ŝŞôŒ?„…­ÔĈ˘ċêHdt£x%dÌ!F&ۋ‚áÎ\€U`rVñksî-´È‘wœJÒ8NùF4­”½òĞwauYċŭnĴŒ…ÍĈ +3’sV½éñÛ\È'ñjoۄPݟEpŽ2ôa‚úG(ˆjÑ;ÁúB–q³e²4` +˜µZĤµ†Îw²yĜËl\`pêJ• c üoş–üúÒàħ­,§‚öü͔Á•żžËX|ŝN]Żı4UΎOĴ—íĵ“N4„ìÙUBU^0I<‰àcµ%F@Q#ÉRÑTŠ÷2“ +ä0’ë×ëײmĠmĉÉvu=*•˒Ä^†¸³[Ĝ 3tĤá#Ĥ^‹—u!=RXÛÍMÁ$Z·MÂéÓ3ïD4î@„Ž͐žğZŝmS=^ÑŬKġŝ ¨n/yz]fŞ(6.ğǔçh䎪†£_ħï„vG,ùöĝ!™NXЧÏϛ›PÀ^˘°°ŭ²ĵ[“Rš•;̈C˜Çnv½û3ĥVb†÷šŞf÷Ì: ìÔ À¨‚Ïe&  ÚŬğ— +Qħ­óü$ts‹‘˙G‡œĥ*ÏĠŻ”&°–Ċ++Ş\ÜşĴTHì&Ĝ™FŽ(Ŝ dîíuċÌܲR_¨”12͏ô _›‹WzĉÜò'­3pyııĴ;ĝ"Ĉ’5İhû°0]Mµ÷^ܽ˜=ñî2ç<ÊKĵ„Mċ4ܨÒwÂbäĠĦdĊfĝŽN ÛëI§Pian[ÔF"Ô*ŜÀĤĴ:hÉ/Z¸ĊìxÚ%:uĈ@r†íÏ`kùáR9NÙëT%£%–4PĤ½†›RġzuċSŠxŞ‹oú´Žž‚÷Ûv?·-+;Q_F+Yü'äÈu£U;Ñhċç˘ä™Šb9ע‰°!´RŠiĵĠ,ŜP@Ie?˜ÌYŠ£ )²HŬĊŽò@Úğ Íc&Í<2ÑŻ#>Eç‡ĜŠ(Ñnúâîx“Ŭ Lì•ÄŜf@'’ŜŞw4µŽÜ Šħ’!0&w@í¸êÎàÎñc-"œ;qàäM2_„`Vé2ZĤ8¸&ŝN{˙ëájċ†À*Ğİ·ĥsċ(ž ĵœÂh‘8̟bg‹Y´˜/½+'Ġ?փż˙REm§endstream +endobj +1204 0 obj<>/XObject<<>>>>/Annots 742 0 R>>endobj +1205 0 obj<>stream +x½WmsâF ŝÎŻ„iCfÀ` :“Üär/sIӃo{ NlŻğğ>Ž_Ik›—r7mgzɄ°Ŝ•ôHz$­˙lù0À_&Cf­7À'ôáÓÇçw­Qà ˜Òg·coV-RX´Ž–LÇ^p´çä&CoÚÈñâ WíMo½!ÍŜÑ2ƒÙ”ì5{Nçí ĠXxqYíMGŜ‚fÏɍ|XËñâ WíMfžA³çäF#XËñâ WíMnÉ^³çû§AÀÎûŸ´òŠ$1ĵ0ÄCO'ô˙´„¸ġfy½ŝ|–1e(˜N`q‚° ;i$ +0R‘úfùr$Í)d鰒îMĵ){uV`§ç9Û'ÖĝxÏ'ßQ„ ‰(KrˆòSÑ˙Ċ”)8ùú ĊIjH +íñç˙Ŝpêù3è ‰Ç˜“ċV İIêd-#ÀüĜ­<µSçĥ&[{ĦÊUçvusz¨Îb2‘C!6¨9À(Ĝ%i +ı²°–HÓB +‹vĥRKŜНDêuA€Y‘:°Ĥĥe$¸ÒP"â]b·¨>Ŭϟ!J´ ­Ò{U™F +´ A‚×ÀŒ¨?@ŻÇÎëvúÑŭT…"í£Ùµè§Éş_Ûb·Âkƒôû&Uk‘ŝqöèÇȰԉŬártä#2ġ°cvJGÏî%ƒ#L>v"4ÂGsi׉2‹Lâİċ|ñ~ùöŬŻ— £Ĥ׍VeçžĉŸŸ>ÌĞS' +ÛÀU§eÊ!/„FÍH֋ÖÛH‚8É%îŸÀ*ë­ÌaäQ’oèíBî:G­Ż{Ó¤W6çÎnCŞñ“è`0kŽquè=€Ï-hHĠςنĴ4Ì##ñßĴk”çĝFÛq_ê? ]Ŝ;˜"-mħ£ĝ4lè\“+lżaûßL‘ĈbĞÎuÏFk&$ÂŭsDNÚÛ|iÙ$ù,,áVäiş(ˆ¨yQU‰Ä€ 4ôÑğ”ü[H€Ğ0ż[áQäXwşĞÊğB*,§nŜ1é‹Ò›ĞË4SÈ0‰÷ì W•K쵁­2– ıê ?D™ZCİxhĞêgÁc„Nâ[ħö…‡.#¸?poħĝް‰ÊaGä~“c…_âßè´aĠıVq|ŬE^XĦ-ĜÔà{ÇµÊŻq·òcuó=&EäüeGC͙âBíİbKGcȓĈ*G/ÀIL]ĈïÈdÊ݃’­ŜÁh:ğ 8­k"òY]ì”á–#{\֗`ı”òP%Êŭ[†md.µHSGħ*=9TPĜš¨7¨×KŞfVCĞÎÏĞN™Dw?•˜ÊŽZż KÂĞÖQ~â@ȑĦĞĤ}˙a>Ŝ~xŒxâ* :hx^½£jh†a%e2ç>tĦÔ³'gÏ 7}s† NR'ˆEĵĠ%—ż2G ğ°W%˜-­LET~ôD~M ‘½ŽAuâĞîhÁ•a•J™J‘݈'†„µ8ÏK+MŬBêĦ˙((ò°y´R?Ñvû…ZpšĵÊ3÷Ĥybħs”Ċ™ Xä ŝĞ:żĊr  Gàp‰cĵäXNZJP1 q1Q2…ċ/Çħ’;3Dìty¤ĥW¤"É_÷Bj à êÒN"ÏMËüĥyÁGŒÁ™Qş%›)€NjxZ,˜OÏóG&ˆĤŠôGʚ’ +Ħ[÷‰´aŸÊ‹oVÔîXË3Ŭ{V7ç9ü‚>ŽvIu=ô†Ŝˆ&ŠtNñÌŜX™QaQ ˆğQĦLòµrß9{™¤ÛšŬ +[İÎÄëy\KC·:ÌÙaċcV{€6W;ƒÁ@Ġı‚§eŻj £ânY²³¸ò5­ÂZE˘˙0­ŜIüßĤ#|­Á[^ÔYÌßÌáY+jpŻÂ’*˜#IZ{ġñŜdÈï1˙´ŝǓħ7 Ĥîċgĉ“·ËÖo­ż?ÌLdendstream +endobj +1206 0 obj<>/XObject<<>>>>/Annots 745 0 R>>endobj +1207 0 obj<>stream +x½X]“Ó6}ß_qgû:‰Éǒd™Ù‡íRÚÎ, %a ÓôAħċD`KA’òï{dç@‡N;ğ$‘ĴûuÎ=Wùx1 >ŝh2¤Ñ˜Òò˘Ÿôi<½Nèj:Áë!~Ĵ¤œ°• ĝ×ë_ÂÖ'£A2Ĥ’Ĉ×Ʉ⛂f'oKôŻ’éÉ"›ġù–‰ŸĉŸ_Ó`Bó^ÇOÜ< Vû4O;ƒĞd’LĤ•U~OBgäDı·ij*íÍ߀+ â½áÎͳÎ|-ƒÀßRċĈX/´§QÚ;ò!–²\JKğµÔ”)—VÎ)½"ż–äƒ&?³GR{Ф#y›ïSo0J†l4SVĤŜĜ}ŭ×~!Ͻá Ĉžı•öÜí|áS·pĥ‹ò•pnglFĈ’ö‡wÂcײò’ĥ˘¨à„ÁQH UZêÔî7^ft˙ìöÜG(F×n¤µ½I2ċê‹Ċp<Ħs'â!”/ş)ŠÂìHŬY‰ TNڐ˭’ğçû7ıÖÔµ7œ&ƒëcQ\'iÓdi->ĊN ),yùɓüX)ä `“"QKÉ>g\~@Î-NÎ:ÇB;ċ×Ĥò”IĞĥ5Z56V­”˜r¨‹^ı„ž£`è”΍-…G˙Ĝ@&½PŠ–Óŭ‹Çóĥ˙]  ‡ ۃĠsŝÙjw(ÏwŻ˙x5˙íċkÒP)^á‘dû3ĤMïחoç/{wĤ(€Ô"8ĥç<#ۇgre?’A9WÉnXı,2ħ!çŠKrċ2IÎ„'ˆ5UÑ …`.j§Ai VnÉ'5`;şAZƒ‰ÎâjÖµ6z[ϏAıÀk8ĉ"­y}`(‚²`OBo™ŭñ xĝr#53¨ċ·Äĝ@—”'ċ` [ÀŽa脜4˙Ïĵ°~~?‹\Î:ÀEDÄĉA›B¤2àg ŭB<İħ‘ÍT8d}oŞq€ÍèUħ-ËTVĴ" ÑÁDph ÷ŭëSšçŸċ4ò&Cĝ!§fFkĵIMÁyÈä=$ʸ%ĉb ԀÍÛ²ñy"úĠì¸v[ùfĵ6 B-­°{r^ߪ twĠ&TD ™Ĵ%àomk´íÂQ÷Ԕeœd6.ßI”<-·†–á /‰9|™†¨Q‡{ÎE.|°ĊħÇİP.Fkç(·Ĥ¤µöœk71^oùÄÉ8à6Ħ9×·nf™Ñ|pƒî´6;~w{wÏġˆċ…~yì¸Bl²ÀĠ¸pàÒÓfu#£WQ­~ĝbÓg'"çcëÏô%‰4…Ît ’è=q)÷ì’,ÜAûAÑ;q3çˆeÌŬU{”¸&òúâ?K ]ß\Ĥú&t0şeééšêf#ÍĤŬ,½‘”~oÂkcW—´°v 9ìG.NX<GsO?HÌ +ŝu!÷0œÏ#>ċ“ˆ\•ÁohÑáĈşxÔ·‹†ĉ."˜?y·èhôäfN”Ÿ6**0/rĞĥÀÌd3[<úoÙ(ÌÊè9jËsl­ġ„0´.2,ƒ~Wžgqû9…Ú#zŒó-ĉùw5ùA·MìNèğµĞï—[}Q9˙­M)ŸáĉñyœŽĊ(ç‹g˜xÒs†˘îÖ +tÀ‹39oxópĜ{ôúúı@¸püÙġ„Qܲ²ÓsKÄÏĤġĜÊ7ş|÷2.ÙïXÏĜjíP­hñ°èTBŻëğ ½wb–Ÿğ ܉Ö/áws‹¨í5÷‹Eç fŝSú3oâö]ë‹nôĉDĤġD4M“éġß; ~vûâ§[ze ‹5=3iU6’<Œñ%ĈtD½É0ôž¸šà+Œñ4Ŝğ݇|ÌÏó‹ß/ŝ['X„endstream +endobj +1208 0 obj<>/XObject<<>>>>/Annots 748 0 R>>endobj +1209 0 obj<>stream +xµXmOÛHŝÎŻ!U—Jĵ÷H|I(Hċè•Tíér6ö&18Ŝœ×nàßß3ğv^LÚ½€ĈŜ™}ĉ™gĈüu⑋o:>5ÚĴN\ÇĊŝĝÓ{CÍnŸ+òÜĤÓ)ŝŠéÎ<ó{ §‰{Ĵñ“JšŸ\LNŜ]†G“9[nw;4 a—&AMi´Î>ŠlùvrÍbi­O“¤ŬcZ§j-Óì‰ôZÑ<’š2ĴXc+İııεLÑĞ…JŠ­gä oFĝŸ‘JًKuŻáĝˆ£ĉ\ &4béXwY% +DB3IIÇöqi)YôMRĤŒDf…³Ha“œË´|xşÇiĊñZ¤b%3ĴŽcJŻfN ’ù´Öš"X‹T)­ Œ\à]%Ž…*( ŞwœG~àDSżŬ!ğ „Ŭ<Ż7zN›G>QÈw + lqÎĜb+c0‰8—%V EÚxFIDLbĤUœgòÙé³%gë>˙:4ŽƒÇÀŸâùëÀŞxûÏ CŽÔÊĉS—x0ŠRd*}z Yy…Ûœhĉ3CmHW9„Eĥ„ÛRózNĈmʔDF´ÌH$á^… +ÍXfàڙ]ġİ—*CĤşÉ{ĴïƒżÇ˙U3ğ´ß¨ôa›ğ²ŝ˜Ħ4ĊÎMĤĝÍe1nOy”9•ƒòÑ +çùġœĝi•ġñŬjùN— ˆ3ôÇיİF˙€ -.í"gEĦäi*“,~˘<‰hCPÂjQĝÌ+s'J2ı€ßTSİáÌXf§(⭆E!V°Ĥ4­}şMßŝ‹Öi´éÓûTċëëÑÑè~ภħ°B 6SŜ4a-J^Ĵ²wÔŭġ¨^J"7’•¸Wi„îa[…ĉĈQˆŠ&”T™A^h³” Ŭ‰ĠLpM!“ÜèhÈûQTj% ÛÓZş'ĝbkĤ 4Ġm³16ë0Rżşŭ2ı=\ovb}ÍH~(3ĊQĦd7ÜQ¸7D‹‘Úl@uÙx†*ÉRÇ(½·Ç4dŽgjǙĞâ›A­gPç=4ä‹1ˆU™RšqÊ“ŒÀh[d›­aµŬ™¨¤ÊıÈÌvŬçĦŬosp /K£m[%çw“Àk¨ph4ä]û'alġö5Q!$ĝ?Âïċ³QG>ŠĠ:–èÍZçh=“ÁŬĠdüŝ–– R’Í$xżY¸£<·”l)2{äV9Ħs–écçFöß|˜NßävYYŒ5ÚÍ·ö +\‰° %eş2­ÔÊI¨jǎi_¸:…i“”`„ +ét&ƒ‡§S†B;šÙ=3$ĥ–ü2p;—qÜU…`GĠ€ċ ÀŒs+ħ›No‡‰MµĜa—Z’‘Ĉ‹!ÏPŒÓ< +ύ™3•ŸŻâ$…ÁıİŒ/i ħ— ÌāZœJ‚Šßħ£ġ1ì4–óA<'q¤ĈäVU£$ˆsQìqk£ÇRfĠìcd£PŽò TŻĜ/“>1qıԙYzŸ:HC”Ü+C#°§„×µóK‚×-­XĜ§n§;êş^³íĥ‡£ßkw:ƒfs|9­Ĉċ°SÙşŜ„7˜‡|!ûä{ÍN³Ûh7Ÿ­;˜úäùW1ŻvQ´Z~ÏġŬ†w1{>5.šÖEËkşÍñ¸²Q|:ğ“,ğĝîô<żYYdŠ|­Ĥ[ydñ|Ÿ%–eŞ +ĝöÉ\ħj>·ĉż‹‚‚ì2 Ŭ§?>òëϊ1Žô§ĥ0òá°=×mWvŒĦHʌ˜£îĤQĉĤyé{ÎÌÄRÒĥtĉ8ĝžÎPRĤ–?w€ïQT€¤HÍëÇÏXúî²[ˆ´×Ĉżş j÷<ß n.ô1U\wt°bĵe<êċòzÇ7SáĞëDv:í.4Ŝz 6:žœüvò7ÍĜ) endstream +endobj +1210 0 obj<>/XObject<<>>>>/Annots 751 0 R>>endobj +1211 0 obj<>stream +x…TKoÓ@çWÌħâì+~äDž‰Òҁ6öĈqj{Íz­˙Y'ĦÂê•-Żĉ›÷|óu@àĦ0à>$ċ€x„Ï<Dà?×(Ĝ:BŬ‡şÏŭġ€qâ (ñ”ÀI䅧[ëÎG˘ohF+Ä[tí‡ĝ“v† ÄÉUĦ3]Ċyİ&@^Äû!:s•ĉM]È[é„×ÊÈ"…ı4V™°(ïdÓ2*r_=Pöŭ+Ї>/XObject<<>>>>>>endobj +1213 0 obj<>stream +xWMSF½ó+ş¸UFĜ†ĊìŜ`7[Ċ!fS8•CHFÒȚĴ4£ÌHxŭïóşGFì&) +0hĤ?^ż~ŬúûhAs|-hµ¤ËkÊê£y2§Ğ›ëä?WĝĵÄ·×TȃĊ|•ÜLÜmŽ.>ż§ċœ6l]Żnh“ìÌñŸìôcİšV{ZĵKènĵ{Ö9Ŝí‚ħ[2–‚ŞSuĥùKĴ,VÑÊùċU²„S\[$ôĴŭ³Ñ;rĊx7^ı˘Ċ˘ż²\!j\yüùŽĴnwÎeìÒä:˘Zg²&ԔîiWšĴ¤Ĵ2Úĥ2eIe™|2ĦeWµÊJcqaŞÁĉŒ$Ú9/.cŒÁgŞŞ×ħ$ĤĊÀqB›Ò„h,sĥUĈ†“mİZR€Ök•ïİupX§ÂTš”Í/œGèĈĥ8wD&gÚR{ÎüÀŭċδ—pdˆ•Cè~KıƒëZ¤’U]_‰8 {ÒRÖy|hĞ=İq ŞÜIˆĴUákH&Î7pv4!áRĞg ]àJRUפ‡:ĦÎfÛyĠgg~:R˘TR­-1Ô8•QáĤYWkzdî°#fk3„̘ç.ëjä1DğĵN˜wïvA­6Ä,!SU0çupU'QŜĠ´ÖíŬŭ£<ĝïżÊs @s„´èlĈ—&dXfÀ2Ħ_ƒĉ<ŭvż~d¨ÌĥR8ĉjě0@ ~׃ppyĉ‰ ŝtvÔÄñbŭĦh7˜Ğ]Ğá}Ë ċVLÎÑcñgğo4Èàı¨“–Û„aKġÄgßeħàvOމІSà<‚ŸÀ+uaĠ8ìwİú}™X§5óÌÚCĝ^Ó ĴÛQÑU€´ż*ġ%çVèİ*†#‘¤ĥNsn;&°Ş‚#îXï¤ĞÁa×0,“ĵıNĦN/bï>ŭòż§ÓwOgOgS"FâFс ˆè8ˆÈKµ +,š@¤aŽn½ë =ŞÔTĤŬËsÑOâ€Uîjfċĥˆx.g2oH2eĵÔ³2w{BüÓÏ·÷ë¤ŭ֊ġÚA˘i&ĵr/™1Œ*ëÓë/ġ‰IUŜ&ĜKf¤Ò%½šĦ +ìeiÄŬ9ÉĴz —‹Û  xP¸Q‡dkK!Ÿ÷ÑÄÈğCڙ•şŠÖ€”z?q_+T0¸S-›žħòâóĞŝfŬOÑ‘RÒ½ëüèjöZ(ĤŻı‹Ü£PşÊ)ƒn{EDÖi ĝ5ìS>‰\Ħ1K 4*óqJôġ†> ħ>( 1ßÂ:#ލîxzZ4ĦĈĜĤR;gġ@›  >› êġVùĵâİ ٕqúÔġfÖgËM2JŽèżNŽ ™KÜ­²ò`Î žc[ÇC}áá2î“Ĥ şÂhB“ŒÉsĊÁRîĜ•Q#Ĥî„odKz&ŽB–5İÉĊúIg´j:ß8lHàĊ:,GšY‡óÌHĤ dY{¸ñĊ‰SŭMĠÍ0ŒŽûe°sċġeĵbĊ˘¨ĥZûÑFq™—¸LìTì÷âówV‰û‚xıD² ^òx1² vKktÜ18LÙ$Œ£_˜RêŞl½ÊÂÀ.äŭ:‹UP”ë´ÛNrŻ ˜(jAK $şXy¨ôŻ1ĵ £ny˘|ŭà(úµ}ĜäŭEŠÁíħ봘q8é8Ùk†rږòòÑżËÄA˜ä*nÑŸo^^µ.çñÍç˙żÜ]­’Ġġ ^ħ†żlj˙´9úċèendstream +endobj +1214 0 obj<>/XObject<<>>>>>>endobj +1215 0 obj<>stream +x­WÛnÛF}÷W ŒUIeY²óRĝÔq][m^+r)mLrîR‚|Ï I™bâĤ(Ê8/ğ;3gΜ}= +h„ÍĈt:0= Gt6š §49Ÿá~Œ˙…ĤX>Œ'ßùp5?:ù8Ħ  yŒ³Ĥç3šG„sF#š‡½{ë5ùµòdb2ž"Ğ]ö³§­-ž)ĥílÙǝñıµ-“ˆœ7IBKMj™`ğ%żËùMN]PĤR|t´Àġtûĝçí#™ìŬüËшÁép zħItŞ2µÂz1°†}y<Ş,˘öçÚld\ž¨JŒódcReq­UĦŬ°ĥ2ž'lċÉ“\ÛŽĈç. ğu&[QŒA„ŞtâüÑsìkµİ‚Y%vİ:^•ĈTÚ2óLjÑs̊6*1Qó1܄÷¨S.%6 ËĜÜ=\˙DĦÍ2zc3ĵŽÉçÊ2ŽŬôÄn_ëÒIÒˆ‡}YĠÁĥöµñİ2qçQbğÀF+í=ƒ²4Ŝ#×Ë +äĵ°HpÊ8{k ÙÚQ +$Yr$1h„”âK„Pà6–fé2êĝc2ä_ûhˆ!Í׈Ò&|ĉpe‡8 .WĦĉ¤ĝ­†ŒšÍ,6À{ó´èéĠDcíĵVÛD4^ĵëwÌËĉW+|ÎàJpÜ×ܐîġ–@^‡Ü ĥ*bp2ğ[ +J-óĴÀcwQ •xbĦ>ŠŽ]pMEĦbòÀ} e˘Du}rT|Ç"Ä ÇL2 3­#uS8gH°@ŞVÔ$¨Î¤‚efa‘ÁŞW³#Uî™PŬwT{‰ĜXô\CŬÍâÖĝµ$áĜp™ĈœĞ&AˆÄKIâpòñ‚¨ ËÎàtR•cp6œ éŞİAÖ9rċNıj×ĞX Ĉ3(Šĝsc¸‰Rœ'•.‹a0[ôT’ŻU 0ĞŬèĊğzÁ*´d.•y¤ĵ‰,DFrƒWĉı-Nö +'&TB?áàüsÁ8NKC¤ +ù…6B‘òŠĵ*XqpWN¨pm´Ù‹V£R–‰Hğ°0Kc ²ÇĴ?\AħV%˜y™8Ö Žç\Ìûc›òŸó^}ˆPe—Ñüúá|¨s=l8‹i<ÚPĜR@6W˘™+äqOĥ’PqlB$…›ˆHżY‘QÈ´óŬŭ qa8xÄvüÑ Vqkş×ŝêî·'i6OğeEkŻbôZ”‡[™KŞ ú™(/Œ,oUÀ”+œ–şĜ1éPS]/ĥĠא9fcÔŝÀöÇÍÄ+|FÜMĦ\p:c:‡BfA à3ÁzŽWµM£^ğ sѳï:VeâĦóèÑ˙2úĈglßçü*l*ŜIüŒHZÇ´5Ġ@ËáE½L:'ĥâmyj`İoMPB›Ôŭ–§QŜö~… ,wĠĴHà"zG•Ż6ƒê ù›~Ü,˜eρq:D£÷Ú^ÁĜ8Ôg×áΎ>c–À AgŭŭŭŭĵËBd­ÒİŠĠâŝ~Àhqä:ÌïÊl¸ +=RÎ+ˆ˙ë5êSê£ÏꍗhĵJ:¨p“5ĞċÊcĈ˘Ç䁿g˘I¸ƒ£ˆI翪ÍÖĠ˙PĜ\JÖ'hpƒ‘FTPÄ|ž„ĠħÛ9²i2ÊI“–€ħĴj AĞ%CúêĈ'µ3R‰'Jœĝ…-ĥçY´n×­6òşÑ)žN*G F* uŸg0ŻL&„Fž Sğágˆœ‡ˆßñŒ2Ğgäà“alì;á:Èwùp§†!d +C””‹ÈżB-ò\pĤ&U5ÑUĵHԊûê=âL8žVÑ˙|l ²ñëŽi–ŒŞġA ¤%ök˘ħ•KŜ€’Çù†$€eOöî°qIÈ0 TÓ@żJ·Ħ–%Öч*'#ş¨;{=ŭĝZôn>]U+èhxÎÙ<ĜwüuY½ÀŬUó ÷×ġ=noZŻo¨w½4+İ}Ûo­ —7Ïü·ëÍóÜİċ2xġġàîmŻŜĞ÷kß|oşóò“GióĝŭùÍUËĝpúß<:è:/ŜFHŽİñeï[Wŭöôġ•sòñĵŝġLñ“ûü”Ĥ³ú·ċċ§ĞK‚d~á!áĈ†eŠñKT—‘4³1~lG½ż“Ùd8›žc`Ĉê‹)r;?úŭèoÉ>ÔĠendstream +endobj +1216 0 obj<>/XObject<<>>>>>>endobj +1217 0 obj<>stream +x}XmOÛHŝÎŻ˜o€”¸yသN'%PNĠŞ~AŞ6ö†lqĵİwMŽÓŭĝ{f_g M%'Ĝğ;3Ï<3ó¸?†4Àż!h|Jùê`úpáj@éa§çĝQ  ôġßŭ˙ĵûĵóàĝáûÁ€úAvŽqêno÷n…CñċvloñŬôÌÙèۄ×İğ^` ŝ¸ÄWüÌĈĵüÀ˘‹şî^Rzj|Ĝù~<úúyv˙xÌK?\pèħëN9¸ ]eĴޞH/hLĤ™WÒz<öhÔ£ñ1ċşŞdneAóW²MµnĴĴyÑVŬ°ĤOv)¤BS-­…14ݵ(raĴÉèŜKèñ8ħù0ô ­DT•4¤+Rĥœ ñ“öqû`œ<ÈhbL³’´5ûA+½’•ĊOaI”÷-1Ŭµäêİİ£Ġ4—¤*w8u£ëç'ÄĵFÀlÁ¨ĠşTı² +.ñ,3şö1lĝí‚@‚ğÊ$†;ĥŜ^ ğL²Ĥi­7ߏGJfÀ‚6 +îçş,…•Î#€ŠT"iĤ·ġpÇ)1­L7RXgn ÀĤ¨Ši X·ÀÓ[ˆjù° UM3i§Ÿoîİ^NÛejÙfáÎè4;áÔOL´†pv’1ךÉÖĴ{$KO£.ԕÉCŝ9p,@ëRä’a—H3™Y`—µ”‰ß-cE‚uŸğ‚µN{J“Û( ĈËUaòhLŭÄ(œIc|ôĤ"d Ôı(ż³,ÈEmUŜ”ĵs5”y7ı4N(^DeĊ36ħ +·*k,d4öêĈÉë@8PÄH ùï½äLy³uBaRšŜ6µß›^,@#³5;Ë\Tıˆ<|A(e„ñšÉÌt'fs<"£‡Ÿ„툊Ôñ¨–ıT/ȐĴÖ2£\³”$ħş."Û"‡ÑŽ”œ­{"FǞá×0ïöç}Ÿ¨ı@GާzF¸]é:qÁò9hħtô-°Ûó˘ˆá=Ĝ#ÜFğjlëA‚>ˆBàpĵ‰qö?%\ô5sÛߞs6Ĵäэ*$·áCÑĜ•Y9tġZyè2Ê&ŝ„ zQ"½Mc€6ĉ2 2,":ȊĴÜh{.|Ŝ›ĞÉÜĉGŒìgÈì²ËĈe_Ħ­qŽ,ëіĠB‰y jitSç2"> #ôş3<}ێµ‡s}Ñì­}OŠdŽiN›%0s&TzO‡|#÷%mĤ<éç ^Ħ€½-_=”Q D^;ò!wœĠJWŭŬÌĈxÚıÀU„<­µr#<’/ŒĵRëgnM ÌDLBLJ_ġl¤Sx†^uƒÉŬ”;Ċó7êĜ—’äUR=-çş^j]Z¸½lc#ş"Ê@t[qÌl}ŠgƒÁËgvÄitâŬ½—>[M6ġ#<Œ|˘żPGÑĦ 9½ŬnÙĥ¸Ï ’=ŜÎpğÉI‘íŸ<7&˜foSw½p×KwŭÎ 3' ŭY£ífŻTwŝĉ³ _Ŭ•ÏÚʍŬSĈ],Z;Ö¸Ĝ ë| +Vx ßHĠT§´cuK‘Ĝ|3÷½ÎHÌMHĤrÓÖ9v¸Ry­!OEġğlĜšRqĤ7$˙+hÓ¨çFĴÈh&„ñʀ'1š +$§#àŜ^ +1ŸĵŒqúİÓêÙ„•&óZċËZWê_rŻSNceôÙBqcZşŠ:˙ÑÈú5ޏ{<âü@¨eAŸoğ˘(b‹1:WÀp6\L³Žĵ£Ż7wŝqwóċö÷áô·WY÷Ñ@D]èßP½„HlíÊÔ0SÎħptwtéoÀÈFĵ@L³uSA:ž²¸ò³4a3‰yœjeY:ùZ&ˆÂ­do&_Œ'ŜV€ż‘UÁ‹ è'Uĝċ^GÖ"†´B‚\Ŝ˘Ġ–†s4~ಠğxwĜĉŬ‹inAóTúhl Éıw +ŝSĠĴFPe²â£âPö +9G18̧·EäßĵŽÇ}e°›9ĵùÂżÂ$¨ĥӘ—\;}ğ Ĝ0ùRM § +k TJ– 8ĉ,jƒOe´Ħ]rÑ"Œ“ż˜Ì1 ;Hş`c˘¨gŜßݧô%͍™RáĠâWŽŝĠyxsžžeƒó1~ó[Ìŭäz:ĦÛZÇÌ9^CĦÇÙ[Ŝ׏Ëûg#üEq4ü%;ÉükžËžoEĦ˙Ž“³“ììô˙ğĠÏĝÖ§‡ƒżŝ$Œc4endstream +endobj +1218 0 obj<>/XObject<<>>>>>>endobj +1219 0 obj<>stream +xíWKÚ0ó+ĉIó ÀöĈc÷ÔZİ$d‚Ùxìí€ĥż3v‚ÙˆŞŬöRİ$gb23ßĜo&ü0Ê BħïL·7 \Áb‹ Ç(l ‰“$EÑŭR­%·İVGá#3–kœŝ Œí-î; DiQıı+¨€Ÿ¨Gœ'İŭ¤Aé6]ÍÂ>Oú4NŬ8s܍×}hY;Wĵ(ßfĞɲûfÙCÙjÄYçNĴ-gi<¤Ĝ<Î,%ġ„8Ѳ7êF™­ĉ/Ĉ‡Ñ6H0ä ž+í§ĞëŸC͸Û|5O5wPs·¤ùŠ âí€ı>pmà(l œ#`[Ú|[ò=0ÍA*ħʖJ ËĴ8à Ûs“İ·7HSŸ\QĉÖpbQUĝĤ„´P2żSêAÈ;’Ì + ˜uG.îʵÒRPŒKHƒĴ4dk·90ĵ£&Ê/şVĥì7+ŸÇíŸ÷v²ymÁ’%wOÎXːG¤Žw&|6ŒdtA~1bÔ}Ĵ¸,8¨-—Ö &fAEùĥˆÙ%ŒTG?iÜùÛİ‚í`ïÏĠڝ2†ĵȲK›µìĊµä„ó$‹R+)sŜìtÖ{G>6jÏp…[N[ŒÜq|Ÿîl1[ž1,-EXÄ´LnPC!3„é,†‰K—x%3ç7>£óÌ)DÁ"Ê4Fž[.ŸECİ‚=:żNÜeż˙=i²fäóSQ&*hHù ˆ'Ħd#ÂĴwĉżĤ¸]\óIw–êÒòÛÔŭò ûö/óyĈ—ù)Ċ Ĥ’k$Ĵ~]DΨçwh=”bŻĴëÊb-³· ŝFHtŝÔw¤x‘¨‰Ù½=,JH¨ÔTôjÈËÀîˆx]ŭÏNg,­kĦsuNóB`Yq(öÂ*˜ŜAMÊ1ÔP!rĴŠœË;5ĥÁ†µ™#6ħĊ ħHTÀ5ßĞÖ' +˘ĴNŭ\í_m· Á~Ĉ҉Œá=íÍY'ùÊĈĜ÷y"m²ö•GÂ9e^”˙²$ŭißûÊóMß>ûöt8Š“qѰŝš|œNà“V÷ĵ°0WEµGúÁĈ_IÊô¨QˆF~Cnşéğx”ZZb,Vhe°ô>/XObject<<>>>>>>endobj +1221 0 obj<>stream +xWÛn6}÷W ò²))ĥÛIÑ ½ÈzÓĈhQ} %Êâ$ş$•Ĵûġ=C‘ĥĴ¤è˘âĒ8—3sΌŝMhŒŸ -Ĥt1§ĴÓ1Í.&ĝĵĵZàsŠ_#ݽ[Îï.i2ĦU#óĞ­rÂ1­²ÓÇ]“•F7êoá”n,­{–²!WJÊu-TCµ°NZŭlñW49U:Ġà†gUU”éĈİĤ•ä4é,kÍ­[÷êËhLÉä"Â˙İ+•%[êĥÊá‘ÁƒÈwĝ#œ$Ğ\ëIħé<½äc÷I…È ŬrLżLHsJ…P•ġAşŞô³j6]8>„Ù€J˘Ħ¨%] Úz˖!)²ÎsÉwĠˆ,“ÖŞu%İ2Ú|ˆM-òEĝŒ’ŻÌİ@8²­4˘–KU'íL{Ñh#ĠĤ\ë֔Z^eġÉ'(\m’Ĉ•}·ÎÉz‹P6€odĉĝ_ÄnÑġUbĵ|aş(<ŝF£WÄÈZ?q>F×ì49*ŜŒï‰{ú2nR7{˜ˆ˘+²ÖŝÂ{öÁŭvż|$4Ŝ“D+)ÊÚT;ß9\dÜĠ)<ĉ‹İÜË2pÓÚv ‘ûŽZËmÒ]H”Ġšŭh´È3ô<-{w˙ù‘ÀD@Ë$Ii…ŜE´- ÌŞZU Aċ])8Ċğ +QrĵôaŸĠħ;/:ÀÎïiş¨÷Œ’ù8½bLfé,Gé@³ µ[ĜêAÄô ŸL霏}ìˆ#èQÔkžÍJt,ÓçU“ƒÜ´\Á.½ż] ³•Î{Bş}g@Bs‡ĞŜê ûèùz’÷¤nİn²Ès_ĉoġ–Q}Lĥ^§hm4„Bİù:À·²ĝ(VtáŜëÑ@Ż?6•^‹Êŝ‰™·ŬUHjĥÇ=­ §vğĠĈÑ[ÚIßJǰIúÚá…UîŬù¤të99IŻS”°œ#š{+ z‰•+—…h+ÏV˜O Œ`HJñ9lv¤ĞOĦÑúÛÎàÀ)³×&ƒ…ĠAÑ7 ˆm7 iͽívğ1â†r„¸¸ĝküÌ·‚´pı£Jr˙seqiàù ½iô.Š€òQ¨N¨H'_¨HlêO]ħjş’NŽħ?ŭ/ÄOO:Ŝ•’ž’yĊnû,µ é÷¤AÎŜ‚ŞÏ ž,`1ȆiÈ˘}de8w~Ge´ +LĴ?Ÿ—á„[Ċ“&š–ŸW·˙“dè} Zk ô£aŬ?x ÷"΁‘.ĵà5#g°oŒF-3äĈ]°§ŞÊ$%¸#ğF[Ħä:kyúyí‘Ì%fa…–^jÌrŻ€=}ñ†;‘Ö#;#·•Êxì#?5€Ô£ĥŬg$^#.|Ò酟è•üddó¤À1[KŸTf´Ġ…ƒ˘EżÂBÌ!tpŒ´¸ŬítĤħit@ü>/XObject<<>>>>>>endobj +1223 0 obj<>stream +xÍWËnÛFŬë+.ĵİȌ$[²\4âĉ£ˆ“Ĉ ²hş‘C‰ 9£ÌQġ÷=w”ÄH)²jmĝəû<çÜË/ƒ19Ĥë ]Î(Ğ£dDÓùe2§Ğù5~ŸàËH*·éàÉË+)-pe6żĤ4'(ÍÎïu#İY‰ßJKUİ$½~˙Òŭ›”n_‹”J…‡’l½H2­ +*ÊJ’.Ü?D½dù* ‰Ĵ)Ġ’„u>ÜŬ?„'ÒOƒ]Œ/“ ĵŸ—•U‘]A[ŬâLC ŬĴÜ­3>ûäċ4D|)•%Û×Ú4ô”ĥÒú1ó3ÒëĤԊ„ÊżcÁGĝ”~U˘–żœ²<İz‘÷"Ŝ”UE…(+j4ÙF˜& '&³äŠsJWġĝj6šÖÚÚr2ÙL*aJm݆3ujהAb ĊÙ½ħ(]B0ƒúÛP.ĝ‘wzF ą ĜÜhó™.QܔÊá„nĤCòMzĊ˙Ŝ§T‹l…îsï€NDé†-ċ²52G[{>×(@ì›ykxô‰X‰ëùżeÒeÏħ‡ÈC!ŝž_ë½Xׄ'/oh T3ĵ/.Ż|;ĈÓd–v·ĦČfüĉŬïŻŜ½y˙–MïóbrÌ\?ÑgtĉT§NÖı+#üà2ಐ=ŸCWYĦNċHĦ$JÎ`óAhò€kŜ0óÒׂ^ ۀƒ.OüüxŽöíSì~ R?îye ”`Ö +zkÊZ˜m´ùctUI3$Q5+Ŭ.W.E]眅:­+ħµžÑ¸,íÇG=ÇüÈ£'$Pû’‘âEŽĵ —‡ô8‘(ۀNF×TéLT@Ë<\´5 ĞËÌñĞ\‡•ĝФ#ì‰Á\fċZ8‚Éc-n× ÎéïhDLô€°•;ì‡xzéĈ´$hiżÑm•3>„BşšÍİó9¤V Ö‡>´ž}ŽĝމRyž60ÓóËUXi²ĦÜQ†˘ÏúZ|†•Ĥ¤ħ‰]˜}!ĵc%ŜŒ¤úZ­jİxĈÈ"uîë’Ç•8@9PçEjäNhUm{ â÷äxVkT§+(ħôŠİyµ3ìùdRr.İ1Ħ–qÜüıĴôBT½‰µ0-GèÏlu7ê ^q˜qdêíMOÖÔ°À—¨,’‘…4xÚr™9ĝcäqS +™ôFí`…ĝMŽJ6şW4rğİ˘Ĝ¸@üPUFt$}$Âljâ~1ÂŝƒYOdĜUñÈÁP°/hÉ÷c–WHşÂ62›úĈeĵ%l'Y‹˘ùíÒ4¤ÒïGF~iK#ûDğ—7Cż@ùFƒâÔhĉ·“™ˆ:/‚q` +ĉÎfà+V7˙ƒšEÑċ{guÄJè´h·CP@ó9XH@hKn™Š›ÇÍ4c1³ş!ûĞFŞŝ&1\‚}F.4ĉĤ‘².prHÀyÙüdŬxµ-tVRëœÊ\ +VіM²a7‘4î+ìW —uĴÇuĠƒôçڕ;ô×é‡k Ùèo-Â½8„pCĥħĈ˜ àĊCšß+6ĞÍüv´ıŬ +ÇZGJŸ.)Νí÷öŒg>&oM‚u܆Ù¤|—n›Ħ³hœQ&€°ŝĉ· 8”1Ú"†dg”–ß(°-vŻ0Qcöcèb„Ğ{˜Tnè‹ËĤÖ@BŒ'·:ôŭĈċyŜ´Ĉ3ĵ7Î/ñ†xÉ +öìġí3ìƒúÂÄ>˜µ<Áħi··^Ä×ĵHĉç?²p_ÍĉÉl:ÁÎG#üE:ĝcŒcɗendstream +endobj +1224 0 obj<>/XObject<<>>>>>>endobj +1225 0 obj<>stream +x½WMSF½ó+:>AĠZkËĝƒT6U6  Y+Ċ!ä0’FX i„×˙>ŻgFF°E.lkĤ?ß{Ŭüs4¤‡4ġi4Ħ(?xŸĵS:MñÚÇO))1üÑôġƒEpôùò”†C +ĜšÌĤÄ;ƒÑñUB;UÓZmñè­qhíc Î p".‘6kĈËşbŬĉ ›‡wk^l³V×{‡Ŝ(Êû +&8ê&4eGÔ*’ZSmĉ/ş"â‹(tjӉˆž ŠN·Ñ;*jĈkÏJL£u +{çx… uŠd,‹HÒŭq˜ +Y"h­0•ġZĠYl;ğ uü6a·‡ŻY­‘ż hÇZvÈŞÖ5O +>Ô1ĞÂ#o"T5~;F2ÓòšmEQ9whöıĥ-ĈżħÖÌ è–Ġ£Ù-Ï- ˙ŭ0€$•Dñl ßÍÖyUĦ‚fÍ0<úÓô +ğÔ֔ˌ²´2ñ0›_òSL'ĉÔÎM]½¤ÎQwù=’›Şù”×İ´=İş?q.ÌY›ĵnżE(ÑğäĞ1ÊM:˘ċċ•kÌWÍÍßFƒDn=2=4Ŝ‰fä7Ui âıĝžĉuŝÂ1 Ŭği5s4N?ÇlD“)ÖeìFkoKġˆq„(Şs‰ċƒwoöÙoŽ÷§>ŝ׈?ĵОNfŜdìcËċ[ƒ![ğŽŝ8ú³H%–endstream +endobj +1226 0 obj<>/XObject<<>>>>>>endobj +1227 0 obj<>stream +xWMoÛF½ûW tİHŒ$˲] mÓÂ*ŒıĴȕ´ ıËrI ú÷}3ğ”IJ.Ú"‰cQÜùzoŜÌŝu1£)ŝÌèfNWKJ‹‹i2ĊŬ,YâöżÏñŻÒ´ _,“ċùêâ§Íf´ÚÀÔòö†VÁÌtJĞôòqC×^ٚĵ*֊jGWš”%ë´6ÎŝúZUuSŽİŜi|Ò5˙B£²Ò]U:£BùZW#Úĉn­rrœ4x·X'ݳ˜ŝ°úv1Éì*™#ŒËÑAûQBÏâxoò<ßİW¸'Ÿ›í&•½":µĠä^uEn+*]­mmà'¸uċö^WΠ&ÖĠtŒnàxp(Ħ?ĵĈIİT•*4Ħ½İw”ÂҘ”' +%ĦĠ{G;çkO_/÷;-áÇAÜîÍ +Ŭ]“Ğèi5ŒgR篸¨\B|ԔğıĝfmQĜ5r” +KgJ Œ¤tŒRWĈerÄ`3Bµkcŝ

)¤¤tŜ›5‚AjÜ9fۀLğˆŽV×İşÖE‰fìaö~˘mZÇm+€ôĈTˆ0@0 <5%šÍ @™g't7Bsöƒ”£oa*Ú!ÚYğ¤‘éİĦkíB¤‡Ï­âTÀ‚eĦ뙙òJĞìÀaüžwĈÍşC™œ]ħ"TîĠd(ƒjjpı6)›56S6=ŒÉï\“sšÒB!íÙĝ:EvÀß}ütG3ˆ2ĞóäjúivÜ%ôY}7v“b'†ğÒ>™ß@ŝьĞá›ĦÇ|él`>u9xÈĉÙpˆŠr˘†(šĵ6%Xê ½()/òİÁÈx˜Ÿ÷š„Hàú½Ì/ê{ۘ*E°R2˘ġ;^˘èĈOÄ£‚Œ¸kgKBÊôF!pnÏNïC„zuk™ßj×FIHŽe'Âùôe%âóÜÎijÜçB*Úğêûĥrè)Ñ.Ĥ.bñ7xĥƒƒĦ0ZwÂÀĊP˜'s”ÊSŭ7ö‹Ĉ:OĠġ-A7djm¸3Ùß"ÉDXŒşmáƒÓ'Š +˜Wxrĉí-[êĵÀ£6µ="è#K88;ôµe!Ĉx˘ÁÂ}oτäĈ˙.ËÔW„UeûŒ†QY‡ +WĵìÍèµ9@ñıQĦµö Gkn?ŬIœŬš,_2‘EĠÑk)0´Aż oıFU˙0x§şRñ eNUGmxĵQ‡#ş Ĝ%ŭ*pŽGġƒĤÂİàO§ŻF5ÄñħqiĴ|ê›öA[#ó])*kšXßú0>rC'°#z;ß/ÖmLİĤ të_mÚ.•Ìy·+È|{Žxw÷p‡ŻÎ>QÁVCG&¨È•./ ËMʋ|6÷ż9c†|òÇdÑ>³o³_—°ûendstream +endobj +1230 0 obj<>/XObject<<>>>>>>endobj +1231 0 obj<>stream +xWÑnÛ6}ÏWܗĦ)Ğ–:é€=,ÁRĜÒ1—ĵPesĦH•¤Ĵùïw.IÇĥ: CÑĈµÈËsÏ9÷Pù~QÒJşYġŠêîb^Ìiı˜+ZŜŜàó¤6>(˛b9}p·ĝ‰sZ·¨µşıuC¨3Ç7ġċŭVôA:*W=‰ÔK×Z× SKRŜÒż_˙k”7İĈìzY,Pċ›Ê‚îm× §ĵ5yċ’Ê2Ż\Ü*V·2—÷ÒípŜà§ġŭ7 +–‚Żñ'ĠZI +ZoO޽H àöÊlx•—ÀĠ’ +¤žFİu\é·v ÓĴĵN(Zïݎ0ħ7p•Ŝٍ§°Ñàƒ$/:ɏ‚­­f’:ë(B ħJ‹JÇEi?¸˘Vá›à„ñ­t“Óßês³ÜIzÂa,Nt‘ƒJxÙÓwhŽÙ)rĊ +z‚½/‰‡Q˜ˆ=H@Ħ ~zÛɰen´z•$èqÍċŸÛçMĈ™HϨÀÓVìÖR£|ìäP5„Ě zİ"Hü“•áÚ$}ċg£wĴR'öIˆJ‚O$p ´ojÁ „}#—^.ŭPoIxz”Ħ’ƒzyNĤÚ%Ñ˘·â P'´jĤ,}–FşxIV€4ĤIŸıۓW¤t.XĜÀ‰ñMFò½”MA_@qtĠÁnô}PDO˜ŞàĞVxž%Hnèñá銄ĜğÙâ+ċ ÊîİÙKÓx²Q0şÇĈnړÄĦq°ía°(\c ¤8NĜ£„İ=0Hv‡y¸bÑ Ê<ч‰VĦ^óiġ¤ƒ<ĝp"Ë]ÁdW¤ E›òœH­ó˜Í/ä°SŒĵPm6lÈVÔĉ@Ÿ,R‚³ÏgŞ‘ğŒfĈÉé[ᚑçƒ[hœBëžç²a’ĝœ2Ĉ"W ÏXƒĤ’Ž`'ïO'gÍjéĉ*WÓ™DT@n3ÊM#ü~†ÖGQ8AOÓ/N%ÒoQ×^Ûúġ˜‘xÄ9;ğĉNıà”üІvJŽÜö‡‡³ˆäeıLÊ:ĤÓ£ƒS!…˘§ŒĦ×!–Xií0d9Qac IQ'j”ˆİdĦŞX Â#‡Ġòe&xPOpÚÁtÚ·. Fù jüŠ…IŒ„ˆĊnòg \P:bĈ(à ‹f™zĥĴ¨k ÔáÚˎ}1˘ÄĈñbĜħ}ìAôÌ%W%ĴaßÑ\6£â$Âè˜Ó½àÁ|¨µġSœ´ĉ)­Á†M! AvÜéX!dZ’- ó!˘#*Ĉख1²mž²ĝT”·ˆFÌĊˆÑu“ƒĈüS˘!UDÂΤ¨˘²ƒW˙ƒF.–·-O ÄĈTÈUûYüD¸hPĵ á .o\{\?'s~<ıżó ”láéz:qxnâĵî™ Àduˆ·äÎb0>5€lkGÎ6$ĝÀn0[o;á*€8ÁÎ:n¸ïXvl3VfڏûoĠ‰À~t=˙‰T‡ïv0`Ċ³á†FÈ9RÌDqÎn°o°"zvm„žœwZ°Ĝf‘|ëÎ,߉Qah$ÁȀ…FSâ3ċ8oäwŽ:Ù(vEŠÏĈbÙô.ĝĉä.Ĉ8H —}…2ÍD +z× +ĵdžßá~î4ŭ1 ŭ´–m¤&°€Š™I£•¨_ɸ§â…T´ +{~◽ä*ĵ‹1rä>Ñ zĈĠù+ߜ÷çAWä@{ìÜêUql£Ĥw~kµĥIEj™^‡b"z‡‡ôâ<Ö8˜‰1ĵ,A“‘˜CыÜÎ \ÄB/—üžôYw°+&*ñċòäJgŞ™aîŬbäŞŭ„À<°4cûFÁ}Wµ5lC={Žß‰KJû—÷ +Ÿ]’Qp ’#}>Ñ@ûÙ˙9á·Ç _^'R˙ï/ËĠmħú¸ÀǗÛ|É-˙ĥĝóâƒo'^endstream +endobj +1232 0 obj<>/XObject<<>>>>>>endobj +1233 0 obj<>stream +x•WMoÛF½ûW t‰H´,+‡ìÄ)‚ÖuZ됊%ı×"ıìîҊúëûfHÉ­ŠÀˆ@jgŜĵyófġ÷Ċ„Ĉĝ7Ħ›)Í””hL‹é,šÓ|yƒÏSü9M™ĵ˜/Ż£ċıÓé™wĞ‹ĞÏ×4™*C’Ċò†V)!ÁxLĞä²/ş˜’­ ›l<ŭDÁ5úŭê‡ĉ‡C£éPVéÏmS¤äk­SJl•4Îé*Jí=K™)4>ä +¸²ß+K[;Ú:‚µ!ù&ÉIyRu]˜Dc+òÚ½˜jM>ÇQÏ Ĉ4šÌ˘)§ŝ~itÔ½j#PĤêâSt˙íK?z O&qÖÛ,c–™D·!żçä ‹Ân=%…A\A/­Ó*İœ˙£D%ıFşÚ D›…öh +Wµ”}  xbžG³IKÙdM£YDàí]Ĥ6zÏġ;|²G”êÚi Ó·Ìsğ.ŸT+䯀׃ä£0CŠw´vŞ +Lê˘Ó6×Z뤭 ġ˘ż™ud+ıÊ êGá ÑÙ˘@?ÏPT_Ĉ–íñŽÓ"ú’ÑÎ6è^ “WÓNûGĴä,ˆ ‹˘K³&bA+JµëeVkèÀ(tבXB8*(İ 0]µ-ñ{­ŜW*–T}֙Ä„ĈŠ,[ı˜é> .iSÙ-m g`ŭĈş:Èʜ-™Éˆ>p‹‚)µÔ-ĵĈiŠÍšjí†RU£)kg_tÉC„ ÀWd ü[͵€f‰í`a?hr TŬRŒJ`§{nYTG#ÑK)Òê9uAK!tH˙¨ Uµ›ĝ ċꅕçfb<Â@çŻ[H|%T²a’<ö)”ŜËëÑQORÓíÇ_Žöċó˜Gôï[oŝ‘iù/ßĜ[á@Šĉo:cèzŞf?Ißˆċû+q:ßÎhׁ“7bşÜOUچm§ħlzĊZÊÁŜġıƒÙ`ş=o\Ĵ›Ì§‡ğ½/xú~Ù]–à^x!(†‡Oßd,ñœK‰Úâ‚búZ(·†Al$àúE ˑïTÜÙ]Ĵ×ĤBptÁˆ7bŬħF+eŽr fFCİœÜĉÊĞÑBĜ„Ĵ6ÄëUÜquädVĝ Š=Â=”9í!°’dOv‡ƒ—0£lŒ(fµqŭ½Ä‚‡ĝv`Áĥ'7ıĉRyŞ9ÔÌ÷Ÿ–ĞÊuM4Àî·ÒŬZĊÓMi@ïuϑÄ? +\WA‹–]ÓuŸI`g6&ÜǰĤ^[’Pİ{‹Ÿ:SĜĠ]+q~²˜-ç­=ž€ĝĦĈ…W^1˙a)çŬħğ[CҒ7˛·„E%~ĉŽŠ„ĵĦIñ>&ôµÊ’‹Ë‹‚•JAr +[n“ßùÀŝßÚŞ]D·]Ü Z\_g B×ÖT`÷…ÌÉ%v˘°UċŽô|çK0•ş´ÈÙT4ê½rĤĜ wWŸ—Ŭo’É?‹–3Z|·×ˆ§Û‡ğ[úêì3ï‚O6i\qċ£ŭÑÍż{ÒË˙-Ÿ/–ÑâzŠğ=_sĜûĠĊï˙žĥ€eendstream +endobj +1234 0 obj<>/XObject<<>>>>>>endobj +1235 0 obj<>stream +xuWaoÛ6ŭž_q—9C­ÚŽ­¸úĦY[ ÀšuˆaƒżeħĦD•¤ìxż~ïH)vI€ÄïŜ½{÷Žùq5£)ft;§›”²êjšL)]½K´XŬâ÷9~Ĵ¤"r!LĤÀiaġ‘„ÖôġŽQLi2ğAÈ™ŞB&—?ĤLÔÈéñ>OKáéAT[A…@'D­Sġ.`dĦPzO#2WĤ&Uşj›dĤ.ş7((ör„oŝEZ d4ôG+z‰Bd™lüÚĥžjóö0+sÑċ’ôk¤ĝ×XKŒ’úÄ}ÂÊL޽ 3@ǍñĤcb{ ˆÏú¤.MmZËĊ!@hOÒ½1O![ôà‹§\˘ĠÜ8Cér mo^:ڌÏ8Ù\ÇR•g,qNmuW–3UŻÔH[[ÑVz ”/I  ı +˘À^JÔÖʃ{äžî…ëĴ -‡8ĉÓĊŠ“kġ(Ħ) ÍDë@„N%5ÖQċ^UXSeÀL8D䒺‚ûoı½Q2áìù\Mn‘'ŒSš&{<.ċâ4ŬŸƒGÁĉ9YŞjŽ[èĵU™'Ct*†ÇJ‘ż=X]f<.›ħ4í$pžĞrFrŻLë\˘~ÁğÍuB_ +:bšd-¸?ƒd›q™Ñàó÷t”n´ıfzêpžÛX(Ĝ@.GtmQ _˘{Ħkı¨3I%£Ĵ wtŝBSXï#a¸ı‹@~„vhNX?ˆu˙ù]lk/sÀ‚&bĜ¨ÉÌ´:ç?ZĤŻTà š¨qp€¤ 2Ŭc”ÉÏZ}›C) ŞÊä2°}ħŬ,üF´öŒ,ÓȚ5p²Èž#9m<çĝßĤÀ·•QÁ9ëräN9G”!5ĵNĉ(ٛA!EĞÁÑITAÖ&qŠ€Ŝ£c'oEĠAÁ B^ ggŜCĴ£fèÇNĵrQƒ€~!jPÜË#Ó&r,œ1„¨$†7Èh3Ĉ‰è<ŒQo{IS˙â ħÈ`Ô9aí t%·ìœ>pÇ9 MLÍÌDF e1Ûç<âx—ÇlĈ,ĦÏĈÂjĴ§ĤÑ*ĵ4‚×`Ŝ GUŜႆĜ}äùfĜ•`§‹rD ħHäÄa ³ŭüa2÷2W.)§Rнjŭ…•Œ ™3cħ<0ëÈ ĝÛÁX-ĵŞXуNšÀ 7ħžgEË{>×"¨™z4t5B ÚA#ct&w+³WÖ5rúYò.ÁĊJ-Ñn´Vcup\׿÷Ż*ŠÉGP0ôµ{éïd süö;…_*ĈhX]¨ĵ6À½eߗuٟgd0¸Ğèp7y5[}§î×C"î˙\úÄêÂRá% Oï ˜V̎ş`h ´ß]G ×°xÜrŞde` {%· f3ĉiŽù3ĝÀçݸ2'İÄcĜi ›·S…€ßZĜ—äċ,q|”a6X•%¨Šn7°€C…?sÁ/ĵ”²—šxÑğ}ÓßÜt ,0gèŭİ "ċrÛvÑxĠ°MóŝНħžÏóŞA‡vĜ×Ö4Ż/sgëäн£réŬĥ­+ğÍÏèŝkâ…-Ĝ0úŭ5–/˘àÚò êp ëˆZu7èYŠ ˙ê†Òù"Ŝe>|½û@ßĴùŽÉ¤&kyه¸LŬ¤?0ızž_¸ž/Rü°œ2Ϗ§)û´úëêżÜûendstream +endobj +1236 0 obj<>/XObject<<>>>>>>endobj +1237 0 obj<>stream +x½VÁn6½ç+4 8ŞeğvöC‚ĥÀ²m‹ımqM‰ +IYUżoH9ÑÊÙôP óĉ͛7|Hi†Ÿ”ÖsZĴ(+/fɌVé*™Óòz˙çĝµ’váryĴŜú°˜ÏŜŝÎfçWŬm.~üġ#kÚì}uÒ&'džÍh“]"ûDލ\’V•t6_ż¤a5_#Ù&żÜ’&mwp2µWĤ"ċ¨2-ÉJlµÌiÛQ.w˘Ñ~JÛĈ“ÚQgʕï¤<=]ô^Zr2kĴòŬÓò…ĴBl):FÜéġ ·kv; ŞĊáRT™¤wİ +|9£ŞÚÓNi (KˆÁcµqŽ‘jéœĴ³‡Uˆ#ŞÚKßĉ”‰ §nFİ;é&Sj •§RôTcéz÷jħL– ĵĤ³„¤ÈɊö}ZmĊ¤J+NĵĉÒİ=£ġ|‘¨çr2Ÿ’6í•^VY*Hġr>Ħ[k íœÏĴ0ĈIĥ2ž\S×Ĉ‚L´Ĵ0­Ä™ÉrzċVàĝAş— îŬdˆ—Á + Š”C@ıŻrñً#ÇêZEş>UäL)чd™V²òŽrSŭàİHg;jÖĤÈ|#´î}dZPò°÷c@@ĉqĞlĴ.>ƒ¸³™İŽHŞqêĈ¨MĴÚÈĴRl/XéOL'%t$¸žş–•# FRù{H蓧2^ĊELĦ´š@8ş4˘Q` 2ÏŠMè· +Dxé<Ħ`ôŠıñ`ë}µĤ°Œ˘üwıĥ§°˙¤×xË˙#ĜożĞĜÏŻvvŜ{ȵ„g°kòŒa +13“A*ĊtWħmi +_§ì[ÑRXï'Óı‚‡2ƒP÷RĦ‚Œ0zîû}œ÷S[™ĞŒ‹ŭùÄg•ä&jŭġË3Œ¤Ùñŭf£„÷ĉ0Ĝ6›Ap)J}ïlp ÌôˆQù—·‚rágà›µp>Z†4X ¸ÁÀ·B³ċp\…£CL•°Ve.aa#Ô­('nTvÀ4´÷rgÈiċsƒħéo<ġ šÁ  _dE—ŸĜpœ>ş^pÁ·”èĤnˆWÊXMŸ /À â‘ÓL7p}fŒ·\Ï4Lö/Á—pŒÇ7?Œ:ċ +ÓhôNXݲF ‹ğ İkŠ4ó^pŠdÂOXżX~ÂÑä ŝ„š*‡Ç~Ŝ`iGC=ÚÀŻÍnÔì`ÔÂ×`<JŒRl‘9ì¤PŽ(;·1êċdà$JÓTX\µÌÔNñ:ŬŒd;ġ7@ö£ÂĤ*t+:ŒĈ 5=V› qu.ĴÂ3"ÎÍw–û"Ħ{ lfżáĥ1ú—S,­ß²›släQa~së²d#G#x%x ûAÙ’Çc½ƒKlħÊħŲ̂°ÁR˜²l nµP0VLĜçĵĝsĊÏ*ĵ p³„-ÎkÑ!qˆí@[Ŝ bpaOÌu˙HLWxğ^/´\ĈçÚíŭŬ-ŭnÍWŜQ?›Ĵ)ħQ³†Q^\­çxƒ†·ÒÙtıÂë÷§9^ 0[óÁ_6\ü>˜Ûendstream +endobj +1238 0 obj<>/XObject<<>>>>>>endobj +1239 0 obj<>stream +x…VïO8ŭÎ_1ê—emhÚRÊIû…²ŞDĦG‹Ŝq:ı‰ÓdIâœí4íŭġ÷ĈIĝQ`O´(uì™ñ›7oĉŸŸzĝóé¤OƒÙAÏëÑÈïy}ŽOÜÇWKŠÜ‹á¸˙Á‹ïŬ;ñmypt9$ß§e'£ñ -C‚ƒ^–ÁáR‘ÌĊ*•´SûĈb#É*ĝ TV$x³ÙJP•Ĝ˜l,İ{q·˜ü=›ÍI6Q9á/.ŻÎ/(MrI*â•Ï˟=êúÄğ gâQF0è5ëŭ‘7äġkeá1–2™)½£LE’Ż)10î¨42d'|K…Ìñ[KÁ‹éî ‰<ä½ı²ġÖĠÎĊÓq[´¨:{À‚ıG˸4îڙĜÁ> ½1I’Q$››$rÂÄ8ܞ½À9Gŭ´@_÷üĉŞî~tyJ>òÀ é†5 +ŝÈó‡-RUÑyšÈÜ>ŝ2yŬŝ‰7bÄn1î`€I,  (”ĥÀāh¤µ§¤ÊŞ@œó›ÛÉüênA¸{,5oÎéêìzvvŬ§5g]P¨Ed‚½ÀM!a=É`n#3„F‡‘Vù½Ç#Ĉŭc~zĝĵŸÛ)™§[Ç#MóóOç‘Ùú#Z d÷á3U( óÈĦGJ“C=Vԁ"äŞLC +bYyôlYI²$úŬ¨ë3+ ¤B3Zx^¤ Ìé8u2ħm–XúJŭŜpÜùBInĴcZż"_ï#Û^¸%ù•ÂEÚMµ“ü+;”%ëĜ’H˘XĤĊ݉pÜáJÁáÇwt·†ˆÒ ²¨_ĝZEs5Gc]_× ‚9"W‰ ,.ƒ`†Iw°ĝÔ2öü˘¸óçҖL¨UÁÈ Š|σÂfĴâà:€ƒŭÓŝ˙C;e…Q+4Î…Ŭb4Ŭ¸‰ĥ‹Y³sxè{ÄîóiĽ…ĥ·Á[.ÇÍ$î1ӏ4:ÖñâlöíŒĉZŭäaéB%ÏYnJċ“]„áş'ŭÚùûâp4öFÇŭ&ÀŜ˜ÏN–żüaKñŞendstream +endobj +1240 0 obj<>/XObject<<>>>>>>endobj +1241 0 obj<>stream +x…VÛrÛ6}÷WlŸìL-šŬì7_M£DÔI:u ”‘€–ĠŻïYr&3µÇŠZğçœ=‹Ż'…ĝhS2Ĥ´< ƒ’Ñe0¤át‚çFR’K|ì}q³:ıxRÑ*çMĈÓ ­2ÂFaHĞôlúóşqúNÙT?ICxëBY}9`b²³$ ŝŒƒ( b~…e7…Hwou!邏İûéÊá+WŞ”´ÒôN=IşŻĝ°ìğÓF˙³f@o?,–”Äß­˙¸êŭŬŒnEş•´T˙J +ż‹Ÿ´ñƒxDƒx @QԌœQ2£'e\#Šâ@ĝG:'‡=”“RVNé +AŞòŻ36ü’D•ùşÂ:D~ĞÒ-•"“$(Sy.ĴRINcÎ%üç^XżĜêt'éšħÍıĈqşq4#Ž[Kç@”ÎsÚ+·ċ/Duĝ…ş]_êAŠÒ k”Àär5ĥ–ĵj2˘²Èéœ7ÜKYѓ0J7ğV—#J …²ĴŻKŬçx0SÎoÈJJáIô +I¨ë½żY_İ.ká(öÛè"£ÙŬ=e†ı<û]˘´‚E$ᛀVÀù˜á" +6RXí…Bı6…´V‚^µ³Ïó{żE6‘HŬÈ+ZŸß€é"BŝmQ”Üê’Ra²+Ĉá`8 w7–Fa8Ċíó"âü=ŻÂ{Ġ&—Xµ †xuÏwŸ‡ƒÉÂŒ+J&á ™ĥÑI‚ç‘î•1óĠy-Y !-ä;ĥÈí5ċŞàêhŒ@‡“ÏÎżê¨ŠŽ/9ĴĊ`4siŞS‡ŭ30SY•I£ŞMŻ&Öúì-Eı¤ÀASUˆE*,ÊS>İ†ĵÓ­ŞäOÄÇ\6u{]ù›m³ŝ‰úş,Ü;íѽ´Ñ:ğêá5÷.;UûvÌh†żúŒñn#]?ÑwZïOáÈ:X'ò°Z  +v9˙ µB\Ħ‘ÚĉˆESƒ£ÌrÌÈ6u­Y0[N —Ú'ü#ÁH¨ó.ëÙ­v:ĠŒıĞNÀô*òöìhOïGG›Ĥ¤Zš\—‚-mïג6°Ih³ñÚòe_<\R„İ“cš ’aëµÑ8ˆàÁó}lĊɰ~›TˆŒ'Á˜]yÉ|×R×p‘½€ÓÂ@­”l UMı–ĈrE0Ù£jÇH({µG¸ÀÎ by~>Óħ}fuĝ.ïÑzü§üӆ’³ÏûwZ“Kë Us­éÎġV%ŭtñ9ıĈ7äìµd0ê™<½_ûÇ\7Ç´áVAy\֚gQ{hîí£ížVıÀÖġ(èĤ(èá ÈñR>aĊÚrŬ}}Tx•fl¨`aÑZC\sq€½ÌNħÈx8²×ǚop ™8PtĤ3í.½Ñ7ċiB£IĜŜ]—×ó›kZŭĊ_[;ÓÀ=EWœ9:°]0˜ÄŝúûSĞާÁx·ä(ĵä•÷Ğ“?Nŝ4™šáendstream +endobj +1242 0 obj<>/XObject<<>>>>/Annots 760 0 R>>endobj +1243 0 obj<>stream +xWÛnÛF}÷W ôbI‘’%9@PĜ†Ġ/‰ÔĤô²$WrWÙ]ZÑKż½g–¤/j´¨ Ë&wvgö̙3ŻGġñÑ8ĤÁˆÒò¨ôñ†?"ŝĝĝóQ|6Ft6šC*i8Žƒ³ĉİ 9ÛS|>„Ċp2ĉżñc$­ê…h„Ç’âá8ˆ)öOĵ)Ĉa£ĉGŽFÁĝÙjԏ‚ˆÎÙ+ĥžGçZw“A09ôvı8 +§ç÷iħ…F -2ĵIğWħuÒP4ènÓU‘KċèŬŬ§ĊŬÉâ³ßë½§ƒ!‚]d]GM/>ĜG“akÒGp­ ŒŜéBьR­Vùşwó0ĤOÂléJ+%SGÚ<{9$aIÉ}:2p7­ZÁr.ÊDüT{R5žcD™u/¨Ôp‘êr[H'I(ğġœ&·É-}­¤uıV>ĤٕÊH+ïíe‚Íšş´qnû& SatìreƒêAŞ˙,¤ĴvĦċXÂîl\Yĵ<Ĉ“… šËÄ#0A^ +›§˘(ö=Ú는”Â3²Ž[+dÀá=`Ŝiğiħ‘4Í RF÷&G–šd-ğdzËş—Ò/Ox_8M`NÇÁ„İ ŻËx4Ĥzµ…Í/žFƒ:­‹ĞûpvO|œ'”tdĞíV÷˙ŽEà[é.gwsÒÈFí¨C™Éùñĉòú×ÙôsO‚èü ˘™²°ĉj 8‘ÜÜXGn‡ÜëµÄCğÜmüZ"Ĵ$½•F86·{ëd " ¤êKûœ‘ßĥ…Èr”+ż—İÛd´…ŞE@³UMì S¸0Rd{J¤TĜêC“Y’ÊĠiGiìÒr6ËŝxàÓĉ‹ІżG˘Ċĵvĉ²@ùDjBÖÍÒÉg.°&òÎĵç\şjہq‘IsÈ΋,k|5m€FiG™´İɓ'xj,ìaîjo€‰%–+Ŭo}Ÿ[×éħ°Û­LóNĤO³Ûy×|+ ~ƒù˜IÂycǧW*s ½Ŝ/OZžĥ57Ċá/şki)öžjÊôNZàŠŞm&¸<žÄ’cN ¤k†qüPtI…|·Ħ(ġ!§ÚW#íd²È$S‚ "O| Üt£ÇĠÂïgü£8:œ´Ĥ;.OzuwŒ‚¸N €jË­Ĥ;ĈÁ7µW[€‡³Ŭh x†kÜäİÑVݽż¸ĦpƒY%NÛîùŽÍĵô~˙Ö'ıO7=dċû%>ƒ²=9@3/+ í ëŽeC8ğı¸ 0q„/|ꙌòË5?wŭĞĥ ‡ +½Ö’Ä&t?8ä + Ż1fÄ ’´òÌĵĴáC]Ħ ‘wh>7 U9ğ‘EÑ#™L̤7ëċwdİiĜhíüfıDk³o*ĴF;!mĦƒıŸWšRô³0ĠóA8íÓy;˙ kŽÑÁWÜkYîùíħtûġPu`‰!ñ-7Ÿ/hU:bçĞÖYÖچÓv! 5 @ox-Š N ŜEau•ŞŽŬ#1!†E•ĦšnŻ>FífLHd*|À ô“j½ŜCİŸW›ĥ7soçϏĝ>…ğôÄÜ4Ó=k·Uj‡Œ +Zr¨²Ü~°ž$hĝMġOž&S˙O°ÍÚCŝÏâzZ‹˘>ßĉzqôáè/€ùÔendstream +endobj +1244 0 obj<>/XObject<<>>>>/Annots 763 0 R>>endobj +1245 0 obj<>stream +x­VÁnÛF½ë+>)€ĵ%YR '…È×qm"FÑĊŠ\J›.ı wiU—~{ß,ÉZR[a˜ ı™7oŜÌè[/˘ŝ"ši2£$ïÄoĝñċáç^4]ˆ1ÍĈ31˘œ&gs1iŸ =²=-^‹Ms܏ñ_)ÊÂÁd2Ӄи7ĵ~Mєâ ħg ܤ!äˆâ¤ÍE$&‚.áĊo²Ĝ‘ċ[ÒÎĠÊÑv£ +úô8ӗ>>ĞÊi[|yޝJI:’ŻâݽF3`‹Ó~b´*üOüvx=(jŸŽç|úÄ.wĥĤԒ¤ğeLŸo–Od+öÇ8èäZĈ’Ò} Oï‚?zPÎÖU˘è޲[§Ş“–e’„G†Fnc·T—˘C4Ÿˆo7‘­À—ŝ°W;/O6”U6ö‡ġ¨ÖÔ§÷ċùp˜ÈÊħĠ…ġ³…ŝc”Ş·CÇчp)6>7‡^Biً Y5ÁĥÚFĦ‹ÄÔİJ€ê°Œô¨@K5ÙĴÉQ'iœ €uJl]‚(45++ğ2*wr5òBeÊJ13şX“ħ¸d ĥy[Ĝ£ĜvġU%Ž!„´’ë5hbnBMžlġWi$ĜÜ(¤àmx½Ï~ }_o§“šŭAhSAPTŭ†ÖÊj‹<ÓJ#UĵßĈʔĥˆÄ€3("(Ż‘“û‘žuċü€’J6°â6œ@"ŝßïnîâ÷Ÿ˙\éYµoÒSX§l zgËëħÖÂaĤ§XÁäÎÂ3Ä‹U,/˙ ĵ:ÊkçÉùĥÂN•²$T½‡Ò +¨@^§u[éµ.¤ œĉĈĠ ¨ż°5:·=ŝN0\ÌançĵÊğÀ4 E¸i0èğ¸£=cöׁŸĥ(AħP¤l`Çċ+‘Ĝ" }SAD(Ŝ€NĴwrYÒĤhx=~éú¨íÁN{A7ú'],HŸĦħıR%:ÓMŸzì˙Àπ8<{`sS&ŜĥŞe–ŽJÙòĴ8™5Cĉĵµê8ĵÀ4Ú³|Koèbŝú­¸HĠ³F£„§)ħçôážn%zñ#”v‹ïn/——ħ8<9 +ĝĉ$Ï­|V—ñš;ÁɲG9(›™ùêYž-Ìeuˆ BÙKċEqLÛ^ƒĥ*,éĦĞÒ³~˙k×`ZĝˆÑ w™ĝŞŜÚ3PLİU Wˆĥ×ċò>/XObject<<>>>>/Annots 770 0 R>>endobj +1247 0 obj<>stream +xW]oÛ6}ÏŻ¸èKS –#Ùqœż½È–Y2£ëÙ2™SMól™Ü O=~şĈğ͗7ĝácaa>żJ²ó…Ċ,ıÌ-a.KSìˆO£ıYv #gĉfé-îȲ|³ ‹O|ì·ĠĊôŝ–²+Zˆgq³¤UÂÀyùĤ­W–ÒeBï>=>ÑŻR*çèAÔkAÎtV*’&WŻVß/h’Íqŝr§½ùúÀïĜzz­Ofs\Žu˜KzßxkòNzmš¸uNi:l ŝbkĵH;ÊĠNUĤU9é†DCĝِjvښĤVOè÷a‡uÔ9Ċ·Ë7Ĥ‘µĜ@_•u¸J7zĜ;ŻêoŻÈ›Áñt]{!K%·şy³˘r†ĥéqĦ£ÒÔµö/pŞQŭiìI„£°Út.ܽĥ˘1GŜ‰€ü:g—ŠĈ4ûz<Ĝ9vї +‘:o#@ €şŠñûˆÈHN2³üŻċFvŒ +á· Úäş|u„€Lñ£ŭÂtMNÂsOĊl7tI÷íŬtê˜ùÄĜMü5•;—”ž ‰€cçôA–Œ5yC³lgz˙ŒV¤²Ô:î&Û5aÛ­+-Ğŭ€²^WQVµĈioìž +c‡U°Â?‘/#â +b 4Ñ +ıċ^ƒ Yu9sœ}MÖí -ĉô]{¤ÉşÛ$7‘Ĉß8 µöbïĝ‚¨€‘\Ö§Sw’iàv‘Íq>@rœĦ“Yi "‹‡”ëĠú9çŝ6]Pbtâ‡ĝùüéL…ĜáöŠimM'9,VRUá‘÷1„'–¤i<ÔĈQžĦ›\ïtŜ‰Š +¨×qö²´OˆaCŞÁfeÌĥì4',áêÀ oŒIˆ}›éıù1F Qs* ·* ¤CAÌ2kċ{…b"š}àlHĜ?wu´>ĤÚ”ĉËçt˙™ĵ‘=Yë†3g ëĜ;žäͳ”#sN(‡˙;DĞ6ûz*z&]Pcl z`ŠdC) loô|1Ùu'Khš‰ĥĤ"²ċ%·3ĈsC½öċó,Ÿê'TZÓyêKƒtóVáVĤzĞTËVjê×P. JvùèÙĠ,œtƒ\ĦXޏµŞPh9Ġʗ&?Ĥ"é"ÁÙ*e·7ĈÓ÷Îy,HáXżc. —Ž"XÁ3´ˆÊˆ<\WÁMc8O°~M­Ñ¨ÇÀ̎–FĦ˙Œ|úOäüÈQNƒħŞıL‚ëĵk ġžĦXĵ|gzĈr£‚‡/‘Í6Öb U{8]ĝžA;É|êíÇ/ôöÏÜ‘ÀC÷˙ö*Ħ”ĝ2&,ƒˆÏóetcE[j ıîE90ŻĦĴÖ”ĤภX)[L–}pìéÚ¨á˜@†Œ@ ç4u83^˜ħC3Ü& +kêħı=Eù<ŬÁô†ëùPĝBö:7óÍcûZ.”ĦSxĠBŽ÷è=\áIŭ+ê—êĜ™C—fÙAÎĤ^@"çӁ4íž5P8ŸğFۊ ÖíİäŽ5VĦǐ £O”ĥëÖ( $rr#Kd~h€Ôˆ:Lyw'£ößc@ASs8ÈĈè+@Â +Geöì15ñÂŬzÜĊËĦ( +ğ¨O0bĊ¨˜Ë‡Žüı‹uyÈv^žŜ_ŸŒŽ Ė'9ŬµħËŜáù—˜qÇċ×$9Z‰İrœ:&<ÉVK´…ĉ‹a˜#¨ÎġĈ‚ğ}Ğ‚‹ÓûtáĤ£Wsyê:ĝޏPĈǸ ~ñLTfqóô~9Ü0É1 \a¤ÇɟÒCġDÚÍóŝïq (§żûcuñ×ĊIr˙êendstream +endobj +1248 0 obj<>/XObject<<>>>>>>endobj +1249 0 obj<>stream +xTËn£@ĵû+J{rÀ{}ZçħÊe•Ĵ‚6—HÑx L;3ƒ­üŭöNœd+ˏžêê*^&1"ŝĊX$˜eí$ +#Ì£4̐.|ß(”“‹|rŝsŽ8F^úÚlı@^€ë£ıœÊ½EP`µ³Êì•Yñŭ+ڍÉlWç|kˆ$Ħz–?3^:â‚$ SFœĉUmq¨›Ò(áŠÚ(éÈĵBŠĤQĊÁXډZ×z W)4\lŬĝÎRg¤â’BáqZ‡*ìkn×W5÷‹gaâû9ħŬ2¤Ÿc„–ĠYˆ~Ù£´k¸-ñ•Ŭ‘.,ġH3ĤP{Ġċ"8£TèĦOı\ŝıA•ñ~ĤĦħQ ŸŸ›o^ÑÙ#Ašd”f˜ZM!tÁ­Ëı€-3\£İY*ÇĤ_™ö…öĜż¤ŽĦH÷„]½³ù†Ĝò|e˙Ĥ_j[ğ¤ĥċcF½t^r^˜£OÍnŭùq1 ëmT£„örT™ş†P(HЏJ”Ô4tşĝ†LğĝŬ†'ùû÷ë_ë§ä)ù—OĴñP)͢ĵR‡ƒ[&´Ê°4ġ ÚH­·™Ĵ„Ŝòž;ĉçŭĝez”†ZĥĥІӟd~óújXû1rŸ¸vğÂgƒÜ …oYâˆÎs€ÙÛiˆáċrtSœr —3ÄÙÜżï…ÀĦgÎHvŜËÂĠ¤ŭı ÎĝÀċÁ"áÓËJìë/CÜÜ>ä·XKİĴĊ½O:NC·ŻĜŝ&͖a6OĝCq<óÏóÉïÉ_{;_Ŝendstream +endobj +1250 0 obj<>/XObject<<>>>>/Annots 773 0 R>>endobj +1251 0 obj<>stream +x}WaoÛ6ŭž_q0ÌRÙ²'-Plëşvöak ú…–NJÔH*Ž˙ŭŜ‘’¨éXĥñîŬğwôż9-—Ó͒V*š‹Eĥ ġâ&[ÓúöŸ—x9ĤJÀT.ı\>~¸ÈóòëlC ċ×7ÙjĝfèSt´Ül²ċÔÑÛíĊüŭ+Z.h[aïÍÍ-mËèwŠÙݵê;Ê_eô‘;ë‚n÷ôĥßûÛŻqe~“V\­á}[Î`šgôGœ-û"hÛ&Ó5ċù`şĵA0ŬÖLÜ(mH•cïݲŽvŭIÊ^ž´'ݚú9^3ëöâlA/—€Vž)¨;\à.è ŞÄ ĴŻ´aÚ1<3mOß5::Û'£_Œ·WÔ%gž™tE0Ş•§˘VížK¸ĉ˜ öÚ1[Çqż"˜˜u„eZ$PIL ɝ†Ċ£ö İ@ŜJ¸ˆ9{>/…¸¨´âĵé‹ZŜ%‡Bµòî<›J²­Ùtœ*î`|hÇ]3ú$à Š@ı xI"G$_rİ ¸öóÙ;Ûwd+êĜ:Ԗî­éÛÀ ²Ñ¸"Ŝ+òwÚOŞ-‰+ |F˙0€/X߃£ÊQ#˜§úîlрÜ'd0Ùı³ŜëAp­?°6ĉZ+xS)ŭZïk„!,QÂY2q(ûAJë̈ĴG€tYò=Ûħ›lY9 #sĵ<+‘DÈ0ȇĊÑ_@2>L+ôÎRkÁ#ï{İĦĴvF&’h*<Ş# ÛtYçl°…5>ó͎Z>ĝîˆlDJbt\‡ê”'aGnë€&2í}ÇEÄ6DZ6Ún¤1Ĉ˜ßP¤­ôwJ:ódˆ[)€çÒñˆÛ ‚R3; @J̒âŽ!ÇÀ#Ô\áġe&88l ú|yA× H• @ËÎHhŸÚG!úŻQÌ)öŸÑbÛhé}KĈÚ;ĝ³ŭސ ÛUċŠìDğj-ŭ„@È=·`Bòt<½bMROixGÚ3Ĝ‘Ħ{=ŸŸ*}šËB‘ÖsŒ’\fô[vʐnĞïüŭ3ù6ÉV’Ĵ(½ç²…>`tĵÁPÖ¨ŸŒ9;gZòOAE'ıDû¨‡Ihíî^[ĵAĈ’Ì$ĠXšÀĈÄvŠß°ĠèĈFû‘FÑ0(-ˆ+ZàzÀĈ>tÊ5Rùü4DÑcÑùÂ:”x„2=LKüğ´=öKkÈR*k òéôs{šQİĠµ^§,NqFŠÁO´•i€˙{vGҍ Ġ~ÓÖCOéĥ0}ɨ² QhNĜĦ#C2zv!\+Âï{0 +iЍ}•ŝ‰ ĝAB°ƒ…ä âï¨0BI!˜´[ÒÜ(ĥçŽägo Wâ0˘ĝ=Ö­2zdz=&ĝ3ĴâW,eŞö˜Ê‹´0Šb6İ v q–V*ĤtH.Ú0Cbs:z/v†fGBĥ ²ġ#OEŝ˘JAâdĠƒ|T½‘tà­<m>]Ä*ġ’Ä4ĊÁفg@@ĝkÖĥ­Œx¨*Ŝ…žwÌœ o„ŭ’´†a2Úe„ÄÁ¤x<ÎŻÇ_çu:ܝb 7”/Ĉ@™œQg#GlŜ{77ĥPf^£wĝÏ~h&‹ĈĥŝΚ´aáSMŽGV!,˜ÀH.ħ˜ĈèàŸ ĉäx€*­y,â!ŽÍËáéȔôAĞp´ñyLd8wê…D{ < *’“7ÌĦñÜÛÉÌo4îÑm”)#żĞ¨ĊP§ǽÖ3´û†uİ=&A%Ħĵ˘´q6+cì!m†ùg0!kQEJ]U-|ġ\ôNzôÌg´]<+ bE +QĈ‘s“àùğ}üİħ’O`Ë˙˙Yon³Íġ?€`šçkñŝÛöâï‹˙Š€YVendstream +endobj +1252 0 obj<>/XObject<<>>>>>>endobj +1253 0 obj<>stream +x•WÁn7½û+ĤşTbY²eÙ)ƒƒĜ€&Mµ@_¸ğÜ#.İ’\ËúûîZ†lŠ @Â%93oŜ{Cŭ{4£)ŝÌèòŒÎTĥGÓɔ³éäŒĉW—ĝ÷ŝMµ|8ğ¸œ\½ġavħx}âÓòèôvN³-kY\]Ò²"˜NiYŽ—+MÇ˟ĜƒdÏ8ĥĊ¤ôÎËÑ1i—Â./^ {Éú†Ĵ~Ԗ~?Üo"Ċón×ú.ÒÖ¤%D{óšJ]óÎ=i­T¤BkG]ÔGŜV:pÈ)ÌÎQ÷²?êw‘|MßU[(R›ù¤q LÊ8Ż} B•ë­ +U¤Ò·•LaĴI;>:@µħ:Nú g‹Éœƒ\G.à¨l§9 Ê çżóħ)•>T¤(šĈ™Ú”Ê%ğvrÒd%5ĵd +h‘²wCr·¨Ĵġ1½Ĝí7:ÈŜ(a[µ#ç9<W§ÄwL³Ò•)GçúŞU@ +)˘1À˅Ĥ€ŸK¤°.BĤ³éœJ|`ôF…rE˙ÜÜ˙ ĞB£éÑÛĠ 7S¨RII-§·iŠ2WOÎçòÙÇÉ|Bw.éà”%‚1w` 'vŸ]NÜ ğZ +m4’¤ÑŬ×ċÍŭ×ë?èĉŝŝÏûµ:F…ĝ ş$şô™LÂGöá2 …Ò;§Ÿ6şL(„ìAñÛ˜BĦsX"ÓÄíŜ_¨‚QÊM ŜK¨Vċ[£•^•:01ħ3ÇWŒ9'˜sxw<”öÄ]İG¸ß·ƒBBBÒŬĊ¤[ŠNĵôpܟ8 ˆXŠB'êàq˘-*ŝä aèsèĤ*E+·‚ë.@ŭċ +œCVä&Çtì÷/Ÿž€÷Ú<ĉk8ĉ„–+QHí:ä çë½î,£!äcV~‹˙!ÎÍJ´ħĴĴƒˆœí*ôŭèÛÍȂ“>¤A:&? É¸òċDßWC+żäùLUWBûÀÈÔ´ñ1¤1Ħo’µjÍğPĞŬ;á@ĈFWoEeIJÈڀÂ>WbgZİÍjV¨„ĉBĜĊ¨  L@AIœÚ~a Ak‘ÂZ데ŭŸ(ÉúËN—› A‘=ß&üì[ĵ·bŻTÑAÏÍb°ÙŜ*/üĈ!Oo‡Á2í}´İŠL7.(ïz)ĉ~—Ş*n90~ŒJèşJ+dçói֑`…–ñ•ìT=Žş…³TŜŭÊCráM(ù´£QU<˜|Ú`óŠIǐòpjàŽ\/@-Ç Ä#ΛYè )LkË-à#U}YvÍd;r„Ŝ dm!§CÂô­‹@90'FŬ²ÍXċšŽ­ ñ²T&âûh GÜ^ÓûyÑœ6‰§Ġ+·Ĥ +¨ ×ä@‚SÈàì?bJ”˜ ÌÜôp,ŽÇ˜­­kB.¤ŸTÉïuB `!ŻóŬzż6$iC’sBÒWPàÍ#*Gŝ™€ÜrĈi‘$ WèäL5[NnôŜşÒż,éÈ{sêbB× $wT SPÂĊ_3½[óTOĊHô°äΙ'ı%Ĵɔ†gŝĈêYş'Zc0j2ĵAX +˙êÚ Âï}¸0“Šk~N–ˆÉß Uİ0şLƒÊ#1ä‡cıÈaxÏĦMi3ÁúĦĜ—b£}³•àÁ`pĝ~HDïÁÂ·Ñ³7|ğû<êÉÁ÷òLÇÒóĴ‚ÜR³~E£RԈç+xŽWĞ´O£Tĉ ,'$ X9¸ĴYpċŜ½úûáPŞ„YÇğöƒ-³BşÌcXà³Îsżß~Ô,03ĝ6ŭ>+–ˆSh<è”÷•A 1ËÀèG]DÇkóôËà{Qĵá™Ĥ“ UÎkċ1ĉF]ÓI——#³ßÙkê÷67_ŽÇn“Ŝ‘>Dak`™ïF+çá&ô…‡'„-ƒ+ä)ÂC Éݏ$ NcÊó€_û½·ñM/Ĵ"âm‡aÍŭ· Ä$N°÷Ġ˙\Ĉ!Ç<›OoŻú7³~z]Ób>ËÏï×_>]Ó·àbäÒg_âÛ?ê8úÉpàäò ż­ŞñğÏÖùâj²¸8—wÍ.ĝôÍòèŻ£˙/لîendstream +endobj +1254 0 obj<>endobj +1255 0 obj<>endobj +1256 0 obj<>endobj +1257 0 obj<>endobj +1258 0 obj<>endobj +1259 0 obj<>endobj +1260 0 obj<>endobj +1261 0 obj<>endobj +1262 0 obj<>endobj +1263 0 obj<>endobj +1264 0 obj<>endobj +1265 0 obj<>endobj +1266 0 obj<>endobj +1267 0 obj<>endobj +1268 0 obj<>endobj +1269 0 obj<>endobj +1270 0 obj<>endobj +1271 0 obj<>endobj +1272 0 obj<>endobj +1273 0 obj<>endobj +1274 0 obj<>endobj +1275 0 obj<>endobj +1276 0 obj<>endobj +1277 0 obj<>endobj +1278 0 obj<>endobj +1279 0 obj<>endobj +1280 0 obj<>endobj +1281 0 obj<>endobj +1282 0 obj<>endobj +1283 0 obj<>endobj +1284 0 obj<>endobj +1285 0 obj<>endobj +1286 0 obj<>endobj +1287 0 obj<>endobj +1288 0 obj<>endobj +1289 0 obj<>endobj +1290 0 obj<>endobj +1291 0 obj<>endobj +1292 0 obj<>endobj +1293 0 obj<>endobj +1294 0 obj<>endobj +1295 0 obj<>endobj +1296 0 obj<>endobj +1297 0 obj<>endobj +1298 0 obj<>endobj +1299 0 obj<>endobj +1300 0 obj<>endobj +1301 0 obj<>endobj +1302 0 obj<>endobj +1303 0 obj<>endobj +1304 0 obj<>endobj +1305 0 obj<>endobj +1306 0 obj<>endobj +1307 0 obj<>endobj +1308 0 obj<>endobj +1309 0 obj<>endobj +1310 0 obj<>endobj +1311 0 obj<>endobj +1312 0 obj<>endobj +1313 0 obj<>endobj +1314 0 obj<>endobj +1315 0 obj<>endobj +1316 0 obj<>endobj +1317 0 obj<>endobj +1318 0 obj<>endobj +1319 0 obj<>endobj +1320 0 obj<>endobj +1321 0 obj<>endobj +1322 0 obj<>endobj +1323 0 obj<>endobj +1324 0 obj<>endobj +1325 0 obj<>endobj +1326 0 obj<>endobj +1327 0 obj<>endobj +1328 0 obj<>endobj +1329 0 obj<>endobj +1330 0 obj<>endobj +1331 0 obj<>endobj +1332 0 obj<>endobj +1333 0 obj<>endobj +1334 0 obj<>endobj +1335 0 obj<>endobj +1336 0 obj<>endobj +1337 0 obj<>endobj +1338 0 obj<>endobj +1339 0 obj<>endobj +1340 0 obj<>endobj +1341 0 obj<>endobj +1342 0 obj<>endobj +1343 0 obj<>endobj +1344 0 obj<>endobj +1345 0 obj<>endobj +1346 0 obj<>endobj +1347 0 obj<>endobj +1348 0 obj<>endobj +1349 0 obj<>endobj +1350 0 obj<>endobj +1351 0 obj<>endobj +1352 0 obj<>endobj +1353 0 obj<>endobj +1354 0 obj<>endobj +1355 0 obj<>endobj +1356 0 obj<>endobj +1357 0 obj<>endobj +1358 0 obj<>endobj +1359 0 obj<>endobj +1360 0 obj<>endobj +1361 0 obj<>endobj +1362 0 obj<>endobj +1363 0 obj<>endobj +1364 0 obj<>endobj +1365 0 obj<>endobj +1366 0 obj<>endobj +1367 0 obj<>endobj +1368 0 obj<>endobj +1369 0 obj<>endobj +1370 0 obj<>endobj +1371 0 obj<>endobj +1372 0 obj<>endobj +1373 0 obj<>endobj +1374 0 obj<>endobj +1375 0 obj<>endobj +1376 0 obj<>endobj +1377 0 obj<>endobj +1378 0 obj<>endobj +1379 0 obj<>endobj +1380 0 obj<>endobj +1381 0 obj<>endobj +1382 0 obj<>endobj +1383 0 obj<>endobj +1384 0 obj<>endobj +1385 0 obj<>endobj +1386 0 obj<>endobj +1387 0 obj<>endobj +1388 0 obj<>endobj +1389 0 obj<>endobj +1390 0 obj<>endobj +1391 0 obj<>endobj +1392 0 obj<>endobj +1393 0 obj<>endobj +1394 0 obj<>endobj +1395 0 obj<>endobj +1396 0 obj<>endobj +1397 0 obj<>endobj +1398 0 obj<>endobj +1399 0 obj<>endobj +1400 0 obj<>endobj +1401 0 obj<>endobj +1402 0 obj<>endobj +1403 0 obj<>endobj +1404 0 obj<>endobj +1405 0 obj<>endobj +1406 0 obj<>endobj +1407 0 obj<>endobj +1408 0 obj<>endobj +1409 0 obj<>endobj +1410 0 obj<>endobj +1411 0 obj<>endobj +1412 0 obj<>endobj +1413 0 obj<>endobj +1414 0 obj<>endobj +1415 0 obj<>endobj +1416 0 obj<>endobj +1417 0 obj<>endobj +1418 0 obj<>endobj +1419 0 obj<>endobj +1420 0 obj<>endobj +1421 0 obj<>endobj +1422 0 obj<>endobj +1423 0 obj<>endobj +1424 0 obj<>endobj +1425 0 obj<>endobj +1426 0 obj<>endobj +1427 0 obj<>endobj +1428 0 obj<>endobj +1429 0 obj<>endobj +1430 0 obj<>endobj +1431 0 obj<>endobj +1432 0 obj<>endobj +1433 0 obj<>endobj +1434 0 obj<>endobj +1435 0 obj<>endobj +1436 0 obj<>endobj +1437 0 obj<>endobj +1438 0 obj<>endobj +1439 0 obj<>endobj +1440 0 obj<>endobj +1441 0 obj<>endobj +1442 0 obj<>endobj +1443 0 obj<>endobj +1444 0 obj<>endobj +1445 0 obj<>endobj +1446 0 obj<>endobj +1447 0 obj<>endobj +1448 0 obj<>endobj +1449 0 obj<>endobj +1450 0 obj<>endobj +1451 0 obj<>endobj +1452 0 obj<>endobj +1453 0 obj<>endobj +1454 0 obj<>endobj +1455 0 obj<>endobj +1456 0 obj<>endobj +1457 0 obj<>endobj +1458 0 obj<>endobj +1459 0 obj<>endobj +1460 0 obj<>endobj +1461 0 obj<>endobj +1462 0 obj<>endobj +1463 0 obj<>endobj +1464 0 obj<>endobj +1465 0 obj<>endobj +1466 0 obj<>endobj +1467 0 obj<>1<>6<>7<>12<>18<>23<>33<>36<>38<>43<>50<>55<>57<>60<>73<>90<>93<>100<>109<>115<>117<>119<>]>>>>endobj xref -0 1367 +0 1468 0000000000 65535 f 0000000015 00000 n -0000000244 00000 n -0000001810 00000 n -0000001884 00000 n -0000001963 00000 n -0000002045 00000 n -0000002131 00000 n -0000002209 00000 n -0000002286 00000 n -0000002365 00000 n -0000002442 00000 n -0000002524 00000 n -0000002583 00000 n -0000002635 00000 n -0000002720 00000 n -0000002773 00000 n -0000002857 00000 n -0000002923 00000 n -0000003007 00000 n -0000003045 00000 n -0000003097 00000 n -0000003182 00000 n -0000003206 00000 n -0000003259 00000 n -0000003344 00000 n -0000003397 00000 n -0000003482 00000 n -0000003513 00000 n -0000003559 00000 n -0000003644 00000 n -0000003689 00000 n -0000003773 00000 n -0000003818 00000 n -0000003902 00000 n -0000003940 00000 n -0000003983 00000 n -0000004068 00000 n -0000004111 00000 n -0000004195 00000 n -0000004226 00000 n -0000004280 00000 n -0000004364 00000 n -0000004388 00000 n -0000004439 00000 n +0000000250 00000 n +0000001816 00000 n +0000001890 00000 n +0000001969 00000 n +0000002051 00000 n +0000002137 00000 n +0000002215 00000 n +0000002292 00000 n +0000002371 00000 n +0000002455 00000 n +0000002532 00000 n +0000002614 00000 n +0000002673 00000 n +0000002775 00000 n +0000002878 00000 n +0000002980 00000 n +0000003082 00000 n +0000003185 00000 n +0000003288 00000 n +0000003391 00000 n +0000003494 00000 n +0000003597 00000 n +0000003700 00000 n +0000003803 00000 n +0000003906 00000 n +0000004009 00000 n +0000004112 00000 n +0000004215 00000 n +0000004318 00000 n +0000004421 00000 n 0000004524 00000 n -0000004572 00000 n -0000004657 00000 n -0000004688 00000 n -0000004806 00000 n -0000004890 00000 n -0000004931 00000 n -0000005016 00000 n -0000005057 00000 n -0000005142 00000 n -0000005180 00000 n -0000005224 00000 n -0000005309 00000 n -0000005333 00000 n -0000005377 00000 n -0000005461 00000 n -0000005503 00000 n -0000005588 00000 n -0000005637 00000 n -0000005722 00000 n -0000005771 00000 n -0000005854 00000 n -0000005901 00000 n -0000005986 00000 n -0000006032 00000 n -0000006116 00000 n -0000006175 00000 n -0000006237 00000 n -0000006322 00000 n -0000006379 00000 n -0000006464 00000 n -0000006557 00000 n -0000006641 00000 n -0000006679 00000 n -0000006784 00000 n -0000006825 00000 n -0000006909 00000 n -0000006955 00000 n -0000007040 00000 n -0000007079 00000 n -0000007164 00000 n -0000007206 00000 n -0000007291 00000 n -0000007333 00000 n -0000007418 00000 n -0000007477 00000 n -0000007521 00000 n -0000007606 00000 n -0000007630 00000 n -0000007677 00000 n -0000007762 00000 n -0000007814 00000 n -0000007899 00000 n -0000007948 00000 n +0000004627 00000 n +0000004730 00000 n +0000004833 00000 n +0000004936 00000 n +0000005038 00000 n +0000005141 00000 n +0000005244 00000 n +0000005347 00000 n +0000005450 00000 n +0000005553 00000 n +0000005656 00000 n +0000005759 00000 n +0000005862 00000 n +0000005965 00000 n +0000006068 00000 n +0000006171 00000 n +0000006274 00000 n +0000006377 00000 n +0000006480 00000 n +0000006583 00000 n +0000006685 00000 n +0000006788 00000 n +0000006891 00000 n +0000006993 00000 n +0000007094 00000 n +0000007195 00000 n +0000007519 00000 n +0000007621 00000 n +0000007724 00000 n +0000007827 00000 n +0000007930 00000 n 0000008033 00000 n -0000008082 00000 n -0000008167 00000 n -0000008214 00000 n -0000008267 00000 n -0000008354 00000 n -0000008403 00000 n -0000008490 00000 n -0000008539 00000 n -0000008625 00000 n -0000008689 00000 n -0000008776 00000 n -0000008826 00000 n -0000008890 00000 n -0000008977 00000 n -0000009003 00000 n -0000009044 00000 n -0000009130 00000 n -0000009180 00000 n -0000009266 00000 n -0000009312 00000 n -0000009399 00000 n -0000009441 00000 n -0000009489 00000 n +0000008136 00000 n +0000008239 00000 n +0000008342 00000 n +0000008445 00000 n +0000008548 00000 n +0000008651 00000 n +0000008754 00000 n +0000008857 00000 n +0000008960 00000 n +0000009062 00000 n +0000009165 00000 n +0000009268 00000 n +0000009371 00000 n +0000009473 00000 n 0000009576 00000 n -0000009623 00000 n -0000009710 00000 n -0000009751 00000 n -0000009837 00000 n -0000009879 00000 n -0000009921 00000 n -0000010008 00000 n -0000010057 00000 n -0000010144 00000 n -0000010191 00000 n -0000010278 00000 n -0000010320 00000 n -0000010373 00000 n -0000010460 00000 n -0000010504 00000 n -0000010591 00000 n -0000010648 00000 n -0000010735 00000 n -0000010831 00000 n -0000010917 00000 n -0000010967 00000 n -0000011029 00000 n -0000011116 00000 n -0000011142 00000 n -0000011191 00000 n -0000011278 00000 n -0000011304 00000 n -0000011351 00000 n -0000011436 00000 n -0000011462 00000 n -0000011511 00000 n -0000011598 00000 n -0000011641 00000 n -0000011728 00000 n -0000011771 00000 n -0000011858 00000 n -0000011907 00000 n -0000011994 00000 n -0000012043 00000 n -0000012130 00000 n -0000012178 00000 n -0000012265 00000 n -0000012311 00000 n -0000012398 00000 n -0000012472 00000 n -0000012519 00000 n -0000012606 00000 n -0000012653 00000 n -0000012740 00000 n -0000012789 00000 n -0000012876 00000 n -0000012923 00000 n -0000013010 00000 n -0000013060 00000 n -0000013107 00000 n -0000013194 00000 n -0000013241 00000 n -0000013326 00000 n -0000013370 00000 n -0000013456 00000 n -0000013498 00000 n -0000013584 00000 n -0000013624 00000 n -0000013710 00000 n -0000013758 00000 n -0000013844 00000 n -0000013889 00000 n -0000013975 00000 n -0000014019 00000 n -0000014105 00000 n -0000014156 00000 n -0000014242 00000 n -0000014291 00000 n -0000014377 00000 n -0000014422 00000 n -0000014508 00000 n -0000014550 00000 n -0000014636 00000 n -0000014679 00000 n -0000014765 00000 n -0000014807 00000 n -0000014893 00000 n -0000014937 00000 n -0000015023 00000 n -0000015060 00000 n -0000015146 00000 n -0000015187 00000 n -0000015273 00000 n -0000015315 00000 n -0000015401 00000 n -0000015438 00000 n -0000015524 00000 n -0000015565 00000 n -0000015651 00000 n -0000015694 00000 n -0000015780 00000 n -0000015826 00000 n -0000015912 00000 n -0000016106 00000 n -0000016153 00000 n -0000016240 00000 n -0000016289 00000 n -0000016376 00000 n -0000016425 00000 n -0000016511 00000 n -0000016553 00000 n -0000016601 00000 n -0000016687 00000 n -0000016733 00000 n -0000016820 00000 n -0000016854 00000 n -0000016969 00000 n -0000017056 00000 n -0000017082 00000 n -0000017164 00000 n -0000017251 00000 n -0000017336 00000 n -0000017423 00000 n -0000017478 00000 n -0000017565 00000 n -0000017621 00000 n -0000017708 00000 n -0000017758 00000 n -0000017806 00000 n -0000017893 00000 n -0000017967 00000 n -0000018054 00000 n -0000018122 00000 n -0000018209 00000 n -0000018263 00000 n -0000018350 00000 n -0000018418 00000 n -0000018505 00000 n -0000018579 00000 n -0000018666 00000 n -0000018714 00000 n -0000018801 00000 n -0000018858 00000 n -0000018945 00000 n -0000019027 00000 n -0000019082 00000 n -0000019169 00000 n -0000019250 00000 n -0000019337 00000 n -0000019371 00000 n -0000019423 00000 n -0000019510 00000 n -0000019536 00000 n -0000019592 00000 n -0000019679 00000 n -0000019748 00000 n -0000019835 00000 n -0000019886 00000 n -0000019973 00000 n -0000020060 00000 n -0000020147 00000 n -0000020203 00000 n -0000020290 00000 n -0000020339 00000 n -0000020426 00000 n -0000020492 00000 n -0000020544 00000 n -0000020631 00000 n -0000020686 00000 n -0000020773 00000 n -0000020820 00000 n -0000020907 00000 n -0000020954 00000 n -0000021041 00000 n -0000021091 00000 n -0000021131 00000 n -0000021218 00000 n -0000021261 00000 n -0000021348 00000 n -0000021392 00000 n -0000021479 00000 n -0000021522 00000 n -0000021609 00000 n -0000021652 00000 n -0000021739 00000 n -0000021780 00000 n -0000021867 00000 n -0000021914 00000 n -0000022001 00000 n -0000022075 00000 n -0000022122 00000 n -0000022208 00000 n -0000022234 00000 n -0000022286 00000 n -0000022372 00000 n -0000022398 00000 n -0000022452 00000 n -0000022539 00000 n -0000022565 00000 n -0000022644 00000 n -0000022731 00000 n -0000022813 00000 n -0000022899 00000 n -0000022974 00000 n -0000023061 00000 n -0000023134 00000 n -0000023221 00000 n -0000023271 00000 n -0000023349 00000 n -0000023436 00000 n -0000023462 00000 n -0000023525 00000 n -0000023612 00000 n -0000023675 00000 n -0000023762 00000 n -0000023816 00000 n -0000023903 00000 n -0000023945 00000 n -0000023991 00000 n -0000024078 00000 n -0000024104 00000 n -0000024145 00000 n -0000024232 00000 n -0000024258 00000 n -0000024363 00000 n -0000024469 00000 n -0000024575 00000 n -0000024681 00000 n -0000024787 00000 n -0000024893 00000 n -0000024999 00000 n -0000025105 00000 n -0000025211 00000 n -0000025317 00000 n -0000025423 00000 n -0000025529 00000 n -0000025635 00000 n -0000025741 00000 n -0000025847 00000 n -0000025953 00000 n -0000026059 00000 n -0000026165 00000 n -0000026271 00000 n -0000026376 00000 n -0000026482 00000 n -0000026588 00000 n -0000026694 00000 n -0000026800 00000 n -0000026906 00000 n -0000027012 00000 n -0000027118 00000 n -0000027224 00000 n -0000027330 00000 n -0000027436 00000 n -0000027542 00000 n -0000027648 00000 n -0000027754 00000 n -0000027860 00000 n -0000027966 00000 n -0000028071 00000 n -0000028177 00000 n -0000028283 00000 n -0000028389 00000 n -0000028495 00000 n -0000028601 00000 n -0000028707 00000 n -0000028813 00000 n -0000028918 00000 n -0000029022 00000 n -0000029126 00000 n -0000029512 00000 n -0000029618 00000 n -0000029724 00000 n -0000029830 00000 n -0000029936 00000 n -0000030042 00000 n -0000030148 00000 n -0000030254 00000 n -0000030360 00000 n -0000030465 00000 n -0000030571 00000 n -0000030677 00000 n -0000030783 00000 n -0000030888 00000 n -0000030994 00000 n -0000031100 00000 n -0000031205 00000 n -0000031311 00000 n -0000031417 00000 n +0000009679 00000 n +0000009781 00000 n +0000009884 00000 n +0000009987 00000 n +0000010090 00000 n +0000010193 00000 n +0000010296 00000 n +0000010399 00000 n +0000010502 00000 n +0000010605 00000 n +0000010708 00000 n +0000010810 00000 n +0000010913 00000 n +0000011016 00000 n +0000011119 00000 n +0000011222 00000 n +0000011325 00000 n +0000011428 00000 n +0000011531 00000 n +0000011634 00000 n +0000011737 00000 n +0000011840 00000 n +0000011942 00000 n +0000012044 00000 n +0000012372 00000 n +0000012475 00000 n +0000012579 00000 n +0000012682 00000 n +0000012786 00000 n +0000012890 00000 n +0000012994 00000 n +0000013098 00000 n +0000013202 00000 n +0000013306 00000 n +0000013410 00000 n +0000013514 00000 n +0000013618 00000 n +0000013721 00000 n +0000013825 00000 n +0000013929 00000 n +0000014032 00000 n +0000014136 00000 n +0000014240 00000 n +0000014344 00000 n +0000014447 00000 n +0000014551 00000 n +0000014655 00000 n +0000014759 00000 n +0000014863 00000 n +0000014967 00000 n +0000015071 00000 n +0000015175 00000 n +0000015279 00000 n +0000015383 00000 n +0000015487 00000 n +0000015591 00000 n +0000015695 00000 n +0000015799 00000 n +0000015903 00000 n +0000016007 00000 n +0000016111 00000 n +0000016214 00000 n +0000016318 00000 n +0000016422 00000 n +0000016526 00000 n +0000016629 00000 n +0000016731 00000 n +0000016833 00000 n +0000017194 00000 n +0000017297 00000 n +0000017401 00000 n +0000017505 00000 n +0000017609 00000 n +0000017713 00000 n +0000017817 00000 n +0000017921 00000 n +0000018025 00000 n +0000018129 00000 n +0000018232 00000 n +0000018336 00000 n +0000018440 00000 n +0000018544 00000 n +0000018648 00000 n +0000018752 00000 n +0000018856 00000 n +0000018960 00000 n +0000019064 00000 n +0000019167 00000 n +0000019271 00000 n +0000019375 00000 n +0000019479 00000 n +0000019583 00000 n +0000019687 00000 n +0000019791 00000 n +0000019895 00000 n +0000019999 00000 n +0000020103 00000 n +0000020207 00000 n +0000020311 00000 n +0000020415 00000 n +0000020518 00000 n +0000020622 00000 n +0000020726 00000 n +0000020830 00000 n +0000020934 00000 n +0000021038 00000 n +0000021142 00000 n +0000021246 00000 n +0000021350 00000 n +0000021454 00000 n +0000021558 00000 n +0000021661 00000 n +0000021763 00000 n +0000022132 00000 n +0000022235 00000 n +0000022339 00000 n +0000022443 00000 n +0000022547 00000 n +0000022651 00000 n +0000022755 00000 n +0000022859 00000 n +0000022963 00000 n +0000023067 00000 n +0000023171 00000 n +0000023275 00000 n +0000023379 00000 n +0000023483 00000 n +0000023587 00000 n +0000023691 00000 n +0000023795 00000 n +0000023899 00000 n +0000024003 00000 n +0000024107 00000 n +0000024211 00000 n +0000024315 00000 n +0000024418 00000 n +0000024522 00000 n +0000024626 00000 n +0000024730 00000 n +0000024834 00000 n +0000024938 00000 n +0000025042 00000 n +0000025145 00000 n +0000025249 00000 n +0000025353 00000 n +0000025457 00000 n +0000025561 00000 n +0000025664 00000 n +0000025768 00000 n +0000025872 00000 n +0000025976 00000 n +0000026080 00000 n +0000026184 00000 n +0000026288 00000 n +0000026625 00000 n +0000026678 00000 n +0000026765 00000 n +0000026819 00000 n +0000026905 00000 n +0000026972 00000 n +0000027058 00000 n +0000027161 00000 n +0000027265 00000 n +0000027369 00000 n +0000027473 00000 n +0000027577 00000 n +0000027681 00000 n +0000027785 00000 n +0000027889 00000 n +0000027993 00000 n +0000028097 00000 n +0000028201 00000 n +0000028305 00000 n +0000028409 00000 n +0000028513 00000 n +0000028617 00000 n +0000028721 00000 n +0000028825 00000 n +0000028929 00000 n +0000029033 00000 n +0000029136 00000 n +0000029240 00000 n +0000029344 00000 n +0000029448 00000 n +0000029552 00000 n +0000029656 00000 n +0000029760 00000 n +0000029864 00000 n +0000029968 00000 n +0000030072 00000 n +0000030176 00000 n +0000030280 00000 n +0000030383 00000 n +0000030485 00000 n +0000030587 00000 n +0000030900 00000 n +0000031004 00000 n +0000031107 00000 n +0000031211 00000 n +0000031315 00000 n +0000031419 00000 n 0000031523 00000 n -0000031629 00000 n -0000031735 00000 n -0000031841 00000 n -0000031947 00000 n -0000032053 00000 n -0000032159 00000 n -0000032264 00000 n -0000032370 00000 n -0000032476 00000 n -0000032582 00000 n -0000032688 00000 n -0000032794 00000 n -0000032900 00000 n -0000033006 00000 n -0000033112 00000 n -0000033218 00000 n -0000033324 00000 n -0000033430 00000 n -0000033536 00000 n -0000033642 00000 n -0000033747 00000 n -0000033852 00000 n -0000033956 00000 n -0000034060 00000 n -0000034422 00000 n -0000034528 00000 n -0000034634 00000 n -0000034740 00000 n -0000034846 00000 n -0000034952 00000 n -0000035058 00000 n -0000035163 00000 n -0000035269 00000 n -0000035375 00000 n -0000035480 00000 n -0000035586 00000 n -0000035692 00000 n -0000035798 00000 n -0000035903 00000 n -0000036009 00000 n -0000036115 00000 n -0000036221 00000 n -0000036327 00000 n -0000036433 00000 n -0000036539 00000 n -0000036645 00000 n -0000036751 00000 n -0000036857 00000 n -0000036963 00000 n -0000037069 00000 n -0000037175 00000 n -0000037281 00000 n -0000037387 00000 n -0000037493 00000 n -0000037599 00000 n -0000037704 00000 n -0000037810 00000 n -0000037916 00000 n -0000038022 00000 n -0000038128 00000 n -0000038234 00000 n -0000038340 00000 n -0000038446 00000 n -0000038552 00000 n -0000038659 00000 n -0000038766 00000 n -0000038872 00000 n -0000038977 00000 n -0000039082 00000 n -0000039452 00000 n -0000039559 00000 n -0000039665 00000 n -0000039772 00000 n -0000039879 00000 n -0000039986 00000 n -0000040093 00000 n -0000040200 00000 n -0000040307 00000 n -0000040414 00000 n -0000040521 00000 n -0000040627 00000 n -0000040734 00000 n -0000040841 00000 n -0000040948 00000 n -0000041055 00000 n -0000041162 00000 n -0000041269 00000 n -0000041376 00000 n -0000041483 00000 n -0000041590 00000 n -0000041697 00000 n -0000041804 00000 n -0000041911 00000 n -0000042017 00000 n -0000042124 00000 n -0000042231 00000 n -0000042338 00000 n -0000042445 00000 n -0000042552 00000 n -0000042659 00000 n -0000042766 00000 n -0000042873 00000 n -0000042980 00000 n -0000043087 00000 n -0000043194 00000 n -0000043301 00000 n -0000043407 00000 n -0000043514 00000 n -0000043621 00000 n -0000043728 00000 n -0000043835 00000 n -0000043941 00000 n -0000044046 00000 n -0000044151 00000 n -0000044521 00000 n -0000044628 00000 n -0000044735 00000 n -0000044842 00000 n -0000044949 00000 n -0000045056 00000 n -0000045163 00000 n -0000045270 00000 n -0000045377 00000 n -0000045484 00000 n -0000045591 00000 n -0000045698 00000 n -0000045805 00000 n -0000045912 00000 n -0000046018 00000 n -0000046125 00000 n -0000046232 00000 n -0000046339 00000 n -0000046446 00000 n -0000046553 00000 n -0000046659 00000 n -0000046766 00000 n -0000046873 00000 n -0000046980 00000 n -0000047087 00000 n -0000047193 00000 n -0000047300 00000 n -0000047407 00000 n -0000047514 00000 n -0000047621 00000 n -0000047728 00000 n -0000047835 00000 n -0000047940 00000 n -0000048214 00000 n -0000048248 00000 n -0000048282 00000 n -0000052100 00000 n -0000052149 00000 n -0000052198 00000 n -0000052247 00000 n -0000052296 00000 n -0000052345 00000 n -0000052394 00000 n -0000052443 00000 n -0000052492 00000 n -0000052541 00000 n -0000052590 00000 n -0000052639 00000 n -0000052688 00000 n -0000052737 00000 n -0000052786 00000 n -0000052835 00000 n -0000052884 00000 n -0000052933 00000 n -0000052982 00000 n -0000053031 00000 n -0000053080 00000 n -0000053129 00000 n -0000053178 00000 n -0000053227 00000 n -0000053276 00000 n -0000053325 00000 n -0000053374 00000 n -0000053423 00000 n -0000053472 00000 n -0000053521 00000 n -0000053570 00000 n -0000053619 00000 n -0000053668 00000 n -0000053717 00000 n -0000053766 00000 n -0000053815 00000 n -0000053864 00000 n -0000053913 00000 n -0000053962 00000 n -0000054011 00000 n -0000054060 00000 n -0000054109 00000 n -0000054158 00000 n -0000054207 00000 n -0000054256 00000 n -0000054305 00000 n -0000054354 00000 n -0000054403 00000 n -0000054452 00000 n -0000054501 00000 n -0000054550 00000 n -0000054599 00000 n -0000054648 00000 n -0000054697 00000 n -0000054746 00000 n -0000054795 00000 n -0000054844 00000 n -0000054893 00000 n -0000054942 00000 n -0000054991 00000 n -0000055040 00000 n -0000055089 00000 n -0000055138 00000 n -0000055187 00000 n -0000055236 00000 n -0000055285 00000 n -0000055335 00000 n -0000055384 00000 n -0000055433 00000 n -0000055483 00000 n +0000031627 00000 n +0000031731 00000 n +0000031835 00000 n +0000031939 00000 n +0000032043 00000 n +0000032147 00000 n +0000032251 00000 n +0000032355 00000 n +0000032459 00000 n +0000032563 00000 n +0000032667 00000 n +0000032771 00000 n +0000032875 00000 n +0000032979 00000 n +0000033082 00000 n +0000033186 00000 n +0000033290 00000 n +0000033394 00000 n +0000033497 00000 n +0000033601 00000 n +0000033705 00000 n +0000033808 00000 n +0000033912 00000 n +0000034016 00000 n +0000034120 00000 n +0000034224 00000 n +0000034328 00000 n +0000034432 00000 n +0000034536 00000 n +0000034640 00000 n +0000034744 00000 n +0000034847 00000 n +0000034951 00000 n +0000035055 00000 n +0000035159 00000 n +0000035263 00000 n +0000035367 00000 n +0000035471 00000 n +0000035575 00000 n +0000035679 00000 n +0000035783 00000 n +0000035887 00000 n +0000035990 00000 n +0000036092 00000 n +0000036194 00000 n +0000036619 00000 n +0000036722 00000 n +0000036826 00000 n +0000036930 00000 n +0000037034 00000 n +0000037138 00000 n +0000037242 00000 n +0000037346 00000 n +0000037450 00000 n +0000037554 00000 n +0000037658 00000 n +0000037761 00000 n +0000037865 00000 n +0000037969 00000 n +0000038072 00000 n +0000038176 00000 n +0000038280 00000 n +0000038384 00000 n +0000038487 00000 n +0000038591 00000 n +0000038695 00000 n +0000038799 00000 n +0000038903 00000 n +0000039007 00000 n +0000039111 00000 n +0000039215 00000 n +0000039319 00000 n +0000039423 00000 n +0000039527 00000 n +0000039631 00000 n +0000039735 00000 n +0000039839 00000 n +0000039943 00000 n +0000040047 00000 n +0000040151 00000 n +0000040254 00000 n +0000040358 00000 n +0000040462 00000 n +0000040566 00000 n +0000040670 00000 n +0000040774 00000 n +0000040878 00000 n +0000040982 00000 n +0000041086 00000 n +0000041190 00000 n +0000041294 00000 n +0000041398 00000 n +0000041502 00000 n +0000041606 00000 n +0000041709 00000 n +0000041810 00000 n +0000041912 00000 n +0000042337 00000 n +0000042441 00000 n +0000042545 00000 n +0000042649 00000 n +0000042753 00000 n +0000042857 00000 n +0000042961 00000 n +0000043065 00000 n +0000043168 00000 n +0000043272 00000 n +0000043376 00000 n +0000043480 00000 n +0000043584 00000 n +0000043688 00000 n +0000043792 00000 n +0000043896 00000 n +0000044000 00000 n +0000044104 00000 n +0000044208 00000 n +0000044312 00000 n +0000044416 00000 n +0000044519 00000 n +0000044623 00000 n +0000044727 00000 n +0000044831 00000 n +0000044935 00000 n +0000045039 00000 n +0000045143 00000 n +0000045247 00000 n +0000045351 00000 n +0000045455 00000 n +0000045559 00000 n +0000045663 00000 n +0000045767 00000 n +0000045870 00000 n +0000045974 00000 n +0000046078 00000 n +0000046182 00000 n +0000046286 00000 n +0000046390 00000 n +0000046494 00000 n +0000046598 00000 n +0000046702 00000 n +0000046806 00000 n +0000046910 00000 n +0000047014 00000 n +0000047118 00000 n +0000047222 00000 n +0000047326 00000 n +0000047429 00000 n +0000047531 00000 n +0000047633 00000 n +0000048058 00000 n +0000048162 00000 n +0000048266 00000 n +0000048370 00000 n +0000048473 00000 n +0000048577 00000 n +0000048681 00000 n +0000048785 00000 n +0000048889 00000 n +0000048993 00000 n +0000049096 00000 n +0000049200 00000 n +0000049304 00000 n +0000049408 00000 n +0000049512 00000 n +0000049615 00000 n +0000049719 00000 n +0000049823 00000 n +0000049927 00000 n +0000050031 00000 n +0000050135 00000 n +0000050239 00000 n +0000050424 00000 n +0000050477 00000 n +0000050564 00000 n +0000050589 00000 n +0000050643 00000 n +0000050730 00000 n +0000050784 00000 n +0000050871 00000 n +0000050904 00000 n +0000050952 00000 n +0000051039 00000 n +0000051086 00000 n +0000051172 00000 n +0000051219 00000 n +0000051305 00000 n +0000051346 00000 n +0000051391 00000 n +0000051478 00000 n +0000051523 00000 n +0000051609 00000 n +0000051642 00000 n +0000051697 00000 n +0000051783 00000 n +0000051808 00000 n +0000051861 00000 n +0000051948 00000 n +0000051998 00000 n +0000052085 00000 n +0000052118 00000 n +0000052237 00000 n +0000052323 00000 n +0000052366 00000 n +0000052453 00000 n +0000052496 00000 n +0000052583 00000 n +0000052624 00000 n +0000052670 00000 n +0000052757 00000 n +0000052782 00000 n +0000052828 00000 n +0000052915 00000 n +0000052961 00000 n +0000053046 00000 n +0000053090 00000 n +0000053177 00000 n +0000053228 00000 n +0000053315 00000 n +0000053364 00000 n +0000053451 00000 n +0000053499 00000 n +0000053585 00000 n +0000053650 00000 n +0000053713 00000 n +0000053800 00000 n +0000053858 00000 n +0000053945 00000 n +0000054039 00000 n +0000054125 00000 n +0000054227 00000 n +0000054276 00000 n +0000054379 00000 n +0000054422 00000 n +0000054508 00000 n +0000054556 00000 n +0000054643 00000 n +0000054684 00000 n +0000054771 00000 n +0000054815 00000 n +0000054902 00000 n +0000054946 00000 n +0000055032 00000 n +0000055097 00000 n +0000055143 00000 n +0000055230 00000 n +0000055255 00000 n +0000055304 00000 n +0000055391 00000 n +0000055445 00000 n 0000055532 00000 n -0000055581 00000 n -0000055631 00000 n -0000055681 00000 n -0000055731 00000 n -0000055781 00000 n -0000055831 00000 n -0000055881 00000 n -0000055931 00000 n -0000055981 00000 n -0000056030 00000 n -0000056080 00000 n -0000056130 00000 n -0000056180 00000 n -0000056229 00000 n -0000056279 00000 n -0000056329 00000 n -0000056379 00000 n -0000056429 00000 n -0000056479 00000 n -0000056529 00000 n -0000056579 00000 n -0000056629 00000 n -0000056679 00000 n -0000056729 00000 n -0000056778 00000 n -0000056827 00000 n -0000056877 00000 n -0000056927 00000 n -0000056977 00000 n -0000057027 00000 n -0000057077 00000 n -0000057126 00000 n -0000057176 00000 n -0000057226 00000 n -0000057276 00000 n -0000057325 00000 n -0000057375 00000 n -0000057425 00000 n -0000057475 00000 n -0000057525 00000 n -0000057575 00000 n -0000057625 00000 n -0000057675 00000 n -0000057725 00000 n -0000057775 00000 n -0000057824 00000 n -0000057874 00000 n -0000057924 00000 n -0000057974 00000 n -0000058024 00000 n -0000058074 00000 n -0000058123 00000 n -0000058173 00000 n -0000058223 00000 n -0000058273 00000 n -0000058323 00000 n -0000058373 00000 n -0000058423 00000 n -0000058473 00000 n -0000058523 00000 n -0000058573 00000 n -0000058622 00000 n -0000058672 00000 n -0000058722 00000 n -0000058772 00000 n -0000058822 00000 n -0000058872 00000 n -0000058922 00000 n -0000058972 00000 n -0000059021 00000 n -0000059071 00000 n -0000059121 00000 n -0000059171 00000 n +0000055583 00000 n +0000055670 00000 n +0000055721 00000 n +0000055807 00000 n +0000055861 00000 n +0000055947 00000 n +0000056004 00000 n +0000056054 00000 n +0000056141 00000 n +0000056191 00000 n +0000056277 00000 n +0000056341 00000 n +0000056428 00000 n +0000056469 00000 n +0000056533 00000 n +0000056620 00000 n +0000056645 00000 n +0000056687 00000 n +0000056773 00000 n +0000056824 00000 n +0000056911 00000 n +0000056958 00000 n +0000057045 00000 n +0000057086 00000 n +0000057135 00000 n +0000057222 00000 n +0000057270 00000 n +0000057357 00000 n +0000057399 00000 n +0000057485 00000 n +0000057526 00000 n +0000057569 00000 n +0000057656 00000 n +0000057706 00000 n +0000057793 00000 n +0000057841 00000 n +0000057928 00000 n +0000057982 00000 n +0000058067 00000 n +0000058116 00000 n +0000058161 00000 n +0000058248 00000 n +0000058305 00000 n +0000058392 00000 n +0000058488 00000 n +0000058574 00000 n +0000058615 00000 n +0000058677 00000 n +0000058764 00000 n +0000058789 00000 n +0000058838 00000 n +0000058925 00000 n +0000058950 00000 n +0000058998 00000 n +0000059085 00000 n +0000059135 00000 n 0000059221 00000 n -0000059270 00000 n -0000059320 00000 n -0000059370 00000 n -0000059420 00000 n -0000059470 00000 n -0000059520 00000 n -0000059570 00000 n -0000059620 00000 n -0000059670 00000 n -0000059720 00000 n -0000059770 00000 n -0000059820 00000 n -0000059870 00000 n -0000059920 00000 n -0000059970 00000 n -0000060020 00000 n -0000060070 00000 n -0000060119 00000 n -0000060168 00000 n -0000060217 00000 n -0000060266 00000 n -0000060315 00000 n -0000060364 00000 n -0000060413 00000 n -0000060462 00000 n -0000060511 00000 n -0000060560 00000 n -0000060609 00000 n -0000060658 00000 n -0000060707 00000 n -0000060756 00000 n -0000060805 00000 n -0000060854 00000 n -0000060903 00000 n -0000060952 00000 n +0000059265 00000 n +0000059351 00000 n +0000059395 00000 n +0000059481 00000 n +0000059531 00000 n +0000059617 00000 n +0000059667 00000 n +0000059752 00000 n +0000059801 00000 n +0000059885 00000 n +0000059932 00000 n +0000060016 00000 n +0000060097 00000 n +0000060145 00000 n +0000060232 00000 n +0000060280 00000 n +0000060367 00000 n +0000060417 00000 n +0000060504 00000 n +0000060552 00000 n +0000060639 00000 n +0000060688 00000 n +0000060736 00000 n +0000060823 00000 n +0000060871 00000 n +0000060956 00000 n 0000061001 00000 n -0000061050 00000 n -0000061099 00000 n -0000061148 00000 n -0000061197 00000 n -0000061246 00000 n -0000061295 00000 n -0000061344 00000 n -0000061393 00000 n -0000061442 00000 n -0000061491 00000 n -0000061540 00000 n -0000061589 00000 n -0000061638 00000 n -0000061687 00000 n -0000061736 00000 n -0000061785 00000 n -0000061834 00000 n -0000061883 00000 n -0000061932 00000 n -0000061981 00000 n -0000062030 00000 n -0000062079 00000 n -0000062128 00000 n -0000062177 00000 n -0000062226 00000 n -0000062275 00000 n -0000062324 00000 n -0000062373 00000 n -0000062422 00000 n -0000062471 00000 n -0000062520 00000 n -0000062569 00000 n -0000062618 00000 n -0000062667 00000 n -0000062717 00000 n -0000062767 00000 n -0000062816 00000 n -0000062865 00000 n -0000062915 00000 n -0000062964 00000 n -0000063013 00000 n -0000063062 00000 n -0000063111 00000 n -0000063161 00000 n -0000063210 00000 n -0000063259 00000 n -0000063308 00000 n -0000063358 00000 n -0000063408 00000 n -0000063457 00000 n -0000063506 00000 n -0000063555 00000 n -0000063605 00000 n -0000063654 00000 n -0000063703 00000 n -0000064784 00000 n -0000064940 00000 n -0000065663 00000 n -0000065684 00000 n -0000065858 00000 n -0000067020 00000 n -0000067042 00000 n -0000067193 00000 n -0000068699 00000 n -0000068721 00000 n -0000068881 00000 n -0000070317 00000 n -0000070339 00000 n -0000070517 00000 n -0000071777 00000 n -0000071799 00000 n -0000071941 00000 n -0000073517 00000 n -0000073539 00000 n -0000073672 00000 n -0000075466 00000 n -0000075488 00000 n -0000075630 00000 n -0000077099 00000 n -0000077121 00000 n -0000077263 00000 n -0000078935 00000 n -0000078957 00000 n -0000079099 00000 n -0000080639 00000 n -0000080661 00000 n -0000080803 00000 n -0000082401 00000 n -0000082423 00000 n -0000082565 00000 n -0000084245 00000 n -0000084267 00000 n -0000084414 00000 n -0000084930 00000 n -0000084951 00000 n -0000085112 00000 n -0000086395 00000 n -0000086417 00000 n -0000086578 00000 n -0000088333 00000 n -0000088355 00000 n -0000088515 00000 n -0000090160 00000 n -0000090182 00000 n -0000090324 00000 n -0000092387 00000 n -0000092409 00000 n -0000092551 00000 n -0000094363 00000 n -0000094385 00000 n -0000094527 00000 n -0000096251 00000 n -0000096273 00000 n -0000096424 00000 n -0000098191 00000 n -0000098213 00000 n -0000098388 00000 n -0000100481 00000 n -0000100503 00000 n -0000100663 00000 n -0000102259 00000 n -0000102281 00000 n -0000102456 00000 n -0000103950 00000 n -0000103972 00000 n -0000104124 00000 n -0000104931 00000 n -0000104952 00000 n -0000105103 00000 n -0000106741 00000 n -0000106763 00000 n -0000106928 00000 n -0000108700 00000 n -0000108722 00000 n -0000108887 00000 n -0000109780 00000 n -0000109801 00000 n -0000109975 00000 n -0000111580 00000 n -0000111602 00000 n -0000111745 00000 n -0000112503 00000 n -0000112524 00000 n -0000112707 00000 n -0000114575 00000 n -0000114597 00000 n -0000114766 00000 n -0000116619 00000 n -0000116641 00000 n -0000116801 00000 n -0000118485 00000 n -0000118507 00000 n -0000118680 00000 n -0000120408 00000 n -0000120430 00000 n -0000120581 00000 n -0000121505 00000 n -0000121526 00000 n -0000121710 00000 n -0000123534 00000 n -0000123556 00000 n -0000123730 00000 n -0000125902 00000 n -0000125924 00000 n -0000126117 00000 n -0000128044 00000 n -0000128066 00000 n -0000128251 00000 n -0000130161 00000 n -0000130183 00000 n -0000130359 00000 n -0000132161 00000 n -0000132183 00000 n -0000132353 00000 n -0000133950 00000 n -0000133972 00000 n -0000134157 00000 n -0000135633 00000 n -0000135655 00000 n -0000135797 00000 n -0000137312 00000 n -0000137334 00000 n -0000137476 00000 n -0000138868 00000 n -0000138890 00000 n -0000139032 00000 n -0000140686 00000 n -0000140708 00000 n -0000140850 00000 n -0000142427 00000 n -0000142449 00000 n -0000142582 00000 n -0000142929 00000 n -0000142950 00000 n -0000143116 00000 n -0000144984 00000 n -0000145006 00000 n -0000145129 00000 n -0000146353 00000 n -0000146375 00000 n -0000146568 00000 n -0000148139 00000 n -0000148161 00000 n -0000148336 00000 n -0000150118 00000 n -0000150140 00000 n -0000150296 00000 n -0000151857 00000 n -0000151879 00000 n -0000152031 00000 n -0000153772 00000 n -0000153794 00000 n -0000153936 00000 n -0000155698 00000 n -0000155720 00000 n -0000155871 00000 n -0000157762 00000 n -0000157784 00000 n -0000157941 00000 n -0000159778 00000 n -0000159800 00000 n -0000159994 00000 n -0000162017 00000 n -0000162039 00000 n -0000162214 00000 n -0000163688 00000 n -0000163710 00000 n -0000163885 00000 n -0000165348 00000 n -0000165370 00000 n -0000165539 00000 n -0000166852 00000 n -0000166874 00000 n -0000167016 00000 n -0000168052 00000 n -0000168073 00000 n -0000168224 00000 n -0000169435 00000 n -0000169457 00000 n -0000169608 00000 n -0000171084 00000 n -0000171106 00000 n -0000171248 00000 n -0000172297 00000 n -0000172318 00000 n -0000172470 00000 n -0000173781 00000 n -0000173803 00000 n -0000173988 00000 n -0000175841 00000 n -0000175863 00000 n -0000176029 00000 n -0000177678 00000 n -0000177700 00000 n -0000177885 00000 n -0000179825 00000 n -0000179847 00000 n -0000180031 00000 n -0000181789 00000 n -0000181811 00000 n -0000181982 00000 n -0000183590 00000 n -0000183613 00000 n -0000183784 00000 n -0000185659 00000 n -0000185682 00000 n -0000185869 00000 n -0000187735 00000 n -0000187758 00000 n -0000187936 00000 n -0000190028 00000 n -0000190051 00000 n -0000190228 00000 n -0000192172 00000 n -0000192195 00000 n -0000192373 00000 n -0000194691 00000 n -0000194714 00000 n -0000194868 00000 n -0000196852 00000 n -0000196875 00000 n -0000197037 00000 n -0000198907 00000 n -0000198930 00000 n -0000199083 00000 n -0000200837 00000 n -0000200860 00000 n -0000200994 00000 n -0000202869 00000 n -0000202892 00000 n -0000203036 00000 n -0000205111 00000 n -0000205134 00000 n -0000205287 00000 n -0000207083 00000 n -0000207106 00000 n -0000207240 00000 n -0000209036 00000 n -0000209059 00000 n -0000209184 00000 n -0000209640 00000 n -0000209662 00000 n -0000209821 00000 n -0000211457 00000 n -0000211480 00000 n -0000211634 00000 n -0000213295 00000 n -0000213318 00000 n -0000213462 00000 n -0000214348 00000 n -0000214370 00000 n -0000214557 00000 n -0000216715 00000 n -0000216738 00000 n -0000216916 00000 n -0000219103 00000 n -0000219126 00000 n -0000219279 00000 n -0000220382 00000 n -0000220405 00000 n -0000220583 00000 n -0000222083 00000 n -0000222106 00000 n -0000222293 00000 n -0000224145 00000 n -0000224168 00000 n -0000224355 00000 n -0000226264 00000 n -0000226287 00000 n -0000226446 00000 n -0000227379 00000 n -0000227401 00000 n -0000227536 00000 n -0000229072 00000 n -0000229095 00000 n -0000229230 00000 n -0000231029 00000 n -0000231052 00000 n -0000231186 00000 n -0000232882 00000 n -0000232905 00000 n -0000233039 00000 n -0000234377 00000 n -0000234400 00000 n -0000234553 00000 n -0000236145 00000 n -0000236168 00000 n -0000236321 00000 n -0000237947 00000 n -0000237970 00000 n -0000238123 00000 n -0000239419 00000 n -0000239442 00000 n -0000239577 00000 n -0000241225 00000 n -0000241248 00000 n -0000241383 00000 n -0000242361 00000 n -0000242383 00000 n -0000242527 00000 n -0000244136 00000 n -0000244159 00000 n -0000244303 00000 n -0000245787 00000 n -0000245810 00000 n -0000245945 00000 n -0000247608 00000 n -0000247631 00000 n -0000247766 00000 n -0000249027 00000 n -0000249050 00000 n -0000249185 00000 n -0000250699 00000 n -0000250722 00000 n -0000250857 00000 n -0000252634 00000 n -0000252657 00000 n -0000252782 00000 n -0000253160 00000 n -0000253182 00000 n -0000253351 00000 n -0000255023 00000 n -0000255046 00000 n -0000255205 00000 n -0000256396 00000 n -0000256419 00000 n -0000256578 00000 n -0000258133 00000 n -0000258156 00000 n -0000258308 00000 n -0000259043 00000 n -0000259065 00000 n -0000259233 00000 n -0000260973 00000 n -0000260996 00000 n -0000261149 00000 n -0000262864 00000 n -0000262887 00000 n -0000263046 00000 n -0000263409 00000 n -0000263431 00000 n -0000263590 00000 n -0000268048 00000 n -0000268071 00000 n -0000268230 00000 n -0000273247 00000 n -0000273270 00000 n -0000273429 00000 n -0000278013 00000 n -0000278036 00000 n -0000278195 00000 n -0000283045 00000 n -0000283068 00000 n -0000283227 00000 n -0000286418 00000 n -0000286441 00000 n -0000286500 00000 n -0000286609 00000 n -0000286793 00000 n -0000286915 00000 n -0000287054 00000 n -0000287194 00000 n -0000287346 00000 n -0000287500 00000 n -0000287644 00000 n -0000287789 00000 n -0000287946 00000 n -0000288112 00000 n -0000288265 00000 n -0000288457 00000 n -0000288594 00000 n -0000288726 00000 n -0000288848 00000 n -0000288988 00000 n -0000289134 00000 n -0000289254 00000 n -0000289370 00000 n -0000289553 00000 n -0000289661 00000 n -0000289782 00000 n -0000289897 00000 n -0000290015 00000 n -0000290133 00000 n -0000290251 00000 n -0000290369 00000 n -0000290487 00000 n -0000290605 00000 n -0000290723 00000 n -0000290841 00000 n -0000290959 00000 n -0000291079 00000 n -0000291199 00000 n -0000291317 00000 n -0000291514 00000 n -0000291616 00000 n -0000291768 00000 n -0000291890 00000 n -0000292018 00000 n -0000292144 00000 n -0000292274 00000 n -0000292436 00000 n -0000292570 00000 n -0000292698 00000 n -0000292820 00000 n -0000292942 00000 n -0000293065 00000 n -0000293259 00000 n -0000293449 00000 n -0000293606 00000 n -0000293773 00000 n -0000293928 00000 n -0000294035 00000 n -0000294258 00000 n -0000294367 00000 n -0000294503 00000 n -0000294628 00000 n -0000294839 00000 n -0000294947 00000 n -0000295050 00000 n -0000295260 00000 n -0000295424 00000 n -0000295576 00000 n -0000295708 00000 n -0000295855 00000 n -0000295983 00000 n -0000296116 00000 n -0000296265 00000 n -0000296434 00000 n -0000296589 00000 n -0000296775 00000 n -0000296883 00000 n -0000297006 00000 n -0000297135 00000 n -0000297284 00000 n -0000297430 00000 n -0000297584 00000 n -0000297719 00000 n -0000297849 00000 n -0000297978 00000 n -0000298122 00000 n -0000298253 00000 n -0000298388 00000 n -0000298522 00000 n -0000298703 00000 n -0000298811 00000 n -0000298947 00000 n -0000299081 00000 n -0000299228 00000 n -0000299357 00000 n -0000299491 00000 n -0000299623 00000 n -0000299750 00000 n -0000299860 00000 n -0000300029 00000 n -0000300137 00000 n -0000300277 00000 n -0000300462 00000 n -0000300594 00000 n -0000300735 00000 n -0000300874 00000 n -0000301086 00000 n -0000301191 00000 n -0000301314 00000 n -0000301446 00000 n -0000301570 00000 n -0000301698 00000 n -0000301843 00000 n -0000301975 00000 n -0000302120 00000 n -0000302261 00000 n -0000302388 00000 n -0000302529 00000 n -0000302654 00000 n -0000302779 00000 n -0000302910 00000 n -0000303032 00000 n -0000303139 00000 n -0000303352 00000 n -0000303469 00000 n -0000303590 00000 n -0000303740 00000 n -0000303916 00000 n -0000304070 00000 n -0000304230 00000 n -0000304375 00000 n -0000304512 00000 n -0000304652 00000 n -0000304790 00000 n -0000304934 00000 n -0000305090 00000 n -0000305264 00000 n -0000305416 00000 n -0000305648 00000 n -0000305766 00000 n -0000305888 00000 n -0000306050 00000 n -0000306214 00000 n -0000306351 00000 n -0000306503 00000 n -0000306643 00000 n -0000306781 00000 n -0000307007 00000 n -0000307112 00000 n -0000307236 00000 n -0000307370 00000 n -0000307534 00000 n -0000307673 00000 n -0000307809 00000 n -0000307940 00000 n -0000308082 00000 n -0000308219 00000 n -0000308373 00000 n -0000308524 00000 n -0000308631 00000 n -0000308814 00000 n -0000308932 00000 n -0000309069 00000 n -0000309199 00000 n -0000309334 00000 n -0000309485 00000 n -0000309621 00000 n -0000309767 00000 n -0000309910 00000 n -0000310052 00000 n -0000310194 00000 n -0000310337 00000 n -0000310455 00000 n -0000310636 00000 n -0000310745 00000 n -0000310864 00000 n -0000310986 00000 n -0000311114 00000 n -0000311266 00000 n -0000311392 00000 n -0000311513 00000 n -0000311633 00000 n -0000311752 00000 n -0000311875 00000 n -0000311996 00000 n -0000312118 00000 n -0000312239 00000 n -0000312361 00000 n -0000312489 00000 n -0000312616 00000 n -0000312741 00000 n -0000312865 00000 n -0000312991 00000 n -0000313100 00000 n -0000313272 00000 n -0000313374 00000 n -0000313564 00000 n -0000313759 00000 n -0000313947 00000 n -0000314110 00000 n -0000314304 00000 n -0000314414 00000 n -0000314549 00000 n -0000314680 00000 n -0000314794 00000 n -0000314964 00000 n -0000315074 00000 n -0000315198 00000 n -0000315322 00000 n -0000315449 00000 n -0000315591 00000 n -0000315696 00000 n -0000315793 00000 n +0000061087 00000 n +0000061130 00000 n +0000061216 00000 n +0000061257 00000 n +0000061343 00000 n +0000061392 00000 n +0000061478 00000 n +0000061524 00000 n +0000061610 00000 n +0000061655 00000 n +0000061741 00000 n +0000061793 00000 n +0000061879 00000 n +0000061929 00000 n +0000062015 00000 n +0000062061 00000 n +0000062147 00000 n +0000062190 00000 n +0000062276 00000 n +0000062320 00000 n +0000062406 00000 n +0000062449 00000 n +0000062535 00000 n +0000062580 00000 n +0000062666 00000 n +0000062704 00000 n +0000062790 00000 n +0000062832 00000 n +0000062918 00000 n +0000062961 00000 n +0000063047 00000 n +0000063085 00000 n +0000063171 00000 n +0000063213 00000 n +0000063299 00000 n +0000063343 00000 n +0000063429 00000 n +0000063476 00000 n +0000063562 00000 n +0000063610 00000 n +0000063695 00000 n +0000063896 00000 n +0000063946 00000 n +0000064033 00000 n +0000064083 00000 n +0000064169 00000 n +0000064202 00000 n +0000064251 00000 n +0000064337 00000 n +0000064384 00000 n +0000064471 00000 n +0000064504 00000 n +0000064619 00000 n +0000064706 00000 n +0000064731 00000 n +0000064813 00000 n +0000064900 00000 n +0000064985 00000 n +0000065072 00000 n +0000065105 00000 n +0000065160 00000 n +0000065247 00000 n +0000065303 00000 n +0000065390 00000 n +0000065423 00000 n +0000065471 00000 n +0000065558 00000 n +0000065632 00000 n +0000065719 00000 n +0000065787 00000 n +0000065874 00000 n +0000065928 00000 n +0000066015 00000 n +0000066083 00000 n +0000066170 00000 n +0000066244 00000 n +0000066331 00000 n +0000066379 00000 n +0000066466 00000 n +0000066523 00000 n +0000066610 00000 n +0000066691 00000 n +0000066746 00000 n +0000066833 00000 n +0000066914 00000 n +0000067001 00000 n +0000067034 00000 n +0000067087 00000 n +0000067174 00000 n +0000067199 00000 n +0000067255 00000 n +0000067342 00000 n +0000067411 00000 n +0000067498 00000 n +0000067549 00000 n +0000067636 00000 n +0000067723 00000 n +0000067810 00000 n +0000067866 00000 n +0000067953 00000 n +0000068003 00000 n +0000068090 00000 n +0000068155 00000 n +0000068207 00000 n +0000068294 00000 n +0000068350 00000 n +0000068437 00000 n +0000068485 00000 n +0000068572 00000 n +0000068620 00000 n +0000068707 00000 n +0000068756 00000 n +0000068797 00000 n +0000068882 00000 n +0000068907 00000 n +0000068951 00000 n +0000069038 00000 n +0000069083 00000 n +0000069170 00000 n +0000069214 00000 n +0000069301 00000 n +0000069345 00000 n +0000069432 00000 n +0000069474 00000 n +0000069561 00000 n +0000069609 00000 n +0000069696 00000 n +0000069761 00000 n +0000069809 00000 n +0000069895 00000 n +0000069920 00000 n +0000069973 00000 n +0000070059 00000 n +0000070084 00000 n +0000070138 00000 n +0000070225 00000 n +0000070250 00000 n +0000070329 00000 n +0000070416 00000 n +0000070498 00000 n +0000070584 00000 n +0000070659 00000 n +0000070746 00000 n +0000070819 00000 n +0000070906 00000 n +0000070955 00000 n +0000071033 00000 n +0000071120 00000 n +0000071145 00000 n +0000071208 00000 n +0000071295 00000 n +0000071358 00000 n +0000071445 00000 n +0000071499 00000 n +0000071586 00000 n +0000071627 00000 n +0000071674 00000 n +0000071761 00000 n +0000071786 00000 n +0000071820 00000 n +0000071854 00000 n +0000075683 00000 n +0000075727 00000 n +0000075771 00000 n +0000075815 00000 n +0000075859 00000 n +0000075903 00000 n +0000075947 00000 n +0000075991 00000 n +0000076035 00000 n +0000076079 00000 n +0000076123 00000 n +0000076167 00000 n +0000076211 00000 n +0000076255 00000 n +0000076299 00000 n +0000076343 00000 n +0000076387 00000 n +0000076431 00000 n +0000076475 00000 n +0000076519 00000 n +0000076563 00000 n +0000076607 00000 n +0000076651 00000 n +0000076695 00000 n +0000076739 00000 n +0000076783 00000 n +0000076827 00000 n +0000076871 00000 n +0000076915 00000 n +0000076959 00000 n +0000077003 00000 n +0000077047 00000 n +0000077091 00000 n +0000077135 00000 n +0000077179 00000 n +0000077223 00000 n +0000077267 00000 n +0000077311 00000 n +0000077355 00000 n +0000077399 00000 n +0000077443 00000 n +0000077487 00000 n +0000077531 00000 n +0000077575 00000 n +0000077619 00000 n +0000077663 00000 n +0000077707 00000 n +0000077751 00000 n +0000077795 00000 n +0000077839 00000 n +0000077883 00000 n +0000077927 00000 n +0000077971 00000 n +0000078015 00000 n +0000078059 00000 n +0000078103 00000 n +0000078147 00000 n +0000078191 00000 n +0000078235 00000 n +0000078279 00000 n +0000078323 00000 n +0000078367 00000 n +0000078411 00000 n +0000078455 00000 n +0000078499 00000 n +0000078543 00000 n +0000078587 00000 n +0000078631 00000 n +0000078675 00000 n +0000078719 00000 n +0000078763 00000 n +0000078807 00000 n +0000078851 00000 n +0000078895 00000 n +0000078939 00000 n +0000078983 00000 n +0000079027 00000 n +0000079071 00000 n +0000079115 00000 n +0000079159 00000 n +0000079203 00000 n +0000079247 00000 n +0000079291 00000 n +0000079335 00000 n +0000079379 00000 n +0000079423 00000 n +0000079467 00000 n +0000079511 00000 n +0000079555 00000 n +0000079599 00000 n +0000079643 00000 n +0000079687 00000 n +0000079731 00000 n +0000079775 00000 n +0000079819 00000 n +0000079863 00000 n +0000079907 00000 n +0000079951 00000 n +0000079995 00000 n +0000080039 00000 n +0000080083 00000 n +0000080127 00000 n +0000080171 00000 n +0000080215 00000 n +0000080259 00000 n +0000080303 00000 n +0000080347 00000 n +0000080391 00000 n +0000080435 00000 n +0000080479 00000 n +0000080523 00000 n +0000080567 00000 n +0000080611 00000 n +0000080655 00000 n +0000080699 00000 n +0000080743 00000 n +0000080787 00000 n +0000080831 00000 n +0000080875 00000 n +0000080919 00000 n +0000080963 00000 n +0000081007 00000 n +0000081051 00000 n +0000081095 00000 n +0000081139 00000 n +0000081183 00000 n +0000081227 00000 n +0000081271 00000 n +0000081315 00000 n +0000081359 00000 n +0000081403 00000 n +0000081447 00000 n +0000081491 00000 n +0000081535 00000 n +0000081579 00000 n +0000081623 00000 n +0000081667 00000 n +0000081711 00000 n +0000081755 00000 n +0000081799 00000 n +0000081843 00000 n +0000081887 00000 n +0000081931 00000 n +0000081975 00000 n +0000082019 00000 n +0000082063 00000 n +0000082107 00000 n +0000082151 00000 n +0000082195 00000 n +0000082239 00000 n +0000082283 00000 n +0000082327 00000 n +0000082371 00000 n +0000082415 00000 n +0000082459 00000 n +0000082503 00000 n +0000082547 00000 n +0000082591 00000 n +0000082635 00000 n +0000082679 00000 n +0000082723 00000 n +0000082767 00000 n +0000082811 00000 n +0000082855 00000 n +0000082899 00000 n +0000082943 00000 n +0000082987 00000 n +0000083031 00000 n +0000083075 00000 n +0000083119 00000 n +0000083163 00000 n +0000083207 00000 n +0000083251 00000 n +0000083295 00000 n +0000083339 00000 n +0000083383 00000 n +0000083427 00000 n +0000083471 00000 n +0000083515 00000 n +0000083559 00000 n +0000083603 00000 n +0000083647 00000 n +0000083691 00000 n +0000083735 00000 n +0000083779 00000 n +0000083823 00000 n +0000083867 00000 n +0000083911 00000 n +0000083955 00000 n +0000083999 00000 n +0000084043 00000 n +0000084087 00000 n +0000084131 00000 n +0000084175 00000 n +0000084219 00000 n +0000084263 00000 n +0000084307 00000 n +0000084351 00000 n +0000084395 00000 n +0000084439 00000 n +0000084483 00000 n +0000084527 00000 n +0000084571 00000 n +0000084615 00000 n +0000084659 00000 n +0000084703 00000 n +0000084747 00000 n +0000084791 00000 n +0000084835 00000 n +0000084879 00000 n +0000084923 00000 n +0000084967 00000 n +0000085011 00000 n +0000085055 00000 n +0000085099 00000 n +0000085143 00000 n +0000085187 00000 n +0000085231 00000 n +0000085275 00000 n +0000085319 00000 n +0000085363 00000 n +0000085407 00000 n +0000085451 00000 n +0000085495 00000 n +0000085540 00000 n +0000085585 00000 n +0000085630 00000 n +0000085675 00000 n +0000085720 00000 n +0000085765 00000 n +0000085810 00000 n +0000085855 00000 n +0000085900 00000 n +0000085945 00000 n +0000085990 00000 n +0000087128 00000 n +0000087289 00000 n +0000087458 00000 n +0000087651 00000 n +0000091401 00000 n +0000091595 00000 n +0000096208 00000 n +0000096402 00000 n +0000100424 00000 n +0000100618 00000 n +0000105295 00000 n +0000105489 00000 n +0000108864 00000 n +0000109025 00000 n +0000109259 00000 n +0000109463 00000 n +0000111991 00000 n +0000112175 00000 n +0000115562 00000 n +0000115737 00000 n +0000118870 00000 n +0000119045 00000 n +0000121911 00000 n +0000122086 00000 n +0000123648 00000 n +0000123860 00000 n +0000125016 00000 n +0000125204 00000 n +0000126725 00000 n +0000126922 00000 n +0000128358 00000 n +0000128573 00000 n +0000129938 00000 n +0000130117 00000 n +0000131659 00000 n +0000131829 00000 n +0000133376 00000 n +0000133555 00000 n +0000134989 00000 n +0000135168 00000 n +0000136881 00000 n +0000137060 00000 n +0000138608 00000 n +0000138787 00000 n +0000140477 00000 n +0000140671 00000 n +0000142391 00000 n +0000142589 00000 n +0000143950 00000 n +0000144148 00000 n +0000145832 00000 n +0000146020 00000 n +0000147693 00000 n +0000147872 00000 n +0000149972 00000 n +0000150151 00000 n +0000151924 00000 n +0000152103 00000 n +0000153783 00000 n +0000153971 00000 n +0000155826 00000 n +0000156038 00000 n +0000158096 00000 n +0000158309 00000 n +0000159876 00000 n +0000160065 00000 n +0000161340 00000 n +0000161528 00000 n +0000163054 00000 n +0000163257 00000 n +0000164983 00000 n +0000165186 00000 n +0000166036 00000 n +0000166248 00000 n +0000167758 00000 n +0000167938 00000 n +0000168696 00000 n +0000168917 00000 n +0000170715 00000 n +0000170921 00000 n +0000172803 00000 n +0000173000 00000 n +0000174586 00000 n +0000174797 00000 n +0000176366 00000 n +0000176554 00000 n +0000177456 00000 n +0000177687 00000 n +0000179554 00000 n +0000179766 00000 n +0000181714 00000 n +0000181945 00000 n +0000183955 00000 n +0000184177 00000 n +0000185990 00000 n +0000186212 00000 n +0000187950 00000 n +0000188148 00000 n +0000190047 00000 n +0000190259 00000 n +0000191158 00000 n +0000191337 00000 n +0000192800 00000 n +0000192979 00000 n +0000194295 00000 n +0000194474 00000 n +0000196096 00000 n +0000196275 00000 n +0000197772 00000 n +0000197942 00000 n +0000198286 00000 n +0000198489 00000 n +0000200392 00000 n +0000200552 00000 n +0000201675 00000 n +0000201905 00000 n +0000203429 00000 n +0000203641 00000 n +0000205430 00000 n +0000205623 00000 n +0000207029 00000 n +0000207218 00000 n +0000208909 00000 n +0000209088 00000 n +0000210834 00000 n +0000211022 00000 n +0000212929 00000 n +0000213142 00000 n +0000215027 00000 n +0000215267 00000 n +0000217360 00000 n +0000217572 00000 n +0000219173 00000 n +0000219379 00000 n +0000220540 00000 n +0000220728 00000 n +0000221926 00000 n +0000222105 00000 n +0000223111 00000 n +0000223299 00000 n +0000224926 00000 n +0000225114 00000 n +0000226383 00000 n +0000226572 00000 n +0000227880 00000 n +0000228050 00000 n +0000228522 00000 n +0000228735 00000 n +0000230550 00000 n +0000230763 00000 n +0000232341 00000 n +0000232563 00000 n +0000234382 00000 n +0000234622 00000 n +0000236345 00000 n +0000236552 00000 n +0000238397 00000 n +0000238628 00000 n +0000240518 00000 n +0000240740 00000 n +0000242686 00000 n +0000242898 00000 n +0000244947 00000 n +0000245150 00000 n +0000247484 00000 n +0000247706 00000 n +0000249950 00000 n +0000250157 00000 n +0000252137 00000 n +0000252316 00000 n +0000253874 00000 n +0000254044 00000 n +0000256044 00000 n +0000256232 00000 n +0000258319 00000 n +0000258507 00000 n +0000260317 00000 n +0000260495 00000 n +0000262345 00000 n +0000262505 00000 n +0000263289 00000 n +0000263483 00000 n +0000265084 00000 n +0000265273 00000 n +0000266934 00000 n +0000267104 00000 n +0000267926 00000 n +0000268148 00000 n +0000270284 00000 n +0000270497 00000 n +0000272551 00000 n +0000272773 00000 n +0000273995 00000 n +0000274208 00000 n +0000275805 00000 n +0000276027 00000 n +0000277850 00000 n +0000278072 00000 n +0000279804 00000 n +0000279998 00000 n +0000280725 00000 n +0000280895 00000 n +0000282572 00000 n +0000282751 00000 n +0000284566 00000 n +0000284735 00000 n +0000286578 00000 n +0000286747 00000 n +0000287736 00000 n +0000287915 00000 n +0000289563 00000 n +0000289751 00000 n +0000291242 00000 n +0000291430 00000 n +0000292855 00000 n +0000293025 00000 n +0000294693 00000 n +0000294863 00000 n +0000295420 00000 n +0000295599 00000 n +0000297205 00000 n +0000297384 00000 n +0000299054 00000 n +0000299224 00000 n +0000300773 00000 n +0000300943 00000 n +0000302243 00000 n +0000302413 00000 n +0000304039 00000 n +0000304209 00000 n +0000305796 00000 n +0000306000 00000 n +0000307587 00000 n +0000307781 00000 n +0000308949 00000 n +0000309152 00000 n +0000310725 00000 n +0000310903 00000 n +0000311589 00000 n +0000311792 00000 n +0000313470 00000 n +0000313658 00000 n +0000315387 00000 n +0000315446 00000 n +0000315549 00000 n +0000315714 00000 n +0000315796 00000 n +0000315904 00000 n +0000316083 00000 n +0000316200 00000 n +0000316334 00000 n +0000316469 00000 n +0000316616 00000 n +0000316764 00000 n +0000316941 00000 n +0000317067 00000 n +0000317205 00000 n +0000317365 00000 n +0000317513 00000 n +0000317699 00000 n +0000317855 00000 n +0000317968 00000 n +0000318085 00000 n +0000318220 00000 n +0000318361 00000 n +0000318476 00000 n +0000318587 00000 n +0000318764 00000 n +0000318867 00000 n +0000318983 00000 n +0000319132 00000 n +0000319231 00000 n +0000319344 00000 n +0000319457 00000 n +0000319570 00000 n +0000319683 00000 n +0000319796 00000 n +0000319909 00000 n +0000320022 00000 n +0000320135 00000 n +0000320250 00000 n +0000320351 00000 n +0000320464 00000 n +0000320655 00000 n +0000320752 00000 n +0000320937 00000 n +0000321040 00000 n +0000321163 00000 n +0000321284 00000 n +0000321395 00000 n +0000321590 00000 n +0000321705 00000 n +0000321828 00000 n +0000321945 00000 n +0000322062 00000 n +0000322166 00000 n +0000322354 00000 n +0000322576 00000 n +0000322714 00000 n +0000322876 00000 n +0000323012 00000 n +0000323114 00000 n +0000323331 00000 n +0000323435 00000 n +0000323566 00000 n +0000323686 00000 n +0000323892 00000 n +0000324019 00000 n +0000324103 00000 n +0000324308 00000 n +0000324466 00000 n +0000324613 00000 n +0000324740 00000 n +0000324920 00000 n +0000325029 00000 n +0000325143 00000 n +0000325287 00000 n +0000325450 00000 n +0000325599 00000 n +0000325779 00000 n +0000325882 00000 n +0000326038 00000 n +0000326148 00000 n +0000326292 00000 n +0000326433 00000 n +0000326582 00000 n +0000326698 00000 n +0000326861 00000 n +0000326971 00000 n +0000327110 00000 n +0000327236 00000 n +0000327352 00000 n +0000327481 00000 n +0000327657 00000 n +0000327760 00000 n +0000327891 00000 n +0000328020 00000 n +0000328162 00000 n +0000328286 00000 n +0000328415 00000 n +0000328542 00000 n +0000328664 00000 n +0000328769 00000 n +0000328933 00000 n +0000329036 00000 n +0000329171 00000 n +0000329351 00000 n +0000329478 00000 n +0000329614 00000 n +0000329748 00000 n +0000329954 00000 n +0000330054 00000 n +0000330172 00000 n +0000330337 00000 n +0000330428 00000 n +0000330589 00000 n +0000330715 00000 n +0000330842 00000 n +0000330982 00000 n +0000331118 00000 n +0000331226 00000 n +0000331400 00000 n +0000331506 00000 n +0000331626 00000 n +0000331738 00000 n +0000331855 00000 n +0000331957 00000 n +0000332164 00000 n +0000332276 00000 n +0000332392 00000 n +0000332537 00000 n +0000332746 00000 n +0000332881 00000 n +0000333036 00000 n +0000333162 00000 n +0000333294 00000 n +0000333428 00000 n +0000333560 00000 n +0000333736 00000 n +0000333872 00000 n +0000334026 00000 n +0000334172 00000 n +0000334398 00000 n +0000334510 00000 n +0000334626 00000 n +0000334820 00000 n +0000334964 00000 n +0000335081 00000 n +0000335227 00000 n +0000335385 00000 n +0000335503 00000 n +0000335723 00000 n +0000335822 00000 n +0000335940 00000 n +0000336068 00000 n +0000336226 00000 n +0000336397 00000 n +0000336513 00000 n +0000336624 00000 n +0000336760 00000 n +0000336891 00000 n +0000337039 00000 n +0000337184 00000 n +0000337285 00000 n +0000337462 00000 n +0000337574 00000 n +0000337705 00000 n +0000337829 00000 n +0000337996 00000 n +0000338113 00000 n +0000338243 00000 n +0000338383 00000 n +0000338520 00000 n +0000338656 00000 n +0000338792 00000 n +0000338929 00000 n +0000339041 00000 n +0000339216 00000 n +0000339319 00000 n +0000339470 00000 n +0000339572 00000 n +0000339694 00000 n +0000339826 00000 n +0000339946 00000 n +0000340061 00000 n +0000340175 00000 n +0000340288 00000 n +0000340405 00000 n +0000340520 00000 n +0000340636 00000 n +0000340751 00000 n +0000340867 00000 n +0000340989 00000 n +0000341110 00000 n +0000341229 00000 n +0000341347 00000 n +0000341467 00000 n +0000341570 00000 n +0000341736 00000 n +0000341856 00000 n +0000342025 00000 n +0000342213 00000 n +0000342394 00000 n +0000342550 00000 n +0000342738 00000 n +0000342842 00000 n +0000342995 00000 n +0000343106 00000 n +0000343214 00000 n +0000343364 00000 n +0000343468 00000 n +0000343586 00000 n +0000343704 00000 n +0000343825 00000 n +0000343961 00000 n +0000344060 00000 n trailer -<<71cc99b012ddb9744eb11230f6ad49a0>]>> +<<1ca9696980f269e0c25de21a8ecbd4b4>]>> startxref -316009 +344676 %%EOF diff --git a/docs/docbook/stylesheets/ldp.dsl.in b/docs/docbook/stylesheets/ldp.dsl.in deleted file mode 100644 index d6e06f4b6d..0000000000 --- a/docs/docbook/stylesheets/ldp.dsl.in +++ /dev/null @@ -1,256 +0,0 @@ - - - -]]> - - -]]> -]> - - - - - - -;; ============================== -;; customize the print stylesheet -;; ============================== - -(declare-characteristic preserve-sdata? - ;; this is necessary because right now jadetex does not understand - ;; symbolic entities, whereas things work well with numeric entities. - "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" - #f) - -(define %generate-article-toc% - ;; Should a Table of Contents be produced for Articles? - #t) - -(define (toc-depth nd) - 2) - -(define %generate-article-titlepage-on-separate-page% - ;; Should the article title page be on a separate page? - #t) - -(define %section-autolabel% - ;; Are sections enumerated? - #t) - -(define %footnote-ulinks% - ;; Generate footnotes for ULinks? - #f) - -(define %bop-footnotes% - ;; Make "bottom-of-page" footnotes? - #f) - -(define %body-start-indent% - ;; Default indent of body text - 0pi) - -(define %para-indent-firstpara% - ;; First line start-indent for the first paragraph - 0pt) - -(define %para-indent% - ;; First line start-indent for paragraphs (other than the first) - 0pt) - -(define %block-start-indent% - ;; Extra start-indent for block-elements - 0pt) - -(define formal-object-float - ;; Do formal objects float? - #t) - -(define %hyphenation% - ;; Allow automatic hyphenation? - #t) - -(define %admon-graphics% - ;; Use graphics in admonitions? - #f) - - - - - - - - - - -(declare-characteristic preserve-sdata? - ;; this is necessary because right now jadetex does not understand - ;; symbolic entities, whereas things work well with numeric entities. - "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" - #f) - -(define %generate-legalnotice-link% - ;; put the legal notice in a separate file - #t) - -(define %admon-graphics-path% - ;; use graphics in admonitions, set their - "../images/") - -(define %admon-graphics% - #f) - -(define %funcsynopsis-decoration% - ;; make funcsynopsis look pretty - #t) - -(define %html-ext% - ;; when producing HTML files, use this extension - ".html") - -(define %generate-book-toc% - ;; Should a Table of Contents be produced for books? - #t) - -(define %generate-article-toc% - ;; Should a Table of Contents be produced for articles? - #t) - -(define %generate-part-toc% - ;; Should a Table of Contents be produced for parts? - #t) - -(define %generate-book-titlepage% - ;; produce a title page for books - #t) - -(define %generate-article-titlepage% - ;; produce a title page for articles - #t) - -(define (chunk-skip-first-element-list) - ;; forces the Table of Contents on separate page - '()) - -(define (list-element-list) - ;; fixes bug in Table of Contents generation - '()) - -(define %root-filename% - ;; The filename of the root HTML document (e.g, "index"). - "index") - -(define %shade-verbatim% - ;; verbatim sections will be shaded if t(rue) - #t) - -(define %use-id-as-filename% - ;; Use ID attributes as name for component HTML files? - #t) - -(define %graphic-extensions% - ;; graphic extensions allowed - '("gif" "png" "jpg" "jpeg" "tif" "tiff" "eps" "epsf" )) - -(define %graphic-default-extension% - "gif") - -(define %section-autolabel% - ;; For enumerated sections (1.1, 1.1.1, 1.2, etc.) - #t) - -(define (toc-depth nd) - ;; more depth (2 levels) to toc; instead of flat hierarchy - ;; 2) - 4) - -(element emphasis - ;; make role=strong equate to bold for emphasis tag - (if (equal? (attribute-string "role") "strong") - (make element gi: "STRONG" (process-children)) - (make element gi: "EM" (process-children)))) - -(define (book-titlepage-recto-elements) - ;; elements on a book's titlepage - ;; note: added revhistory to the default list - (list (normalize "title") - (normalize "subtitle") - (normalize "graphic") - (normalize "mediaobject") - (normalize "corpauthor") - (normalize "authorgroup") - (normalize "author") - (normalize "editor") - (normalize "copyright") - (normalize "revhistory") - (normalize "abstract") - (normalize "legalnotice"))) - -(define (article-titlepage-recto-elements) - ;; elements on an article's titlepage - ;; note: added othercredit to the default list - (list (normalize "title") - (normalize "subtitle") - (normalize "authorgroup") - (normalize "author") - (normalize "othercredit") - (normalize "releaseinfo") - (normalize "copyright") - (normalize "pubdate") - (normalize "revhistory") - (normalize "abstract"))) - -(mode article-titlepage-recto-mode - - (element contrib - ;; print out with othercredit information; for translators, etc. - (make sequence - (make element gi: "SPAN" - attributes: (list (list "CLASS" (gi))) - (process-children)))) - - (element othercredit - ;; print out othercredit information; for translators, etc. - (let ((author-name (author-string)) - (author-contrib (select-elements (children (current-node)) - (normalize "contrib")))) - (make element gi: "P" - attributes: (list (list "CLASS" (gi))) - (make element gi: "B" - (literal author-name) - (literal " - ")) - (process-node-list author-contrib)))) -) - -(define (article-title nd) - (let* ((artchild (children nd)) - (artheader (select-elements artchild (normalize "artheader"))) - (artinfo (select-elements artchild (normalize "articleinfo"))) - (ahdr (if (node-list-empty? artheader) - artinfo - artheader)) - (ahtitles (select-elements (children ahdr) - (normalize "title"))) - (artitles (select-elements artchild (normalize "title"))) - (titles (if (node-list-empty? artitles) - ahtitles - artitles))) - (if (node-list-empty? titles) - "" - (node-list-first titles)))) - - - - - - - - - diff --git a/docs/manpages/findsmb.1 b/docs/manpages/findsmb.1 index a6bb66b7f1..c10076fd5c 100644 --- a/docs/manpages/findsmb.1 +++ b/docs/manpages/findsmb.1 @@ -1,27 +1,28 @@ -.\" This manpage has been automatically generated by docbook2man-spec -.\" from a DocBook document. docbook2man-spec can be found at: -.\" +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "FINDSMB" "1" "28 January 2002" "" "" +.TH "FINDSMB" "1" "20 augustus 2002" "" "" .SH NAME findsmb \- list info about machines that respond to SMB name queries on a subnet .SH SYNOPSIS -.sp -\fBfindsmb\fR [ \fBsubnet broadcast address\fR ] + +\fBfindsmb\fR [ \fBsubnet broadcast address\fR ] + .SH "DESCRIPTION" .PP -This perl script is part of the Sambasuite. +This perl script is part of the Samba suite. .PP \fBfindsmb\fR is a perl script that prints out several pieces of information about machines -on a subnet that respond to SMB name query requests. -It uses \fB nmblookup(1)\fRto obtain this information. +on a subnet that respond to SMB name query requests. +It uses \fB nmblookup(1)\fR and \fBsmbclient(1)\fR to obtain this information. .SH "OPTIONS" .TP \fBsubnet broadcast address\fR Without this option, \fBfindsmb -\fRwill probe the subnet of the machine where +\fR will probe the subnet of the machine where \fBfindsmb\fR is run. This value is passed to \fBnmblookup\fR as part of the -B option @@ -40,16 +41,16 @@ Machines that are running Windows, Windows 95 or Windows 98 will not show any information about the operating system or server version. .PP -The command must be run on a system without \fBnmbd\fRrunning. +The command must be run on a system without \fBnmbd\fR running. If \fBnmbd\fR is running on the system, you will -only get the IP address and the DNS name of the machine. To -get proper responses from Windows 95 and Windows 98 machines, +only get the IP address and the DNS name of the machine. To +get proper responses from Windows 95 and Windows 98 machines, the command must be run as root. .PP For example running \fBfindsmb\fR on a machine without \fBnmbd\fR running would yield output similar to the following -.sp + .nf IP ADDR NETBIOS NAME WORKGROUP/OS/VERSION --------------------------------------------------------------------- @@ -64,7 +65,6 @@ IP ADDR NETBIOS NAME WORKGROUP/OS/VERSION 192.168.35.93 FROGSTAR-PC [MVENGR] [Windows 5.0] [Windows 2000 LAN Manager] 192.168.35.97 HERBNT1 *[HERB-NT] [Windows NT 4.0] [NT LAN Manager 4.0] -.sp .fi .SH "VERSION" .PP @@ -72,9 +72,9 @@ This man page is correct for version 2.2 of the Samba suite. .SH "SEE ALSO" .PP -\fBnmbd(8)\fR, +\fBnmbd(8)\fR , \fBsmbclient(1) -\fR +\fR , and \fBnmblookup(1)\fR .SH "AUTHOR" .PP The original Samba software and related utilities @@ -86,5 +86,5 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another excellent piece of Open Source software, available at ftp://ftp.icce.rug.nl/pub/unix/ ) and updated for the Samba 2.0 -release by Jeremy Allison. The conversion to DocBook for +release by Jeremy Allison. The conversion to DocBook for Samba 2.2 was done by Gerald Carter diff --git a/docs/manpages/smbclient.1 b/docs/manpages/smbclient.1 index 641f2d4a9f..765c9e5273 100644 --- a/docs/manpages/smbclient.1 +++ b/docs/manpages/smbclient.1 @@ -1,21 +1,22 @@ -.\" This manpage has been automatically generated by docbook2man-spec -.\" from a DocBook document. docbook2man-spec can be found at: -.\" +.\" This manpage has been automatically generated by docbook2man +.\" from a DocBook document. This tool can be found at: +.\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "SMBCLIENT" "1" "08 May 2002" "" "" +.TH "SMBCLIENT" "1" "20 augustus 2002" "" "" .SH NAME smbclient \- ftp-like client to access SMB/CIFS resources on servers .SH SYNOPSIS -.sp -\fBsmbclient\fR \fBservicename\fR [ \fBpassword\fR ] [ \fB-b \fR ] [ \fB-d debuglevel\fR ] [ \fB-D Directory\fR ] [ \fB-U username\fR ] [ \fB-W workgroup\fR ] [ \fB-M \fR ] [ \fB-m maxprotocol\fR ] [ \fB-A authfile\fR ] [ \fB-N\fR ] [ \fB-l logfile\fR ] [ \fB-L \fR ] [ \fB-I destinationIP\fR ] [ \fB-E \fR ] [ \fB-c \fR ] [ \fB-i scope\fR ] [ \fB-O \fR ] [ \fB-p port\fR ] [ \fB-R \fR ] [ \fB-s \fR ] [ \fB-TIXFqgbNan\fR ] + +\fBsmbclient\fR \fBservicename\fR [ \fBpassword\fR ] [ \fB-b \fR ] [ \fB-d debuglevel\fR ] [ \fB-D Directory\fR ] [ \fB-U username\fR ] [ \fB-W workgroup\fR ] [ \fB-M \fR ] [ \fB-m maxprotocol\fR ] [ \fB-A authfile\fR ] [ \fB-N\fR ] [ \fB-l logfile\fR ] [ \fB-L \fR ] [ \fB-I destinationIP\fR ] [ \fB-E \fR ] [ \fB-c \fR ] [ \fB-i scope\fR ] [ \fB-O \fR ] [ \fB-p port\fR ] [ \fB-R \fR ] [ \fB-s \fR ] [ \fB-TIXFqgbNan\fR ] + .SH "DESCRIPTION" .PP -This tool is part of the Sambasuite. +This tool is part of the Samba suite. .PP \fBsmbclient\fR is a client that can \&'talk' to an SMB/CIFS server. It offers an interface -similar to that of the ftp program (see \fBftp(1)\fR). +similar to that of the ftp program (see \fBftp(1)\fR). Operations include things like getting files from the server to the local machine, putting files from the local machine to the server, retrieving directory information from the server @@ -26,14 +27,15 @@ and so on. servicename is the name of the service you want to use on the server. A service name takes the form \fI//server/service\fR where \fIserver -\fRis the NetBIOS name of the SMB/CIFS server +\fR is the NetBIOS name of the SMB/CIFS server offering the desired service and \fIservice\fR -is the name of the service offered. Thus to connect to +is the name of the service offered. Thus to connect to the service "printer" on the SMB/CIFS server "smbserver", you would use the servicename \fI//smbserver/printer \fR + Note that the server name required is NOT necessarily -the IP (DNS) host name of the server ! The name required is +the IP (DNS) host name of the server ! The name required is a NetBIOS server name, which may or may not be the same as the IP hostname of the machine running the server. @@ -59,7 +61,7 @@ required, simply press ENTER to provide a null password.) Note: Some servers (including OS/2 and Windows for Workgroups) insist on an uppercase password. Lowercase -or mixed case passwords may be rejected by these servers. +or mixed case passwords may be rejected by these servers. Be cautious about including passwords in scripts. .TP @@ -69,7 +71,7 @@ Specifies the location of the all important .TP \fB-O socket options\fR TCP socket options to set on the client -socket. See the socket options parameter in the \fI smb.conf (5)\fR manpage for the list of valid +socket. See the socket options parameter in the \fI smb.conf (5)\fR manpage for the list of valid options. .TP \fB-R \fR @@ -85,7 +87,7 @@ cause names to be resolved as follows : \(bu lmhosts : Lookup an IP address in the Samba lmhosts file. If the line in lmhosts has -no name type attached to the NetBIOS name (see the lmhosts(5)for details) then +no name type attached to the NetBIOS name (see the lmhosts(5) for details) then any name type matches for lookup. .TP 0.2i \(bu @@ -94,14 +96,14 @@ name to IP address resolution, using the system \fI/etc/hosts \fR, NIS, or DNS lookups. This method of name resolution is operating system dependent, for instance on IRIX or Solaris this may be controlled by the \fI/etc/nsswitch.conf\fR -file). Note that this method is only used if the NetBIOS name +file). Note that this method is only used if the NetBIOS name type being queried is the 0x20 (server) name type, otherwise it is ignored. .TP 0.2i \(bu wins : Query a name with the IP address listed in the \fIwins server\fR -parameter. If no WINS server has +parameter. If no WINS server has been specified this method will be ignored. .TP 0.2i \(bu @@ -112,17 +114,15 @@ parameter. This is the least reliable of the name resolution methods as it depends on the target host being on a locally connected subnet. .RE -.PP + If this parameter is not set then the name resolve order -defined in the \fIsmb.conf\fR file parameter +defined in the \fIsmb.conf\fR file parameter (name resolve order) will be used. -.PP -.PP + The default order is lmhosts, host, wins, bcast and without this parameter or any entry in the \fIname resolve order -\fRparameter of the \fIsmb.conf\fR file the name resolution +\fR parameter of the \fIsmb.conf\fR file the name resolution methods will be attempted in this order. -.PP .TP \fB-M NetBIOS name\fR This options allows you to send messages, using @@ -139,7 +139,7 @@ The message is also automatically truncated if the message is over 1600 bytes, as this is the limit of the protocol. One useful trick is to cat the message through -\fBsmbclient\fR. For example: \fB cat mymessage.txt | smbclient -M FRED \fR will +\fBsmbclient\fR. For example: \fB cat mymessage.txt | smbclient -M FRED \fR will send the message in the file \fImymessage.txt\fR to the machine FRED. @@ -147,7 +147,7 @@ You may also find the \fI-U\fR and \fI-I\fR options useful, as they allow you to control the FROM and TO parts of the message. -See the message command parameter in the \fI smb.conf(5)\fR for a description of how to handle incoming +See the message command parameter in the \fI smb.conf(5)\fR for a description of how to handle incoming WinPopup messages in Samba. \fBNote\fR: Copy WinPopup into the startup group @@ -197,7 +197,7 @@ data, and should only be used when investigating a problem. Levels above 3 are designed for use only by developers and generate HUGE amounts of log data, most of which is extremely cryptic. If \fIdebuglevel\fR is set to the letter 'A', then \fBall -\fRdebug messages will be printed. This setting +\fR debug messages will be printed. This setting is for developers only (and people who \fBreally\fR want to know how the code works internally). @@ -222,7 +222,7 @@ The base name is used to generate actual log file names. For example, if the name specified was "log", the debug file would be \fIlog.client\fR. -The log file generated is never removed by the client. +The log file generated is never removed by the client. .TP \fB-h\fR Print the usage message for the client. @@ -267,11 +267,11 @@ a \fBPASSWD\fR environment variable from which to read the password. A third option is to use a credentials file which -contains the plaintext of the domain name, username and password. This +contains the plaintext of the domain name, username and password. This option is mainly provided for scripts where the admin doesn't wish to pass the credentials on the command line or via environment variables. If this method is used, make certain that the permissions -on the file restrict access from unwanted users. See the +on the file restrict access from unwanted users. See the \fI-A\fR for more details. Be cautious about including passwords in scripts or in @@ -284,15 +284,14 @@ it in directly. \fB-A filename\fR This option allows you to specify a file from which to read the username, domain name, and -password used in the connection. The format of the file is +password used in the connection. The format of the file is + -.sp .nf username = password = domain = -.sp .fi If the domain parameter is missing the current workgroup name @@ -302,8 +301,8 @@ access from unwanted users. \fB-L\fR This option allows you to look at what services are available on a server. You use it as \fBsmbclient -L -host\fR and a list should appear. The \fI-I -\fRoption may be useful if your NetBIOS names don't +host\fR and a list should appear. The \fI-I +\fR option may be useful if your NetBIOS names don't match your TCP/IP DNS host names or if you are trying to reach a host on another network. .TP @@ -311,7 +310,7 @@ host on another network. This option tells \fBsmbclient\fR how to interpret filenames coming from the remote server. Usually Asian language multibyte UNIX implementations use different character sets than -SMB/CIFS servers (\fBEUC\fR instead of \fB SJIS\fR for example). Setting this parameter will let +SMB/CIFS servers (\fBEUC\fR instead of \fB SJIS\fR for example). Setting this parameter will let \fBsmbclient\fR convert between the UNIX filenames and the SMB filenames correctly. This option has not been seriously tested and may have some problems. @@ -334,7 +333,7 @@ servers. .TP \fB-T tar options\fR smbclient may be used to create \fBtar(1) -\fRcompatible backups of all the files on an SMB/CIFS +\fR compatible backups of all the files on an SMB/CIFS share. The secondary tar flags that can be given to this option are : .RS @@ -361,18 +360,18 @@ their creation dates restored properly. \fII\fR - Include files and directories. Is the default behavior when filenames are specified above. Causes tar files to be included in an extract or create (and therefore -everything else to be excluded). See example below. Filename globbing -works in one of two ways. See r below. +everything else to be excluded). See example below. Filename globbing +works in one of two ways. See r below. .TP 0.2i \(bu \fIX\fR - Exclude files and directories. Causes tar files to be excluded from an extract or create. See -example below. Filename globbing works in one of two ways now. +example below. Filename globbing works in one of two ways now. See \fIr\fR below. .TP 0.2i \(bu \fIb\fR - Blocksize. Must be followed -by a valid (greater than zero) blocksize. Causes tar file to be +by a valid (greater than zero) blocksize. Causes tar file to be written out in blocksize*TBLOCK (usually 512 byte) blocks. .TP 0.2i \(bu @@ -382,14 +381,14 @@ files that have the archive bit set. Useful only with the .TP 0.2i \(bu \fIq\fR - Quiet. Keeps tar from printing -diagnostics as it works. This is the same as tarmode quiet. +diagnostics as it works. This is the same as tarmode quiet. .TP 0.2i \(bu \fIr\fR - Regular expression include -or exclude. Uses regular expression matching for -excluding or excluding files if compiled with HAVE_REGEX_H. -However this mode can be very slow. If not compiled with -HAVE_REGEX_H, does a limited wildcard match on '*' and '?'. +or exclude. Uses regular expression matching for +excluding or excluding files if compiled with HAVE_REGEX_H. +However this mode can be very slow. If not compiled with +HAVE_REGEX_H, does a limited wildcard match on '*' and '?'. .TP 0.2i \(bu \fIN\fR - Newer than. Must be followed @@ -403,63 +402,50 @@ specified are backed up to the tar file. Useful only with the archive bit to be reset when a file is backed up. Useful with the \fIg\fR and \fIc\fR flags. .RE -.PP + \fBTar Long File Names\fR -.PP -.PP + \fBsmbclient\fR's tar option now supports long file names both on backup and restore. However, the full path -name of the file must be less than 1024 bytes. Also, when +name of the file must be less than 1024 bytes. Also, when a tar archive is created, \fBsmbclient\fR's tar option places all files in the archive with relative names, not absolute names. -.PP -.PP + \fBTar Filenames\fR -.PP -.PP + All file names can be given as DOS path names (with '\\' as the component separator) or as UNIX path names (with '/' as the component separator). -.PP -.PP + \fBExamples\fR -.PP -.PP + Restore from tar file \fIbackup.tar\fR into myshare on mypc (no password on share). -.PP -.PP + \fBsmbclient //mypc/yshare "" -N -Tx backup.tar -\fR.PP -.PP +\fR + Restore everything except \fIusers/docs\fR -.PP -.PP + \fBsmbclient //mypc/myshare "" -N -TXx backup.tar users/docs\fR -.PP -.PP -Create a tar file of the files beneath \fI users/docs\fR. -.PP -.PP + +Create a tar file of the files beneath \fI users/docs\fR. + \fBsmbclient //mypc/myshare "" -N -Tc backup.tar users/docs \fR -.PP -.PP + Create the same tar file as above, but now use a DOS path name. -.PP -.PP + \fBsmbclient //mypc/myshare "" -N -tc backup.tar users\\edocs \fR -.PP -.PP + Create a tar file of all the files and directories in the share. -.PP -.PP + \fBsmbclient //mypc/myshare "" -N -Tc backup.tar * -\fR.PP +\fR .TP \fB-D initial directory\fR Change to initial directory before starting. Probably @@ -467,7 +453,7 @@ only of any use with the tar -T option. .TP \fB-c command string\fR command string is a semicolon-separated list of -commands to be executed instead of prompting from stdin. \fI -N\fR is implied by \fI-c\fR. +commands to be executed instead of prompting from stdin. \fI -N\fR is implied by \fI-c\fR. This is particularly useful in scripts and for printing stdin to the server, e.g. \fB-c 'print -'\fR. @@ -486,14 +472,14 @@ The prompt indicates that the client is ready and waiting to carry out a user command. Each command is a single word, optionally followed by parameters specific to that command. Command and parameters are space-delimited unless these notes specifically -state otherwise. All commands are case-insensitive. Parameters to +state otherwise. All commands are case-insensitive. Parameters to commands may or may not be case sensitive, depending on the command. .PP You can specify file names which have spaces in them by quoting the name with double quotes, for example "a long file name". .PP Parameters shown in square brackets (e.g., "[parameter]") are -optional. If not given, the command will use suitable defaults. Parameters +optional. If not given, the command will use suitable defaults. Parameters shown in angle brackets (e.g., "") are required. .PP Note that all commands operating on the server are actually @@ -504,12 +490,12 @@ The commands available are given here in alphabetical order. .TP \fB? [command]\fR If \fIcommand\fR is specified, the ? command will display -a brief informative message about the specified command. If no +a brief informative message about the specified command. If no command is specified, a list of available commands will be displayed. .TP \fB! [shell command]\fR -If \fIshell command\fR is specified, the ! +If \fIshell command\fR is specified, the ! command will execute a shell locally and run the specified shell command. If no command is specified, a local shell will be run. .TP @@ -559,7 +545,7 @@ from the program. \fBget [local file name]\fR Copy the file called \fIremote file name\fR from the server to the machine running the client. If specified, name -the local copy \fIlocal file name\fR. Note that all transfers in +the local copy \fIlocal file name\fR. Note that all transfers in \fBsmbclient\fR are binary. See also the lowercase command. .TP @@ -717,7 +703,7 @@ outside the currently connected share. This is enforced by the Samba server. .TP \fBtar [IXbgNa]\fR Performs a tar operation - see the \fI-T -\fRcommand line option above. Behavior may be affected +\fR command line option above. Behavior may be affected by the tarmode command (see below). Using g (incremental) and N (newer) will affect tarmode settings. Note that using the "-" option with tar x may not work - use the command line option instead. @@ -750,18 +736,18 @@ supports the LANMAN2 protocol or above. .SH "ENVIRONMENT VARIABLES" .PP The variable \fBUSER\fR may contain the -username of the person using the client. This information is -used only if the protocol level is high enough to support +username of the person using the client. This information is +used only if the protocol level is high enough to support session-level passwords. .PP The variable \fBPASSWD\fR may contain -the password of the person using the client. This information is +the password of the person using the client. This information is used only if the protocol level is high enough to support session-level passwords. .PP The variable \fBLIBSMB_PROG\fR may contain the path, executed with system(), which the client should connect -to instead of connecting to a server. This functionality is primarily +to instead of connecting to a server. This functionality is primarily intended as a development aid, and works best when using a LMHOSTS file .SH "INSTALLATION" @@ -781,7 +767,7 @@ and writeable only by the user. .PP To test the client, you will need to know the name of a running SMB/CIFS server. It is possible to run \fBsmbd(8) -\fRas an ordinary user - running that server as a daemon +\fR as an ordinary user - running that server as a daemon on a user-accessible port (typically any port number over 1024) would provide a suitable test server. .SH "DIAGNOSTICS" @@ -808,5 +794,5 @@ The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another excellent piece of Open Source software, available at ftp://ftp.icce.rug.nl/pub/unix/ ) and updated for the Samba 2.0 -release by Jeremy Allison. The conversion to DocBook for +release by Jeremy Allison. The conversion to DocBook for Samba 2.2 was done by Gerald Carter -- cgit From 32da080463d56d70622279e1f9224e95b37a4f01 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 28 Aug 2002 10:34:28 +0000 Subject: 'No news is good news' might sometimes be confusing, at least to me :-) Volker (This used to be commit f76a5431f0448efbc879aee965c643e2e362632a) --- source3/utils/net_rpc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index a7d2a08b38..cb5350b3ed 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -243,6 +243,7 @@ static NTSTATUS rpc_join_oldstyle_internals(const DOM_SID *domain_sid, struct cl extern pstring global_myname; fstring trust_passwd; unsigned char orig_trust_passwd_hash[16]; + NTSTATUS result; fstrcpy(trust_passwd, global_myname); strlower(trust_passwd); @@ -256,7 +257,12 @@ static NTSTATUS rpc_join_oldstyle_internals(const DOM_SID *domain_sid, struct cl E_md4hash(trust_passwd, orig_trust_passwd_hash); - return trust_pw_change_and_store_it(cli, mem_ctx, orig_trust_passwd_hash); + result = trust_pw_change_and_store_it(cli, mem_ctx, orig_trust_passwd_hash); + + if (NT_STATUS_IS_OK(result)) + printf("Joined domain %s.\n",lp_workgroup()); + + return result; } /** -- cgit From d1e68f2ad401c5bcef4a5452e0d836b601651bab Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 28 Aug 2002 10:50:29 +0000 Subject: Remove obsolete questions - Preparing for new up-to-date version of faq (This used to be commit 64e5287b06d0c7e84497c57bab664649f10826b6) --- docs/faq/Samba-Server-FAQ.sgml | 85 -------------------------- docs/faq/Samba-meta-FAQ.sgml | 133 +---------------------------------------- docs/faq/sambafaq.sgml | 5 +- 3 files changed, 6 insertions(+), 217 deletions(-) diff --git a/docs/faq/Samba-Server-FAQ.sgml b/docs/faq/Samba-Server-FAQ.sgml index eddad19e25..8f57e73aa3 100644 --- a/docs/faq/Samba-Server-FAQ.sgml +++ b/docs/faq/Samba-Server-FAQ.sgml @@ -329,22 +329,6 @@ to specify a service name correctly), read on: Some clients force service names into upper case. -My client reports "cannot find domain controller", "cannot log on to the network" or similar

David.Chappell@mail.trincoll.edu
+ + + 8 May 1996 + + +Samba Internals + + +Character Handling + +This section describes character set handling in Samba, as implemented in +Samba 3.0 and above + + + +In the past Samba had very ad-hoc character set handling. Scattered +throughout the code were numerous calls which converted particular +strings to/from DOS codepages. The problem is that there was no way of +telling if a particular char* is in dos codepage or unix +codepage. This led to a nightmare of code that tried to cope with +particular cases without handlingt the general case. + + + +The new functions + + +The new system works like this: + + + + + all char* strings inside Samba are "unix" strings. These are + multi-byte strings that are in the charset defined by the "unix + charset" option in smb.conf. + + + + there is no single fixed character set for unix strings, but any + character set that is used does need the following properties: + + + + + must not contain NULLs except for termination + + + + must be 7-bit compatible with C strings, so that a constant + string or character in C will be byte-for-byte identical to the + equivalent string in the chosen character set. + + + + when you uppercase or lowercase a string it does not become + longer than the original string + + + + must be able to correctly hold all characters that your client + will throw at it + + + + + For example, UTF-8 is fine, and most multi-byte asian character sets + are fine, but UCS2 could not be used for unix strings as they + contain nulls. + + + + + when you need to put a string into a buffer that will be sent on the + wire, or you need a string in a character set format that is + compatible with the clients character set then you need to use a + pull_ or push_ function. The pull_ functions pull a string from a + wire buffer into a (multi-byte) unix string. The push_ functions + push a string out to a wire buffer. + + + + the two main pull_ and push_ functions you need to understand are + pull_string and push_string. These functions take a base pointer + that should point at the start of the SMB packet that the string is + in. The functions will check the flags field in this packet to + automatically determine if the packet is marked as a unicode packet, + and they will choose whether to use unicode for this string based on + that flag. You may also force this decision using the STR_UNICODE or + STR_ASCII flags. For use in smbd/ and libsmb/ there are wrapper + functions clistr_ and srvstr_ that call the pull_/push_ functions + with the appropriate first argument. + + + + You may also call the pull_ascii/pull_ucs2 or push_ascii/push_ucs2 + functions if you know that a particular string is ascii or + unicode. There are also a number of other convenience functions in + charcnv.c that call the pull_/push_ functions with particularly + common arguments, such as pull_ascii_pstring() + + + + + The biggest thing to remember is that internal (unix) strings in Samba + may now contain multi-byte characters. This means you cannot assume + that characters are always 1 byte long. Often this means that you will + have to convert strings to ucs2 and back again in order to do some + (seemingly) simple task. For examples of how to do this see functions + like strchr_m(). I know this is very slow, and we will eventually + speed it up but right now we want this stuff correct not fast. + + + + all lp_ functions now return unix strings. The magic "DOS" flag on + parameters is gone. + + + + all vfs functions take unix strings. Don't convert when passing to them + + + + + + + +Macros in byteorder.h + + +This section describes the macros defined in byteorder.h. These macros +are used extensively in the Samba code. + + + +CVAL(buf,pos) + + +returns the byte at offset pos within buffer buf as an unsigned character. + + + + +PVAL(buf,pos) +returns the value of CVAL(buf,pos) cast to type unsigned integer. + + + +SCVAL(buf,pos,val) +sets the byte at offset pos within buffer buf to value val. + + + +SVAL(buf,pos) + + returns the value of the unsigned short (16 bit) little-endian integer at + offset pos within buffer buf. An integer of this type is sometimes + refered to as "USHORT". + + + + +IVAL(buf,pos) +returns the value of the unsigned 32 bit little-endian integer at offset +pos within buffer buf. + + + +SVALS(buf,pos) +returns the value of the signed short (16 bit) little-endian integer at +offset pos within buffer buf. + + + +IVALS(buf,pos) +returns the value of the signed 32 bit little-endian integer at offset pos +within buffer buf. + + + +SSVAL(buf,pos,val) +sets the unsigned short (16 bit) little-endian integer at offset pos within +buffer buf to value val. + + + +SIVAL(buf,pos,val) +sets the unsigned 32 bit little-endian integer at offset pos within buffer +buf to the value val. + + + +SSVALS(buf,pos,val) +sets the short (16 bit) signed little-endian integer at offset pos within +buffer buf to the value val. + + + +SIVALS(buf,pos,val) +sets the signed 32 bit little-endian integer at offset pos withing buffer +buf to the value val. + + + +RSVAL(buf,pos) +returns the value of the unsigned short (16 bit) big-endian integer at +offset pos within buffer buf. + + + +RIVAL(buf,pos) +returns the value of the unsigned 32 bit big-endian integer at offset +pos within buffer buf. + + + +RSSVAL(buf,pos,val) +sets the value of the unsigned short (16 bit) big-endian integer at +offset pos within buffer buf to value val. +refered to as "USHORT". + + + +RSIVAL(buf,pos,val) +sets the value of the unsigned 32 bit big-endian integer at offset +pos within buffer buf to value val. + + + + + + +LAN Manager Samba API + + +This section describes the functions need to make a LAN Manager RPC call. +This information had been obtained by examining the Samba code and the LAN +Manager 2.0 API documentation. It should not be considered entirely +reliable. + + + + +call_api(int prcnt, int drcnt, int mprcnt, int mdrcnt, + char *param, char *data, char **rparam, char **rdata); + + + + +This function is defined in client.c. It uses an SMB transaction to call a +remote api. + + + +Parameters + +The parameters are as follows: + + + + prcnt: the number of bytes of parameters begin sent. + + + drcnt: the number of bytes of data begin sent. + + + mprcnt: the maximum number of bytes of parameters which should be returned + + + mdrcnt: the maximum number of bytes of data which should be returned + + + param: a pointer to the parameters to be sent. + + + data: a pointer to the data to be sent. + + + rparam: a pointer to a pointer which will be set to point to the returned + paramters. The caller of call_api() must deallocate this memory. + + + rdata: a pointer to a pointer which will be set to point to the returned + data. The caller of call_api() must deallocate this memory. + + + + +These are the parameters which you ought to send, in the order of their +appearance in the parameter block: + + + + + +An unsigned 16 bit integer API number. You should set this value with +SSVAL(). I do not know where these numbers are described. + + + +An ASCIIZ string describing the parameters to the API function as defined +in the LAN Manager documentation. The first parameter, which is the server +name, is ommited. This string is based uppon the API function as described +in the manual, not the data which is actually passed. + + + +An ASCIIZ string describing the data structure which ought to be returned. + + + +Any parameters which appear in the function call, as defined in the LAN +Manager API documentation, after the "Server" and up to and including the +"uLevel" parameters. + + + +An unsigned 16 bit integer which gives the size in bytes of the buffer we +will use to receive the returned array of data structures. Presumably this +should be the same as mdrcnt. This value should be set with SSVAL(). + + + +An ASCIIZ string describing substructures which should be returned. If no +substructures apply, this string is of zero length. + + + + + +The code in client.c always calls call_api() with no data. It is unclear +when a non-zero length data buffer would be sent. + + + + + +Return value + + +The returned parameters (pointed to by rparam), in their order of appearance +are: + + + + +An unsigned 16 bit integer which contains the API function's return code. +This value should be read with SVAL(). + + + +An adjustment which tells the amount by which pointers in the returned +data should be adjusted. This value should be read with SVAL(). Basically, +the address of the start of the returned data buffer should have the returned +pointer value added to it and then have this value subtracted from it in +order to obtain the currect offset into the returned data buffer. + + + +A count of the number of elements in the array of structures returned. +It is also possible that this may sometimes be the number of bytes returned. + + + + +When call_api() returns, rparam points to the returned parameters. The +first if these is the result code. It will be zero if the API call +suceeded. This value by be read with "SVAL(rparam,0)". + + + +The second parameter may be read as "SVAL(rparam,2)". It is a 16 bit offset +which indicates what the base address of the returned data buffer was when +it was built on the server. It should be used to correct pointer before +use. + + + +The returned data buffer contains the array of returned data structures. +Note that all pointers must be adjusted before use. The function +fix_char_ptr() in client.c can be used for this purpose. + + + +The third parameter (which may be read as "SVAL(rparam,4)") has something to +do with indicating the amount of data returned or possibly the amount of +data which can be returned if enough buffer space is allowed. + + + + + + +Code character table + +Certain data structures are described by means of ASCIIz strings containing +code characters. These are the code characters: + + + + +W a type byte little-endian unsigned integer + + +N a count of substructures which follow + + +D a four byte little-endian unsigned integer + + +B a byte (with optional count expressed as trailing ASCII digits) + + +z a four byte offset to a NULL terminated string + + +l a four byte offset to non-string user data + + +b an offset to data (with count expressed as trailing ASCII digits) + + +r pointer to returned data buffer??? + + +L length in bytes of returned data buffer??? + + +h number of bytes of information available??? + + + + + diff --git a/docs/docbook/devdoc/parsing.sgml b/docs/docbook/devdoc/parsing.sgml new file mode 100644 index 0000000000..0121935d26 --- /dev/null +++ b/docs/docbook/devdoc/parsing.sgml @@ -0,0 +1,239 @@ + + + + ChrisHertel + + November 1997 + + +The smb.conf file + + +Lexical Analysis + + +Basically, the file is processed on a line by line basis. There are +four types of lines that are recognized by the lexical analyzer +(params.c): + + + + +Blank lines - Lines containing only whitespace. + + +Comment lines - Lines beginning with either a semi-colon or a +pound sign (';' or '#'). + + +Section header lines - Lines beginning with an open square bracket ('['). + + +Parameter lines - Lines beginning with any other character. +(The default line type.) + + + + +The first two are handled exclusively by the lexical analyzer, which +ignores them. The latter two line types are scanned for + + + + + - Section names + + + - Parameter names + + + - Parameter values + + + + +These are the only tokens passed to the parameter loader +(loadparm.c). Parameter names and values are divided from one +another by an equal sign: '='. + + + +Handling of Whitespace + + +Whitespace is defined as all characters recognized by the isspace() +function (see ctype(3C)) except for the newline character ('\n') +The newline is excluded because it identifies the end of the line. + + + + +The lexical analyzer scans past white space at the beginning of a line. + + + +Section and parameter names may contain internal white space. All +whitespace within a name is compressed to a single space character. + + + +Internal whitespace within a parameter value is kept verbatim with +the exception of carriage return characters ('\r'), all of which +are removed. + + + +Leading and trailing whitespace is removed from names and values. + + + + + + + +Handling of Line Continuation + + +Long section header and parameter lines may be extended across +multiple lines by use of the backslash character ('\\'). Line +continuation is ignored for blank and comment lines. + + + +If the last (non-whitespace) character within a section header or on +a parameter line is a backslash, then the next line will be +(logically) concatonated with the current line by the lexical +analyzer. For example: + + + + param name = parameter value string \ + with line continuation. + + +Would be read as + + + param name = parameter value string with line continuation. + + + +Note that there are five spaces following the word 'string', +representing the one space between 'string' and '\\' in the top +line, plus the four preceeding the word 'with' in the second line. +(Yes, I'm counting the indentation.) + + + +Line continuation characters are ignored on blank lines and at the end +of comments. They are *only* recognized within section and parameter +lines. + + + + + +Line Continuation Quirks + +Note the following example: + + + param name = parameter value string \ + \ + with line continuation. + + + +The middle line is *not* parsed as a blank line because it is first +concatonated with the top line. The result is + + + +param name = parameter value string with line continuation. + + +The same is true for comment lines. + + + param name = parameter value string \ + ; comment \ + with a comment. + + +This becomes: + + +param name = parameter value string ; comment with a comment. + + + +On a section header line, the closing bracket (']') is considered a +terminating character, and the rest of the line is ignored. The lines + + + + [ section name ] garbage \ + param name = value + + +are read as + + + [section name] + param name = value + + + + + + +Syntax + +The syntax of the smb.conf file is as follows: + + + <file> :== { <section> } EOF + <section> :== <section header> { <parameter line> } + <section header> :== '[' NAME ']' + <parameter line> :== NAME '=' VALUE NL + + +Basically, this means that + + + + a file is made up of zero or more sections, and is terminated by + an EOF (we knew that). + + + + A section is made up of a section header followed by zero or more + parameter lines. + + + + A section header is identified by an opening bracket and + terminated by the closing bracket. The enclosed NAME identifies + the section. + + + + A parameter line is divided into a NAME and a VALUE. The *first* + equal sign on the line separates the NAME from the VALUE. The + VALUE is terminated by a newline character (NL = '\n'). + + + + + +About params.c + + +The parsing of the config file is a bit unusual if you are used to +lex, yacc, bison, etc. Both lexical analysis (scanning) and parsing +are performed by params.c. Values are loaded via callbacks to +loadparm.c. + + + + diff --git a/docs/docbook/devdoc/unix-smb.sgml b/docs/docbook/devdoc/unix-smb.sgml new file mode 100644 index 0000000000..be79698857 --- /dev/null +++ b/docs/docbook/devdoc/unix-smb.sgml @@ -0,0 +1,311 @@ + + + + AndrewTridgell + + April 1995 + + +NetBIOS in a Unix World + + +Introduction + +This is a short document that describes some of the issues that +confront a SMB implementation on unix, and how Samba copes with +them. They may help people who are looking at unix<->PC +interoperability. + + + +It was written to help out a person who was writing a paper on unix to +PC connectivity. + + + + + +Usernames + +The SMB protocol has only a loose username concept. Early SMB +protocols (such as CORE and COREPLUS) have no username concept at +all. Even in later protocols clients often attempt operations +(particularly printer operations) without first validating a username +on the server. + + + +Unix security is based around username/password pairs. A unix box +should not allow clients to do any substantive operation without some +sort of validation. + + + +The problem mostly manifests itself when the unix server is in "share +level" security mode. This is the default mode as the alternative +"user level" security mode usually forces a client to connect to the +server as the same user for each connected share, which is +inconvenient in many sites. + + + +In "share level" security the client normally gives a username in the +"session setup" protocol, but does not supply an accompanying +password. The client then connects to resources using the "tree +connect" protocol, and supplies a password. The problem is that the +user on the PC types the username and the password in different +contexts, unaware that they need to go together to give access to the +server. The username is normally the one the user typed in when they +"logged onto" the PC (this assumes Windows for Workgroups). The +password is the one they chose when connecting to the disk or printer. + + + +The user often chooses a totally different username for their login as +for the drive connection. Often they also want to access different +drives as different usernames. The unix server needs some way of +divining the correct username to combine with each password. + + + +Samba tries to avoid this problem using several methods. These succeed +in the vast majority of cases. The methods include username maps, the +service%user syntax, the saving of session setup usernames for later +validation and the derivation of the username from the service name +(either directly or via the user= option). + + + + + +File Ownership + + +The commonly used SMB protocols have no way of saying "you can't do +that because you don't own the file". They have, in fact, no concept +of file ownership at all. + + + +This brings up all sorts of interesting problems. For example, when +you copy a file to a unix drive, and the file is world writeable but +owned by another user the file will transfer correctly but will +receive the wrong date. This is because the utime() call under unix +only succeeds for the owner of the file, or root, even if the file is +world writeable. For security reasons Samba does all file operations +as the validated user, not root, so the utime() fails. This can stuff +up shared development diectories as programs like "make" will not get +file time comparisons right. + + + +There are several possible solutions to this problem, including +username mapping, and forcing a specific username for particular +shares. + + + + + +Passwords + + +Many SMB clients uppercase passwords before sending them. I have no +idea why they do this. Interestingly WfWg uppercases the password only +if the server is running a protocol greater than COREPLUS, so +obviously it isn't just the data entry routines that are to blame. + + + +Unix passwords are case sensitive. So if users use mixed case +passwords they are in trouble. + + + +Samba can try to cope with this by either using the "password level" +option which causes Samba to try the offered password with up to the +specified number of case changes, or by using the "password server" +option which allows Samba to do its validation via another machine +(typically a WinNT server). + + + +Samba supports the password encryption method used by SMB +clients. Note that the use of password encryption in Microsoft +networking leads to password hashes that are "plain text equivalent". +This means that it is *VERY* important to ensure that the Samba +smbpasswd file containing these password hashes is only readable +by the root user. See the documentation ENCRYPTION.txt for more +details. + + + + + +Locking + +The locking calls available under a DOS/Windows environment are much +richer than those available in unix. This means a unix server (like +Samba) choosing to use the standard fcntl() based unix locking calls +to implement SMB locking has to improvise a bit. + + + +One major problem is that dos locks can be in a 32 bit (unsigned) +range. Unix locking calls are 32 bits, but are signed, giving only a 31 +bit range. Unfortunately OLE2 clients use the top bit to select a +locking range used for OLE semaphores. + + + +To work around this problem Samba compresses the 32 bit range into 31 +bits by appropriate bit shifting. This seems to work but is not +ideal. In a future version a separate SMB lockd may be added to cope +with the problem. + + + +It also doesn't help that many unix lockd daemons are very buggy and +crash at the slightest provocation. They normally go mostly unused in +a unix environment because few unix programs use byte range +locking. The stress of huge numbers of lock requests from dos/windows +clients can kill the daemon on some systems. + + + +The second major problem is the "opportunistic locking" requested by +some clients. If a client requests opportunistic locking then it is +asking the server to notify it if anyone else tries to do something on +the same file, at which time the client will say if it is willing to +give up its lock. Unix has no simple way of implementing +opportunistic locking, and currently Samba has no support for it. + + + + + +Deny Modes + + +When a SMB client opens a file it asks for a particular "deny mode" to +be placed on the file. These modes (DENY_NONE, DENY_READ, DENY_WRITE, +DENY_ALL, DENY_FCB and DENY_DOS) specify what actions should be +allowed by anyone else who tries to use the file at the same time. If +DENY_READ is placed on the file, for example, then any attempt to open +the file for reading should fail. + + + +Unix has no equivalent notion. To implement this Samba uses either lock +files based on the files inode and placed in a separate lock +directory or a shared memory implementation. The lock file method +is clumsy and consumes processing and file resources, +the shared memory implementation is vastly prefered and is turned on +by default for those systems that support it. + + + + + +Trapdoor UIDs + +A SMB session can run with several uids on the one socket. This +happens when a user connects to two shares with different +usernames. To cope with this the unix server needs to switch uids +within the one process. On some unixes (such as SCO) this is not +possible. This means that on those unixes the client is restricted to +a single uid. + + + +Note that you can also get the "trapdoor uid" message for other +reasons. Please see the FAQ for details. + + + + + +Port numbers + +There is a convention that clients on sockets use high "unprivilaged" +port numbers (>1000) and connect to servers on low "privilaged" port +numbers. This is enforced in Unix as non-root users can't open a +socket for listening on port numbers less than 1000. + + + +Most PC based SMB clients (such as WfWg and WinNT) don't follow this +convention completely. The main culprit is the netbios nameserving on +udp port 137. Name query requests come from a source port of 137. This +is a problem when you combine it with the common firewalling technique +of not allowing incoming packets on low port numbers. This means that +these clients can't query a netbios nameserver on the other side of a +low port based firewall. + + + +The problem is more severe with netbios node status queries. I've +found that WfWg, Win95 and WinNT3.5 all respond to netbios node status +queries on port 137 no matter what the source port was in the +request. This works between machines that are both using port 137, but +it means it's not possible for a unix user to do a node status request +to any of these OSes unless they are running as root. The answer comes +back, but it goes to port 137 which the unix user can't listen +on. Interestingly WinNT3.1 got this right - it sends node status +responses back to the source port in the request. + + + + + +Protocol Complexity + +There are many "protocol levels" in the SMB protocol. It seems that +each time new functionality was added to a Microsoft operating system, +they added the equivalent functions in a new protocol level of the SMB +protocol to "externalise" the new capabilities. + + + +This means the protocol is very "rich", offering many ways of doing +each file operation. This means SMB servers need to be complex and +large. It also means it is very difficult to make them bug free. It is +not just Samba that suffers from this problem, other servers such as +WinNT don't support every variation of every call and it has almost +certainly been a headache for MS developers to support the myriad of +SMB calls that are available. + + + +There are about 65 "top level" operations in the SMB protocol (things +like SMBread and SMBwrite). Some of these include hundreds of +sub-functions (SMBtrans has at least 120 sub-functions, like +DosPrintQAdd and NetSessionEnum). All of them take several options +that can change the way they work. Many take dozens of possible +"information levels" that change the structures that need to be +returned. Samba supports all but 2 of the "top level" functions. It +supports only 8 (so far) of the SMBtrans sub-functions. Even NT +doesn't support them all. + + + +Samba currently supports up to the "NT LM 0.12" protocol, which is the +one preferred by Win95 and WinNT3.5. Luckily this protocol level has a +"capabilities" field which specifies which super-duper new-fangled +options the server suports. This helps to make the implementation of +this protocol level much easier. + + + +There is also a problem with the SMB specications. SMB is a X/Open +spec, but the X/Open book is far from ideal, and fails to cover many +important issues, leaving much to the imagination. Microsoft recently +renamed the SMB protocol CIFS (Common Internet File System) and have +published new specifications. These are far superior to the old +X/Open documents but there are still undocumented calls and features. +This specification is actively being worked on by a CIFS developers +mailing list hosted by Microsft. + + + + -- cgit From 38cc0a1b81f4447699064bfa3f4d8ca42f5cb205 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:17:26 +0000 Subject: Add cifsntdomain (This used to be commit 31567c3762c0588886792265d7b48432c50f03ba) --- docs/docbook/devdoc/cifsntdomain.sgml | 2923 +++++++++++++++++++++++++++++++++ docs/docbook/devdoc/dev-doc.sgml | 8 +- 2 files changed, 2929 insertions(+), 2 deletions(-) create mode 100644 docs/docbook/devdoc/cifsntdomain.sgml diff --git a/docs/docbook/devdoc/cifsntdomain.sgml b/docs/docbook/devdoc/cifsntdomain.sgml new file mode 100644 index 0000000000..f64e1b37d6 --- /dev/null +++ b/docs/docbook/devdoc/cifsntdomain.sgml @@ -0,0 +1,2923 @@ + + + + LukeLeighton +
lkcl@switchboard.net
+
+ + PaulAshton +
paul@argo.demon.co.uk
+
+ + DuncanStansfield +
duncans@sco.com
+
+ + 01 November 97(version 0.0.24) +
+ +NT Domain RPC's + + +Introduction + + + +This document contains information to provide an NT workstation with login +services, without the need for an NT server. It is the sgml version of http://mailhost.cb1.com/~lkcl/cifsntdomain.txt, controlled by Luke. + + + +It should be possible to select a domain instead of a workgroup (in the NT +workstation's TCP/IP settings) and after the obligatory reboot, type in a +username, password, select a domain and successfully log in. I would +appreciate any feedback on your experiences with this process, and any +comments, corrections and additions to this document. + + + +The packets described here can be easily derived from (and are probably +better understood using) Netmon.exe. You will need to use the version +of Netmon that matches your system, in order to correctly decode the +NETLOGON, lsarpc and srvsvc Transact pipes. This document is derived from +NT Service Pack 1 and its corresponding version of Netmon. It is intended +that an annotated packet trace be produced, which will likely be more +instructive than this document. + + + +Also needed, to fully implement NT Domain Login Services, is the +document describing the cryptographic part of the NT authentication. +This document is available from comp.protocols.smb; from the ntsecurity.net +digest and from the samba digest, amongst other sources. + + + +A copy is available from: + + +http://ntbugtraq.rc.on.ca/SCRIPTS/WA.EXE?A2=ind9708;L=ntbugtraq;O=A;P=2935 + +http://mailhost.cb1.com/~lkcl/crypt.html + + +A c-code implementation, provided by Linus Nordberg +of this protocol is available from: + + +http://samba.org/cgi-bin/mfs/01/digest/1997/97aug/0391.html +http://mailhost.cb1.com/~lkcl/crypt.txt + + +Also used to provide debugging information is the Check Build version of +NT workstation, and enabling full debugging in NETLOGON. This is +achieved by setting the following REG_SZ registry key to 0x1ffffff: + + +HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters + +Incorrect direct editing of the registry can cause your +machine to fail. Then again, so can incorrect implementation of this +protocol. See "Liability:" above. + + +Bear in mind that each packet over-the-wire will have its origin in an +API call. Therefore, there are likely to be structures, enumerations +and defines that are usefully documented elsewhere. + + + +This document is by no means complete or authoritative. Missing sections +include, but are not limited to: + + + + + +Mappings of RIDs to usernames (and vice-versa). + +What a User ID is and what a Group ID is. + +The exact meaning/definition of various magic constants or enumerations. + +The reply error code and use of that error code when a +workstation becomes a member of a domain (to be described later). +Failure to return this error code will make the workstation report +that it is already a member of the domain. + +the cryptographic side of the NetrServerPasswordSet command, +which would allow the workstation to change its password. This password is +used to generate the long-term session key. [It is possible to reject this +command, and keep the default workstation password]. + + + + +Sources + + +cket Traces from Netmonitor (Service Pack 1 and above) +ul Ashton and Luke Leighton's other "NT Domain" doc. +FS documentation - cifs6.txt +FS documentation - cifsrap2.txt + + + + + +Credits + + +Paul Ashton: loads of work with Net Monitor; understanding the NT authentication system; reference implementation of the NT domain support on which this document is originally based. +Duncan Stansfield: low-level analysis of MSRPC Pipes. +Linus Nordberg: producing c-code from Paul's crypto spec. +Windows Sourcer development team + + + + + + + +Notes and Structures + + +Notes + + + +In the SMB Transact pipes, some "Structures", described here, appear to be +4-byte aligned with the SMB header, at their start. Exactly which +"Structures" need aligning is not precisely known or documented. + + + +In the UDP NTLOGON Mailslots, some "Structures", described here, appear to be +2-byte aligned with the start of the mailslot, at their start. + + + +Domain SID is of the format S-revision-version-auth1-auth2...authN. +e.g S-1-5-123-456-789-123-456. the 5 could be a sub-revision. + + + +any undocumented buffer pointers must be non-zero if the string buffer it +refers to contains characters. exactly what value they should be is unknown. +0x0000 0002 seems to do the trick to indicate that the buffer exists. a +NULL buffer pointer indicates that the string buffer is of zero length. +If the buffer pointer is NULL, then it is suspected that the structure it +refers to is NOT put into (or taken out of) the SMB data stream. This is +empirically derived from, for example, the LSA SAM Logon response packet, +where if the buffer pointer is NULL, the user information is not inserted +into the data stream. Exactly what happens with an array of buffer pointers +is not known, although an educated guess can be made. + + + +an array of structures (a container) appears to have a count and a pointer. +if the count is zero, the pointer is also zero. no further data is put +into or taken out of the SMB data stream. if the count is non-zero, then +the pointer is also non-zero. immediately following the pointer is the +count again, followed by an array of container sub-structures. the count +appears a third time after the last sub-structure. + + + + + + +Enumerations + + +MSRPC Header type +command number in the msrpc packet header + + + + MSRPC_Request: + 0x00 + + + MSRPC_Response: + 0x02 + + + MSRPC_Bind: + 0x0B + + + MSRPC_BindAck: + 0x0C + + + + + +MSRPC Packet info + +The meaning of these flags is undocumented + + + + FirstFrag: + 0x01 + + + LastFrag: + 0x02 + + + NotaFrag: + 0x04 + + + RecRespond: + 0x08 + + + NoMultiplex: + 0x10 + + + NotForIdemp: + 0x20 + + + NotforBcast: + 0x40 + + + NoUuid: + 0x80 + + + + + + + + +Structures + +VOID * +sizeof VOID* is 32 bits. + + +char +sizeof char is 8 bits. + + +UTIME +UTIME is 32 bits, indicating time in seconds since 01jan1970. documented in cifs6.txt (section 3.5 page, page 30). + + +NTTIME +NTTIME is 64 bits. documented in cifs6.txt (section 3.5 page, page 30). + + + +DOM_SID (domain SID structure) + + + + + UINT32 + num of sub-authorities in domain SID + + + + UINT8 + SID revision number + + + UINT8 + num of sub-authorities in domain SID + + + UINT8[6] + 6 bytes for domain SID - Identifier Authority. + + + + UINT16[n_subauths] + domain SID sub-authorities + + + + +Note: the domain SID is documented elsewhere. + + + + + +STR (string) + +STR (string) is a char[] : a null-terminated string of ascii characters. + + + + +UNIHDR (unicode string header) + + + + + UINT16 + length of unicode string + + + + UINT16 + max length of unicode string + + + + UINT32 + 4 - undocumented. + + + + + + + +UNIHDR2 (unicode string header plus buffer pointer) + + + + + UNIHDR + unicode string header + + + + + VOID* + undocumented buffer pointer + + + + + + + +UNISTR (unicode string) + + + + + UINT16[] + null-terminated string of unicode characters. + + + + + + + +NAME (length-indicated unicode string) + + + + + UINT32 + length of unicode string + + + UINT16[] + null-terminated string of unicode characters. + + + + + + + +UNISTR2 (aligned unicode string) + + + + UINT8[] + padding to get unicode string 4-byte aligned with the start of the SMB header. + + + UINT32 + max length of unicode string + + + UINT32 + 0 - undocumented + + + UINT32 + length of unicode string + + + UINT16[] + string of uncode characters + + + + + + + +OBJ_ATTR (object attributes) + + + + UINT32 +0x18 - length (in bytes) including the length field. + + VOID* +0 - root directory (pointer) + + VOID* +0 - object name (pointer) + + UINT32 +0 - attributes (undocumented) + + VOID* +0 - security descriptior (pointer) + + UINT32 + 0 - security quality of service + + + + + + + +POL_HND (LSA policy handle) + + + + char[20] + policy handle + + + + + + +DOM_SID2 (domain SID structure, SIDS stored in unicode) + + + + UINT32 + 5 - SID type + + + UINT32 + 0 - undocumented + + + UNIHDR2 + domain SID unicode string header + + + UNISTR + domain SID unicode string + + + +Note: there is a conflict between the unicode string header and the unicode string itself as to which to use to indicate string length. this will need to be resolved. + +Note: the SID type indicates, for example, an alias; a well-known group etc. this is documented somewhere. + + + + +DOM_RID (domain RID structure) + + + + UINT32 +5 - well-known SID. 1 - user SID (see ShowACLs) + + UINT32 + 5 - undocumented + + + UINT32 + domain RID + + + UINT32 + 0 - domain index out of above reference domains + + + + + + +LOG_INFO (server, account, client structure) + +Note: logon server name starts with two '\' characters and is upper case. + +Note: account name is the logon client name from the LSA Request Challenge, with a $ on the end of it, in upper case. + + + + VOID* + undocumented buffer pointer + + + UNISTR2 + logon server unicode string + + + UNISTR2 + account name unicode string + + + UINT16 + sec_chan - security channel type + + + UNISTR2 + logon client machine unicode string + + + + + + +CLNT_SRV (server, client names structure) + +Note: logon server name starts with two '\' characters and is upper case. + + + + VOID* + undocumented buffer pointer + + + UNISTR2 + logon server unicode string + + + VOID* + undocumented buffer pointer + + + UNISTR2 + logon client machine unicode string + + + + + + +CREDS (credentials + time stamp) + + + + char[8] + credentials + + + UTIME + time stamp + + + + + + +CLNT_INFO2 (server, client structure, client credentials) + +Note: whenever this structure appears in a request, you must take a copy of the client-calculated credentials received, because they will beused in subsequent credential checks. the presumed intention is to + maintain an authenticated request/response trail. + + + + CLNT_SRV + client and server names + + + UINT8[] + ???? padding, for 4-byte alignment with SMB header. + + + VOID* + pointer to client credentials. + + + CREDS + client-calculated credentials + client time + + + + + + +CLNT_INFO (server, account, client structure, client credentials) +Note: whenever this structure appears in a request, you must take a copy of the client-calculated credentials received, because they will be used in subsequent credential checks. the presumed intention is to maintain an authenticated request/response trail. + + + + LOG_INFO + logon account info + + + CREDS + client-calculated credentials + client time + + + + + + +ID_INFO_1 (id info structure, auth level 1) + + + + VOID* + ptr_id_info_1 + + + UNIHDR + domain name unicode header + + + UINT32 + param control + + + UINT64 + logon ID + + + UNIHDR + user name unicode header + + + UNIHDR + workgroup name unicode header + + + char[16] + arc4 LM OWF Password + + + char[16] + arc4 NT OWF Password + + + UNISTR2 + domain name unicode string + + + UNISTR2 + user name unicode string + + + UNISTR2 + workstation name unicode string + + + + + + +SAM_INFO (sam logon/logoff id info structure) + +Note: presumably, the return credentials is supposedly for the server to verify that the credential chain hasn't been compromised. + + + + CLNT_INFO2 + client identification/authentication info + + + VOID* + pointer to return credentials. + + + CRED + return credentials - ignored. + + + UINT16 + logon level + + + UINT16 + switch value + + + + + + switch (switch_value) + case 1: + { + ID_INFO_1 id_info_1; + } + + + + + +GID (group id info) + + + + UINT32 +group id + + UINT32 +user attributes (only used by NT 3.1 and 3.51) + + + + + +DOM_REF (domain reference info) + + + + VOID* + undocumented buffer pointer. + + + UINT32 + num referenced domains? + + + VOID* + undocumented domain name buffer pointer. + + + UINT32 + 32 - max number of entries + + + UINT32 + 4 - num referenced domains? + + + UNIHDR2 + domain name unicode string header + + + UNIHDR2[num_ref_doms-1] + referenced domain unicode string headers + + + UNISTR + domain name unicode string + + + DOM_SID[num_ref_doms] + referenced domain SIDs + + + + + + +DOM_INFO (domain info, levels 3 and 5 are the same)) + + + + UINT8[] + ??? padding to get 4-byte alignment with start of SMB header + + + UINT16 + domain name string length * 2 + + + UINT16 + domain name string length * 2 + + + VOID* + undocumented domain name string buffer pointer + + + VOID* +undocumented domain SID string buffer pointer + + UNISTR2 +domain name (unicode string) + + DOM_SID + domain SID + + + + + + +USER_INFO (user logon info) + +Note: it would be nice to know what the 16 byte user session key is for. + + + + NTTIME + logon time + + + NTTIME + logoff time + + + NTTIME + kickoff time + + + NTTIME + password last set time + + + NTTIME + password can change time + + + NTTIME + password must change time + + + UNIHDR + username unicode string header + + + UNIHDR + user's full name unicode string header + + + UNIHDR + logon script unicode string header + + + UNIHDR + profile path unicode string header + + + UNIHDR + home directory unicode string header + + + UNIHDR + home directory drive unicode string header + + + UINT16 + logon count + + + UINT16 + bad password count + + + UINT32 + User ID + + + UINT32 + Group ID + + + UINT32 + num groups + + + VOID* + undocumented buffer pointer to groups. + + + UINT32 + user flags + + + char[16] + user session key + + + UNIHDR + logon server unicode string header + + + UNIHDR + logon domain unicode string header + + + VOID* + undocumented logon domain id pointer + + + char[40] + 40 undocumented padding bytes. future expansion? + + + UINT32 + 0 - num_other_sids? + + + VOID* + NULL - undocumented pointer to other domain SIDs. + + + UNISTR2 + username unicode string + + + UNISTR2 + user's full name unicode string + + + UNISTR2 + logon script unicode string + + + UNISTR2 + profile path unicode string + + + UNISTR2 + home directory unicode string + + + UNISTR2 + home directory drive unicode string + + + UINT32 + num groups + + + GID[num_groups] + group info + + + UNISTR2 + logon server unicode string + + + UNISTR2 + logon domain unicode string + + + DOM_SID + domain SID + + + DOM_SID[num_sids] + other domain SIDs? + + + + + + +SH_INFO_1_PTR (pointers to level 1 share info strings) + +Note: see cifsrap2.txt section5, page 10. + + +0 for shi1_type indicates a Disk. +1 for shi1_type indicates a Print Queue. +2 for shi1_type indicates a Device. +3 for shi1_type indicates an IPC pipe. +0x8000 0000 (top bit set in shi1_type) indicates a hidden share. + + + + + + VOID* + shi1_netname - pointer to net name + + + UINT32 + shi1_type - type of share. 0 - undocumented. + + + VOID* + shi1_remark - pointer to comment. + + + + + + + +SH_INFO_1_STR (level 1 share info strings) + + + + UNISTR2 + shi1_netname - unicode string of net name + + + UNISTR2 + shi1_remark - unicode string of comment. + + + + + + +SHARE_INFO_1_CTR + +share container with 0 entries: + + + + UINT32 + 0 - EntriesRead + + + UINT32 + 0 - Buffer + + + +share container with > 0 entries: + + + + UINT32 + EntriesRead + + + UINT32 + non-zero - Buffer + + + UINT32 + EntriesRead + + + SH_INFO_1_PTR[EntriesRead] + share entry pointers + + + SH_INFO_1_STR[EntriesRead] + share entry strings + + + UINT8[] + padding to get unicode string 4-byte aligned with start of the SMB header. + + + UINT32 + EntriesRead + + + UINT32 + 0 - padding + + + + + + + +SERVER_INFO_101 + +Note: see cifs6.txt section 6.4 - the fields described therein will be of assistance here. for example, the type listed below is the same as fServerType, which is described in 6.4.1. + + + + SV_TYPE_WORKSTATION + 0x00000001 All workstations + + + SV_TYPE_SERVER + 0x00000002 All servers + + + SV_TYPE_SQLSERVER + 0x00000004 Any server running with SQL server + + + SV_TYPE_DOMAIN_CTRL + 0x00000008 Primary domain controller + + + SV_TYPE_DOMAIN_BAKCTRL + 0x00000010 Backup domain controller + + + SV_TYPE_TIME_SOURCE + 0x00000020 Server running the timesource service + + + SV_TYPE_AFP + 0x00000040 Apple File Protocol servers + + + SV_TYPE_NOVELL + 0x00000080 Novell servers + + + SV_TYPE_DOMAIN_MEMBER + 0x00000100 Domain Member + + + SV_TYPE_PRINTQ_SERVER + 0x00000200 Server sharing print queue + + + SV_TYPE_DIALIN_SERVER + 0x00000400 Server running dialin service. + + + SV_TYPE_XENIX_SERVER + 0x00000800 Xenix server + + + SV_TYPE_NT + 0x00001000 NT server + + + SV_TYPE_WFW + 0x00002000 Server running Windows for + + + SV_TYPE_SERVER_NT + 0x00008000 Windows NT non DC server + + + SV_TYPE_POTENTIAL_BROWSER + 0x00010000 Server that can run the browser service + + + SV_TYPE_BACKUP_BROWSER + 0x00020000 Backup browser server + + + SV_TYPE_MASTER_BROWSER + 0x00040000 Master browser server + + + SV_TYPE_DOMAIN_MASTER + 0x00080000 Domain Master Browser server + + + SV_TYPE_LOCAL_LIST_ONLY + 0x40000000 Enumerate only entries marked "local" + + + SV_TYPE_DOMAIN_ENUM + 0x80000000 Enumerate Domains. The pszServer and pszDomain parameters must be NULL. + + + + + + + UINT32 + 500 - platform_id + + + VOID* + pointer to name + + + UINT32 + 5 - major version + + + UINT32 +4 - minor version + + UINT32 +type (SV_TYPE_... bit field) + + VOID* + pointer to comment + + + UNISTR2 + sv101_name - unicode string of server name + + + UNISTR2 + sv_101_comment - unicode string of server comment. + + + UINT8[] + padding to get unicode string 4-byte aligned with start of the SMB header. + + + + + + + + +MSRPC over Transact Named Pipe + +For details on the SMB Transact Named Pipe, see cifs6.txt + + +MSRPC Pipes + + +The MSRPC is conducted over an SMB Transact Pipe with a name of +\PIPE\. You must first obtain a 16 bit file handle, by +sending a SMBopenX with the pipe name \PIPE\srvsvc for +example. You can then perform an SMB Trans, +and must carry out an SMBclose on the file handle once you are finished. + + + +Trans Requests must be sent with two setup UINT16s, no UINT16 params (none +known about), and UINT8 data parameters sufficient to contain the MSRPC +header, and MSRPC data. The first UINT16 setup parameter must be either +0x0026 to indicate an RPC, or 0x0001 to indicate Set Named Pipe Handle +state. The second UINT16 parameter must be the file handle for the pipe, +obtained above. + + + +The Data section for an API Command of 0x0026 (RPC pipe) in the Trans +Request is the RPC Header, followed by the RPC Data. The Data section for +an API Command of 0x0001 (Set Named Pipe Handle state) is two bytes. The +only value seen for these two bytes is 0x00 0x43. + + + +MSRPC Responses are sent as response data inside standard SMB Trans +responses, with the MSRPC Header, MSRPC Data and MSRPC tail. + + + +It is suspected that the Trans Requests will need to be at least 2-byte +aligned (probably 4-byte). This is standard practice for SMBs. It is also +independent of the observed 4-byte alignments with the start of the MSRPC +header, including the 4-byte alignment between the MSRPC header and the +MSRPC data. + + + +First, an SMBtconX connection is made to the IPC$ share. The connection +must be made using encrypted passwords, not clear-text. Then, an SMBopenX +is made on the pipe. Then, a Set Named Pipe Handle State must be sent, +after which the pipe is ready to accept API commands. Lastly, and SMBclose +is sent. + + + +To be resolved: + + + +lkcl/01nov97 there appear to be two additional bytes after the null-terminated \PIPE\ name for the RPC pipe. Values seen so far are +listed below: + + + initial SMBopenX request: RPC API command 0x26 params: + "\\PIPE\\lsarpc" 0x65 0x63; 0x72 0x70; 0x44 0x65; + "\\PIPE\\srvsvc" 0x73 0x76; 0x4E 0x00; 0x5C 0x43; + + + + + +Header + +[section to be rewritten, following receipt of work by Duncan Stansfield] + +Interesting note: if you set packed data representation to 0x0100 0000 +then all 4-byte and 2-byte word ordering is turned around! + +The start of each of the NTLSA and NETLOGON named pipes begins with: + + +offsetVariable typeVariable data +00UINT85 - RPC major version +01UINT80 - RPC minor version +02UINT82 - RPC response packet +03UINT83 - (FirstFrag bit-wise or with LastFrag) +04UINT320x1000 0000 - packed data representation +08UINT16fragment length - data size (bytes) inc header and tail. +0AUINT160 - authentication length +0CUINT32call identifier. matches 12th UINT32 of incoming RPC data. +10UINT32allocation hint - data size (bytes) minus header and tail. +14UINT160 - presentation context identifier +16UINT80 - cancel count +17UINT8in replies: 0 - reserved; in requests: opnum - see #defines. +18......start of data (goes on for allocation_hint bytes) + + + +RPC_Packet for request, response, bind and bind acknowledgement + + + + UINT8 versionmaj +reply same as request (0x05) + + UINT8 versionmin +reply same as request (0x00) + + UINT8 type +one of the MSRPC_Type enums + + UINT8 flags +reply same as request (0x00 for Bind, 0x03 for Request) + + UINT32 representation +reply same as request (0x00000010) + + UINT16 fraglength +the length of the data section of the SMB trans packet + + UINT16 authlength + + + + UINT32 callid +call identifier. (e.g. 0x00149594) + + * stub USE TvPacket +the remainder of the packet depending on the "type" + + + + + +Interface identification + +the interfaces are numbered. as yet I haven't seen more than one interface used on the same pipe name srvsvc + + +abstract (0x4B324FC8, 0x01D31670, 0x475A7812, 0x88E16EBF, 0x00000003) +transfer (0x8A885D04, 0x11C91CEB, 0x0008E89F, 0x6048102B, 0x00000002) + + + + + +RPC_Iface RW + + + + UINT8 byte[16] +16 bytes of number + + UINT32 version +the interface number + + + + + + +RPC_ReqBind RW + +the remainder of the packet after the header if "type" was Bind in the response header, "type" should be BindAck + + + + UINT16 maxtsize +maximum transmission fragment size (0x1630) + + UINT16 maxrsize +max receive fragment size (0x1630) + + UINT32 assocgid +associated group id (0x0) + + UINT32 numelements +the number of elements (0x1) + + UINT16 contextid +presentation context identifier (0x0) + + UINT8 numsyntaxes +the number of syntaxes (has always been 1?)(0x1) + + UINT8[] +4-byte alignment padding, against SMB header + + * abstractint USE RPC_Iface +num and vers. of interface client is using + + * transferint USE RPC_Iface + num and vers. of interface to use for replies + + + + + + +RPC_Address RW + + + + UINT16 length +length of the string including null terminator + + * port USE string +the string above in single byte, null terminated form + + + + + +RPC_ResBind RW + +the response to place after the header in the reply packet + + + + UINT16 maxtsize +same as request + + UINT16 maxrsize +same as request + + UINT32 assocgid +zero + + * secondaddr USE RPC_Address +the address string, as described earlier + + UINT8[] +4-byte alignment padding, against SMB header + + UINT8 numresults +the number of results (0x01) + + UINT8[] +4-byte alignment padding, against SMB header + + UINT16 result +result (0x00 = accept) + + UINT16 reason +reason (0x00 = no reason specified) + + * transfersyntax USE RPC_Iface +the transfer syntax from the request + + + + + +RPC_ReqNorm RW + +the remainder of the packet after the header for every other other request + + + + UINT32 allochint +the size of the stub data in bytes + + UINT16 prescontext +presentation context identifier (0x0) + + UINT16 opnum +operation number (0x15) + + * stub USE TvPacket +a packet dependent on the pipe name (probably the interface) and the op number) + + + + + +RPC_ResNorm RW + + + + UINT32 allochint +# size of the stub data in bytes + + UINT16 prescontext +# presentation context identifier (same as request) + + UINT8 cancelcount +# cancel count? (0x0) + + UINT8 reserved +# 0 - one byte padding + + * stub USE TvPacket +# the remainder of the reply + + + + + + +Tail + +The end of each of the NTLSA and NETLOGON named pipes ends with: + + + + ...... + end of data + + + UINT32 + return code + + + + + + +RPC Bind / Bind Ack + + +RPC Binds are the process of associating an RPC pipe (e.g \PIPE\lsarpc) +with a "transfer syntax" (see RPC_Iface structure). The purpose for doing +this is unknown. + + +Note: The RPC_ResBind SMB Transact request is sent with two uint16 setup parameters. The first is 0x0026; the second is the file handle + returned by the SMBopenX Transact response. + +Note: The RPC_ResBind members maxtsize, maxrsize and assocgid are the same in the response as the same members in the RPC_ReqBind. The + RPC_ResBind member transfersyntax is the same in the response as + the + +Note: The RPC_ResBind response member secondaddr contains the name of what is presumed to be the service behind the RPC pipe. The + mapping identified so far is: + + + + + initial SMBopenX request: + RPC_ResBind response: + + + + "\\PIPE\\srvsvc" + "\\PIPE\\ntsvcs" + + + "\\PIPE\\samr" + "\\PIPE\\lsass" + + + "\\PIPE\\lsarpc" + "\\PIPE\\lsass" + + + "\\PIPE\\wkssvc" + "\\PIPE\\wksvcs" + + + "\\PIPE\\NETLOGON" + "\\PIPE\\NETLOGON" + + + +Note: The RPC_Packet fraglength member in both the Bind Request and Bind Acknowledgment must contain the length of the entire RPC data, including the RPC_Packet header. + +Request: + + +RPC_Packet +RPC_ReqBind + + +Response: + +RPC_Packet +RPC_ResBind + + + + + +NTLSA Transact Named Pipe + +The sequence of actions taken on this pipe are: + + +Establish a connection to the IPC$ share (SMBtconX). use encrypted passwords. +Open an RPC Pipe with the name "\\PIPE\\lsarpc". Store the file handle. +Using the file handle, send a Set Named Pipe Handle state to 0x4300. +Send an LSA Open Policy request. Store the Policy Handle. +Using the Policy Handle, send LSA Query Info Policy requests, etc. +Using the Policy Handle, send an LSA Close. +Close the IPC$ share. + + +Defines for this pipe, identifying the query are: + + + LSA Open Policy: + 0x2c + + + LSA Query Info Policy: + 0x07 + + + LSA Enumerate Trusted Domains: + 0x0d + + + LSA Open Secret: + 0xff + + + LSA Lookup SIDs: + 0xfe + + + LSA Lookup Names: + 0xfd + + + LSA Close: + 0x00 + + + + + + +LSA Open Policy + +Note: The policy handle can be anything you like. + + +Request + + + + VOID* + buffer pointer + + + UNISTR2 + server name - unicode string starting with two '\'s + + + OBJ_ATTR + object attributes + + + UINT32 + 1 - desired access + + + + + + +Response + + + + + POL_HND + LSA policy handle + + + + return + 0 - indicates success + + + + + + + + + +LSA Query Info Policy + +Note: The info class in response must be the same as that in the request. + + +Request + + + + POL_HND +LSA policy handle + + UINT16 +info class (also a policy handle?) + + + + + +Response + + + + VOID* + undocumented buffer pointer + + + UINT16 + info class (same as info class in request). + + + + + +switch (info class) +case 3: +case 5: +{ +DOM_INFO domain info, levels 3 and 5 (are the same). +} + +return 0 - indicates success + + + + + + + +LSA Enumerate Trusted Domains + + +Request + +no extra data + + + + +Response + + + + UINT32 + 0 - enumeration context + + + UINT32 + 0 - entries read + + + UINT32 + 0 - trust information + + + return + 0x8000 001a - "no trusted domains" success code + + + + + + + +LSA Open Secret + + +Request + +no extra data + + + + +Response + + + + UINT32 + 0 - undocumented + + + UINT32 + 0 - undocumented + + + UINT32 + 0 - undocumented + + + UINT32 + 0 - undocumented + + + UINT32 + 0 - undocumented + + + +return 0x0C00 0034 - "no such secret" success code + + + + + + +LSA Close + + +Request + + + + POL_HND + policy handle to be closed + + + + + + +Response + + + + POL_HND +0s - closed policy handle (all zeros) + + +return 0 - indicates success + + + + + +LSA Lookup SIDS + +Note: num_entries in response must be same as num_entries in request. + + +Request + + + + POL_HND + LSA policy handle + + + UINT32 + num_entries + + + VOID* + undocumented domain SID buffer pointer + + + VOID* + undocumented domain name buffer pointer + + + VOID*[num_entries] undocumented domain SID pointers to be looked up. + +DOM_SID[num_entries] domain SIDs to be looked up. + + char[16] + completely undocumented 16 bytes. + + + + + + +Response + + + + DOM_REF +domain reference response + + UINT32 +num_entries (listed above) + + VOID* +undocumented buffer pointer + + UINT32 +num_entries (listed above) + + DOM_SID2[num_entries] +domain SIDs (from Request, listed above). + + UINT32 +num_entries (listed above) + + +return 0 - indicates success + + + + + + +LSA Lookup Names + +Note: num_entries in response must be same as num_entries in request. + + +Request + + + + POL_HND + LSA policy handle + + + UINT32 + num_entries + + + UINT32 + num_entries + + + VOID* + undocumented domain SID buffer pointer + + + VOID* + undocumented domain name buffer pointer + + + NAME[num_entries] + names to be looked up. + + + char[] + undocumented bytes - falsely translated SID structure? + + + + + + +Response + + + + DOM_REF +domain reference response + + UINT32 +num_entries (listed above) + + VOID* +undocumented buffer pointer + + UINT32 +num_entries (listed above) + + DOM_RID[num_entries] +domain SIDs (from Request, listed above). + + UINT32 +num_entries (listed above) + + +return 0 - indicates success + + + + + + +NETLOGON rpc Transact Named Pipe + +The sequence of actions taken on this pipe are: + + +tablish a connection to the IPC$ share (SMBtconX). use encrypted passwords. +en an RPC Pipe with the name "\\PIPE\\NETLOGON". Store the file handle. +ing the file handle, send a Set Named Pipe Handle state to 0x4300. +eate Client Challenge. Send LSA Request Challenge. Store Server Challenge. +lculate Session Key. Send an LSA Auth 2 Challenge. Store Auth2 Challenge. +lc/Verify Client Creds. Send LSA Srv PW Set. Calc/Verify Server Creds. +lc/Verify Client Creds. Send LSA SAM Logon . Calc/Verify Server Creds. +lc/Verify Client Creds. Send LSA SAM Logoff. Calc/Verify Server Creds. +ose the IPC$ share. + + +Defines for this pipe, identifying the query are + + + + LSA Request Challenge: + 0x04 + + + LSA Server Password Set: + 0x06 + + + LSA SAM Logon: + 0x02 + + + LSA SAM Logoff: + 0x03 + + + LSA Auth 2: + 0x0f + + + LSA Logon Control: + 0x0e + + + + +LSA Request Challenge + +Note: logon server name starts with two '\' characters and is upper case. + +Note: logon client is the machine, not the user. + +Note: the initial LanManager password hash, against which the challenge is issued, is the machine name itself (lower case). there will becalls issued (LSA Server Password Set) which will change this, later. refusing these calls allows you to always deal with the same password (i.e the LM# of the machine name in lower case). + + +Request + + + + VOID* + undocumented buffer pointer + + + UNISTR2 + logon server unicode string + + + UNISTR2 + logon client unicode string + + + char[8] + client challenge + + + + + + +Response + + + + char[8] + server challenge + + + +return 0 - indicates success + + + + + + +LSA Authenticate 2 + +Note: in between request and response, calculate the client credentials, and check them against the client-calculated credentials (this process uses the previously received client credentials). + +Note: neg_flags in the response is the same as that in the request. + +Note: you must take a copy of the client-calculated credentials received here, because they will be used in subsequent authentication packets. + + +Request + + + + LOG_INFO + client identification info + + + char[8] + client-calculated credentials + + + UINT8[] +padding to 4-byte align with start of SMB header. + + UINT32 +neg_flags - negotiated flags (usual value is 0x0000 01ff) + + + + + +Response + + + + char[8] + server credentials. + + + UINT32 + neg_flags - same as neg_flags in request. + + + +return 0 - indicates success. failure value unknown. + + + + + + +LSA Server Password Set + +Note: the new password is suspected to be a DES encryption using the old password to generate the key. + +Note: in between request and response, calculate the client credentials, and check them against the client-calculated credentials (this process uses the previously received client credentials). + +Note: the server credentials are constructed from the client-calculated credentials and the client time + 1 second. + +Note: you must take a copy of the client-calculated credentials received here, because they will be used in subsequent authentication packets. + + +Request + + + + CLNT_INFO + client identification/authentication info + + + char[] + new password - undocumented. + + + + + + +Response + + + + CREDS + server credentials. server time stamp appears to be ignored. + + + +return 0 - indicates success; 0xC000 006a indicates failure + + + + +LSA SAM Logon + + +Note: valid_user is True iff the username and password hash are valid for + the requested domain. + + + +Request + + + SAM_INFO + sam_id structure + + + + + + +Response + + + + VOID* + undocumented buffer pointer + + + CREDS + server credentials. server time stamp appears to be ignored. + + + + +if (valid_user) +{ + UINT16 3 - switch value indicating USER_INFO structure. + VOID* non-zero - pointer to USER_INFO structure + USER_INFO user logon information + + UINT32 1 - Authoritative response; 0 - Non-Auth? + + return 0 - indicates success +} +else +{ + UINT16 0 - switch value. value to indicate no user presumed. + VOID* 0x0000 0000 - indicates no USER_INFO structure. + + UINT32 1 - Authoritative response; 0 - Non-Auth? + + return 0xC000 0064 - NT_STATUS_NO_SUCH_USER. +} + + + + + + + +LSA SAM Logoff + + +Note: presumably, the SAM_INFO structure is validated, and a (currently + undocumented) error code returned if the Logoff is invalid. + + + +Request + + + + SAM_INFO + sam_id structure + + + + + + +Response + + + + VOID* + undocumented buffer pointer + + + CREDS + server credentials. server time stamp appears to be ignored. + + + +return 0 - indicates success. undocumented failure indication. + + + + + + +\\MAILSLOT\NET\NTLOGON + + +Note: mailslots will contain a response mailslot, to which the response + should be sent. the target NetBIOS name is REQUEST_NAME<20>, where + REQUEST_NAME is the name of the machine that sent the request. + + + +Query for PDC + +Note: NTversion, LMNTtoken, LM20token in response are the same as those given in the request. + + +Request + + + + UINT16 + 0x0007 - Query for PDC + + + STR + machine name + + + STR + response mailslot + + + UINT8[] + padding to 2-byte align with start of mailslot. + + + UNISTR + machine name + + + UINT32 + NTversion + + + UINT16 + LMNTtoken + + + UINT16 + LM20token + + + + + + +Response + + + + UINT16 +0x000A - Respose to Query for PDC + + STR +machine name (in uppercase) + + UINT8[] + padding to 2-byte align with start of mailslot. + + + UNISTR + machine name + + + UNISTR +domain name + + UINT32 +NTversion (same as received in request) + + UINT16 +LMNTtoken (same as received in request) + + UINT16 +LM20token (same as received in request) + + + + +SAM Logon + +Note: machine name in response is preceded by two '\' characters. + +Note: NTversion, LMNTtoken, LM20token in response are the same as those given in the request. + +Note: user name in the response is presumably the same as that in the request. + + +Request + + + + UINT16 + 0x0012 - SAM Logon + + + UINT16 + request count + + + UNISTR + machine name + + + UNISTR + user name + + + STR + response mailslot + + + UINT32 + alloweable account + + + UINT32 + domain SID size + + + char[sid_size] + domain SID, of sid_size bytes. + + + UINT8[] + ???? padding to 4? 2? -byte align with start of mailslot. + + + UINT32 + NTversion + + + UINT16 + LMNTtoken + + + UINT16 + LM20token + + + + + + +Response + + + + UINT16 + 0x0013 - Response to SAM Logon + + + UNISTR + machine name + + + UNISTR + user name - workstation trust account + + + UNISTR + domain name + + + UINT32 + NTversion + + + UINT16 + LMNTtoken + + + UINT16 + LM20token + + + + + + + + +SRVSVC Transact Named Pipe + +Defines for this pipe, identifying the query are: + + + + Net Share Enum + 0x0f + + + Net Server Get Info + 0x15 + + + + + +Net Share Enum + +Note: share level and switch value in the response are presumably the same as those in the request. + +Note: cifsrap2.txt (section 5) may be of limited assistance here. + + +Request + + + + VOID* +pointer (to server name?) + + UNISTR2 + server name + + + UINT8[] + padding to get unicode string 4-byte aligned with the start of the SMB header. + + + UINT32 + share level + + + UINT32 + switch value + + + VOID* + pointer to SHARE_INFO_1_CTR + + + SHARE_INFO_1_CTR + share info with 0 entries + + + UINT32 +preferred maximum length (0xffff ffff) + + + + +Response + + + + UINT32 + share level + + + UINT32 + switch value + + + VOID* +pointer to SHARE_INFO_1_CTR + + SHARE_INFO_1_CTR +share info (only added if share info ptr is non-zero) + + +return 0 - indicates success + + + + + +Net Server Get Info + +Note: level is the same value as in the request. + + +Request + + + + UNISTR2 + server name + + + UINT32 + switch level + + + + + + +Response + + + + UINT32 + switch level + + + VOID* + pointer to SERVER_INFO_101 + + + SERVER_INFO_101 +server info (only added if server info ptr is non-zero) + + +return 0 - indicates success + + + + + + +Cryptographic side of NT Domain Authentication + + +Definitions + + + +Add(A1,A2) +Intel byte ordered addition of corresponding 4 byte words in arrays A1 and A2 + + + +E(K,D) +DES ECB encryption of 8 byte data D using 7 byte key K + + + +lmowf() +Lan man hash + + + +ntowf() +NT hash + + + +PW +md4(machine_password) == md4(lsadump $machine.acc) == +pwdump(machine$) (initially) == md4(lmowf(unicode(machine))) + + + + +ARC4(K,Lk,D,Ld) +ARC4 encryption of data D of length Ld with key K of length Lk + + + +v[m..n(,l)] +subset of v from bytes m to n, optionally padded with zeroes to length l + + + +Cred(K,D) +E(K[7..7,7],E(K[0..6],D)) computes a credential + + + +Time() +4 byte current time + + + +Cc,Cs +8 byte client and server challenges Rc,Rs: 8 byte client and server credentials + + + + + + + +Protocol + + +C->S ReqChal,Cc S->C Cs + + + +C & S compute session key Ks = E(PW[9..15],E(PW[0..6],Add(Cc,Cs))) + + + +C: Rc = Cred(Ks,Cc) C->S Authenticate,Rc S: Rs = Cred(Ks,Cs), +assert(Rc == Cred(Ks,Cc)) S->C Rs C: assert(Rs == Cred(Ks,Cs)) + + + +On joining the domain the client will optionally attempt to change its +password and the domain controller may refuse to update it depending +on registry settings. This will also occur weekly afterwards. + + + +C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S ServerPasswordSet,Rc',Tc, +arc4(Ks[0..7,16],lmowf(randompassword()) C: Rc = Cred(Ks,Rc+Tc+1) S: +assert(Rc' == Cred(Ks,Rc+Tc)), Ts = Time() S: Rs' = Cred(Ks,Rs+Tc+1) +S->C Rs',Ts C: assert(Rs' == Cred(Ks,Rs+Tc+1)) S: Rs = Rs' + + + +User: U with password P wishes to login to the domain (incidental data +such as workstation and domain omitted) + + + +C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S NetLogonSamLogon,Rc',Tc,U, +arc4(Ks[0..7,16],16,ntowf(P),16), arc4(Ks[0..7,16],16,lmowf(P),16) S: +assert(Rc' == Cred(Ks,Rc+Tc)) assert(passwords match those in SAM) S: +Ts = Time() + + + +S->C Cred(Ks,Cred(Ks,Rc+Tc+1)),userinfo(logon script,UID,SIDs,etc) C: +assert(Rs == Cred(Ks,Cred(Rc+Tc+1)) C: Rc = Cred(Ks,Rc+Tc+1) + + + + + +Comments + + +On first joining the domain the session key could be computed by +anyone listening in on the network as the machine password has a well +known value. Until the machine is rebooted it will use this session +key to encrypt NT and LM one way functions of passwords which are +password equivalents. Any user who logs in before the machine has been +rebooted a second time will have their password equivalent exposed. Of +course the new machine password is exposed at this time anyway. + + + +None of the returned user info such as logon script, profile path and +SIDs *appear* to be protected by anything other than the TCP checksum. + + + +The server time stamps appear to be ignored. + + + +The client sends a ReturnAuthenticator in the SamLogon request which I +can't find a use for. However its time is used as the timestamp +returned by the server. + + + +The password OWFs should NOT be sent over the network reversibly +encrypted. They should be sent using ARC4(Ks,md4(owf)) with the server +computing the same function using the owf values in the SAM. + + + + + + +SIDs and RIDs + + +SIDs and RIDs are well documented elsewhere. + + + +A SID is an NT Security ID (see DOM_SID structure). They are of the form: + + + +revision-NN-SubAuth1-SubAuth2-SubAuth3... +revision-0xNNNNNNNNNNNN-SubAuth1-SubAuth2-SubAuth3... + + + +currently, the SID revision is 1. +The Sub-Authorities are known as Relative IDs (RIDs). + + + +Well-known SIDs + + +Universal well-known SIDs + + + + Null SID + S-1-0-0 + + + World + S-1-1-0 + + + Local + S-1-2-0 + + + Creator Owner ID + S-1-3-0 + + + Creator Group ID + S-1-3-1 + + + Creator Owner Server ID + S-1-3-2 + + + Creator Group Server ID + S-1-3-3 + + + (Non-unique IDs) + S-1-4 + + + + + + +NT well-known SIDs + + + + NT Authority + S-1-5 + + + Dialup + S-1-5-1 + + + Network + S-1-5-2 + + + Batch + S-1-5-3 + + + Interactive + S-1-5-4 + + + Service +S-1-5-6 + + AnonymousLogon(aka null logon session) + S-1-5-7 + + + Proxy +S-1-5-8 + + ServerLogon(aka domain controller account) + S-1-5-8 + + + (Logon IDs) + S-1-5-5-X-Y + + + (NT non-unique IDs) + S-1-5-0x15-... + + + (Built-in domain) + s-1-5-0x20 + + + + + + + +Well-known RIDS + + +A RID is a sub-authority value, as part of either a SID, or in the case +of Group RIDs, part of the DOM_GID structure, in the USER_INFO_1 +structure, in the LSA SAM Logon response. + + + +Well-known RID users + + +Groupname +???? +RID +DOMAIN_USER_RID_ADMIN0x000001F4 +DOMAIN_USER_RID_GUEST0x000001F5 + + + + + +Well-known RID groups + + +Groupname +???? +RID + DOMAIN_GROUP_RID_ADMINS0x00000200 + DOMAIN_GROUP_RID_USERS0x00000201 + DOMAIN_GROUP_RID_GUESTS0x00000202 + + + + + +Well-known RID aliases + + +Groupname +???? +RID + DOMAIN_ALIAS_RID_ADMINS0x00000220 + DOMAIN_ALIAS_RID_USERS0x00000221 + DOMAIN_ALIAS_RID_GUESTS0x00000222 + DOMAIN_ALIAS_RID_POWER_USERS0x00000223 + DOMAIN_ALIAS_RID_ACCOUNT_OPS0x00000224 + DOMAIN_ALIAS_RID_SYSTEM_OPS0x00000225 + DOMAIN_ALIAS_RID_PRINT_OPS0x00000226 + DOMAIN_ALIAS_RID_BACKUP_OPS0x00000227 + DOMAIN_ALIAS_RID_REPLICATOR0x00000228 + + + + + +
diff --git a/docs/docbook/devdoc/dev-doc.sgml b/docs/docbook/devdoc/dev-doc.sgml index 76ad512add..0e017fb6a6 100644 --- a/docs/docbook/devdoc/dev-doc.sgml +++ b/docs/docbook/devdoc/dev-doc.sgml @@ -6,11 +6,13 @@ + + ]> -SAMBA Deverlopers Guide +SAMBA Developers Guide @@ -32,7 +34,7 @@ people developing samba or those interested in doing so. than one person can maintain. The most recent version of this document can be found at http://www.samba.org/ on the "Documentation" page. Please send updates to jerry@samba.org. +url="mailto:jelmer@samba.org">jelmer@samba.org. @@ -52,5 +54,7 @@ url="http://www.fsf.org/licenses/gpl.txt">http://www.fsf.org/licenses/gpl.txt -- cgit From f338cf5a83d4ebde456bb2d2cf02e85eeb2e1454 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:18:59 +0000 Subject: Remove more obsolete documents (This used to be commit 60446ad6033f6f9179ac2566f670d04ff8b662c2) --- docs/textdocs/Passwords.txt | 46 -- docs/textdocs/Tracing.txt | 93 --- docs/textdocs/UNIX-SMB.txt | 231 ------- docs/textdocs/cifsntdomain.txt | 1498 ---------------------------------------- 4 files changed, 1868 deletions(-) delete mode 100644 docs/textdocs/Passwords.txt delete mode 100644 docs/textdocs/Tracing.txt delete mode 100644 docs/textdocs/UNIX-SMB.txt delete mode 100644 docs/textdocs/cifsntdomain.txt diff --git a/docs/textdocs/Passwords.txt b/docs/textdocs/Passwords.txt deleted file mode 100644 index 25d4c816f0..0000000000 --- a/docs/textdocs/Passwords.txt +++ /dev/null @@ -1,46 +0,0 @@ -Contributor: Unknown -Date: Updated April 19th 1999. -Status: Current - -Subject: NOTE ABOUT PASSWORDS -============================================================================= - -Unix systems use a wide variety of methods for checking the validity -of a password. This is primarily controlled with the Makefile defines -mentioned in the Makefile. - -Also note that some clients (notably WfWg) uppercase the password -before sending it. The server tries the password as it receives it and -also after lowercasing it. - -The Samba server can also be configured to try different -upper/lowercase combinations. This is controlled by the [global] -parameter "password level". A level of N means to try all combinations -up to N uppercase characters in the password. A high value can chew a -fair bit of CPU time and can lower the security of your system. Do not -use this options unless you really need it - the time taken for -password checking can become so high that clients time out. - -If you do use the "password level" option then you might like to use --DUFC_CRYPT in your Makefile. On some machine this makes password -checking _much_ faster. This is also useful if you use the @group -syntax in the user= option. - -If your site uses AFS (the Andrew File System), you can use the AFS section -in the Makefile. This will first attempt to authenticate a username and -password to AFS. If that succeeds, then the associated AFS rights will be -granted. Otherwise, the password checking routine falls back to whatever -Unix password checking method you are using. Note that the AFS code is -only written and tested for AFS 3.3 and later. - - -SECURITY = SERVER or DOMAIN -=========================== - -Samba can use a remote server to do its username/password -validation. This allows you to have one central machine (for example a -NT box) control the passwords for the Unix box. - -See the section on "security =" in smb.conf(5) for details. - - diff --git a/docs/textdocs/Tracing.txt b/docs/textdocs/Tracing.txt deleted file mode 100644 index 6cc1d69258..0000000000 --- a/docs/textdocs/Tracing.txt +++ /dev/null @@ -1,93 +0,0 @@ -Contributor: Andrew Tridgell -Date: Old -Status: Questionable - -Subject: How to trace samba system calls for debugging purposes -============================================================================= - -This file describes how to do a system call trace on Samba to work out -what its doing wrong. This is not for the faint of heart, but if you -are reading this then you are probably desperate. - -Actually its not as bad as the the above makes it sound, just don't -expect the output to be very pretty :-) - -Ok, down to business. One of the big advantages of unix systems is -that they nearly all come with a system trace utility that allows you -to monitor all system calls that a program is making. This is -extremely using for debugging and also helps when trying to work out -why something is slower than you expect. You can use system tracing -without any special compilation options. - -The system trace utility is called different things on different -systems. On Linux systems its called strace. Under SunOS 4 its called -trace. Under SVR4 style systems (including solaris) its called -truss. Under many BSD systems its called ktrace. - -The first thing you should do is read the man page for your native -system call tracer. In the discussion below I'll assume its called -strace as strace is the only portable system tracer (its available for -free for many unix types) and its also got some of the nicest -features. - -Next, try using strace on some simple commands. For example, "strace -ls" or "strace echo hello". - -You'll notice that it produces a LOT of output. It is showing you the -arguments to every system call that the program makes and the -result. Very little happens in a program without a system call so you -get lots of output. You'll also find that it produces a lot of -"preamble" stuff showing the loading of shared libraries etc. Ignore -this (unless its going wrong!) - -For example, the only line that really matters in the "strace echo -hello" output is: - -write(1, "hello\n", 6) = 6 - -all the rest is just setting up to run the program. - -Ok, now you're famialiar with strace. To use it on Samba you need to -strace the running smbd daemon. The way I tend ot use it is to first -login from my Windows PC to the Samba server, then use smbstatus to -find which process ID that client is attached to, then as root I do -"strace -p PID" to attach to that process. I normally redirect the -stderr output from this command to a file for later perusal. For -example, if I'm using a csh style shell: - - strace -f -p 3872 >& strace.out - -or with a sh style shell: - - strace -f -p 3872 > strace.out 2>&1 - -Note the "-f" option. This is only available on some systems, and -allows you to trace not just the current process, but any children it -forks. This is great for finding printing problems caused by the -"print command" being wrong. - -Once you are attached you then can do whatever it is on the client -that is causing problems and you will capture all the system calls -that smbd makes. - -So how do you interpret the results? Generally I search through the -output for strings that I know will appear when the problem -happens. For example, if I am having touble with permissions on a file -I would search for that files name in the strace output and look at -the surrounding lines. Another trick is to match up file descriptor -numbers and "follow" what happens to an open file until it is closed. - -Beyond this you will have to use your initiative. To give you an idea -of wehat you are looking for here is a piece of strace output that -shows that /dev/null is not world writeable, which causes printing to -fail with Samba: - -[pid 28268] open("/dev/null", O_RDWR) = -1 EACCES (Permission denied) -[pid 28268] open("/dev/null", O_WRONLY) = -1 EACCES (Permission denied) - -the process is trying to first open /dev/null read-write then -read-only. Both fail. This means /dev/null has incorrect permissions. - -Have fun! - -(please send updates/fixes to this file to samba@samba.org) diff --git a/docs/textdocs/UNIX-SMB.txt b/docs/textdocs/UNIX-SMB.txt deleted file mode 100644 index c3d7643cbc..0000000000 --- a/docs/textdocs/UNIX-SMB.txt +++ /dev/null @@ -1,231 +0,0 @@ -Contributor: Andrew Tridgell -Date: April 1995 - -Subject: Discussion of NetBIOS in a Unix World -============================================================================ - -This is a short document that describes some of the issues that -confront a SMB implementation on unix, and how Samba copes with -them. They may help people who are looking at unix<->PC -interoperability. - -It was written to help out a person who was writing a paper on unix to -PC connectivity. - - -Usernames -========= - -The SMB protocol has only a loose username concept. Early SMB -protocols (such as CORE and COREPLUS) have no username concept at -all. Even in later protocols clients often attempt operations -(particularly printer operations) without first validating a username -on the server. - -Unix security is based around username/password pairs. A unix box -should not allow clients to do any substantive operation without some -sort of validation. - -The problem mostly manifests itself when the unix server is in "share -level" security mode. This is the default mode as the alternative -"user level" security mode usually forces a client to connect to the -server as the same user for each connected share, which is -inconvenient in many sites. - -In "share level" security the client normally gives a username in the -"session setup" protocol, but does not supply an accompanying -password. The client then connects to resources using the "tree -connect" protocol, and supplies a password. The problem is that the -user on the PC types the username and the password in different -contexts, unaware that they need to go together to give access to the -server. The username is normally the one the user typed in when they -"logged onto" the PC (this assumes Windows for Workgroups). The -password is the one they chose when connecting to the disk or printer. - -The user often chooses a totally different username for their login as -for the drive connection. Often they also want to access different -drives as different usernames. The unix server needs some way of -divining the correct username to combine with each password. - -Samba tries to avoid this problem using several methods. These succeed -in the vast majority of cases. The methods include username maps, the -service%user syntax, the saving of session setup usernames for later -validation and the derivation of the username from the service name -(either directly or via the user= option). - -File Ownership -============== - -The commonly used SMB protocols have no way of saying "you can't do -that because you don't own the file". They have, in fact, no concept -of file ownership at all. - -This brings up all sorts of interesting problems. For example, when -you copy a file to a unix drive, and the file is world writeable but -owned by another user the file will transfer correctly but will -receive the wrong date. This is because the utime() call under unix -only succeeds for the owner of the file, or root, even if the file is -world writeable. For security reasons Samba does all file operations -as the validated user, not root, so the utime() fails. This can stuff -up shared development diectories as programs like "make" will not get -file time comparisons right. - -There are several possible solutions to this problem, including -username mapping, and forcing a specific username for particular -shares. - -Passwords -========= - -Many SMB clients uppercase passwords before sending them. I have no -idea why they do this. Interestingly WfWg uppercases the password only -if the server is running a protocol greater than COREPLUS, so -obviously it isn't just the data entry routines that are to blame. - -Unix passwords are case sensitive. So if users use mixed case -passwords they are in trouble. - -Samba can try to cope with this by either using the "password level" -option which causes Samba to try the offered password with up to the -specified number of case changes, or by using the "password server" -option which allows Samba to do its validation via another machine -(typically a WinNT server). - -Samba supports the password encryption method used by SMB -clients. Note that the use of password encryption in Microsoft -networking leads to password hashes that are "plain text equivalent". -This means that it is *VERY* important to ensure that the Samba -smbpasswd file containing these password hashes is only readable -by the root user. See the documentation ENCRYPTION.txt for more -details. - - -Locking -======= - -The locking calls available under a DOS/Windows environment are much -richer than those available in unix. This means a unix server (like -Samba) choosing to use the standard fcntl() based unix locking calls -to implement SMB locking has to improvise a bit. - -One major problem is that dos locks can be in a 32 bit (unsigned) -range. Unix locking calls are 32 bits, but are signed, giving only a 31 -bit range. Unfortunately OLE2 clients use the top bit to select a -locking range used for OLE semaphores. - -To work around this problem Samba compresses the 32 bit range into 31 -bits by appropriate bit shifting. This seems to work but is not -ideal. In a future version a separate SMB lockd may be added to cope -with the problem. - -It also doesn't help that many unix lockd daemons are very buggy and -crash at the slightest provocation. They normally go mostly unused in -a unix environment because few unix programs use byte range -locking. The stress of huge numbers of lock requests from dos/windows -clients can kill the daemon on some systems. - -The second major problem is the "opportunistic locking" requested by -some clients. If a client requests opportunistic locking then it is -asking the server to notify it if anyone else tries to do something on -the same file, at which time the client will say if it is willing to -give up its lock. Unix has no simple way of implementing -opportunistic locking, and currently Samba has no support for it. - -Deny Modes -========== - -When a SMB client opens a file it asks for a particular "deny mode" to -be placed on the file. These modes (DENY_NONE, DENY_READ, DENY_WRITE, -DENY_ALL, DENY_FCB and DENY_DOS) specify what actions should be -allowed by anyone else who tries to use the file at the same time. If -DENY_READ is placed on the file, for example, then any attempt to open -the file for reading should fail. - -Unix has no equivalent notion. To implement this Samba uses either lock -files based on the files inode and placed in a separate lock -directory or a shared memory implementation. The lock file method -is clumsy and consumes processing and file resources, -the shared memory implementation is vastly prefered and is turned on -by default for those systems that support it. - -Trapdoor UIDs -============= - -A SMB session can run with several uids on the one socket. This -happens when a user connects to two shares with different -usernames. To cope with this the unix server needs to switch uids -within the one process. On some unixes (such as SCO) this is not -possible. This means that on those unixes the client is restricted to -a single uid. - -Note that you can also get the "trapdoor uid" message for other -reasons. Please see the FAQ for details. - -Port numbers -============ - -There is a convention that clients on sockets use high "unprivilaged" -port numbers (>1000) and connect to servers on low "privilaged" port -numbers. This is enforced in Unix as non-root users can't open a -socket for listening on port numbers less than 1000. - -Most PC based SMB clients (such as WfWg and WinNT) don't follow this -convention completely. The main culprit is the netbios nameserving on -udp port 137. Name query requests come from a source port of 137. This -is a problem when you combine it with the common firewalling technique -of not allowing incoming packets on low port numbers. This means that -these clients can't query a netbios nameserver on the other side of a -low port based firewall. - -The problem is more severe with netbios node status queries. I've -found that WfWg, Win95 and WinNT3.5 all respond to netbios node status -queries on port 137 no matter what the source port was in the -request. This works between machines that are both using port 137, but -it means it's not possible for a unix user to do a node status request -to any of these OSes unless they are running as root. The answer comes -back, but it goes to port 137 which the unix user can't listen -on. Interestingly WinNT3.1 got this right - it sends node status -responses back to the source port in the request. - - -Protocol Complexity -=================== - -There are many "protocol levels" in the SMB protocol. It seems that -each time new functionality was added to a Microsoft operating system, -they added the equivalent functions in a new protocol level of the SMB -protocol to "externalise" the new capabilities. - -This means the protocol is very "rich", offering many ways of doing -each file operation. This means SMB servers need to be complex and -large. It also means it is very difficult to make them bug free. It is -not just Samba that suffers from this problem, other servers such as -WinNT don't support every variation of every call and it has almost -certainly been a headache for MS developers to support the myriad of -SMB calls that are available. - -There are about 65 "top level" operations in the SMB protocol (things -like SMBread and SMBwrite). Some of these include hundreds of -sub-functions (SMBtrans has at least 120 sub-functions, like -DosPrintQAdd and NetSessionEnum). All of them take several options -that can change the way they work. Many take dozens of possible -"information levels" that change the structures that need to be -returned. Samba supports all but 2 of the "top level" functions. It -supports only 8 (so far) of the SMBtrans sub-functions. Even NT -doesn't support them all. - -Samba currently supports up to the "NT LM 0.12" protocol, which is the -one preferred by Win95 and WinNT3.5. Luckily this protocol level has a -"capabilities" field which specifies which super-duper new-fangled -options the server suports. This helps to make the implementation of -this protocol level much easier. - -There is also a problem with the SMB specications. SMB is a X/Open -spec, but the X/Open book is far from ideal, and fails to cover many -important issues, leaving much to the imagination. Microsoft recently -renamed the SMB protocol CIFS (Common Internet File System) and have -published new specifications. These are far superior to the old -X/Open documents but there are still undocumented calls and features. -This specification is actively being worked on by a CIFS developers -mailing list hosted by Microsft. - diff --git a/docs/textdocs/cifsntdomain.txt b/docs/textdocs/cifsntdomain.txt deleted file mode 100644 index 643b8957c9..0000000000 --- a/docs/textdocs/cifsntdomain.txt +++ /dev/null @@ -1,1498 +0,0 @@ -NT Domain Authentication ------------------------- - -Authors: - Luke Kenneth Casson Leighton (lkcl@switchboard.net) --------- - Paul Ashton (paul@argo.demon.co.uk) - - Duncan Stansfield (duncans@sco.com) - - Copyright (C) 1997 Luke Kenneth Casson Leighton - Copyright (C) 1997 Paul Ashton - Copyright (C) 1997 Duncan Stansfield - -Version: 0.024 (01Nov97) --------- - -Distribution: Unlimited and encouraged, for the purposes of implementation -------------- and comments. Feedback welcomed by the authors. - -Liability: Absolutely none accepted implicitly or explicitly, direct ----------- or consequentially, for use, abuse, misuse, lack of use, - misunderstandings, mistakes, omissions, mis-information for - anything in or not in, related to or not related to, or - pertaining to this document, or anything else that a lawyer - can think of or not think of. - -Warning: Please bear in mind that an incorrect implementation of this --------- protocol can cause NT workstation to fail irrevocably, for - which the authors accept no liability (see above). Please - contact your vendor if you have any problems. - -Sources: - Packet Traces from Netmonitor (Service Pack 1 and above) --------- - Paul Ashton and Luke Leighton's other "NT Domain" doc. - - CIFS documentation - cifs6.txt - - CIFS documentation - cifsrap2.txt - -Original: http://mailhost.cb1.com/~lkcl/cifsntdomain.txt. ---------- (Controlled copy maintained by lkcl@switchboard.net) - -Credits: - Paul Ashton: loads of work with Net Monitor; --------- understanding the NT authentication system; - reference implementation of the NT domain support on which - this document is originally based. - - Duncan Stansfield: low-level analysis of MSRPC Pipes. - - Linus Nordberg: producing c-code from Paul's crypto spec. - - Windows Sourcer development team - - -Contents: ---------- - - 1) Introduction - - 2) Structures and notes - - 2.1) Notes - 2.3) Enumerations - 2.3) Structures - - 3) Transact Named Pipe Header/Tail - - 3.1) MSRPC Pipes - 3.2) Header - 3.3) Tail - - 4) NTLSA Transact Named Pipe - - 4.1) LSA Open Policy - 4.2) LSA Query Info Policy - 4.3) LSA Enumerate Trusted Domains - 4.4) LSA Open Secret - 4.5) LSA Close - 4.6) LSA Lookup SIDS - 4.7) LSA Lookup Names - - 5) NETLOGON rpc Transact Named Pipe - - 5.1) LSA Request Challenge - 5.2) LSA Authenticate 2 - 5.3) LSA Server Password Set - 5.4) LSA SAM Logon - 5.5) LSA SAM Logoff - - 6) \\MAILSLOT\NET\NTLOGON - - 6.1) Query for PDC - 6.2) SAM Logon - - 7) SRVSVC Transact Named Pipe - - 7.1) Net Share Enum - 7.2) Net Server Get Info - - -Appendix: ---------- - - A1) Cryptographic side of NT Domain Authentication - - A1.1) Definitions - A1.2) Protocol - A1.3) Comments - - A2) SIDs and RIDs - - A2.1) Well-known SIDs - - A2.1.1) Universal well-known SIDs - A2.1.2) NT well-known SIDs - - A2.2) Well-known RIDS - - A2.2.1) Well-known RID users - A2.2.2) Well-known RID groups - A2.2.3) Well-known RID aliases - - - -1) Introduction ---------------- - - -This document contains information to provide an NT workstation with login -services, without the need for an NT server. - -It should be possible to select a domain instead of a workgroup (in the NT -workstation's TCP/IP settings) and after the obligatory reboot, type in a -username, password, select a domain and successfully log in. I would -appreciate any feedback on your experiences with this process, and any -comments, corrections and additions to this document. - - -The packets described here can be easily derived from (and are probably -better understood using) Netmon.exe. You will need to use the version -of Netmon that matches your system, in order to correctly decode the -NETLOGON, lsarpc and srvsvc Transact pipes. This document is derived from -NT Service Pack 1 and its corresponding version of Netmon. It is intended -that an annotated packet trace be produced, which will likely be more -instructive than this document. - -Also needed, to fully implement NT Domain Login Services, is the -document describing the cryptographic part of the NT authentication. -This document is available from comp.protocols.smb; from the ntsecurity.net -digest and from the samba digest, amongst other sources. - -A copy is available from: - -http://ntbugtraq.rc.on.ca/SCRIPTS/WA.EXE?A2=ind9708&L=ntbugtraq&O=A&P=2935 -http://mailhost.cb1.com/~lkcl/crypt.html - - -A c-code implementation, provided by Linus Nordberg -of this protocol is available from: - -http://samba.org/cgi-bin/mfs/01/digest/1997/97aug/0391.html -http://mailhost.cb1.com/~lkcl/crypt.txt - - -Also used to provide debugging information is the Check Build version of -NT workstation, and enabling full debugging in NETLOGON. This is -achieved by setting the following REG_SZ registry key to 0x1ffffff: - -HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters - -- Incorrect direct editing of the registry can cause your machine to fail. - Then again, so can incorrect implementation of this protocol. - See "Liability:" above. - - -Bear in mind that each packet over-the-wire will have its origin in an -API call. Therefore, there are likely to be structures, enumerations -and defines that are usefully documented elsewhere. - - -This document is by no means complete or authoritative. Missing sections -include, but are not limited to: - -- the meaning (and use by NT) of SIDs and RIDs. - -- mappings of RIDs to usernames (and vice-versa). - -- what a User ID is and what a Group ID is. - -- the exact meaning/definition of various magic constants or enumerations. - -- the reply error code and use of that error code when a workstation - becomes a member of a domain (to be described later). Failure to - return this error code will make the workstation report that it is - already a member of the domain. - -- the cryptographic side of the NetrServerPasswordSet command, which would - allow the workstation to change its password. This password is used to - generate the long-term session key. [It is possible to reject this - command, and keep the default workstation password]. - - -2) Notes and Structures ------------------------ - - -2.1) Notes ----------- - -- In the SMB Transact pipes, some "Structures", described here, appear to be - 4-byte aligned with the SMB header, at their start. Exactly which - "Structures" need aligning is not precisely known or documented. - -- In the UDP NTLOGON Mailslots, some "Structures", described here, appear to be - 2-byte aligned with the start of the mailslot, at their start. - -- Domain SID is of the format S-revision-version-auth1-auth2...authN. - e.g S-1-5-123-456-789-123-456. the 5 could be a sub-revision. - -- any undocumented buffer pointers must be non-zero if the string buffer it - refers to contains characters. exactly what value they should be is unknown. - 0x0000 0002 seems to do the trick to indicate that the buffer exists. a - NULL buffer pointer indicates that the string buffer is of zero length. - If the buffer pointer is NULL, then it is suspected that the structure it - refers to is NOT put into (or taken out of) the SMB data stream. This is - empirically derived from, for example, the LSA SAM Logon response packet, - where if the buffer pointer is NULL, the user information is not inserted - into the data stream. Exactly what happens with an array of buffer pointers - is not known, although an educated guess can be made. - -- an array of structures (a container) appears to have a count and a pointer. - if the count is zero, the pointer is also zero. no further data is put - into or taken out of the SMB data stream. if the count is non-zero, then - the pointer is also non-zero. immediately following the pointer is the - count again, followed by an array of container sub-structures. the count - appears a third time after the last sub-structure. - - -2.2) Enumerations ------------------ - -- MSRPC Header type. command number in the msrpc packet header - - MSRPC_Request: 0x00 - MSRPC_Response: 0x02 - MSRPC_Bind: 0x0B - MSRPC_BindAck: 0x0C - -- MSRPC Packet info. the meaning of these flags is undocumented - - FirstFrag: 0x01 - LastFrag: 0x02 - NotaFrag: 0x04 - RecRespond: 0x08 - NoMultiplex: 0x10 - NotForIdemp: 0x20 - NotforBcast: 0x40 - NoUuid: 0x80 - - -2.3) Structures ---------------- - -- sizeof VOID* is 32 bits. - -- sizeof char is 8 bits. - -- UTIME is 32 bits, indicating time in seconds since 01jan1970. documented - in cifs6.txt (section 3.5 page, page 30). - -- NTTIME is 64 bits. documented in cifs6.txt (section 3.5 page, page 30). - -- DOM_SID (domain SID structure) : - - UINT32 num of sub-authorities in domain SID - UINT8 SID revision number - UINT8 num of sub-authorities in domain SID - UINT8[6] 6 bytes for domain SID - Identifier Authority. - UINT16[n_subauths] domain SID sub-authorities - - Note: the domain SID is documented elsewhere. - -- STR (string) : - - char[] null-terminated string of ascii characters. - -- UNIHDR (unicode string header) : - - UINT16 length of unicode string - UINT16 max length of unicode string - UINT32 4 - undocumented. - -- UNIHDR2 (unicode string header plus buffer pointer) : - - UNIHDR unicode string header - VOID* undocumented buffer pointer - -- UNISTR (unicode string) : - - UINT16[] null-terminated string of unicode characters. - -- NAME (length-indicated unicode string) : - - UINT32 length of unicode string - UINT16[] null-terminated string of unicode characters. - -- UNISTR2 (aligned unicode string) : - - UINT8[] padding to get unicode string 4-byte aligned - with the start of the SMB header. - UINT32 max length of unicode string - UINT32 0 - undocumented - UINT32 length of unicode string - UINT16[] string of uncode characters. - -- OBJ_ATTR (object attributes) : - - UINT32 0x18 - length (in bytes) including the length field. - VOID* 0 - root directory (pointer) - VOID* 0 - object name (pointer) - UINT32 0 - attributes (undocumented) - VOID* 0 - security descriptior (pointer) - UINT32 0 - security quality of service - -- POL_HND (LSA policy handle) : - - char[20] policy handle - -- DOM_SID2 (domain SID structure, SIDS stored in unicode) : - - UINT32 5 - SID type - UINT32 0 - undocumented - UNIHDR2 domain SID unicode string header - UNISTR domain SID unicode string - - Note: there is a conflict between the unicode string header and the - unicode string itself as to which to use to indicate string - length. this will need to be resolved. - - Note: the SID type indicates, for example, an alias; a well-known group etc. - this is documented somewhere. - -- DOM_RID (domain RID structure) : - - UINT32 5 - well-known SID. 1 - user SID (see ShowACLs) - UINT32 5 - undocumented - UINT32 domain RID - UINT32 0 - domain index out of above reference domains - - -- LOG_INFO (server, account, client structure) : - - Note: logon server name starts with two '\' characters and is upper case. - - Note: account name is the logon client name from the LSA Request Challenge, - with a $ on the end of it, in upper case. - - VOID* undocumented buffer pointer - UNISTR2 logon server unicode string - UNISTR2 account name unicode string - UINT16 sec_chan - security channel type - UNISTR2 logon client machine unicode string - -- CLNT_SRV (server, client names structure) : - - Note: logon server name starts with two '\' characters and is upper case. - - VOID* undocumented buffer pointer - UNISTR2 logon server unicode string - VOID* undocumented buffer pointer - UNISTR2 logon client machine unicode string - -- CREDS (credentials + time stamp) - - char[8] credentials - UTIME time stamp - -- CLNT_INFO2 (server, client structure, client credentials) : - - Note: whenever this structure appears in a request, you must take a copy - of the client-calculated credentials received, because they will be - used in subsequent credential checks. the presumed intention is to - maintain an authenticated request/response trail. - - CLNT_SRV client and server names - UINT8[] ???? padding, for 4-byte alignment with SMB header. - VOID* pointer to client credentials. - CREDS client-calculated credentials + client time - -- CLNT_INFO (server, account, client structure, client credentials) : - - Note: whenever this structure appears in a request, you must take a copy - of the client-calculated credentials received, because they will be - used in subsequent credential checks. the presumed intention is to - maintain an authenticated request/response trail. - - LOG_INFO logon account info - CREDS client-calculated credentials + client time - -- ID_INFO_1 (id info structure, auth level 1) : - - VOID* ptr_id_info_1 - UNIHDR domain name unicode header - UINT32 param control - UINT64 logon ID - UNIHDR user name unicode header - UNIHDR workgroup name unicode header - char[16] arc4 LM OWF Password - char[16] arc4 NT OWF Password - UNISTR2 domain name unicode string - UNISTR2 user name unicode string - UNISTR2 workstation name unicode string - -- SAM_INFO (sam logon/logoff id info structure) : - - Note: presumably, the return credentials is supposedly for the server to - verify that the credential chain hasn't been compromised. - - CLNT_INFO2 client identification/authentication info - VOID* pointer to return credentials. - CRED return credentials - ignored. - UINT16 logon level - UINT16 switch value - - switch (switch_value) - case 1: - { - ID_INFO_1 id_info_1; - } - -- GID (group id info) : - - UINT32 group id - UINT32 user attributes (only used by NT 3.1 and 3.51) - -- DOM_REF (domain reference info) : - - VOID* undocumented buffer pointer. - UINT32 num referenced domains? - VOID* undocumented domain name buffer pointer. - UINT32 32 - max number of entries - UINT32 4 - num referenced domains? - - UNIHDR2 domain name unicode string header - UNIHDR2[num_ref_doms-1] referenced domain unicode string headers - - UNISTR domain name unicode string - DOM_SID[num_ref_doms] referenced domain SIDs - -- DOM_INFO (domain info, levels 3 and 5 are the same)) : - - UINT8[] ??? padding to get 4-byte alignment with start of SMB header - UINT16 domain name string length * 2 - UINT16 domain name string length * 2 - VOID* undocumented domain name string buffer pointer - VOID* undocumented domain SID string buffer pointer - UNISTR2 domain name (unicode string) - DOM_SID domain SID - -- USER_INFO (user logon info) : - - Note: it would be nice to know what the 16 byte user session key is for. - - NTTIME logon time - NTTIME logoff time - NTTIME kickoff time - NTTIME password last set time - NTTIME password can change time - NTTIME password must change time - - UNIHDR username unicode string header - UNIHDR user's full name unicode string header - UNIHDR logon script unicode string header - UNIHDR profile path unicode string header - UNIHDR home directory unicode string header - UNIHDR home directory drive unicode string header - - UINT16 logon count - UINT16 bad password count - - UINT32 User ID - UINT32 Group ID - UINT32 num groups - VOID* undocumented buffer pointer to groups. - - UINT32 user flags - char[16] user session key - - UNIHDR logon server unicode string header - UNIHDR logon domain unicode string header - VOID* undocumented logon domain id pointer - char[40] 40 undocumented padding bytes. future expansion? - - UINT32 0 - num_other_sids? - VOID* NULL - undocumented pointer to other domain SIDs. - - UNISTR2 username unicode string - UNISTR2 user's full name unicode string - UNISTR2 logon script unicode string - UNISTR2 profile path unicode string - UNISTR2 home directory unicode string - UNISTR2 home directory drive unicode string - - UINT32 num groups - GID[num_groups] group info - - UNISTR2 logon server unicode string - UNISTR2 logon domain unicode string - - DOM_SID domain SID - DOM_SID[num_sids] other domain SIDs? - -- SH_INFO_1_PTR (pointers to level 1 share info strings): - -Note: see cifsrap2.txt section5, page 10. - - 0 for shi1_type indicates a Disk. - 1 for shi1_type indicates a Print Queue. - 2 for shi1_type indicates a Device. - 3 for shi1_type indicates an IPC pipe. - 0x8000 0000 (top bit set in shi1_type) indicates a hidden share. - - VOID* shi1_netname - pointer to net name - UINT32 shi1_type - type of share. 0 - undocumented. - VOID* shi1_remark - pointer to comment. - -- SH_INFO_1_STR (level 1 share info strings) : - - UNISTR2 shi1_netname - unicode string of net name - UNISTR2 shi1_remark - unicode string of comment. - -- SHARE_INFO_1_CTR : - - share container with 0 entries: - - UINT32 0 - EntriesRead - UINT32 0 - Buffer - - share container with > 0 entries: - - UINT32 EntriesRead - UINT32 non-zero - Buffer - UINT32 EntriesRead - - SH_INFO_1_PTR[EntriesRead] share entry pointers - SH_INFO_1_STR[EntriesRead] share entry strings - - UINT8[] padding to get unicode string 4-byte - aligned with start of the SMB header. - UINT32 EntriesRead - UINT32 0 - padding - -- SERVER_INFO_101 : - -Note: see cifs6.txt section 6.4 - the fields described therein will be - of assistance here. for example, the type listed below is the - same as fServerType, which is described in 6.4.1. - - SV_TYPE_WORKSTATION 0x00000001 All workstations - SV_TYPE_SERVER 0x00000002 All servers - SV_TYPE_SQLSERVER 0x00000004 Any server running with SQL - server - SV_TYPE_DOMAIN_CTRL 0x00000008 Primary domain controller - SV_TYPE_DOMAIN_BAKCTRL 0x00000010 Backup domain controller - SV_TYPE_TIME_SOURCE 0x00000020 Server running the timesource - service - SV_TYPE_AFP 0x00000040 Apple File Protocol servers - SV_TYPE_NOVELL 0x00000080 Novell servers - SV_TYPE_DOMAIN_MEMBER 0x00000100 Domain Member - SV_TYPE_PRINTQ_SERVER 0x00000200 Server sharing print queue - SV_TYPE_DIALIN_SERVER 0x00000400 Server running dialin service. - SV_TYPE_XENIX_SERVER 0x00000800 Xenix server - SV_TYPE_NT 0x00001000 NT server - SV_TYPE_WFW 0x00002000 Server running Windows for - - SV_TYPE_SERVER_NT 0x00008000 Windows NT non DC server - SV_TYPE_POTENTIAL_BROWSER 0x00010000 Server that can run the browser - service - SV_TYPE_BACKUP_BROWSER 0x00020000 Backup browser server - SV_TYPE_MASTER_BROWSER 0x00040000 Master browser server - SV_TYPE_DOMAIN_MASTER 0x00080000 Domain Master Browser server - SV_TYPE_LOCAL_LIST_ONLY 0x40000000 Enumerate only entries marked - "local" - SV_TYPE_DOMAIN_ENUM 0x80000000 Enumerate Domains. The pszServer - and pszDomain parameters must be - NULL. - - UINT32 500 - platform_id - VOID* pointer to name - UINT32 5 - major version - UINT32 4 - minor version - UINT32 type (SV_TYPE_... bit field) - VOID* pointer to comment - - UNISTR2 sv101_name - unicode string of server name - UNISTR2 sv_101_comment - unicode string of server comment. - - UINT8[] padding to get unicode string 4-byte - aligned with start of the SMB header. - - - -3) MSRPC over Transact Named Pipe ---------------------------------- - -For details on the SMB Transact Named Pipe, see cifs6.txt - - -3.1) MSRPC Pipes ----------------- - -The MSRPC is conducted over an SMB Transact Pipe with a name of "\PIPE\". -You must first obtain a 16 bit file handle, by sending a SMBopenX with the -pipe name "\PIPE\srvsvc" for example. You can then perform an SMB Trans, -and must carry out an SMBclose on the file handle once you are finished. - -Trans Requests must be sent with two setup UINT16s, no UINT16 params (none -known about), and UINT8 data parameters sufficient to contain the MSRPC -header, and MSRPC data. The first UINT16 setup parameter must be either -0x0026 to indicate an RPC, or 0x0001 to indicate Set Named Pipe Handle -state. The second UINT16 parameter must be the file handle for the pipe, -obtained above. - -The Data section for an API Command of 0x0026 (RPC pipe) in the Trans -Request is the RPC Header, followed by the RPC Data. The Data section for -an API Command of 0x0001 (Set Named Pipe Handle state) is two bytes. The -only value seen for these two bytes is 0x00 0x43. - - -MSRPC Responses are sent as response data inside standard SMB Trans -responses, with the MSRPC Header, MSRPC Data and MSRPC tail. - - -It is suspected that the Trans Requests will need to be at least 2-byte -aligned (probably 4-byte). This is standard practice for SMBs. It is also -independent of the observed 4-byte alignments with the start of the MSRPC -header, including the 4-byte alignment between the MSRPC header and the -MSRPC data. - - -First, an SMBtconX connection is made to the IPC$ share. The connection -must be made using encrypted passwords, not clear-text. Then, an SMBopenX -is made on the pipe. Then, a Set Named Pipe Handle State must be sent, -after which the pipe is ready to accept API commands. Lastly, and SMBclose -is sent. - - -To be resolved: - - lkcl/01nov97 there appear to be two additional bytes after the null- - terminated \PIPE\ name for the RPC pipe. Values seen so far are - listed below: - - initial SMBopenX request: RPC API command 0x26 params: - - "\\PIPE\\lsarpc" 0x65 0x63; 0x72 0x70; 0x44 0x65; - "\\PIPE\\srvsvc" 0x73 0x76; 0x4E 0x00; 0x5C 0x43; - - -3.2) Header ------------ - -[section to be rewritten, following receipt of work by Duncan Stansfield] - - -Interesting note: if you set packed data representation to 0x0100 0000 -then all 4-byte and 2-byte word ordering is turned around! - -The start of each of the NTLSA and NETLOGON named pipes begins with: - -00 UINT8 5 - RPC major version -01 UINT8 0 - RPC minor version -02 UINT8 2 - RPC response packet -03 UINT8 3 - (FirstFrag bit-wise or with LastFrag) -04 UINT32 0x1000 0000 - packed data representation -08 UINT16 fragment length - data size (bytes) inc header and tail. -0A UINT16 0 - authentication length -0C UINT32 call identifier. matches 12th UINT32 of incoming RPC data. -10 UINT32 allocation hint - data size (bytes) minus header and tail. -14 UINT16 0 - presentation context identifier -16 UINT8 0 - cancel count -17 UINT8 in replies: 0 - reserved; in requests: opnum - see #defines. -18 ...... start of data (goes on for allocation_hint bytes) - - -RPC_Packet for request, response, bind and bind acknowledgement. -{ - - UINT8 versionmaj # reply same as request (0x05) - UINT8 versionmin # reply same as request (0x00) - UINT8 type # one of the MSRPC_Type enums - UINT8 flags # reply same as request (0x00 for Bind, 0x03 for Request) - UINT32 representation # reply same as request (0x00000010) - UINT16 fraglength # the length of the data section of the SMB trans packet - UINT16 authlength - UINT32 callid # call identifier. (e.g. 0x00149594) - - * stub USE TvPacket # the remainder of the packet depending on the "type" -} - - -# the interfaces are numbered. as yet I haven't seen more than one interface -# used on the same pipe name -# srvsvc -# abstract (0x4B324FC8, 0x01D31670, 0x475A7812, 0x88E16EBF, 0x00000003) -# transfer (0x8A885D04, 0x11C91CEB, 0x0008E89F, 0x6048102B, 0x00000002) -RPC_Iface RW -{ - UINT8 byte[16] # 16 bytes of number - UINT32 version # the interface number -} - - -# the remainder of the packet after the header if "type" was Bind -# in the response header, "type" should be BindAck -RPC_ReqBind RW -{ - UINT16 maxtsize # maximum transmission fragment size (0x1630) - UINT16 maxrsize # max receive fragment size (0x1630) - UINT32 assocgid # associated group id (0x0) - UINT32 numelements # the number of elements (0x1) - UINT16 contextid # presentation context identifier (0x0) - UINT8 numsyntaxes # the number of syntaxes (has always been 1?)(0x1) - UINT8[] # 4-byte alignment padding, against SMB header - - * abstractint USE RPC_Iface # num and vers. of interface client is using - * transferint USE RPC_Iface # num and vers. of interface to use for replies -} - - -RPC_Address RW -{ - UINT16 length # length of the string including null terminator - * port USE string # the string above in single byte, null terminated form -} - - -# the response to place after the header in the reply packet -RPC_ResBind RW -{ - UINT16 maxtsize # same as request - UINT16 maxrsize # same as request - UINT32 assocgid # zero - - * secondaddr USE RPC_Address # the address string, as described earlier - - UINT8[] # 4-byte alignment padding, against SMB header - - UINT8 numresults # the number of results (0x01) - - UINT8[] # 4-byte alignment padding, against SMB header - UINT16 result # result (0x00 = accept) - UINT16 reason # reason (0x00 = no reason specified) - - * transfersyntax USE RPC_Iface # the transfer syntax from the request -} - - -# the remainder of the packet after the header for every other other -# request -RPC_ReqNorm RW -{ - UINT32 allochint # the size of the stub data in bytes - UINT16 prescontext # presentation context identifier (0x0) - UINT16 opnum # operation number (0x15) - - * stub USE TvPacket # a packet dependent on the pipe name - # (probably the interface) and the op number) -} - - -# response to a request -RPC_ResNorm RW -{ - UINT32 allochint # size of the stub data in bytes - UINT16 prescontext # presentation context identifier (same as request) - UINT8 cancelcount # cancel count? (0x0) - UINT8 reserved # 0 - one byte padding - - * stub USE TvPacket # the remainder of the reply -} - - -3.3) Tail ---------- - -The end of each of the NTLSA and NETLOGON named pipes ends with: - - ...... end of data - UINT32 return code - - - -3.4 RPC Bind / Bind Ack ------------------------ - -RPC Binds are the process of associating an RPC pipe (e.g \PIPE\lsarpc) -with a "transfer syntax" (see RPC_Iface structure). The purpose for doing -this is unknown. - -Note: The RPC_ResBind SMB Transact request is sent with two uint16 setup - parameters. The first is 0x0026; the second is the file handle - returned by the SMBopenX Transact response. - -Note: The RPC_ResBind members maxtsize, maxrsize and assocgid are the - same in the response as the same members in the RPC_ReqBind. The - RPC_ResBind member transfersyntax is the same in the response as - the - -Note: The RPC_ResBind response member secondaddr contains the name - of what is presumed to be the service behind the RPC pipe. The - mapping identified so far is: - - initial SMBopenX request: RPC_ResBind response: - - "\\PIPE\\srvsvc" "\\PIPE\\ntsvcs" - "\\PIPE\\samr" "\\PIPE\\lsass" - "\\PIPE\\lsarpc" "\\PIPE\\lsass" - "\\PIPE\\wkssvc" "\\PIPE\\wksvcs" - "\\PIPE\\NETLOGON" "\\PIPE\\NETLOGON" - -Note: The RPC_Packet fraglength member in both the Bind Request and Bind - Acknowledgment must contain the length of the entire RPC data, - including the RPC_Packet header. - -Request: - - RPC_Packet - RPC_ReqBind - -Response: - - RPC_Packet - RPC_ResBind - - - -4) NTLSA Transact Named Pipe ----------------------------- - -The sequence of actions taken on this pipe are: - -- Establish a connection to the IPC$ share (SMBtconX). use encrypted passwords. -- Open an RPC Pipe with the name "\\PIPE\\lsarpc". Store the file handle. -- Using the file handle, send a Set Named Pipe Handle state to 0x4300. -- Send an LSA Open Policy request. Store the Policy Handle. -- Using the Policy Handle, send LSA Query Info Policy requests, etc. -- Using the Policy Handle, send an LSA Close. -- Close the IPC$ share. - - -Defines for this pipe, identifying the query are: - -- LSA Open Policy: 0x2c -- LSA Query Info Policy: 0x07 -- LSA Enumerate Trusted Domains: 0x0d -- LSA Open Secret: 0xff -- LSA Lookup SIDs: 0xfe -- LSA Lookup Names: 0xfd -- LSA Close: 0x00 - - -4.1) LSA Open Policy --------------------- - -Note: The policy handle can be anything you like. - -Request: - - VOID* buffer pointer - UNISTR2 server name - unicode string starting with two '\'s - OBJ_ATTR object attributes - UINT32 1 - desired access - -Response: - - POL_HND LSA policy handle - - return 0 - indicates success - - -4.2) LSA Query Info Policy --------------------------- - -Note: The info class in response must be the same as that in the request. - -Request: - - POL_HND LSA policy handle - UINT16 info class (also a policy handle?) - -Response: - - VOID* undocumented buffer pointer - UINT16 info class (same as info class in request). - - switch (info class) - case 3: - case 5: - { - DOM_INFO domain info, levels 3 and 5 (are the same). - } - - return 0 - indicates success - - -4.3) LSA Enumerate Trusted Domains ----------------------------------- - -Request: - - no extra data - -Response: - - UINT32 0 - enumeration context - UINT32 0 - entries read - UINT32 0 - trust information - - return 0x8000 001a - "no trusted domains" success code - - -4.4) LSA Open Secret --------------------- - -Request: - - no extra data - -Response: - - UINT32 0 - undocumented - UINT32 0 - undocumented - UINT32 0 - undocumented - UINT32 0 - undocumented - UINT32 0 - undocumented - - return 0x0C00 0034 - "no such secret" success code - - -4.5) LSA Close --------------- - -Request: - - POL_HND policy handle to be closed - -Response: - - POL_HND 0s - closed policy handle (all zeros) - - return 0 - indicates success - - -4.6) LSA Lookup SIDS --------------------- - -Note: num_entries in response must be same as num_entries in request. - -Request: - - POL_HND LSA policy handle - UINT32 num_entries - VOID* undocumented domain SID buffer pointer - VOID* undocumented domain name buffer pointer - VOID*[num_entries] undocumented domain SID pointers to be looked up. - DOM_SID[num_entries] domain SIDs to be looked up. - char[16] completely undocumented 16 bytes. - -Response: - - DOM_REF domain reference response - - UINT32 num_entries (listed above) - VOID* undocumented buffer pointer - - UINT32 num_entries (listed above) - DOM_SID2[num_entries] domain SIDs (from Request, listed above). - - UINT32 num_entries (listed above) - - return 0 - indicates success - - -4.7) LSA Lookup Names ---------------------- - -Note: num_entries in response must be same as num_entries in request. - -Request: - - POL_HND LSA policy handle - UINT32 num_entries - UINT32 num_entries - VOID* undocumented domain SID buffer pointer - VOID* undocumented domain name buffer pointer - NAME[num_entries] names to be looked up. - char[] undocumented bytes - falsely translated SID structure? - -Response: - - DOM_REF domain reference response - - UINT32 num_entries (listed above) - VOID* undocumented buffer pointer - - UINT32 num_entries (listed above) - DOM_RID[num_entries] domain SIDs (from Request, listed above). - - UINT32 num_entries (listed above) - - return 0 - indicates success - - - -5) NETLOGON rpc Transact Named Pipe ------------------------------------ - -The sequence of actions taken on this pipe are: - -- Establish a connection to the IPC$ share (SMBtconX). use encrypted passwords. -- Open an RPC Pipe with the name "\\PIPE\\NETLOGON". Store the file handle. -- Using the file handle, send a Set Named Pipe Handle state to 0x4300. -- Create Client Challenge. Send LSA Request Challenge. Store Server Challenge. -- Calculate Session Key. Send an LSA Auth 2 Challenge. Store Auth2 Challenge. -- Calc/Verify Client Creds. Send LSA Srv PW Set. Calc/Verify Server Creds. -- Calc/Verify Client Creds. Send LSA SAM Logon . Calc/Verify Server Creds. -- Calc/Verify Client Creds. Send LSA SAM Logoff. Calc/Verify Server Creds. -- Close the IPC$ share. - - -Defines for this pipe, identifying the query are: - -- LSA Request Challenge: 0x04 -- LSA Server Password Set: 0x06 -- LSA SAM Logon: 0x02 -- LSA SAM Logoff: 0x03 -- LSA Auth 2: 0x0f -- LSA Logon Control: 0x0e - - -5.1) LSA Request Challenge --------------------------- - -Note: logon server name starts with two '\' characters and is upper case. - -Note: logon client is the machine, not the user. - -Note: the initial LanManager password hash, against which the challenge - is issued, is the machine name itself (lower case). there will be - calls issued (LSA Server Password Set) which will change this, later. - refusing these calls allows you to always deal with the same password - (i.e the LM# of the machine name in lower case). - -Request: - - VOID* undocumented buffer pointer - UNISTR2 logon server unicode string - UNISTR2 logon client unicode string - char[8] client challenge - -Response: - - char[8] server challenge - - return 0 - indicates success - - - -5.2) LSA Authenticate 2 ------------------------ - -Note: in between request and response, calculate the client credentials, - and check them against the client-calculated credentials (this - process uses the previously received client credentials). - -Note: neg_flags in the response is the same as that in the request. - -Note: you must take a copy of the client-calculated credentials received - here, because they will be used in subsequent authentication packets. - -Request: - - LOG_INFO client identification info - - char[8] client-calculated credentials - UINT8[] padding to 4-byte align with start of SMB header. - UINT32 neg_flags - negotiated flags (usual value is 0x0000 01ff) - -Response: - - char[8] server credentials. - UINT32 neg_flags - same as neg_flags in request. - - return 0 - indicates success. failure value unknown. - - -5.3) LSA Server Password Set ----------------------------- - -Note: the new password is suspected to be a DES encryption using the old - password to generate the key. - -Note: in between request and response, calculate the client credentials, - and check them against the client-calculated credentials (this - process uses the previously received client credentials). - -Note: the server credentials are constructed from the client-calculated - credentials and the client time + 1 second. - -Note: you must take a copy of the client-calculated credentials received - here, because they will be used in subsequent authentication packets. - -Request: - - CLNT_INFO client identification/authentication info - char[] new password - undocumented. - -Response: - - CREDS server credentials. server time stamp appears to be ignored. - - return 0 - indicates success; 0xC000 006a indicates failure - - -5.4) LSA SAM Logon ------------------- - -Note: valid_user is True iff the username and password hash are valid for - the requested domain. - -Request: - - SAM_INFO sam_id structure - -Response: - - VOID* undocumented buffer pointer - CREDS server credentials. server time stamp appears to be ignored. - - if (valid_user) - { - UINT16 3 - switch value indicating USER_INFO structure. - VOID* non-zero - pointer to USER_INFO structure - USER_INFO user logon information - - UINT32 1 - Authoritative response; 0 - Non-Auth? - - return 0 - indicates success - } - else - { - UINT16 0 - switch value. value to indicate no user presumed. - VOID* 0x0000 0000 - indicates no USER_INFO structure. - - UINT32 1 - Authoritative response; 0 - Non-Auth? - - return 0xC000 0064 - NT_STATUS_NO_SUCH_USER. - } - - -5.5) LSA SAM Logoff --------------------- - -Note: presumably, the SAM_INFO structure is validated, and a (currently - undocumented) error code returned if the Logoff is invalid. - -Request: - - SAM_INFO sam_id structure - -Response: - - VOID* undocumented buffer pointer - CREDS server credentials. server time stamp appears to be ignored. - - return 0 - indicates success. undocumented failure indication. - - -6) \\MAILSLOT\NET\NTLOGON -------------------------- - -Note: mailslots will contain a response mailslot, to which the response - should be sent. the target NetBIOS name is REQUEST_NAME<20>, where - REQUEST_NAME is the name of the machine that sent the request. - - -6.1) Query for PDC ------------------- - -Note: NTversion, LMNTtoken, LM20token in response are the same as those - given in the request. - -Request: - - UINT16 0x0007 - Query for PDC - STR machine name - STR response mailslot - UINT8[] padding to 2-byte align with start of mailslot. - UNISTR machine name - UINT32 NTversion - UINT16 LMNTtoken - UINT16 LM20token - -Response: - - UINT16 0x000A - Respose to Query for PDC - STR machine name (in uppercase) - UINT8[] padding to 2-byte align with start of mailslot. - UNISTR machine name - UNISTR domain name - UINT32 NTversion (same as received in request) - UINT16 LMNTtoken (same as received in request) - UINT16 LM20token (same as received in request) - - -6.2) SAM Logon --------------- - -Note: machine name in response is preceded by two '\' characters. - -Note: NTversion, LMNTtoken, LM20token in response are the same as those - given in the request. - -Note: user name in the response is presumably the same as that in the request. - -Request: - - UINT16 0x0012 - SAM Logon - UINT16 request count - UNISTR machine name - UNISTR user name - STR response mailslot - UINT32 alloweable account - UINT32 domain SID size - char[sid_size] domain SID, of sid_size bytes. - UINT8[] ???? padding to 4? 2? -byte align with start of mailslot. - UINT32 NTversion - UINT16 LMNTtoken - UINT16 LM20token - -Response: - - UINT16 0x0013 - Response to SAM Logon - UNISTR machine name - UNISTR user name - workstation trust account - UNISTR domain name - UINT32 NTversion - UINT16 LMNTtoken - UINT16 LM20token - - - -7) SRVSVC Transact Named Pipe ------------------------------ - - -Defines for this pipe, identifying the query are: - -- Net Share Enum : 0x0f -- Net Server Get Info : 0x15 - - -7.1) Net Share Enum ------------------- - -Note: share level and switch value in the response are presumably the - same as those in the request. - -Note: cifsrap2.txt (section 5) may be of limited assistance here. - -Request: - - VOID* pointer (to server name?) - UNISTR2 server name - - UINT8[] padding to get unicode string 4-byte aligned - with the start of the SMB header. - - UINT32 share level - UINT32 switch value - - VOID* pointer to SHARE_INFO_1_CTR - SHARE_INFO_1_CTR share info with 0 entries - - UINT32 preferred maximum length (0xffff ffff) - -Response: - - UINT32 share level - UINT32 switch value - - VOID* pointer to SHARE_INFO_1_CTR - SHARE_INFO_1_CTR share info (only added if share info ptr is non-zero) - - return 0 - indicates success - - -7.2) Net Server Get Info ------------------- - -Note: level is the same value as in the request. - -Request: - - UNISTR2 server name - UINT32 switch level - -Response: - - UINT32 switch level - VOID* pointer to SERVER_INFO_101 - - SERVER_INFO_101 server info (only added if server info ptr is non-zero) - - return 0 - indicates success - - - -Appendix --------- - -A1) Cryptographic side of NT Domain Authentication --------------------------------------------------- - - -A1.1) Definitions ------------------ - -Add(A1,A2): Intel byte ordered addition of corresponding 4 byte words -in arrays A1 and A2 - -E(K,D): DES ECB encryption of 8 byte data D using 7 byte key K - -lmowf(): Lan man hash - -ntowf(): NT hash - -PW: md4(machine_password) == md4(lsadump $machine.acc) == -pwdump(machine$) (initially) == md4(lmowf(unicode(machine))) - -ARC4(K,Lk,D,Ld): ARC4 encryption of data D of length Ld with key K of -length Lk - -v[m..n(,l)]: subset of v from bytes m to n, optionally padded with -zeroes to length l - -Cred(K,D): E(K[7..7,7],E(K[0..6],D)) computes a credential - -Time(): 4 byte current time - -Cc,Cs: 8 byte client and server challenges Rc,Rs: 8 byte client and -server credentials - - -A1.2) Protocol --------------- - -C->S ReqChal,Cc S->C Cs - -C & S compute session key Ks = E(PW[9..15],E(PW[0..6],Add(Cc,Cs))) - -C: Rc = Cred(Ks,Cc) C->S Authenticate,Rc S: Rs = Cred(Ks,Cs), -assert(Rc == Cred(Ks,Cc)) S->C Rs C: assert(Rs == Cred(Ks,Cs)) - -On joining the domain the client will optionally attempt to change its -password and the domain controller may refuse to update it depending -on registry settings. This will also occur weekly afterwards. - -C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S ServerPasswordSet,Rc',Tc, -arc4(Ks[0..7,16],lmowf(randompassword()) C: Rc = Cred(Ks,Rc+Tc+1) S: -assert(Rc' == Cred(Ks,Rc+Tc)), Ts = Time() S: Rs' = Cred(Ks,Rs+Tc+1) -S->C Rs',Ts C: assert(Rs' == Cred(Ks,Rs+Tc+1)) S: Rs = Rs' - -User: U with password P wishes to login to the domain (incidental data -such as workstation and domain omitted) - -C: Tc = Time(), Rc' = Cred(Ks,Rc+Tc) C->S NetLogonSamLogon,Rc',Tc,U, -arc4(Ks[0..7,16],16,ntowf(P),16), arc4(Ks[0..7,16],16,lmowf(P),16) S: -assert(Rc' == Cred(Ks,Rc+Tc)) assert(passwords match those in SAM) S: -Ts = Time() - -S->C Cred(Ks,Cred(Ks,Rc+Tc+1)),userinfo(logon script,UID,SIDs,etc) C: -assert(Rs == Cred(Ks,Cred(Rc+Tc+1)) C: Rc = Cred(Ks,Rc+Tc+1) - - -A1.3) Comments --------------- - -On first joining the domain the session key could be computed by -anyone listening in on the network as the machine password has a well -known value. Until the machine is rebooted it will use this session -key to encrypt NT and LM one way functions of passwords which are -password equivalents. Any user who logs in before the machine has been -rebooted a second time will have their password equivalent exposed. Of -course the new machine password is exposed at this time anyway. - -None of the returned user info such as logon script, profile path and -SIDs *appear* to be protected by anything other than the TCP checksum. - -The server time stamps appear to be ignored. - -The client sends a ReturnAuthenticator in the SamLogon request which I -can't find a use for. However its time is used as the timestamp -returned by the server. - -The password OWFs should NOT be sent over the network reversibly -encrypted. They should be sent using ARC4(Ks,md4(owf)) with the server -computing the same function using the owf values in the SAM. - - -A2) SIDs and RIDs ------------------ - -SIDs and RIDs are well documented elsewhere. - -A SID is an NT Security ID (see DOM_SID structure). They are of the form: - - S-revision-NN-SubAuth1-SubAuth2-SubAuth3... - S-revision-0xNNNNNNNNNNNN-SubAuth1-SubAuth2-SubAuth3... - -currently, the SID revision is 1. -The Sub-Authorities are known as Relative IDs (RIDs). - - -A2.1) Well-known SIDs ---------------------- - - -A2.1.1) Universal well-known SIDs ---------------------------------- - - Null SID S-1-0-0 - World S-1-1-0 - Local S-1-2-0 - Creator Owner ID S-1-3-0 - Creator Group ID S-1-3-1 - Creator Owner Server ID S-1-3-2 - Creator Group Server ID S-1-3-3 - - (Non-unique IDs) S-1-4 - - -A2.1.2) NT well-known SIDs --------------------------- - - NT Authority S-1-5 - Dialup S-1-5-1 - - Network S-1-5-2 - Batch S-1-5-3 - Interactive S-1-5-4 - Service S-1-5-6 - AnonymousLogon S-1-5-7 (aka null logon session) - Proxy S-1-5-8 - ServerLogon S-1-5-8 (aka domain controller account) - - (Logon IDs) S-1-5-5-X-Y - - (NT non-unique IDs) S-1-5-0x15-... - - (Built-in domain) s-1-5-0x20 - - - -A2.2) Well-known RIDS ---------------------- - -A RID is a sub-authority value, as part of either a SID, or in the case -of Group RIDs, part of the DOM_GID structure, in the USER_INFO_1 -structure, in the LSA SAM Logon response. - - -A2.2.1) Well-known RID users ----------------------------- - - DOMAIN_USER_RID_ADMIN 0x0000 01F4 - DOMAIN_USER_RID_GUEST 0x0000 01F5 - - - -A2.2.2) Well-known RID groups ----------------------------- - - DOMAIN_GROUP_RID_ADMINS 0x0000 0200 - DOMAIN_GROUP_RID_USERS 0x0000 0201 - DOMAIN_GROUP_RID_GUESTS 0x0000 0202 - - - -A2.2.3) Well-known RID aliases ------------------------------- - - DOMAIN_ALIAS_RID_ADMINS 0x0000 0220 - DOMAIN_ALIAS_RID_USERS 0x0000 0221 - DOMAIN_ALIAS_RID_GUESTS 0x0000 0222 - DOMAIN_ALIAS_RID_POWER_USERS 0x0000 0223 - - DOMAIN_ALIAS_RID_ACCOUNT_OPS 0x0000 0224 - DOMAIN_ALIAS_RID_SYSTEM_OPS 0x0000 0225 - DOMAIN_ALIAS_RID_PRINT_OPS 0x0000 0226 - DOMAIN_ALIAS_RID_BACKUP_OPS 0x0000 0227 - - DOMAIN_ALIAS_RID_REPLICATOR 0x0000 0228 - - -- cgit From b786c9a2eccd821903fc057829192ce36e636c96 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:35:33 +0000 Subject: Make debuglevel a string for use with debug classes (This used to be commit fc29385029bf000dc70d23154e39970ee76e4d30) --- source3/lib/popt_common.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/lib/popt_common.c b/source3/lib/popt_common.c index a3d6af4fbc..bbc17cb704 100644 --- a/source3/lib/popt_common.c +++ b/source3/lib/popt_common.c @@ -33,7 +33,7 @@ static void debug_callback(poptContext con, switch(opt->val) { case 'd': if (arg) { - DEBUGLEVEL = atoi(arg); + debug_parse_levels(arg); AllowDebugChange = False; } @@ -43,7 +43,7 @@ static void debug_callback(poptContext con, struct poptOption popt_common_debug[] = { { NULL, 0, POPT_ARG_CALLBACK, debug_callback }, - { "debuglevel", 'd', POPT_ARG_INT, NULL, 'd', "Set debug level", + { "debuglevel", 'd', POPT_ARG_STRING, NULL, 'd', "Set debug level", "DEBUGLEVEL" }, { 0 } }; -- cgit From 1ddc80f1b920b5c36d2ac3e0b5b32bfb02caa782 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:36:37 +0000 Subject: Use popt for --help (This used to be commit 073106ad25fba8c8aaa57c296ce8e7cb7b3e3e97) --- source3/nsswitch/wbinfo.c | 78 +++++++++++++++-------------------------------- 1 file changed, 24 insertions(+), 54 deletions(-) diff --git a/source3/nsswitch/wbinfo.c b/source3/nsswitch/wbinfo.c index 4d36acc51b..d7d70b9e52 100644 --- a/source3/nsswitch/wbinfo.c +++ b/source3/nsswitch/wbinfo.c @@ -619,32 +619,6 @@ static BOOL wbinfo_ping(void) return result == NSS_STATUS_SUCCESS; } -/* Print program usage */ - -static void usage(void) -{ - d_printf("Usage: wbinfo -ug | -n name | -sSY sid | -UG uid/gid | -tm " - "| -[aA] user%%password\n"); - d_printf("\t-u\t\t\tlists all domain users\n"); - d_printf("\t-g\t\t\tlists all domain groups\n"); - d_printf("\t-n name\t\t\tconverts name to sid\n"); - d_printf("\t-s sid\t\t\tconverts sid to name\n"); - d_printf("\t-N name\t\t\tconverts NetBIOS name to IP (WINS)\n"); - d_printf("\t-I name\t\t\tconverts IP address to NetBIOS name (WINS)\n"); - d_printf("\t-U uid\t\t\tconverts uid to sid\n"); - d_printf("\t-G gid\t\t\tconverts gid to sid\n"); - d_printf("\t-S sid\t\t\tconverts sid to uid\n"); - d_printf("\t-Y sid\t\t\tconverts sid to gid\n"); - d_printf("\t-t\t\t\tcheck shared secret\n"); - d_printf("\t-m\t\t\tlist trusted domains\n"); - d_printf("\t-r user\t\t\tget user groups\n"); - d_printf("\t-a user%%password\tauthenticate user\n"); - d_printf("\t-A user%%password\tstore user and password used by winbindd (root only)\n"); - d_printf("\t-p\t\t\t'ping' winbindd to see if it is alive\n"); - d_printf("\t--sequence\t\tshow sequence numbers of all domains\n"); - d_printf("\t--set-auth-user DOMAIN\\user%%password\tset password for restrict anonymous\n"); -} - /* Main program */ enum { @@ -664,28 +638,28 @@ int main(int argc, char **argv) int result = 1; struct poptOption long_options[] = { + POPT_AUTOHELP /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ - { "help", 'h', POPT_ARG_NONE, 0, 'h' }, - { "domain-users", 'u', POPT_ARG_NONE, 0, 'u' }, - { "domain-groups", 'g', POPT_ARG_NONE, 0, 'g' }, - { "WINS-by-name", 'N', POPT_ARG_STRING, &string_arg, 'N' }, - { "WINS-by-ip", 'I', POPT_ARG_STRING, &string_arg, 'I' }, - { "name-to-sid", 'n', POPT_ARG_STRING, &string_arg, 'n' }, - { "sid-to-name", 's', POPT_ARG_STRING, &string_arg, 's' }, - { "uid-to-sid", 'U', POPT_ARG_INT, &int_arg, 'U' }, - { "gid-to-sid", 'G', POPT_ARG_INT, &int_arg, 'G' }, - { "sid-to-uid", 'S', POPT_ARG_STRING, &string_arg, 'S' }, - { "sid-to-gid", 'Y', POPT_ARG_STRING, &string_arg, 'Y' }, - { "check-secret", 't', POPT_ARG_NONE, 0, 't' }, - { "trusted-domains", 'm', POPT_ARG_NONE, 0, 'm' }, - { "sequence", 0, POPT_ARG_NONE, 0, OPT_SEQUENCE }, - { "user-groups", 'r', POPT_ARG_STRING, &string_arg, 'r' }, - { "authenticate", 'a', POPT_ARG_STRING, &string_arg, 'a' }, - { "set-auth-user", 'A', POPT_ARG_STRING, &string_arg, OPT_SET_AUTH_USER }, - { "ping", 'p', POPT_ARG_NONE, 0, 'p' }, + { "domain-users", 'u', POPT_ARG_NONE, 0, 'u', "Lists all domain users"}, + { "domain-groups", 'g', POPT_ARG_NONE, 0, 'g', "Lists all domain groups" }, + { "WINS-by-name", 'N', POPT_ARG_STRING, &string_arg, 'N', "Converts NetBIOS name to IP (WINS)" }, + { "WINS-by-ip", 'I', POPT_ARG_STRING, &string_arg, 'I', "Converts IP address to NetBIOS name (WINS)" }, + { "name-to-sid", 'n', POPT_ARG_STRING, &string_arg, 'n', "Converts name to sid" }, + { "sid-to-name", 's', POPT_ARG_STRING, &string_arg, 's', "Converts sid to name" }, + { "uid-to-sid", 'U', POPT_ARG_INT, &int_arg, 'U', "Converts uid to sid" }, + { "gid-to-sid", 'G', POPT_ARG_INT, &int_arg, 'G', "Converts gid to sid" }, + { "sid-to-uid", 'S', POPT_ARG_STRING, &string_arg, 'S', "Converts sid to uid" }, + { "sid-to-gid", 'Y', POPT_ARG_STRING, &string_arg, 'Y', "Converts sid to gid" }, + { "check-secret", 't', POPT_ARG_NONE, 0, 't', "Check shared secret" }, + { "trusted-domains", 'm', POPT_ARG_NONE, 0, 'm', "List trusted domains" }, + { "sequence", 0, POPT_ARG_NONE, 0, OPT_SEQUENCE, "show sequence numbers of all domains" }, + { "user-groups", 'r', POPT_ARG_STRING, &string_arg, 'r', "Get user groups" }, + { "authenticate", 'a', POPT_ARG_STRING, &string_arg, 'a', "authenticate user", "user%password" }, + { "set-auth-user", 'A', POPT_ARG_STRING, &string_arg, OPT_SET_AUTH_USER, "Store user and password used by winbindd (root only)", "user%password" }, + { "ping", 'p', POPT_ARG_NONE, 0, 'p', "'ping' winbindd to see if it is alive" }, { 0, 0, 0, 0 } }; @@ -708,17 +682,17 @@ int main(int argc, char **argv) load_interfaces(); + /* Parse options */ + + pc = poptGetContext("wbinfo", argc, (const char **)argv, long_options, 0); + /* Parse command line options */ if (argc == 1) { - usage(); + poptPrintHelp(pc, stderr, 0); return 1; } - /* Parse options */ - - pc = poptGetContext("wbinfo", argc, (const char **)argv, long_options, 0); - while((opt = poptGetNextOpt(pc)) != -1) { if (got_command) { d_fprintf(stderr, "No more than one command may be specified at once.\n"); @@ -734,10 +708,6 @@ int main(int argc, char **argv) while((opt = poptGetNextOpt(pc)) != -1) { switch (opt) { - case 'h': - usage(); - result = 0; - goto done; case 'u': if (!print_domain_users()) { d_printf("Error looking up domain users\n"); @@ -859,7 +829,7 @@ int main(int argc, char **argv) break; default: d_fprintf(stderr, "Invalid option\n"); - usage(); + poptPrintHelp(pc, stderr, 0); goto done; } } -- cgit From 52ea319236d9aab761aa1429e285ae1eead2589b Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:37:39 +0000 Subject: Correct popt argument info in vfstest Don't use global_ctx in samtest.c (This used to be commit 0428eb422b50135327daf3040067f5982f1b0b92) --- source3/torture/samtest.c | 39 +-------------------------------------- source3/torture/vfstest.c | 2 +- 2 files changed, 2 insertions(+), 39 deletions(-) diff --git a/source3/torture/samtest.c b/source3/torture/samtest.c index a6d1a288b2..56b87dc257 100644 --- a/source3/torture/samtest.c +++ b/source3/torture/samtest.c @@ -189,6 +189,7 @@ static NTSTATUS do_cmd(struct sam_context *sam, struct cmd_set *cmd_entry, char { char *p = cmd, **argv = NULL; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; + TALLOC_CTX *mem_ctx; pstring buf; int argc = 0, i; @@ -327,18 +328,6 @@ BOOL reload_services(BOOL test) return True; } -/* Print usage information */ -static void usage(void) -{ - printf("Usage: samtest [options]\n"); - - printf("\t-c or --command \"command string\" execute semicolon separated cmds\n"); - printf("\t-d or --debug debuglevel set the debuglevel\n"); - printf("\t-l or --logfile logfile logfile to use instead of stdout\n"); - printf("\t-h or --help Print this help message.\n"); - printf("\n"); -} - /* Main function */ int main(int argc, char *argv[]) @@ -382,32 +371,6 @@ int main(int argc, char *argv[]) lp_set_logfile(logfile); interactive = False; break; - - case 'd': - DEBUGLEVEL = opt_debuglevel; - break; - - /* - case 'U': { - char *lp; - - pstrcpy(username,opt_username); - - if ((lp=strchr_m(username,'%'))) { - *lp = 0; - pstrcpy(password,lp+1); - got_pass = 1; - memset(strchr_m(opt_username,'%') + 1, 'X', - strlen(password)); - } - break; - } - */ - - case 'h': - default: - usage(); - exit(1); } } diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index 824e8108bf..9f8062a02e 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -493,7 +493,7 @@ int main(int argc, char *argv[]) POPT_AUTOHELP {"file", 'f', POPT_ARG_STRING, &filename, 0, }, {"command", 'c', POPT_ARG_STRING, &cmdstr, 0, "Execute specified list of commands" }, - {"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l', 0, "Write output to specified logfile" }, + {"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l', "Write output to specified logfile" }, { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_debug }, { 0, 0, 0, 0} }; -- cgit From 8e729a4d846f8cd4ee5bea549c1abbcf1653b3b3 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:38:43 +0000 Subject: Move samr_make_sam_obj_sd to lib/util_seaccess.c. samtest now compiles and links successfully! (This used to be commit 0ea4bcb6b772a0d95d20f7c1a2a0c08a0ba9e466) --- source3/lib/util_seaccess.c | 41 ++++++++++++++++++++++++++++++++++++++++ source3/rpc_server/srv_samr_nt.c | 40 --------------------------------------- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/source3/lib/util_seaccess.c b/source3/lib/util_seaccess.c index 5aef69e554..87711ff5ad 100644 --- a/source3/lib/util_seaccess.c +++ b/source3/lib/util_seaccess.c @@ -21,6 +21,8 @@ #include "includes.h" +extern DOM_SID global_sid_Builtin; + /********************************************************************************** Check if this ACE has a SID in common with the token. **********************************************************************************/ @@ -442,3 +444,42 @@ SEC_DESC_BUF *se_create_child_secdesc(TALLOC_CTX *ctx, SEC_DESC *parent_ctr, return sdb; } + +/******************************************************************* + samr_make_sam_obj_sd + ********************************************************************/ + +NTSTATUS samr_make_sam_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size) +{ + extern DOM_SID global_sid_World; + DOM_SID adm_sid; + DOM_SID act_sid; + + SEC_ACE ace[3]; + SEC_ACCESS mask; + + SEC_ACL *psa = NULL; + + sid_copy(&adm_sid, &global_sid_Builtin); + sid_append_rid(&adm_sid, BUILTIN_ALIAS_RID_ADMINS); + + sid_copy(&act_sid, &global_sid_Builtin); + sid_append_rid(&act_sid, BUILTIN_ALIAS_RID_ACCOUNT_OPS); + + /*basic access for every one*/ + init_sec_access(&mask, SAMR_EXECUTE | SAMR_READ); + init_sec_ace(&ace[0], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); + + /*full access for builtin aliases Administrators and Account Operators*/ + init_sec_access(&mask, SAMR_ALL_ACCESS); + init_sec_ace(&ace[1], &adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); + init_sec_ace(&ace[2], &act_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); + + if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, 3, ace)) == NULL) + return NT_STATUS_NO_MEMORY; + + if ((*psd = make_sec_desc(ctx, SEC_DESC_REVISION, NULL, NULL, NULL, psa, sd_size)) == NULL) + return NT_STATUS_NO_MEMORY; + + return NT_STATUS_OK; +} diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c index 82b83403eb..0d6808d08c 100644 --- a/source3/rpc_server/srv_samr_nt.c +++ b/source3/rpc_server/srv_samr_nt.c @@ -405,46 +405,6 @@ NTSTATUS _samr_get_usrdom_pwinfo(pipes_struct *p, SAMR_Q_GET_USRDOM_PWINFO *q_u, return r_u->status; } - -/******************************************************************* - samr_make_sam_obj_sd - ********************************************************************/ - -NTSTATUS samr_make_sam_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size) -{ - extern DOM_SID global_sid_World; - DOM_SID adm_sid; - DOM_SID act_sid; - - SEC_ACE ace[3]; - SEC_ACCESS mask; - - SEC_ACL *psa = NULL; - - sid_copy(&adm_sid, &global_sid_Builtin); - sid_append_rid(&adm_sid, BUILTIN_ALIAS_RID_ADMINS); - - sid_copy(&act_sid, &global_sid_Builtin); - sid_append_rid(&act_sid, BUILTIN_ALIAS_RID_ACCOUNT_OPS); - - /*basic access for every one*/ - init_sec_access(&mask, SAMR_EXECUTE | SAMR_READ); - init_sec_ace(&ace[0], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); - - /*full access for builtin aliases Administrators and Account Operators*/ - init_sec_access(&mask, SAMR_ALL_ACCESS); - init_sec_ace(&ace[1], &adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); - init_sec_ace(&ace[2], &act_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); - - if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, 3, ace)) == NULL) - return NT_STATUS_NO_MEMORY; - - if ((*psd = make_sec_desc(ctx, SEC_DESC_REVISION, NULL, NULL, NULL, psa, sd_size)) == NULL) - return NT_STATUS_NO_MEMORY; - - return NT_STATUS_OK; -} - /******************************************************************* samr_make_dom_obj_sd ********************************************************************/ -- cgit From 408fb927c8366cc8db323fe80a0f07e0340a858f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 16:39:00 +0000 Subject: SAM_CONTEXT is const (This used to be commit 3b4cf8f67c2970e7b099ae2382bdd802b79d1dd2) --- examples/sam/sam_skel.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/examples/sam/sam_skel.c b/examples/sam/sam_skel.c index 5de8ca00d1..9b684270a0 100644 --- a/examples/sam/sam_skel.c +++ b/examples/sam/sam_skel.c @@ -189,11 +189,7 @@ NTSTATUS sam_skel_get_groups_of_account(const struct sam_methods *sam_method, co return NT_STATUS_NOT_IMPLEMENTED; } - - - - -NTSTATUS sam_init(SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const char *location) +NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const char *location) { NTSTATUS nt_status; -- cgit From afc5c6b2a1743a342f620e364b7ef89239cb05aa Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 17:08:13 +0000 Subject: Adding makefile for sam_skel module (This used to be commit b91fd5a77c493d0c90b45de6a70fb84bbef3f9f1) --- examples/sam/Makefile.in | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 examples/sam/Makefile.in diff --git a/examples/sam/Makefile.in b/examples/sam/Makefile.in new file mode 100644 index 0000000000..d5df346a8c --- /dev/null +++ b/examples/sam/Makefile.in @@ -0,0 +1,28 @@ +CC = @CC@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LDSHFLAGS = -shared +srcdir = @builddir@ +FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) + +SAM_OBJS = sam_skel.so + +# Default target + +default: $(SAM_OBJS) + +# Pattern rules + +%.so: %.o + $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< + +%.o: %.c + $(CC) $(FLAGS) -c $< + +# Misc targets + +clean: + rm -rf .libs + rm -f core *~ *% *.bak \ + $(SAM_OBJ) $(SAM_OBJS) -- cgit From bd11a63c5342a75c65117c596225555488cd2e2d Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 29 Aug 2002 17:36:44 +0000 Subject: We don't need the RTLD_GLOBAL. (This used to be commit 0d562b81bfd176111a1046560c39b03d986f90ec) --- source3/auth/auth_builtin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/auth/auth_builtin.c b/source3/auth/auth_builtin.c index bba1ad98bd..d54a8660b3 100644 --- a/source3/auth/auth_builtin.c +++ b/source3/auth/auth_builtin.c @@ -189,7 +189,7 @@ NTSTATUS auth_init_plugin(struct auth_context *auth_context, const char *param, trim_string(plugin_name, " ", " "); DEBUG(5, ("Trying to load auth plugin %s\n", plugin_name)); - dl_handle = sys_dlopen(plugin_name, RTLD_NOW | RTLD_GLOBAL ); + dl_handle = sys_dlopen(plugin_name, RTLD_NOW ); if (!dl_handle) { DEBUG(0, ("Failed to load auth plugin %s using sys_dlopen (%s)\n", plugin_name, sys_dlerror())); return NT_STATUS_UNSUCCESSFUL; -- cgit From 3f393056db8d2ee53b23ac5e5b04171da4ea6cf9 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 20:14:34 +0000 Subject: Split up documents at chapter level, not at sect1 level (This used to be commit f1710a46d0b51fbefc2a1b5230b76aa9ecbbcdab) --- docs/docbook/Makefile.in | 5 +-- docs/docbook/projdoc/samba-doc.sgml | 6 +-- docs/docbook/samba.dsl | 85 +++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 docs/docbook/samba.dsl diff --git a/docs/docbook/Makefile.in b/docs/docbook/Makefile.in index f1fb97d1e2..26cdc9a1bc 100644 --- a/docs/docbook/Makefile.in +++ b/docs/docbook/Makefile.in @@ -59,7 +59,8 @@ manpages: $(MANPAGES) pdf: ../Samba-HOWTO-Collection.pdf ps: ../Samba-HOWTO-Collection.ps txt: ../Samba-HOWTO-Collection.txt -html: $(HTMLDIR)/samba-doc.html $(MANPAGES_HTML) +html: $(MANPAGES_HTML) + $(DOCBOOK2HTML) -d samba.dsl -o $(HTMLDIR) $< html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html ../Samba-HOWTO-Collection.txt: $(SGMLDIR)/samba-doc.sgml @@ -81,8 +82,6 @@ html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html $(DOCBOOK2HTML) -u -o .. $< mv ../dev-doc.html $@ -$(HTMLDIR)/samba-doc.html: $(SGMLDIR)/samba-doc.sgml - $(DOCBOOK2HTML) -o $(HTMLDIR) $< $(HTMLDIR)/%.html: $(MANSGMLDIR)/%.sgml $(DOCBOOK2HTML) -o $(HTMLDIR) $< diff --git a/docs/docbook/projdoc/samba-doc.sgml b/docs/docbook/projdoc/samba-doc.sgml index a50389b7f0..75c5c379d3 100644 --- a/docs/docbook/projdoc/samba-doc.sgml +++ b/docs/docbook/projdoc/samba-doc.sgml @@ -18,9 +18,9 @@ - - - + + + ]> diff --git a/docs/docbook/samba.dsl b/docs/docbook/samba.dsl new file mode 100644 index 0000000000..75239c0f20 --- /dev/null +++ b/docs/docbook/samba.dsl @@ -0,0 +1,85 @@ + + + + + + ]]> + + + ]]> +]> + + + + + +;; =================================================================== +;; Generic Parameters +;; (Generic currently means: both print and html) +(define (chunk-element-list) + (list (normalize "preface") + (normalize "chapter") + (normalize "appendix") + (normalize "article") + (normalize "glossary") + (normalize "bibliography") + (normalize "index") + (normalize "colophon") + (normalize "setindex") + (normalize "reference") + (normalize "refentry") + (normalize "part") +; (normalize "sect1") + (normalize "section") + (normalize "book") ;; just in case nothing else matches... + (normalize "set") ;; sets are definitely chunks... + )) + +(define %chapter-autolabel% #t) +(define %section-autolabel% #t) +(define (toc-depth nd) 3) + +(define %root-filename% "index") ;; name for the root html file +(define %html-ext% ".html") ;; default extension for html output files +(define %html-prefix% "") ;; prefix for all filenames generated (except root) +(define %use-id-as-filename% #t) ;; if #t uses ID value, if present, as filename + ;; otherwise a code is used to indicate level + ;; of chunk, and general element number + ;; (nth element in the document) + +; === HTML settings === +(define %html-pubid% "-//W3C//DTD HTML 4.01 Transitional//EN") ;; Nearly true :-( +(define %html40% #t) + +; === Media objects === +(define preferred-mediaobject-extensions ;; this magic allows to use different graphical + (list "png" "jpg" "jpeg")) ;; formats for printing and putting online +(define acceptable-mediaobject-extensions + (list "bmp" "gif" "eps" "epsf" "avi" "mpg" "mpeg" "qt")) +(define preferred-mediaobject-notations + (list "PNG" "JPG" "JPEG")) +(define acceptable-mediaobject-notations + (list "EPS" "BMP" "GIF" "linespecific")) +; === Rendering === +(define %admon-graphics% #t) ;; use symbols for Caution|Important|Note|Tip|Warning + +; === Books only === +(define %generate-book-titlepage% #t) +(define %generate-book-toc% #t) +(define ($generate-chapter-toc$) #f) ;; never generate a chapter TOC in books + +; === Articles only === +(define %generate-article-titlepage% #t) +(define %generate-article-toc% #t) ;; make TOC + + + + + + + -- cgit From b9eec5b28461fa01b8a549edd1394879e1d8f9e6 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 29 Aug 2002 20:43:08 +0000 Subject: Several small fixes (This used to be commit 4fc06a9e2274546807beb411e9bcf47931f8b4f6) --- docs/docbook/Makefile.in | 11 +++++++---- docs/docbook/manpages/smb.conf.5.sgml | 2 +- docs/docbook/samba.dsl | 7 ++----- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/docbook/Makefile.in b/docs/docbook/Makefile.in index 26cdc9a1bc..b225eb9780 100644 --- a/docs/docbook/Makefile.in +++ b/docs/docbook/Makefile.in @@ -51,16 +51,18 @@ all: @echo "ps - Build PostScript version of HOWTO Collection" @echo "pdf - Build PDF version of HOWTO Collection" @echo -n "html-single - Build single file HTML version of HOWTO Collection" - @echo "and developers guide" - @echo "html - Build HTML version of HOWTO Collection and manpages" + @echo " and developers guide" + @echo "html - Build HTML version of HOWTO Collection" + @echo "htmlman - Build html version of manpages" @echo "txt - Build plain text version of HOWTO Collection" manpages: $(MANPAGES) pdf: ../Samba-HOWTO-Collection.pdf ps: ../Samba-HOWTO-Collection.ps txt: ../Samba-HOWTO-Collection.txt -html: $(MANPAGES_HTML) - $(DOCBOOK2HTML) -d samba.dsl -o $(HTMLDIR) $< +htmlman: $(MANPAGES_HTML) +html: + $(DOCBOOK2HTML) -d samba.dsl -o $(HTMLDIR) projdoc/samba-doc.sgml html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html ../Samba-HOWTO-Collection.txt: $(SGMLDIR)/samba-doc.sgml @@ -85,6 +87,7 @@ html-single: ../Samba-HOWTO-Collection.html ../Samba-Developers-Guide.html $(HTMLDIR)/%.html: $(MANSGMLDIR)/%.sgml $(DOCBOOK2HTML) -o $(HTMLDIR) $< + mv $(HTMLDIR)/index.html $@ $(MANDIR)/%: $(MANSGMLDIR)/%.sgml $(DOCBOOK2MAN) -o $(MANDIR) $< diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index 251341dbb1..053c6c1c71 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -3467,7 +3467,7 @@ - Default : ldap filter = (&(uid=%u)(objectclass=sambaAccount)) + Default : ldap filter = (&(uid=%u)(objectclass=sambaAccount)) diff --git a/docs/docbook/samba.dsl b/docs/docbook/samba.dsl index 75239c0f20..80197dfa77 100644 --- a/docs/docbook/samba.dsl +++ b/docs/docbook/samba.dsl @@ -44,13 +44,10 @@ (define %section-autolabel% #t) (define (toc-depth nd) 3) -(define %root-filename% "index") ;; name for the root html file +(define %root-filename% "Samba-HOWTO") ;; name for the root html file (define %html-ext% ".html") ;; default extension for html output files (define %html-prefix% "") ;; prefix for all filenames generated (except root) -(define %use-id-as-filename% #t) ;; if #t uses ID value, if present, as filename - ;; otherwise a code is used to indicate level - ;; of chunk, and general element number - ;; (nth element in the document) +(define %use-id-as-filename% #t) ; === HTML settings === (define %html-pubid% "-//W3C//DTD HTML 4.01 Transitional//EN") ;; Nearly true :-( -- cgit From 36df32553379bae515d4cebe4195cc2229660839 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 29 Aug 2002 23:16:45 +0000 Subject: fix connecting to a BDC when the PDC is down but in WINS and no bcast can be used to find a BDC (This used to be commit e95d8e2c9ee5cf22b628f3e0d99fb74bcc632ea0) --- source3/nsswitch/winbindd_cm.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source3/nsswitch/winbindd_cm.c b/source3/nsswitch/winbindd_cm.c index ddab850cf0..8c11bd3372 100644 --- a/source3/nsswitch/winbindd_cm.c +++ b/source3/nsswitch/winbindd_cm.c @@ -145,6 +145,13 @@ static BOOL cm_rpc_find_dc(const char *domain, struct in_addr *dc_ip, fstring sr /* Lookup domain controller name. Try the real PDC first to avoid SAM sync delays */ + if (get_dc_list(True, domain, &ip_list, &count) && + name_status_find(domain, 0x1c, 0x20, ip_list[0], srv_name)) { + *dc_ip = ip_list[0]; + SAFE_FREE(ip_list); + return True; + } + if (!get_dc_list(True, domain, &ip_list, &count)) { if (!get_dc_list(False, domain, &ip_list, &count)) { DEBUG(3, ("Could not look up dc's for domain %s\n", domain)); -- cgit From b2ee64955ac51e43d29c26590ea3b977343abdad Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 29 Aug 2002 23:23:42 +0000 Subject: fix connecting to a BDC when the PDC is down but in WINS and no bcast can be used to find a BDC 2nd try .... (This used to be commit f757223ebe88148b83e1a32b87c014c15c0a68dd) --- source3/nsswitch/winbindd_cm.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/source3/nsswitch/winbindd_cm.c b/source3/nsswitch/winbindd_cm.c index 8c11bd3372..997d5b665f 100644 --- a/source3/nsswitch/winbindd_cm.c +++ b/source3/nsswitch/winbindd_cm.c @@ -152,11 +152,9 @@ static BOOL cm_rpc_find_dc(const char *domain, struct in_addr *dc_ip, fstring sr return True; } - if (!get_dc_list(True, domain, &ip_list, &count)) { - if (!get_dc_list(False, domain, &ip_list, &count)) { - DEBUG(3, ("Could not look up dc's for domain %s\n", domain)); - return False; - } + if (!get_dc_list(False, domain, &ip_list, &count)) { + DEBUG(3, ("Could not look up dc's for domain %s\n", domain)); + return False; } /* Pick a nice close server */ -- cgit From 677bae21d1b46a85b5657a514dc938b3590bd2f5 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 30 Aug 2002 01:35:56 +0000 Subject: Abstract out the functionality of gtdbtool into a dictionary browser class. This should provide a nice framework for browsing any kind of data presented as a python dictionary: - windows registry - printer data - tdb files (This used to be commit 8af86f68354f7c803bb66886560b358d6e48681d) --- source3/python/gtkdictbrowser.py | 188 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100755 source3/python/gtkdictbrowser.py diff --git a/source3/python/gtkdictbrowser.py b/source3/python/gtkdictbrowser.py new file mode 100755 index 0000000000..1609dff9b4 --- /dev/null +++ b/source3/python/gtkdictbrowser.py @@ -0,0 +1,188 @@ +#!/usr/bin/python +# +# Browse a Python dictionary in a two pane graphical interface written +# in GTK. +# +# The GtkDictBrowser class is supposed to be generic enough to allow +# applications to override enough methods and produce a +# domain-specific browser provided the information is presented as a +# Python dictionary. +# +# Possible applications: +# +# - Windows registry browser +# - SPOOLSS printerdata browser +# - tdb file browser +# + +from gtk import * +import string, re + +class GtkDictBrowser: + + def __init__(self, dict): + self.dict = dict + + # This variable stores a list of (regexp, function) used to + # convert the raw value data to a displayable string. + + self.get_value_text_fns = [] + self.get_key_text = lambda x: x + + # We can filter the list of keys displayed using a regex + + 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.get_key_text(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 = self.dict[list_item.get_data("raw_key")] + + for entry in self.get_value_text_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() + + # Register a key display function + + def register_get_key_text_fn(self, fn): + self.get_key_text = fn + + # Register a value display function + + def register_get_value_text_fn(self, regexp, fn): + self.get_value_text_fns.append((regexp, fn)) + +# For testing purposes, create a fixed dictionary to browse with + +if __name__ == "__main__": + + dict = {"chicken": "ham", "spam": "fun"} + + db = GtkDictBrowser(dict) + + db.build_ui("GtkDictBrowser") + + # Override Python's handling of ctrl-c so we can break out of the + # gui from the command line. + + import signal + signal.signal(signal.SIGINT, signal.SIG_DFL) + + mainloop() -- cgit From d63a6aba6c4ed198eaafb5c22568565ead007f32 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 30 Aug 2002 02:43:51 +0000 Subject: Forgot to check in some of the libsmb stuff. (This used to be commit 0a2f6049c0b49810abf1c3e909d712f53c7fc8c1) --- source3/python/py_samba.c | 64 +++++++++++++++++++++++++++++++++++++++++ source3/python/samba-head.patch | 22 +++++++------- source3/python/setup.py.in | 10 +++++++ 3 files changed, 85 insertions(+), 11 deletions(-) create mode 100644 source3/python/py_samba.c diff --git a/source3/python/py_samba.c b/source3/python/py_samba.c new file mode 100644 index 0000000000..7c94569787 --- /dev/null +++ b/source3/python/py_samba.c @@ -0,0 +1,64 @@ +/* + 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.h" +#include "python/py_common.h" + +/* + * Module initialisation + */ + +static PyObject *lsa_open_policy(PyObject *self, PyObject *args, + PyObject *kw) +{ + return NULL; +} + +static PyMethodDef samba_methods[] = { + { NULL } +}; + +static PyMethodDef cheepy_methods[] = { + { "open_policy", (PyCFunction)lsa_open_policy, METH_VARARGS|METH_KEYWORDS, + "Foo"}, + { NULL } +}; + +void initsamba(void) +{ + PyObject *module, *new_module, *dict; + + /* Initialise module */ + + module = Py_InitModule("samba", samba_methods); + dict = PyModule_GetDict(module); + + new_module = PyModule_N("cheepy"); + + + + PyDict_SetItemString(dict, "cheepy", new_module); + + + + /* Do samba initialisation */ + + py_samba_init(); +} diff --git a/source3/python/samba-head.patch b/source3/python/samba-head.patch index a739346a5b..ced7da551e 100644 --- a/source3/python/samba-head.patch +++ b/source3/python/samba-head.patch @@ -1,11 +1,11 @@ Index: Makefile.in =================================================================== RCS file: /data/cvs/samba/source/Makefile.in,v -retrieving revision 1.500 -diff -u -r1.500 Makefile.in ---- Makefile.in 2002/07/28 06:04:32 1.500 -+++ Makefile.in 2002/07/29 03:48:03 -@@ -838,6 +838,45 @@ +retrieving revision 1.502 +diff -u -r1.502 Makefile.in +--- Makefile.in 2002/08/02 07:20:56 1.502 ++++ Makefile.in 2002/08/06 00:51:48 +@@ -839,6 +839,45 @@ -$(INSTALLCMD) -d ${prefix}/include -$(INSTALLCMD) include/libsmbclient.h ${prefix}/include @@ -54,16 +54,16 @@ diff -u -r1.500 Makefile.in Index: configure.in =================================================================== RCS file: /data/cvs/samba/source/configure.in,v -retrieving revision 1.324 -diff -u -r1.324 configure.in ---- configure.in 2002/07/27 01:37:32 1.324 -+++ configure.in 2002/07/29 03:48:04 +retrieving revision 1.326 +diff -u -r1.326 configure.in +--- configure.in 2002/07/30 09:59:52 1.326 ++++ configure.in 2002/08/06 00:51:51 @@ -2797,7 +2797,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) +-AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile) ++AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile python/setup.py) ################################################# # Print very concise instructions on building/use diff --git a/source3/python/setup.py.in b/source3/python/setup.py.in index 9b6dc1a650..5896301245 100755 --- a/source3/python/setup.py.in +++ b/source3/python/setup.py.in @@ -160,5 +160,15 @@ setup( library_dirs = ["/usr/kerberos/lib"], extra_objects = obj_list), + # Moving to merge all individual extensions in to one big + # extension. This is to avoid the fact that each extension is 3MB + # in size due to the lack of proper depedency management in Samba. + + Extension(name = "samba", + sources = [samba_srcdir + "python/py_samba.c", + samba_srcdir + "python/py_common.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), ], ) -- cgit From 40e9487d75e49bc242ceeda2d662fe4754856301 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 30 Aug 2002 06:27:17 +0000 Subject: paranoid server security defaults to yes (This used to be commit 46c49248e3f2ab307218b476b9a659bf54c3031e) --- docs/docbook/manpages/smb.conf.5.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index 053c6c1c71..da6e996f17 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -5293,7 +5293,7 @@ to the logs and exit. - Default: paranoid server security = no + Default: paranoid server security = yes -- cgit From 79d3ce624f450a9a04bd1b4545c2fc1f7566e282 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 30 Aug 2002 06:44:07 +0000 Subject: Remove obsolete documents (This used to be commit f736b83da65339a225876e50c836b209b2857074) --- docs/textdocs/outdated/NTDOMAIN.txt | 51 ------- docs/textdocs/outdated/PRINTER_DRIVER.txt | 240 ------------------------------ docs/textdocs/outdated/PROJECTS | 88 ----------- 3 files changed, 379 deletions(-) delete mode 100644 docs/textdocs/outdated/NTDOMAIN.txt delete mode 100644 docs/textdocs/outdated/PRINTER_DRIVER.txt delete mode 100644 docs/textdocs/outdated/PROJECTS diff --git a/docs/textdocs/outdated/NTDOMAIN.txt b/docs/textdocs/outdated/NTDOMAIN.txt deleted file mode 100644 index 8408acb979..0000000000 --- a/docs/textdocs/outdated/NTDOMAIN.txt +++ /dev/null @@ -1,51 +0,0 @@ -!== -!== NTDOMAIN.txt for Samba release 2.0.4 18 May 1999 -!== -Contributor: Luke Kenneth Casson Leighton (samba-bugs@samba.org) - Copyright (C) 1997 Luke Kenneth Casson Leighton -Created: October 20, 1997 -Updated: February 25, 1999 (Jerry Carter) - -Subject: NT Domain Logons -=========================================================================== - -As of 1.9.18alpha1, Samba supports logins for NT 3.51 and 4.0 Workstations, -without the need, use or intervention of NT Server. This document describes -how to set this up. Over the continued development of the 1.9.18alpha -series, this process (and therefore this document) should become simpler. - -One useful thing to do is to get this version of Samba up and running -with Win95 profiles, as you would for the current stable version of -Samba (currently at 1.9.17p4), and is fully documented. You will need -to set up encrypted passwords. Even if you don't have any Win95 machines, -using your Samba Server to store the profile for one of your NT Workstation -users is a good test that you have 1.9.18alpha1 correctly configured *prior* -to attempting NT Domain Logons. - -The support is still experimental, so should be used at your own risk. - -NT is not as robust as you might have been led to believe: during the -development of the Domain Logon Support, one person reported having to -reinstall NT from scratch: their workstation had become totally unuseable. - -[further reports on ntsec@iss.net by independent administrators showing - similar symptoms lead us to believe that the SAM database file may be - corruptible. this _is_ recoverable (or, at least the machine is accessible), - by deleting the SAM file, under which circumstances all user account details - are lost, but at least the Administrator can log in with a blank password. - this is *not* possible except if the NT system is installed in a FAT - partition.] - -This *has* been reported to the NTBUGTRAQ@LISTSERV.NTBUGTRAQ.COM digest. - -========================================================================== -Please note that Samba 2.0 does not **officially** support domain logons -for Windows NT clients. Of course, domain logon support for Windows 9x -clients is complete and official. These are two different issues. - -Samba's capability to act as a Primary Domain Controller for Windows NT -domains is not advertised as it is not completed yet. For more information -regarding how to obtain the latest development (HEAD branch) source code -and what features are available, please refer to the NT Domain FAQ on-line -at the Samba web site under the documentation page. - diff --git a/docs/textdocs/outdated/PRINTER_DRIVER.txt b/docs/textdocs/outdated/PRINTER_DRIVER.txt deleted file mode 100644 index 5bf82e0cfe..0000000000 --- a/docs/textdocs/outdated/PRINTER_DRIVER.txt +++ /dev/null @@ -1,240 +0,0 @@ -!== -!== PRINTER_DRIVER.txt for Samba release 2.0.4 18 May 1999 -!== -========================================================================== - Supporting the famous PRINTER$ share - - Jean-Francois.Micouleau@utc.fr, 10/26/97 - modified by herb@sgi.com 1/2/98 - -=========================================================================== - -Disclaimer: - - This ONLY works with Windows 95 - It does NOT work with Windows NT 4 - - -Goal: - - When you click on a samba shared printer, you can now install the driver - automatically onto the Windows 95 machine, as you would from an NT server. - -How To: - - It's a three step config. - - First, create a new directory, where you will put the driver files, and - make a share in smb.conf pointing to it. - - Example: - - [printer$] - path=/usr/local/samba/printer - public=yes - writable=no - browseable=yes - - Second, you have to build the list of drivers required for a specific - printer. This is the most complicated thing to do. Get the files - 'msprint.inf' and 'msprint2.inf' from Windows 95, the easiest way is to - grab them from a working Windows 95 computer. They are usually located - in 'c:\windows\inf'. Look in them for the printer you have. Run the new - program 'make_printerdef' with the file name and the printer name as - parameters. If you have drivers for an unsupported or updated printer, - first install these drivers on an Windows 95 system. There will be a - file created in your inf directory named 'oem?.inf' (where the ? is some - number). Use this file instead of msprint.inf. - - Example: (from the /usr/local/samba/lib directory) - - make_printerdef msprint.inf "Apple LaserWriter" >> printers.def - - The program will print out a list of required files to stderr. - Copy all the files listed into the directory you created in step 1. - If you have "preserve case = yes" make sure your files names match - EXACTLY the names listed. - - Third, you need to add 2 new parameters in smb.conf. One is in the - [global] section, called 'printer driver file' pointing to the printer - description file you just created, and the other in each printer share, - called 'printer driver location' pointing to where the client will get - the drivers. Don't forget to set correctly the printer driver parameter - to the Windows printer name. - - Example: - - [global] - printer driver file=/usr/local/samba/lib/printers.def - - [lp] - comment = My old printer laser - browseable = yes - printable = yes - public = yes - writable = no - create mode = 0700 - printer driver=Apple LaserWriter - printer driver location=\\%h\PRINTER$ - - %h will expand to the computer name, and PRINTER$ is the name of the - share created in step one. - - -If it doesn't work for you, don't send flame ! It worked for me. In case of -trouble don't hesitate to send me a mail with your smb.conf file and -printers.def - - -******* added by herb@sgi.com - -For those of you who like to know the details, and in case I have guessed -wrong on some of the fields - The following is the format of the entries -in the printers.def file: (entries are 1 single line - they are split here -for readability) - -:::: -:: - -The and the can be empty. -If no or are specified in the inf file, -these will default to the section name for the printer. - -The following is an excerpt from the MSPRINT2.INF file on a WIN95 machine. -I have deleted all but the entries relating to installing a driver for the -"QMS ColorScript 100 Model 30" printer. Using this "file" I'll try to -explain how the printers.def file is created. - -make_printerdef is run with the first argument being the name of this -file (MSPRINT2.INF in this case) and the second argument being the -name of the printer ("QMS ColorScript 100 Model 30" in this case). - -The printer name is first found in the "Model section" to obtain the -name of the "Installer Section" (this is the name after the equal sign). -We ignore the alternate name. - -The "Installer Section" contains entries for "CopyFiles" and "DataSection". -The "CopyFiles" line gives a list of all the required files for this -printer. If the name begins with an @ it is the name of a file (after -you strip off the @), otherwise it is the name of a "Copy Section" which -in turn is a list of files required. This printer has one file listed -"QCS30503.SPD" and two sections "COLOR_QMS_100_30" and "PSCRIPT". The -"COLOR_QMS_100_30" section is listed in the "[DestinationDirs]" as -having a value of 23. This means that all files listed in this section -should go into the "color" subdirectory. The list of files to copy for -this printer is thus: - -QCS30503.SPD,color\QMS10030.ICM,PSCRIPT.DRV,PSCRIPT.HLP,PSCRIPT.INI, -TESTPS.TXT,APPLE380.SPD,FONTS.MFM,ICONLIB.DLL,PSMON.DLL - -From the "Data Section" we obtain values for "DriverFile", "HelpFile", -and "LanguageMonitor". The % around the value for "LanguageMonitor" -indicates that it is a string that can be localized so its actual value -is obtained from the "[Strings]" section. The "Data Section" could also -have contained an entry for "DefaultDataType". - -Using the information we have obtained we can now construct the entry -for the printers.def file. - - -> QMS ColorScript 100 Model 30 (name given - on the command line) - -> PSCRIPT.DRV (given in Data Section) - -> QCS30503.SPD (defaults to Install Section name) - -> PSCRIPT.HLP (given in Data Section) - -> PostScript Language Monitor (given in Data Section) - -> RAW (default if not specified) - - -So.... the enty (actually one line but split here for readability) would -be: - -QMS ColorScript 100 Model 30:PSCRIPT.DRV:QCS30503.SPD: -PSCRIPT.HLP:PostScript Language Monitor:RAW: -QCS30503.SPD,color\QMS10030.ICM,PSCRIPT.DRV,PSCRIPT.HLP,PSCRIPT.INI, -TESTPS.TXT,APPLE380.SPD,FONTS.MFM,ICONLIB.DLL,PSMON.DLL - ----------------------- Info from MSPRINT2.INF ------------------------ -; -; The Manufacturer section lists all of the manufacturers that we will -; display in the Dialog box - -[Manufacturer] -"QMS" - - -; -; Model sections. Each section here corresponds with an entry listed in the -; [Manufacturer] section, above. The models will be displayed in the order -; that they appear in the INF file. -; -; Each model lists a variation of its own name as a compatible ID. This -; is done primarily as an optimization during upgrade. -; -[QMS] -"QMS ColorScript 100 Model 30" = QCS30503.SPD,QMS_ColorScript_100_Model_30 - - -; -; Installer Sections -; -; These sections control file installation, and reference all files that -; need to be copied. The section name will be assumed to be the driver -; file, unless there is an explicit DriverFile section listed. -; -[QCS30503.SPD] -CopyFiles=@QCS30503.SPD,COLOR_QMS_100_30,PSCRIPT -DataSection=PSCRIPT_DATA - -; Copy Sections -; -; Lists of files that are actually copied. These sections are referenced -; from the installer sections, above. Only create a section if it contains -; two or more files (if we only copy a single file, identify it in the -; installer section, using the @filename notation) or if it's a color -; profile (since the DestinationDirs can only handle sections, and not -; individual files). -; -[COLOR_QMS_100_30] -QMS10030.ICM - -[PSCRIPT] -PSCRIPT.DRV -PSCRIPT.HLP -PSCRIPT.INI -TESTPS.TXT -APPLE380.SPD -FONTS.MFM -ICONLIB.DLL -PSMON.DLL - - -; -; Data Sections -; -; These sections contain data that is shared between devices. -; -[PSCRIPT_DATA] -DriverFile=PSCRIPT.DRV -HelpFile=PSCRIPT.HLP -LanguageMonitor=%PS_MONITOR% - - -; -; Color profiles go to the colors directory. All other files go to the -; system directory -; - -[DestinationDirs] -DefaultDestDir=11 -COLOR_QMS_100_30=23 -COLOR_TEKTRONIX_200I=23 -COLOR_TEKTRONIX_III_PXI=23 - - -; -; Localizable Strings -; -[Strings] -MS="Microsoft" -PS_MONITOR="PostScript Language Monitor,PSMON.DLL" - diff --git a/docs/textdocs/outdated/PROJECTS b/docs/textdocs/outdated/PROJECTS deleted file mode 100644 index 3008bea430..0000000000 --- a/docs/textdocs/outdated/PROJECTS +++ /dev/null @@ -1,88 +0,0 @@ - Samba Projects Directory - ======================== - - ->>>>> NOTE: THIS FILE IS NOW VERY OUT OF DATE <<<<< - - -This is a list of who's working on what in Samba. It's not guaranteed -to be uptodate or accurate but I hope it will help us getting -coordinated. - -If you are working on something to do with Samba and you aren't here -then please let me know! Also, if you are listed below and you have -any corrections or updates then please let me know. - -Email contact: -samba-bugs@samba.org - -======================================================================== -Documentation and FAQ - -Docs and FAQ files for the Samba suite of software. - -Contact samba-bugs@samba.org with the diffs. These are urgently -required. - -The FAQ is being added to on an ad hoc basis, see the web pages for info. - -Mark Preston was working on a set of formatted docs for Samba. Is this -still happening? Contact mpreston@sghms.ac.uk - -Status last updated 2nd October 1996 -======================================================================== - -======================================================================== -Netbeui support - -This aimed to produce patches so that Samba can be used with clients -that do not have TCP/IP. It will try to remain as portable as possible. -Contact Brian.Onn@Canada.Sun.COM (Brian Onn) Unfortunately it died, and -although a lot of people have expressed interest nobody has come forward -to do it. The Novell port (see Samba web pages) includes NetBEUI -functionality in a proprietrary library which should still be helpful as -we have the interfaces. Alan Cox (a.cox@li.org) has the information -required to write the state machine if someone is going to do the work. - -Status last updated 2nd October 1996 -======================================================================== - -======================================================================== -Smbfs - -A mountable smb filesystem for Linux using the userfs userspace filesystem - -Contact lendecke@namu01.gwdg.de (Volker Lendecke) - -This works really well, and is measurably more efficient than commercial -client software. It is now part of the Linux kernel. Long filename support -is in use. - -Status last updated June 1997 -======================================================================== - -======================================================================== -Admin Tool - -Aims to produce a nice smb.conf editor and other useful tools for -administering a Samba system. - -Contact: Steve Brown (steve@unicorn.dungeon.com) - -In the design phase. - -Status last updated 4th September 1994 -======================================================================== - - -======================================================================== -Lanman Client. - -Contact: john@amanda.xs4all.nl (John Stewart) - -Aims to produce a reliable LANMAN Client implementation for LINUX, -and possibly other variations of UNIX. Project ably started by -Tor Lillqvist; tml@hemuli.tte.vtt.fi - -Status last updated 17th January 1995 -======================================================================== -- cgit From 1e8fa8cbb1197808965c627aa288e7db46736e77 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 30 Aug 2002 06:55:27 +0000 Subject: removed a debug line (This used to be commit 5185f495d055cee609872db9e59edbe3220dc5bd) --- source3/rpc_parse/parse_net.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/source3/rpc_parse/parse_net.c b/source3/rpc_parse/parse_net.c index 149d5a02d9..f1d813c3f0 100644 --- a/source3/rpc_parse/parse_net.c +++ b/source3/rpc_parse/parse_net.c @@ -2760,8 +2760,6 @@ BOOL net_io_r_sam_sync(char *desc, uint8 sess_key[16], if (!prs_uint32("sync_context", ps, depth, &r_s->sync_context)) return False; - d_printf("Got sync context %u\n", r_s->sync_context); - if (!prs_uint32("ptr_deltas", ps, depth, &r_s->ptr_deltas)) return False; if (r_s->ptr_deltas != 0) -- cgit From a6ace770eb9b11271803215f218bf772fa7d9faa Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 30 Aug 2002 06:56:12 +0000 Subject: ensure that we unlock in case we hit a tdb error (This used to be commit 4aa7dfb7e7f4ad33b8768d20ec2eb9cb3fde6385) --- source3/tdb/tdb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source3/tdb/tdb.c b/source3/tdb/tdb.c index ed75a55e3e..40e7dcd42c 100644 --- a/source3/tdb/tdb.c +++ b/source3/tdb/tdb.c @@ -517,17 +517,20 @@ int tdb_printfreelist(TDB_CONTEXT *tdb) /* read in the freelist top */ if (ofs_read(tdb, offset, &rec_ptr) == -1) { + tdb_unlock(tdb, -1, F_WRLCK); return 0; } printf("freelist top=[0x%08x]\n", rec_ptr ); while (rec_ptr) { if (tdb_read(tdb, rec_ptr, (char *)&rec, sizeof(rec), DOCONV()) == -1) { + tdb_unlock(tdb, -1, F_WRLCK); return -1; } if (rec.magic != TDB_FREE_MAGIC) { printf("bad magic 0x%08x in free list\n", rec.magic); + tdb_unlock(tdb, -1, F_WRLCK); return -1; } -- cgit From dcd029169424d8846c1fbb0b1527516a4a026b27 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 30 Aug 2002 06:59:57 +0000 Subject: convert the LDAP/SASL code to use GSS-SPNEGO if possible we now do this: - look for suported SASL mechanisms on the LDAP server - choose GSS-SPNEGO if possible - within GSS-SPNEGO choose KRB5 if we can do a kinit - otherwise use NTLMSSP This change also means that we no longer rely on having a gssapi library to do ADS. todo: - add TLS/SSL support over LDAP - change to using LDAP/SSL for password change in ADS (This used to be commit b04e91f660d3b26d23044075d4a7e707eb41462d) --- source3/include/includes.h | 6 +- source3/libads/ldap.c | 7 +- source3/libads/sasl.c | 248 +++++++++++++++++++++++++++++++++++++++----- source3/libsmb/cliconnect.c | 13 ++- source3/libsmb/clikrb5.c | 8 +- source3/libsmb/clispnego.c | 4 +- source3/utils/net_ads.c | 4 + 7 files changed, 243 insertions(+), 47 deletions(-) diff --git a/source3/include/includes.h b/source3/include/includes.h index f1c8c50df4..544487f273 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -410,18 +410,14 @@ #if HAVE_GSSAPI_GSSAPI_H #include -#else -#undef HAVE_KRB5 #endif #if HAVE_GSSAPI_GSSAPI_GENERIC_H #include -#else -#undef HAVE_KRB5 #endif /* we support ADS if we have krb5 and ldap libs */ -#if defined(HAVE_KRB5) && defined(HAVE_LDAP) && defined(HAVE_GSSAPI) +#if defined(HAVE_KRB5) && defined(HAVE_LDAP) #define HAVE_ADS #endif diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index f0c4ad9040..2cfbedc6d4 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -226,7 +226,7 @@ ADS_STATUS ads_connect(ADS_STRUCT *ads) /* try via DNS */ if (ads_try_dns(ads)) { goto got_connection; - } + } /* try via netbios lookups */ if (!lp_disable_netbios() && ads_try_netbios(ads)) { @@ -274,11 +274,6 @@ got_connection: } #endif - if (ads->auth.password) { - if ((code = ads_kinit_password(ads))) - return ADS_ERROR_KRB5(code); - } - if (ads->auth.no_bind) { return ADS_SUCCESS; } diff --git a/source3/libads/sasl.c b/source3/libads/sasl.c index 81dedb0a81..12a5722319 100644 --- a/source3/libads/sasl.c +++ b/source3/libads/sasl.c @@ -22,37 +22,192 @@ #ifdef HAVE_ADS -#if USE_CYRUS_SASL -/* - this is a minimal interact function, just enough for SASL to talk - GSSAPI/kerberos to W2K - Error handling is a bit of a problem. I can't see how to get Cyrus-sasl - to give sensible errors +/* + perform a LDAP/SASL/SPNEGO/NTLMSSP bind (just how many layers can + we fit on one socket??) */ -static int sasl_interact(LDAP *ld,unsigned flags,void *defaults,void *in) +static ADS_STATUS ads_sasl_spnego_ntlmssp_bind(ADS_STRUCT *ads) { - sasl_interact_t *interact = in; + const char *mechs[] = {OID_NTLMSSP, NULL}; + DATA_BLOB msg1; + DATA_BLOB blob, chal1, chal2, auth; + uint8 challenge[8]; + uint8 nthash[24], lmhash[24], sess_key[16]; + uint32 neg_flags; + struct berval cred, *scred; + ADS_STATUS status; + extern pstring global_myname; + int rc; + + neg_flags = NTLMSSP_NEGOTIATE_UNICODE | + NTLMSSP_NEGOTIATE_128 | + NTLMSSP_NEGOTIATE_NTLM; + + memset(sess_key, 0, 16); - while (interact->id != SASL_CB_LIST_END) { - interact->result = strdup(""); - interact->len = strlen(interact->result); - interact++; + /* generate the ntlmssp negotiate packet */ + msrpc_gen(&blob, "CddB", + "NTLMSSP", + NTLMSSP_NEGOTIATE, + neg_flags, + sess_key, 16); + + /* and wrap it in a SPNEGO wrapper */ + msg1 = gen_negTokenTarg(mechs, blob); + data_blob_free(&blob); + + cred.bv_val = msg1.data; + cred.bv_len = msg1.length; + + rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, &scred); + if (rc != LDAP_SASL_BIND_IN_PROGRESS) { + status = ADS_ERROR(rc); + goto failed; } - - return LDAP_SUCCESS; + + blob = data_blob(scred->bv_val, scred->bv_len); + + /* the server gives us back two challenges */ + if (!spnego_parse_challenge(blob, &chal1, &chal2)) { + DEBUG(3,("Failed to parse challenges\n")); + status = ADS_ERROR(LDAP_OPERATIONS_ERROR); + goto failed; + } + + data_blob_free(&blob); + + /* encrypt the password with the challenge */ + memcpy(challenge, chal1.data + 24, 8); + SMBencrypt(ads->auth.password, challenge,lmhash); + SMBNTencrypt(ads->auth.password, challenge,nthash); + + data_blob_free(&chal1); + data_blob_free(&chal2); + + /* this generates the actual auth packet */ + msrpc_gen(&blob, "CdBBUUUBd", + "NTLMSSP", + NTLMSSP_AUTH, + lmhash, 24, + nthash, 24, + lp_workgroup(), + ads->auth.user_name, + global_myname, + sess_key, 16, + neg_flags); + + /* wrap it in SPNEGO */ + auth = spnego_gen_auth(blob); + + data_blob_free(&blob); + + /* now send the auth packet and we should be done */ + cred.bv_val = auth.data; + cred.bv_len = auth.length; + + rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, &scred); + + return ADS_ERROR(rc); + +failed: + return status; +} + +/* + perform a LDAP/SASL/SPNEGO/KRB5 bind +*/ +static ADS_STATUS ads_sasl_spnego_krb5_bind(ADS_STRUCT *ads, const char *principal) +{ + DATA_BLOB blob; + struct berval cred, *scred; + int rc; + + blob = spnego_gen_negTokenTarg(principal); + + if (!blob.data) { + return ADS_ERROR(LDAP_OPERATIONS_ERROR); + } + + /* now send the auth packet and we should be done */ + cred.bv_val = blob.data; + cred.bv_len = blob.length; + + rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, &scred); + + data_blob_free(&blob); + + return ADS_ERROR(rc); } + +/* + this performs a SASL/SPNEGO bind +*/ +static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads) +{ + struct berval *scred; + int rc, i; + ADS_STATUS status; + DATA_BLOB blob; + char *principal; + char *OIDs[ASN1_MAX_OIDS]; + BOOL got_kerberos_mechanism = False; + + rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", NULL, NULL, NULL, &scred); + + if (rc != LDAP_SASL_BIND_IN_PROGRESS) { + status = ADS_ERROR(rc); + goto failed; + } + + blob = data_blob(scred->bv_val, scred->bv_len); + +#if 0 + file_save("sasl_spnego.dat", blob.data, blob.length); #endif + /* the server sent us the first part of the SPNEGO exchange in the negprot + reply */ + if (!spnego_parse_negTokenInit(blob, OIDs, &principal)) { + data_blob_free(&blob); + status = ADS_ERROR(LDAP_OPERATIONS_ERROR); + goto failed; + } + data_blob_free(&blob); + + /* make sure the server understands kerberos */ + for (i=0;OIDs[i];i++) { + DEBUG(3,("got OID=%s\n", OIDs[i])); + if (strcmp(OIDs[i], OID_KERBEROS5_OLD) == 0 || + strcmp(OIDs[i], OID_KERBEROS5) == 0) { + got_kerberos_mechanism = True; + } + free(OIDs[i]); + } + DEBUG(3,("got principal=%s\n", principal)); + if (got_kerberos_mechanism && ads_kinit_password(ads) == 0) { + return ads_sasl_spnego_krb5_bind(ads, principal); + } + + /* lets do NTLMSSP ... this has the big advantage that we don't need + to sync clocks, and we don't rely on special versions of the krb5 + library for HMAC_MD4 encryption */ + return ads_sasl_spnego_ntlmssp_bind(ads); + +failed: + return status; +} + +#ifdef HAVE_GSSAPI #define MAX_GSS_PASSES 3 /* this performs a SASL/gssapi bind we avoid using cyrus-sasl to make Samba more robust. cyrus-sasl is very dependent on correctly configured DNS whereas this routine is much less fragile - see RFC2078 for details + see RFC2078 and RFC2222 for details */ -ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads) +static ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads) { int minor_status; gss_name_t serv_name; @@ -68,6 +223,7 @@ ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads) uint8 *p; uint32 max_msg_size; char *sname; + unsigned sec_layer; ADS_STATUS status; krb5_principal principal; krb5_context ctx; @@ -159,22 +315,25 @@ ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads) p = (uint8 *)output_token.value; + file_save("sasl_gssapi.dat", output_token.value, output_token.length); + max_msg_size = (p[1]<<16) | (p[2]<<8) | p[3]; + sec_layer = *p; gss_release_buffer(&minor_status, &output_token); output_token.value = malloc(strlen(ads->config.bind_path) + 8); p = output_token.value; - *p++ = 1; /* no sign or seal */ + *p++ = 1; /* no sign & seal selection */ /* choose the same size as the server gave us */ *p++ = max_msg_size>>16; *p++ = max_msg_size>>8; *p++ = max_msg_size; snprintf(p, strlen(ads->config.bind_path)+4, "dn:%s", ads->config.bind_path); - p += strlen(ads->config.bind_path); + p += strlen(p); - output_token.length = strlen(ads->config.bind_path) + 8; + output_token.length = PTR_DIFF(p, output_token.value); gss_rc = gss_wrap(&minor_status, context_handle,0,GSS_C_QOP_DEFAULT, &output_token, &conf_state, @@ -198,18 +357,51 @@ ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads) failed: return status; } +#endif + +/* mapping between SASL mechanisms and functions */ +static struct { + const char *name; + ADS_STATUS (*fn)(ADS_STRUCT *); +} sasl_mechanisms[] = { + {"GSS-SPNEGO", ads_sasl_spnego_bind}, +#ifdef HAVE_GSSAPI + {"GSSAPI", ads_sasl_gssapi_bind}, /* doesn't work with .NET RC1. No idea why */ +#endif + {NULL, NULL} +}; ADS_STATUS ads_sasl_bind(ADS_STRUCT *ads) { -#if USE_CYRUS_SASL - int rc; - rc = ldap_sasl_interactive_bind_s(ads->ld, NULL, NULL, NULL, NULL, - LDAP_SASL_QUIET, - sasl_interact, NULL); - return ADS_ERROR(rc); -#else - return ads_sasl_gssapi_bind(ads); -#endif + const char *attrs[] = {"supportedSASLMechanisms", NULL}; + char **values; + ADS_STATUS status; + int i, j; + void *res; + + /* get a list of supported SASL mechanisms */ + status = ads_do_search(ads, "", LDAP_SCOPE_BASE, "(objectclass=*)", attrs, &res); + if (!ADS_ERR_OK(status)) return status; + + values = ldap_get_values(ads->ld, res, "supportedSASLMechanisms"); + + /* try our supported mechanisms in order */ + for (i=0;sasl_mechanisms[i].name;i++) { + /* see if the server supports it */ + for (j=0;values && values[j];j++) { + if (strcmp(values[j], sasl_mechanisms[i].name) == 0) { + DEBUG(4,("Found SASL mechanism %s\n", values[j])); + status = sasl_mechanisms[i].fn(ads); + ldap_value_free(values); + ldap_msgfree(res); + return status; + } + } + } + + ldap_value_free(values); + ldap_msgfree(res); + return ADS_ERROR(LDAP_AUTH_METHOD_NOT_SUPPORTED); } #endif diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 0d033c9b59..e9b2b7b32e 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -446,7 +446,7 @@ static BOOL cli_session_setup_kerberos(struct cli_state *cli, char *principal, c DEBUG(2,("Doing kerberos session setup\n")); /* generate the encapsulated kerberos5 ticket */ - negTokenTarg = spnego_gen_negTokenTarg(cli, principal); + negTokenTarg = spnego_gen_negTokenTarg(principal); if (!negTokenTarg.data) return False; @@ -572,14 +572,14 @@ static BOOL cli_session_setup_spnego(struct cli_state *cli, char *user, { char *principal; char *OIDs[ASN1_MAX_OIDS]; - uint8 guid[16]; int i; BOOL got_kerberos_mechanism = False; + DATA_BLOB blob; DEBUG(2,("Doing spnego session setup (blob length=%d)\n", cli->secblob.length)); /* the server might not even do spnego */ - if (cli->secblob.length == 16) { + if (cli->secblob.length <= 16) { DEBUG(3,("server didn't supply a full spnego negprot\n")); goto ntlmssp; } @@ -588,11 +588,16 @@ static BOOL cli_session_setup_spnego(struct cli_state *cli, char *user, file_save("negprot.dat", cli->secblob.data, cli->secblob.length); #endif + /* there is 16 bytes of GUID before the real spnego packet starts */ + blob = data_blob(cli->secblob.data+16, cli->secblob.length-16); + /* the server sent us the first part of the SPNEGO exchange in the negprot reply */ - if (!spnego_parse_negTokenInit(cli->secblob, guid, OIDs, &principal)) { + if (!spnego_parse_negTokenInit(blob, OIDs, &principal)) { + data_blob_free(&blob); return False; } + data_blob_free(&blob); /* make sure the server understands kerberos */ for (i=0;OIDs[i];i++) { diff --git a/source3/libsmb/clikrb5.c b/source3/libsmb/clikrb5.c index 685c4a25e0..955a93285c 100644 --- a/source3/libsmb/clikrb5.c +++ b/source3/libsmb/clikrb5.c @@ -20,6 +20,10 @@ #include "includes.h" +#ifndef ENCTYPE_ARCFOUR_HMAC +#define ENCTYPE_ARCFOUR_HMAC 0x0017 +#endif + #ifdef HAVE_KRB5 /* we can't use krb5_mk_req because w2k wants the service to be in a particular format @@ -94,7 +98,9 @@ DATA_BLOB krb5_get_ticket(char *principal) krb5_context context; krb5_auth_context auth_context = NULL; DATA_BLOB ret; - krb5_enctype enc_types[] = {ENCTYPE_DES_CBC_MD5, ENCTYPE_NULL}; + krb5_enctype enc_types[] = {ENCTYPE_ARCFOUR_HMAC, + ENCTYPE_DES_CBC_MD5, + ENCTYPE_NULL}; retval = krb5_init_context(&context); if (retval) { diff --git a/source3/libsmb/clispnego.c b/source3/libsmb/clispnego.c index bc4d0ca348..1eeae8b171 100644 --- a/source3/libsmb/clispnego.c +++ b/source3/libsmb/clispnego.c @@ -79,7 +79,6 @@ DATA_BLOB spnego_gen_negTokenInit(uint8 guid[16], OIDs (the mechanisms) and a principal name string */ BOOL spnego_parse_negTokenInit(DATA_BLOB blob, - uint8 guid[16], char *OIDs[ASN1_MAX_OIDS], char **principal) { @@ -89,7 +88,6 @@ BOOL spnego_parse_negTokenInit(DATA_BLOB blob, asn1_load(&data, blob); - asn1_read(&data, guid, 16); asn1_start_tag(&data,ASN1_APPLICATION(0)); asn1_check_OID(&data,OID_SPNEGO); asn1_start_tag(&data,ASN1_CONTEXT(0)); @@ -279,7 +277,7 @@ BOOL spnego_parse_krb5_wrap(DATA_BLOB blob, DATA_BLOB *ticket) generate a SPNEGO negTokenTarg packet, ready for a EXTENDED_SECURITY kerberos session setup */ -DATA_BLOB spnego_gen_negTokenTarg(struct cli_state *cli, char *principal) +DATA_BLOB spnego_gen_negTokenTarg(const char *principal) { DATA_BLOB tkt, tkt_wrapped, targ; const char *krb_mechs[] = {OID_KERBEROS5_OLD, OID_NTLMSSP, NULL}; diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c index 16450c5b29..eb1c3fe059 100644 --- a/source3/utils/net_ads.c +++ b/source3/utils/net_ads.c @@ -653,6 +653,10 @@ int net_ads_join(int argc, const char **argv) return -1; } + if (ads_kinit_password(ads)) { + return -1; + } + rc = ads_set_machine_password(ads, global_myname, password); if (!ADS_ERR_OK(rc)) { d_printf("ads_set_machine_password: %s\n", ads_errstr(rc)); -- cgit From 1f02551bb19bab89083bfa1819a701a892d241df Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Fri, 30 Aug 2002 08:24:26 +0000 Subject: Removed some misleading comment. Volker (This used to be commit 70cf2f1e2f0187c546a0193824ab85a416c5236c) --- source3/rpc_server/srv_samr_nt.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c index 0d6808d08c..ee4335cb0a 100644 --- a/source3/rpc_server/srv_samr_nt.c +++ b/source3/rpc_server/srv_samr_nt.c @@ -1017,8 +1017,6 @@ static NTSTATUS get_group_domain_entries(TALLOC_CTX *ctx, DOMAIN_GRP **d_grp, DO /******************************************************************* samr_reply_enum_dom_groups - Only reply with one group - domain admins. This must be fixed for - a real PDC. JRA. ********************************************************************/ NTSTATUS _samr_enum_dom_groups(pipes_struct *p, SAMR_Q_ENUM_DOM_GROUPS *q_u, SAMR_R_ENUM_DOM_GROUPS *r_u) -- cgit From cfb5e91178eb8befdb00780a819f9c5cd3eee8e4 Mon Sep 17 00:00:00 2001 From: Jean-Fran§ois Micouleau Date: Fri, 30 Aug 2002 10:46:59 +0000 Subject: added cli_net_auth_3 client code. changed cli_nt_setup_creds() to call cli_net_auth_2 or cli_net_auth_3 based on a switch. pass also the negociation flags all the way. all the places calling cli_nt_setup_creds() are still using cli_net_aut2(), it's just for future use and for rpcclient. in the future we will be able to call auth_2 or auth_3 as we want. J.F. (This used to be commit 4d38caca40f98d0584fefb9d66424a3db5b5789e) --- source3/auth/auth_domain.c | 3 +- source3/libsmb/trust_passwd.c | 4 +- source3/nsswitch/winbindd_cm.c | 6 +-- source3/rpc_client/cli_netlogon.c | 109 +++++++++++++++++++++++++++++++++----- source3/rpcclient/cmd_netlogon.c | 15 +++--- source3/rpcclient/samsync.c | 3 +- source3/utils/net_rpc_join.c | 3 +- source3/utils/net_rpc_samsync.c | 4 +- 8 files changed, 119 insertions(+), 28 deletions(-) diff --git a/source3/auth/auth_domain.c b/source3/auth/auth_domain.c index d48cec5b29..f7a268de1f 100644 --- a/source3/auth/auth_domain.c +++ b/source3/auth/auth_domain.c @@ -131,6 +131,7 @@ static NTSTATUS connect_to_domain_password_server(struct cli_state **cli, struct in_addr dest_ip; fstring remote_machine; NTSTATUS result; + uint32 neg_flags = 0x000001ff; if (lp_security() == SEC_ADS) { result = ads_resolve_dc(remote_machine, &dest_ip); @@ -206,7 +207,7 @@ machine %s. Error was : %s.\n", remote_machine, cli_errstr(*cli))); return NT_STATUS_NO_MEMORY; } - result = cli_nt_setup_creds(*cli, sec_chan, trust_passwd); + result = cli_nt_setup_creds(*cli, sec_chan, trust_passwd, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { DEBUG(0,("connect_to_domain_password_server: unable to setup the PDC credentials to machine \ diff --git a/source3/libsmb/trust_passwd.c b/source3/libsmb/trust_passwd.c index d500cb3ab7..4d7acd1988 100644 --- a/source3/libsmb/trust_passwd.c +++ b/source3/libsmb/trust_passwd.c @@ -35,7 +35,9 @@ static NTSTATUS just_change_the_password(struct cli_state *cli, TALLOC_CTX *mem_ unsigned char new_trust_passwd_hash[16]) { NTSTATUS result; - result = cli_nt_setup_creds(cli, get_sec_chan(), orig_trust_passwd_hash); + uint32 neg_flags = 0x000001ff; + + result = cli_nt_setup_creds(cli, get_sec_chan(), orig_trust_passwd_hash, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { DEBUG(1,("just_change_the_password: unable to setup creds (%s)!\n", diff --git a/source3/nsswitch/winbindd_cm.c b/source3/nsswitch/winbindd_cm.c index 997d5b665f..9ac392a6ba 100644 --- a/source3/nsswitch/winbindd_cm.c +++ b/source3/nsswitch/winbindd_cm.c @@ -864,6 +864,7 @@ NTSTATUS cm_get_netlogon_cli(char *domain, unsigned char *trust_passwd, { NTSTATUS result = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND; struct winbindd_cm_conn *conn; + uint32 neg_flags = 0x000001ff; if (!cli) { return NT_STATUS_INVALID_PARAMETER; @@ -875,7 +876,7 @@ NTSTATUS cm_get_netlogon_cli(char *domain, unsigned char *trust_passwd, return result; } - result = cli_nt_setup_creds(conn->cli, get_sec_chan(), trust_passwd); + result = cli_nt_setup_creds(conn->cli, get_sec_chan(), trust_passwd, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { DEBUG(0, ("error connecting to domain password server: %s\n", @@ -888,8 +889,7 @@ NTSTATUS cm_get_netlogon_cli(char *domain, unsigned char *trust_passwd, } /* Try again */ - result = cli_nt_setup_creds( - conn->cli, get_sec_chan(),trust_passwd); + result = cli_nt_setup_creds( conn->cli, get_sec_chan(),trust_passwd, &neg_flags, 2); } if (!NT_STATUS_IS_OK(result)) { diff --git a/source3/rpc_client/cli_netlogon.c b/source3/rpc_client/cli_netlogon.c index 58ba32eb2e..eaee3c26e7 100644 --- a/source3/rpc_client/cli_netlogon.c +++ b/source3/rpc_client/cli_netlogon.c @@ -152,6 +152,83 @@ password ?).\n", cli->desthost )); return result; } +/**************************************************************************** +LSA Authenticate 3 + +Send the client credential, receive back a server credential. +Ensure that the server credential returned matches the session key +encrypt of the server challenge originally received. JRA. +****************************************************************************/ + +NTSTATUS cli_net_auth3(struct cli_state *cli, + uint16 sec_chan, + uint32 *neg_flags, DOM_CHAL *srv_chal) +{ + prs_struct qbuf, rbuf; + NET_Q_AUTH_3 q; + NET_R_AUTH_3 r; + NTSTATUS result = NT_STATUS_UNSUCCESSFUL; + extern pstring global_myname; + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); + prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + + /* create and send a MSRPC command with api NET_AUTH2 */ + + DEBUG(4,("cli_net_auth3: srv:%s acct:%s sc:%x mc: %s chal %s neg: %x\n", + cli->srv_name_slash, cli->mach_acct, sec_chan, global_myname, + credstr(cli->clnt_cred.challenge.data), *neg_flags)); + + /* store the parameters */ + init_q_auth_3(&q, cli->srv_name_slash, cli->mach_acct, + sec_chan, global_myname, &cli->clnt_cred.challenge, + *neg_flags); + + /* turn parameters into data stream */ + + if (!net_io_q_auth_3("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, NET_AUTH3, &qbuf, &rbuf)) { + goto done; + } + + /* Unmarshall response */ + + if (!net_io_r_auth_3("", &r, &rbuf, 0)) { + goto done; + } + + result = r.status; + *neg_flags = r.srv_flgs.neg_flags; + + if (NT_STATUS_IS_OK(result)) { + UTIME zerotime; + + /* + * Check the returned value using the initial + * server received challenge. + */ + + zerotime.time = 0; + if (cred_assert( &r.srv_chal, cli->sess_key, srv_chal, + zerotime) == 0) { + + /* + * Server replied with bad credential. Fail. + */ + DEBUG(0,("cli_net_auth3: server %s replied with bad credential (bad machine \ +password ?).\n", cli->desthost )); + result = NT_STATUS_ACCESS_DENIED; + goto done; + } + } + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} + /* Return the secure channel type depending on the server role. */ uint16 get_sec_chan(void) @@ -174,7 +251,7 @@ uint16 get_sec_chan(void) NTSTATUS cli_nt_setup_creds(struct cli_state *cli, uint16 sec_chan, - const unsigned char mach_pwd[16]) + const unsigned char mach_pwd[16], uint32 *neg_flags, int level) { DOM_CHAL clnt_chal; DOM_CHAL srv_chal; @@ -200,24 +277,30 @@ NTSTATUS cli_nt_setup_creds(struct cli_state *cli, cli->sess_key); memset((char *)cli->sess_key+8, '\0', 8); - /******************* Authenticate 2 ********************/ + /******************* Authenticate 2/3 ********************/ - /* calculate auth-2 credentials */ + /* calculate auth-2/3 credentials */ zerotime.time = 0; - cred_create(cli->sess_key, &clnt_chal, zerotime, - &cli->clnt_cred.challenge); + cred_create(cli->sess_key, &clnt_chal, zerotime, &cli->clnt_cred.challenge); /* - * Send client auth-2 challenge. - * Receive an auth-2 challenge response and check it. + * Send client auth-2/3 challenge. + * Receive an auth-2/3 challenge response and check it. */ - - result = cli_net_auth2(cli, sec_chan, 0x000001ff, &srv_chal); + switch (level) { + case 2: + result = cli_net_auth2(cli, sec_chan, *neg_flags, &srv_chal); + break; + case 3: + result = cli_net_auth3(cli, sec_chan, neg_flags, &srv_chal); + break; + default: + DEBUG(1,("cli_nt_setup_creds: unsupported auth level: %d\n", level)); + break; + } - if (!NT_STATUS_IS_OK(result)) { - DEBUG(1,("cli_nt_setup_creds: auth2 challenge failed %s\n", - nt_errstr(result))); - } + if (!NT_STATUS_IS_OK(result)) + DEBUG(1,("cli_nt_setup_creds: auth%d challenge failed %s\n", level, nt_errstr(result))); return result; } diff --git a/source3/rpcclient/cmd_netlogon.c b/source3/rpcclient/cmd_netlogon.c index ffff1dab04..0f61eaaae8 100644 --- a/source3/rpcclient/cmd_netlogon.c +++ b/source3/rpcclient/cmd_netlogon.c @@ -151,6 +151,7 @@ static NTSTATUS cmd_netlogon_sam_sync(struct cli_state *cli, SAM_DELTA_HDR *hdr_deltas; SAM_DELTA_CTR *deltas; DOM_CRED ret_creds; + uint32 neg_flags = 0x000001ff; if (argc > 2) { fprintf(stderr, "Usage: %s [database_id]\n", argv[0]); @@ -173,7 +174,7 @@ static NTSTATUS cmd_netlogon_sam_sync(struct cli_state *cli, goto done; } - result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); @@ -211,6 +212,7 @@ static NTSTATUS cmd_netlogon_sam_deltas(struct cli_state *cli, SAM_DELTA_HDR *hdr_deltas; SAM_DELTA_CTR *deltas; UINT64_S seqnum; + uint32 neg_flags = 0x000001ff; if (argc != 3) { fprintf(stderr, "Usage: %s database_id seqnum\n", argv[0]); @@ -236,7 +238,7 @@ static NTSTATUS cmd_netlogon_sam_deltas(struct cli_state *cli, goto done; } - result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); @@ -270,6 +272,7 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, NTSTATUS result = NT_STATUS_UNSUCCESSFUL; int logon_type = NET_LOGON_TYPE; char *username, *password; + uint32 neg_flags = 0x000001ff; /* Check arguments */ @@ -292,13 +295,12 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, return result; } - if (!secrets_fetch_trust_account_password(lp_workgroup(), trust_passwd, - NULL)) { + if (!secrets_fetch_trust_account_password(lp_workgroup(), trust_passwd, NULL)) { fprintf(stderr, "could not fetch trust account password\n"); goto done; } - result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); @@ -307,8 +309,7 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, /* Perform the sam logon */ - result = cli_netlogon_sam_logon(cli, mem_ctx, username, password, - logon_type); + result = cli_netlogon_sam_logon(cli, mem_ctx, username, password, logon_type); if (!NT_STATUS_IS_OK(result)) goto done; diff --git a/source3/rpcclient/samsync.c b/source3/rpcclient/samsync.c index 710614469e..7124f9416a 100644 --- a/source3/rpcclient/samsync.c +++ b/source3/rpcclient/samsync.c @@ -362,6 +362,7 @@ static NTSTATUS sam_sync(struct cli_state *cli, unsigned char trust_passwd[16], uint32 num_deltas_0, num_deltas_2; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; struct pdb_context *in; + uint32 neg_flags = 0x000001ff; DOM_CRED ret_creds; @@ -384,7 +385,7 @@ static NTSTATUS sam_sync(struct cli_state *cli, unsigned char trust_passwd[16], /* Request a challenge */ - if (!NT_STATUS_IS_OK(cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_passwd))) { + if (!NT_STATUS_IS_OK(cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_passwd, &neg_flags, 2))) { DEBUG(0, ("Error initialising session creds\n")); goto done; } diff --git a/source3/utils/net_rpc_join.c b/source3/utils/net_rpc_join.c index c8be93c39c..b08095f1cc 100644 --- a/source3/utils/net_rpc_join.c +++ b/source3/utils/net_rpc_join.c @@ -49,6 +49,7 @@ int net_rpc_join_ok(const char *domain) int retval = 1; uint32 channel; NTSTATUS result; + uint32 neg_flags = 0x000001ff; /* Connect to remote machine */ if (!(cli = net_make_ipc_connection(NET_FLAGS_ANONYMOUS | NET_FLAGS_PDC))) { @@ -75,7 +76,7 @@ int net_rpc_join_ok(const char *domain) CHECK_RPC_ERR(cli_nt_setup_creds(cli, channel, - stored_md4_trust_password), + stored_md4_trust_password, &neg_flags, 2), "error in domain join verification"); retval = 0; /* Success! */ diff --git a/source3/utils/net_rpc_samsync.c b/source3/utils/net_rpc_samsync.c index a41eae40d1..4ddb931adb 100644 --- a/source3/utils/net_rpc_samsync.c +++ b/source3/utils/net_rpc_samsync.c @@ -143,6 +143,8 @@ int rpc_samdump(int argc, const char **argv) struct cli_state *cli = NULL; uchar trust_password[16]; DOM_CRED ret_creds; + uint32 neg_flags = 0x000001ff; + ZERO_STRUCT(ret_creds); @@ -161,7 +163,7 @@ int rpc_samdump(int argc, const char **argv) goto fail; } - result = cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_password); + result = cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_password, &neg_flags, 2); if (!NT_STATUS_IS_OK(result)) { d_printf("Failed to setup BDC creds\n"); goto fail; -- cgit From de3d0310e2622c068d6ae6fb4698752128068924 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Aug 2002 10:47:34 +0000 Subject: merge of phant0m key fix from APP_HEAD (This used to be commit cb13d334a53f27713665570d85607d57eb407f9f) --- source3/printing/nt_printing.c | 159 ++++++++++++++++++++++++++++++++++-- source3/rpc_parse/parse_reg.c | 8 +- source3/rpc_server/srv_spoolss_nt.c | 91 ++++++++------------- 3 files changed, 190 insertions(+), 68 deletions(-) diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index 1761064584..a5b4c5106a 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -3208,16 +3208,17 @@ static BOOL set_driver_init_2( NT_PRINTER_INFO_LEVEL_2 *info_ptr ) * the initialization save. Change it to reflect the new printer. */ + if ( info.devmode ) { ZERO_STRUCT(info.devmode->devicename); fstrcpy(info.devmode->devicename, info_ptr->printername); - + } /* * NT/2k does not change out the entire DeviceMode of a printer * when changing the driver. Only the driverextra, private, & * driverversion fields. --jerry (Thu Mar 14 08:58:43 CST 2002) * - * Later e4xamination revealed that Windows NT/2k does reset the + * Later examination revealed that Windows NT/2k does reset the * the printer's device mode, bit **only** when you change a * property of the device mode such as the page orientation. * --jerry @@ -3229,9 +3230,8 @@ static BOOL set_driver_init_2( NT_PRINTER_INFO_LEVEL_2 *info_ptr ) free_nt_devicemode(&info_ptr->devmode); info_ptr->devmode = info.devmode; - - DEBUG(10,("set_driver_init_2: Set printer [%s] init DEVMODE for driver [%s]\n", - info_ptr->printername, info_ptr->drivername)); + DEBUG(10,("set_driver_init_2: Set printer [%s] init %s DEVMODE for driver [%s]\n", + info_ptr->printername, info_ptr->devmode?"VALID":"NULL", info_ptr->drivername)); /* Add the printer data 'values' to the new printer */ @@ -3366,17 +3366,162 @@ uint32 update_driver_init(NT_PRINTER_INFO_LEVEL printer, uint32 level) { case 2: { - result=update_driver_init_2(printer.info_2); + result = update_driver_init_2(printer.info_2); break; } default: - result=1; + result = 1; break; } return result; } +/**************************************************************************** + Convert the printer data value, a REG_BINARY array, into an initialization + DEVMODE. Note: the array must be parsed as if it was a DEVMODE in an rpc... + got to keep the endians happy :). +****************************************************************************/ + +static BOOL convert_driver_init( TALLOC_CTX *ctx, NT_DEVICEMODE *nt_devmode, uint8 *data, uint32 data_len ) +{ + BOOL result = False; + prs_struct ps; + DEVICEMODE devmode; + + ZERO_STRUCT(devmode); + + prs_init(&ps, 0, ctx, UNMARSHALL); + ps.data_p = (char *)data; + ps.buffer_size = data_len; + + if (spoolss_io_devmode("phantom DEVMODE", &ps, 0, &devmode)) + result = convert_devicemode("", &devmode, &nt_devmode); + else + DEBUG(10,("convert_driver_init: error parsing DEVMODE\n")); + + return result; +} + +/**************************************************************************** + Set the DRIVER_INIT info in the tdb. Requires Win32 client code that: + + 1. Use the driver's config DLL to this UNC printername and: + a. Call DrvPrintEvent with PRINTER_EVENT_INITIALIZE + b. Call DrvConvertDevMode with CDM_DRIVER_DEFAULT to get default DEVMODE + 2. Call SetPrinterData with the 'magic' key and the DEVMODE as data. + + The last step triggers saving the "driver initialization" information for + this printer into the tdb. Later, new printers that use this driver will + have this initialization information bound to them. This simulates the + driver initialization, as if it had run on the Samba server (as it would + have done on NT). + + The Win32 client side code requirement sucks! But until we can run arbitrary + Win32 printer driver code on any Unix that Samba runs on, we are stuck with it. + + It would have been easier to use SetPrinter because all the UNMARSHALLING of + the DEVMODE is done there, but 2K/XP clients do not set the DEVMODE... think + about it and you will realize why. JRR 010720 +****************************************************************************/ + +static WERROR save_driver_init_2(NT_PRINTER_INFO_LEVEL *printer, uint8 *data, uint32 data_len ) +{ + WERROR status = WERR_OK; + TALLOC_CTX *ctx = NULL; + NT_DEVICEMODE *nt_devmode = NULL; + NT_DEVICEMODE *tmp_devmode = printer->info_2->devmode; + + /* + * When the DEVMODE is already set on the printer, don't try to unpack it. + */ + DEBUG(8,("save_driver_init_2: Enter...\n")); + + if ( !printer->info_2->devmode && data_len ) + { + /* + * Set devmode on printer info, so entire printer initialization can be + * saved to tdb. + */ + + if ((ctx = talloc_init()) == NULL) + return WERR_NOMEM; + + if ((nt_devmode = (NT_DEVICEMODE*)malloc(sizeof(NT_DEVICEMODE))) == NULL) { + status = WERR_NOMEM; + goto done; + } + + ZERO_STRUCTP(nt_devmode); + + /* + * The DEVMODE is held in the 'data' component of the param in raw binary. + * Convert it to to a devmode structure + */ + if ( !convert_driver_init( ctx, nt_devmode, data, data_len )) { + DEBUG(10,("save_driver_init_2: error converting DEVMODE\n")); + status = WERR_INVALID_PARAM; + goto done; + } + + printer->info_2->devmode = nt_devmode; + } + + /* + * Pack up and add (or update) the DEVMODE and any current printer data to + * a 'driver init' element in the tdb + * + */ + + if ( update_driver_init(*printer, 2) != 0 ) { + DEBUG(10,("save_driver_init_2: error updating DEVMODE\n")); + status = WERR_NOMEM; + goto done; + } + + /* + * If driver initialization info was successfully saved, set the current + * printer to match it. This allows initialization of the current printer + * as well as the driver. + */ + status = mod_a_printer(*printer, 2); + if (!W_ERROR_IS_OK(status)) { + DEBUG(10,("save_driver_init_2: error setting DEVMODE on printer [%s]\n", + printer->info_2->printername)); + } + + done: + talloc_destroy(ctx); + free_nt_devicemode( &nt_devmode ); + + printer->info_2->devmode = tmp_devmode; + + return status; +} + +/**************************************************************************** + Update the driver init info (DEVMODE and specifics) for a printer +****************************************************************************/ + +WERROR save_driver_init(NT_PRINTER_INFO_LEVEL *printer, uint32 level, uint8 *data, uint32 data_len) +{ + WERROR status = WERR_OK; + + switch (level) + { + case 2: + { + status = save_driver_init_2( printer, data, data_len ); + break; + } + default: + status = WERR_UNKNOWN_LEVEL; + break; + } + + return status; +} + /**************************************************************************** Get a NT_PRINTER_INFO_LEVEL struct. It returns malloced memory. ****************************************************************************/ diff --git a/source3/rpc_parse/parse_reg.c b/source3/rpc_parse/parse_reg.c index 365ad2dc70..1387aaf6ea 100644 --- a/source3/rpc_parse/parse_reg.c +++ b/source3/rpc_parse/parse_reg.c @@ -39,6 +39,7 @@ static uint32 reg_init_buffer2( BUFFER2 *buf2, REGISTRY_VALUE *val ) char *string; char *list = NULL; char *list2 = NULL; + int len = 0; if ( !buf2 || !val ) return 0; @@ -48,10 +49,13 @@ static uint32 reg_init_buffer2( BUFFER2 *buf2, REGISTRY_VALUE *val ) switch (val->type ) { case REG_SZ: - string = (char*)val->data_p; + string = (char*)regval_data_p( val ); DEBUG(10,("reg_init_buffer2: REG_SZ string => [%s]\n", string)); - init_unistr2( &unistr, (char*)val->data_p, strlen((char*)val->data_p)+1 ); + if ( string ) + len = strlen(string)+1; + + init_unistr2( &unistr, (char*)val->data_p, len ); init_buffer2( buf2, (char*)unistr.buffer, unistr.uni_str_len*2 ); real_size = unistr.uni_str_len*2; break; diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index de87954fea..d1f92aef13 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -5335,22 +5335,6 @@ static WERROR update_printer(pipes_struct *p, POLICY_HND *handle, uint32 level, goto done; } -#if 0 /* JERRY */ - - /* - * Another one of those historical misunderstandings... - * This is reminisent of a similar call we had in _spoolss_setprinterdata() - * I'm leaving it here as a reminder. --jerry - */ - - if (nt_printer_info_level_equal(printer, old_printer)) { - DEBUG(3, ("update_printer: printer info has not changed\n")); - result = WERR_OK; - goto done; - } - -#endif - /* Check calling user has permission to update printer description */ if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) { @@ -5369,49 +5353,22 @@ static WERROR update_printer(pipes_struct *p, POLICY_HND *handle, uint32 level, } /* - * Set the DRIVER_INIT info in the tdb; trigger on magic value for the - * DEVMODE.displayfrequency, which is not used for printer drivers. This - * requires Win32 client code (see other notes elsewhere in the code). + * When a *new* driver is bound to a printer, the drivername is used to + * lookup previously saved driver initialization info, which is then + * bound to the printer, simulating what happens in the Windows arch. */ - if (printer->info_2->devmode && - printer->info_2->devmode->displayfrequency == MAGIC_DISPLAY_FREQUENCY) - { - - DEBUG(10,("update_printer: Save printer driver init data\n")); - printer->info_2->devmode->displayfrequency = 0; - - if (update_driver_init(*printer, 2)!=0) { - DEBUG(10,("update_printer: error updating printer driver init DEVMODE\n")); - result = WERR_ACCESS_DENIED; - goto done; - } - - /* we need to reset all driver init data for all printers - bound to this driver */ - - srv_spoolss_reset_printerdata( printer->info_2->drivername ); - - } - else + if (!strequal(printer->info_2->drivername, old_printer->info_2->drivername)) { - /* - * When a *new* driver is bound to a printer, the drivername is used to - * lookup previously saved driver initialization info, which is then - * bound to the printer, simulating what happens in the Windows arch. - */ - if (!strequal(printer->info_2->drivername, old_printer->info_2->drivername)) + if (!set_driver_init(printer, 2)) { - if (!set_driver_init(printer, 2)) - { - DEBUG(5,("update_printer: Error restoring driver initialization data for driver [%s]!\n", - printer->info_2->drivername)); - } - - DEBUG(10,("update_printer: changing driver [%s]! Sending event!\n", + DEBUG(5,("update_printer: Error restoring driver initialization data for driver [%s]!\n", printer->info_2->drivername)); - - notify_printer_driver(snum, printer->info_2->drivername); } + + DEBUG(10,("update_printer: changing driver [%s]! Sending event!\n", + printer->info_2->drivername)); + + notify_printer_driver(snum, printer->info_2->drivername); } /* Update printer info */ @@ -6614,8 +6571,11 @@ static WERROR spoolss_addprinterex_level_2( pipes_struct *p, const UNISTR2 *uni_ */ if (!devmode) + { set_driver_init(printer, 2); - else { + } + else + { /* A valid devmode was included, convert and link it */ DEBUGADD(10, ("spoolss_addprinterex_level_2: devmode included, converting\n")); @@ -6625,8 +6585,6 @@ static WERROR spoolss_addprinterex_level_2( pipes_struct *p, const UNISTR2 *uni_ return WERR_NOMEM; } - set_driver_init(printer, 2); - /* write the ASCII on disk */ err = mod_a_printer(*printer, 2); if (!W_ERROR_IS_OK(err)) { @@ -6925,7 +6883,7 @@ WERROR _spoolss_enumprinterdata(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATA *q_u, S uint32 idx = q_u->index; uint32 in_value_len = q_u->valuesize; uint32 in_data_len = q_u->datasize; - uint32 *out_max_value_len= &r_u->valuesize; + uint32 *out_max_value_len = &r_u->valuesize; uint16 **out_value = &r_u->value; uint32 *out_value_len = &r_u->realvaluesize; uint32 *out_type = &r_u->type; @@ -7145,10 +7103,25 @@ WERROR _spoolss_setprinterdata( pipes_struct *p, SPOOL_Q_SETPRINTERDATA *q_u, SP unistr2_to_ascii( valuename, value, sizeof(valuename)-1 ); - /* save the registry data */ + /* + * When client side code sets a magic printer data key, detect it and save + * the current printer data and the magic key's data (its the DEVMODE) for + * future printer/driver initializations. + */ + if ( (type == REG_BINARY) && strequal( valuename, PHANTOM_DEVMODE_KEY)) + { + /* Set devmode and printer initialization info */ + status = save_driver_init( printer, 2, data, real_len ); + srv_spoolss_reset_printerdata( printer->info_2->drivername ); + } + else + { status = set_printer_dataex( printer, SPOOL_PRINTERDATA_KEY, valuename, type, data, real_len ); + if ( W_ERROR_IS_OK(status) ) + status = mod_a_printer(*printer, 2); + } done: free_a_printer(&printer, 2); -- cgit From 4e216f3e94a83f8640e8ce89b0f7bfdc5453ed89 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Aug 2002 11:03:44 +0000 Subject: break out REGISTRY_VALUE & REGVAL_CR objects into separate file for cleaning linking.... (This used to be commit fd140aadd7c76facb4efa80655e633600f9760b6) --- source3/Makefile.in | 5 +- source3/registry/reg_frontend.c | 347 ------------------------------------- source3/registry/reg_objects.c | 372 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 375 insertions(+), 349 deletions(-) create mode 100644 source3/registry/reg_objects.c diff --git a/source3/Makefile.in b/source3/Makefile.in index c132fe8221..25040789a4 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -181,8 +181,9 @@ LIBMSRPC_SERVER_OBJ = libsmb/trust_passwd.o LIBMSRPC_PICOBJ = $(LIBMSRPC_OBJ:.o=.po) +REGOBJS_OBJ = registry/reg_objects.c REGISTRY_OBJ = registry/reg_frontend.o registry/reg_cachehook.o registry/reg_printing.o \ - registry/reg_db.o + registry/reg_db.o $(REGOBJS_OBJ) RPC_SERVER_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o \ rpc_server/srv_lsa_hnd.o rpc_server/srv_netlog.o rpc_server/srv_netlog_nt.o \ @@ -493,7 +494,7 @@ WINBINDD_OBJ = \ $(LIBNMB_OBJ) $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ $(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(RPC_PARSE_OBJ) \ $(PROFILE_OBJ) $(UNIGRP_OBJ) \ - $(SECRETS_OBJ) $(LIBADS_OBJ) + $(SECRETS_OBJ) $(LIBADS_OBJ) $(REGOBJS_OBJ) WBINFO_OBJ = nsswitch/wbinfo.o libsmb/smbencrypt.o libsmb/smbdes.o diff --git a/source3/registry/reg_frontend.c b/source3/registry/reg_frontend.c index 05bcd989b4..a9dfb52f01 100644 --- a/source3/registry/reg_frontend.c +++ b/source3/registry/reg_frontend.c @@ -37,353 +37,6 @@ REGISTRY_HOOK reg_hooks[] = { }; -/* - * Utility functions for REGSUBKEY_CTR - */ - -/*********************************************************************** - Init the talloc context held by a REGSUBKEY_CTR structure - **********************************************************************/ - -void regsubkey_ctr_init( REGSUBKEY_CTR *ctr ) -{ - if ( !ctr->ctx ) - ctr->ctx = talloc_init(); -} - -/*********************************************************************** - Add a new key to the array - **********************************************************************/ - -int regsubkey_ctr_addkey( REGSUBKEY_CTR *ctr, char *keyname ) -{ - uint32 len; - char **pp; - - if ( keyname ) - { - len = strlen( keyname ); - - /* allocate a space for the char* in the array */ - - if ( ctr->subkeys == 0 ) - ctr->subkeys = talloc( ctr->ctx, sizeof(char*) ); - else { - pp = talloc_realloc( ctr->ctx, ctr->subkeys, sizeof(char*)*(ctr->num_subkeys+1) ); - if ( pp ) - ctr->subkeys = pp; - } - - /* allocate the string and save it in the array */ - - ctr->subkeys[ctr->num_subkeys] = talloc( ctr->ctx, len+1 ); - strncpy( ctr->subkeys[ctr->num_subkeys], keyname, len+1 ); - ctr->num_subkeys++; - } - - return ctr->num_subkeys; -} - -/*********************************************************************** - How many keys does the container hold ? - **********************************************************************/ - -int regsubkey_ctr_numkeys( REGSUBKEY_CTR *ctr ) -{ - return ctr->num_subkeys; -} - -/*********************************************************************** - Retreive a specific key string - **********************************************************************/ - -char* regsubkey_ctr_specific_key( REGSUBKEY_CTR *ctr, uint32 key_index ) -{ - if ( ! (key_index < ctr->num_subkeys) ) - return NULL; - - return ctr->subkeys[key_index]; -} - -/*********************************************************************** - free memory held by a REGSUBKEY_CTR structure - **********************************************************************/ - -void regsubkey_ctr_destroy( REGSUBKEY_CTR *ctr ) -{ - if ( ctr ) { - talloc_destroy( ctr->ctx ); - ZERO_STRUCTP( ctr ); - } -} - - -/* - * Utility functions for REGVAL_CTR - */ - -/*********************************************************************** - Init the talloc context held by a REGSUBKEY_CTR structure - **********************************************************************/ - -void regval_ctr_init( REGVAL_CTR *ctr ) -{ - if ( !ctr->ctx ) - ctr->ctx = talloc_init(); -} - -/*********************************************************************** - How many keys does the container hold ? - **********************************************************************/ - -int regval_ctr_numvals( REGVAL_CTR *ctr ) -{ - return ctr->num_values; -} - -/*********************************************************************** - allocate memory for and duplicate a REGISTRY_VALUE. - This is malloc'd memory so the caller should free it when done - **********************************************************************/ - -REGISTRY_VALUE* dup_registry_value( REGISTRY_VALUE *val ) -{ - REGISTRY_VALUE *copy = NULL; - - if ( !val ) - return NULL; - - if ( !(copy = malloc( sizeof(REGISTRY_VALUE) )) ) { - DEBUG(0,("dup_registry_value: malloc() failed!\n")); - return NULL; - } - - /* copy all the non-pointer initial data */ - - memcpy( copy, val, sizeof(REGISTRY_VALUE) ); - if ( val->data_p ) - { - if ( !(copy->data_p = memdup( val->data_p, val->size )) ) { - DEBUG(0,("dup_registry_value: memdup() failed for [%d] bytes!\n", - val->size)); - SAFE_FREE( copy ); - } - } - - return copy; -} - -/********************************************************************** - free the memory allocated to a REGISTRY_VALUE - *********************************************************************/ - -void free_registry_value( REGISTRY_VALUE *val ) -{ - if ( !val ) - return; - - SAFE_FREE( val->data_p ); - SAFE_FREE( val ); - - return; -} - -/********************************************************************** - *********************************************************************/ - -uint8* regval_data_p( REGISTRY_VALUE *val ) -{ - return val->data_p; -} - -/********************************************************************** - *********************************************************************/ - -int regval_size( REGISTRY_VALUE *val ) -{ - return val->size; -} - -/********************************************************************** - *********************************************************************/ - -char* regval_name( REGISTRY_VALUE *val ) -{ - return val->valuename; -} - -/********************************************************************** - *********************************************************************/ - -uint32 regval_type( REGISTRY_VALUE *val ) -{ - return val->type; -} - -/*********************************************************************** - Retreive a pointer to a specific value. Caller shoud dup the structure - since this memory may go away with a regval_ctr_destroy() - **********************************************************************/ - -REGISTRY_VALUE* regval_ctr_specific_value( REGVAL_CTR *ctr, uint32 idx ) -{ - if ( !(idx < ctr->num_values) ) - return NULL; - - return ctr->values[idx]; -} - -/*********************************************************************** - Retrive the TALLOC_CTX associated with a REGISTRY_VALUE - **********************************************************************/ - -TALLOC_CTX* regval_ctr_getctx( REGVAL_CTR *val ) -{ - if ( !val ) - return NULL; - - return val->ctx; -} - -/*********************************************************************** - Add a new registry value to the array - **********************************************************************/ - -int regval_ctr_addvalue( REGVAL_CTR *ctr, char *name, uint16 type, - char *data_p, size_t size ) -{ - REGISTRY_VALUE **ppreg; - - if ( name ) - { - /* allocate a slot in the array of pointers */ - - if ( ctr->num_values == 0 ) - ctr->values = talloc( ctr->ctx, sizeof(REGISTRY_VALUE*) ); - else { - ppreg = talloc_realloc( ctr->ctx, ctr->values, sizeof(REGISTRY_VALUE*)*(ctr->num_values+1) ); - if ( ppreg ) - ctr->values = ppreg; - } - - /* allocate a new value and store the pointer in the arrya */ - - ctr->values[ctr->num_values] = talloc( ctr->ctx, sizeof(REGISTRY_VALUE) ); - - /* init the value */ - - fstrcpy( ctr->values[ctr->num_values]->valuename, name ); - ctr->values[ctr->num_values]->type = type; - ctr->values[ctr->num_values]->data_p = talloc_memdup( ctr->ctx, data_p, size ); - ctr->values[ctr->num_values]->size = size; - ctr->num_values++; - } - - return ctr->num_values; -} - -/*********************************************************************** - Add a new registry value to the array - **********************************************************************/ - -int regval_ctr_copyvalue( REGVAL_CTR *ctr, REGISTRY_VALUE *val ) -{ - REGISTRY_VALUE **ppreg; - - if ( val ) - { - /* allocate a slot in the array of pointers */ - - if ( ctr->num_values == 0 ) - ctr->values = talloc( ctr->ctx, sizeof(REGISTRY_VALUE*) ); - else { - ppreg = talloc_realloc( ctr->ctx, ctr->values, sizeof(REGISTRY_VALUE*)*(ctr->num_values+1) ); - if ( ppreg ) - ctr->values = ppreg; - } - - /* allocate a new value and store the pointer in the arrya */ - - ctr->values[ctr->num_values] = talloc( ctr->ctx, sizeof(REGISTRY_VALUE) ); - - /* init the value */ - - fstrcpy( ctr->values[ctr->num_values]->valuename, val->valuename ); - ctr->values[ctr->num_values]->type = val->type; - ctr->values[ctr->num_values]->data_p = talloc_memdup( ctr->ctx, val->data_p, val->size ); - ctr->values[ctr->num_values]->size = val->size; - ctr->num_values++; - } - - return ctr->num_values; -} - -/*********************************************************************** - Delete a single value from the registry container. - No need to free memory since it is talloc'd. - **********************************************************************/ - -int regval_ctr_delvalue( REGVAL_CTR *ctr, char *name ) -{ - int i; - - /* search for the value */ - - for ( i=0; inum_values; i++ ) { - if ( strcmp( ctr->values[i]->valuename, name ) == 0) - break; - } - - /* just return if we don't find it */ - - if ( i == ctr->num_values ) - return ctr->num_values; - - /* just shift everything down one */ - - for ( /* use previous i */; i<(ctr->num_values-1); i++ ) - memcpy( ctr->values[i], ctr->values[i+1], sizeof(REGISTRY_VALUE) ); - - /* paranoia */ - - ZERO_STRUCTP( ctr->values[i] ); - - ctr->num_values--; - - return ctr->num_values; -} - -/*********************************************************************** - Delete a single value from the registry container. - No need to free memory since it is talloc'd. - **********************************************************************/ - -REGISTRY_VALUE* regval_ctr_getvalue( REGVAL_CTR *ctr, char *name ) -{ - int i; - - /* search for the value */ - - for ( i=0; inum_values; i++ ) { - if ( strequal( ctr->values[i]->valuename, name ) ) - return ctr->values[i]; - } - - return NULL; -} - -/*********************************************************************** - free memory held by a REGVAL_CTR structure - **********************************************************************/ - -void regval_ctr_destroy( REGVAL_CTR *ctr ) -{ - if ( ctr ) { - talloc_destroy( ctr->ctx ); - ZERO_STRUCTP( ctr ); - } -} - /*********************************************************************** Open the registry database and initialize the REGISTRY_HOOK cache ***********************************************************************/ diff --git a/source3/registry/reg_objects.c b/source3/registry/reg_objects.c new file mode 100644 index 0000000000..be15e49a2f --- /dev/null +++ b/source3/registry/reg_objects.c @@ -0,0 +1,372 @@ +/* + * Unix SMB/CIFS implementation. + * RPC Pipe client / server routines + * Copyright (C) Gerald Carter 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. + */ + +/* Implementation of registry frontend view functions. */ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_RPC_SRV + + +/*********************************************************************** + Init the talloc context held by a REGSUBKEY_CTR structure + **********************************************************************/ + +void regsubkey_ctr_init( REGSUBKEY_CTR *ctr ) +{ + if ( !ctr->ctx ) + ctr->ctx = talloc_init(); +} + +/*********************************************************************** + Add a new key to the array + **********************************************************************/ + +int regsubkey_ctr_addkey( REGSUBKEY_CTR *ctr, char *keyname ) +{ + uint32 len; + char **pp; + + if ( keyname ) + { + len = strlen( keyname ); + + /* allocate a space for the char* in the array */ + + if ( ctr->subkeys == 0 ) + ctr->subkeys = talloc( ctr->ctx, sizeof(char*) ); + else { + pp = talloc_realloc( ctr->ctx, ctr->subkeys, sizeof(char*)*(ctr->num_subkeys+1) ); + if ( pp ) + ctr->subkeys = pp; + } + + /* allocate the string and save it in the array */ + + ctr->subkeys[ctr->num_subkeys] = talloc( ctr->ctx, len+1 ); + strncpy( ctr->subkeys[ctr->num_subkeys], keyname, len+1 ); + ctr->num_subkeys++; + } + + return ctr->num_subkeys; +} + +/*********************************************************************** + How many keys does the container hold ? + **********************************************************************/ + +int regsubkey_ctr_numkeys( REGSUBKEY_CTR *ctr ) +{ + return ctr->num_subkeys; +} + +/*********************************************************************** + Retreive a specific key string + **********************************************************************/ + +char* regsubkey_ctr_specific_key( REGSUBKEY_CTR *ctr, uint32 key_index ) +{ + if ( ! (key_index < ctr->num_subkeys) ) + return NULL; + + return ctr->subkeys[key_index]; +} + +/*********************************************************************** + free memory held by a REGSUBKEY_CTR structure + **********************************************************************/ + +void regsubkey_ctr_destroy( REGSUBKEY_CTR *ctr ) +{ + if ( ctr ) { + talloc_destroy( ctr->ctx ); + ZERO_STRUCTP( ctr ); + } +} + + +/* + * Utility functions for REGVAL_CTR + */ + +/*********************************************************************** + Init the talloc context held by a REGSUBKEY_CTR structure + **********************************************************************/ + +void regval_ctr_init( REGVAL_CTR *ctr ) +{ + if ( !ctr->ctx ) + ctr->ctx = talloc_init(); +} + +/*********************************************************************** + How many keys does the container hold ? + **********************************************************************/ + +int regval_ctr_numvals( REGVAL_CTR *ctr ) +{ + return ctr->num_values; +} + +/*********************************************************************** + allocate memory for and duplicate a REGISTRY_VALUE. + This is malloc'd memory so the caller should free it when done + **********************************************************************/ + +REGISTRY_VALUE* dup_registry_value( REGISTRY_VALUE *val ) +{ + REGISTRY_VALUE *copy = NULL; + + if ( !val ) + return NULL; + + if ( !(copy = malloc( sizeof(REGISTRY_VALUE) )) ) { + DEBUG(0,("dup_registry_value: malloc() failed!\n")); + return NULL; + } + + /* copy all the non-pointer initial data */ + + memcpy( copy, val, sizeof(REGISTRY_VALUE) ); + if ( val->data_p ) + { + if ( !(copy->data_p = memdup( val->data_p, val->size )) ) { + DEBUG(0,("dup_registry_value: memdup() failed for [%d] bytes!\n", + val->size)); + SAFE_FREE( copy ); + } + } + + return copy; +} + +/********************************************************************** + free the memory allocated to a REGISTRY_VALUE + *********************************************************************/ + +void free_registry_value( REGISTRY_VALUE *val ) +{ + if ( !val ) + return; + + SAFE_FREE( val->data_p ); + SAFE_FREE( val ); + + return; +} + +/********************************************************************** + *********************************************************************/ + +uint8* regval_data_p( REGISTRY_VALUE *val ) +{ + return val->data_p; +} + +/********************************************************************** + *********************************************************************/ + +int regval_size( REGISTRY_VALUE *val ) +{ + return val->size; +} + +/********************************************************************** + *********************************************************************/ + +char* regval_name( REGISTRY_VALUE *val ) +{ + return val->valuename; +} + +/********************************************************************** + *********************************************************************/ + +uint32 regval_type( REGISTRY_VALUE *val ) +{ + return val->type; +} + +/*********************************************************************** + Retreive a pointer to a specific value. Caller shoud dup the structure + since this memory may go away with a regval_ctr_destroy() + **********************************************************************/ + +REGISTRY_VALUE* regval_ctr_specific_value( REGVAL_CTR *ctr, uint32 idx ) +{ + if ( !(idx < ctr->num_values) ) + return NULL; + + return ctr->values[idx]; +} + +/*********************************************************************** + Retrive the TALLOC_CTX associated with a REGISTRY_VALUE + **********************************************************************/ + +TALLOC_CTX* regval_ctr_getctx( REGVAL_CTR *val ) +{ + if ( !val ) + return NULL; + + return val->ctx; +} + +/*********************************************************************** + Add a new registry value to the array + **********************************************************************/ + +int regval_ctr_addvalue( REGVAL_CTR *ctr, char *name, uint16 type, + char *data_p, size_t size ) +{ + REGISTRY_VALUE **ppreg; + + if ( name ) + { + /* allocate a slot in the array of pointers */ + + if ( ctr->num_values == 0 ) + ctr->values = talloc( ctr->ctx, sizeof(REGISTRY_VALUE*) ); + else { + ppreg = talloc_realloc( ctr->ctx, ctr->values, sizeof(REGISTRY_VALUE*)*(ctr->num_values+1) ); + if ( ppreg ) + ctr->values = ppreg; + } + + /* allocate a new value and store the pointer in the arrya */ + + ctr->values[ctr->num_values] = talloc( ctr->ctx, sizeof(REGISTRY_VALUE) ); + + /* init the value */ + + fstrcpy( ctr->values[ctr->num_values]->valuename, name ); + ctr->values[ctr->num_values]->type = type; + ctr->values[ctr->num_values]->data_p = talloc_memdup( ctr->ctx, data_p, size ); + ctr->values[ctr->num_values]->size = size; + ctr->num_values++; + } + + return ctr->num_values; +} + +/*********************************************************************** + Add a new registry value to the array + **********************************************************************/ + +int regval_ctr_copyvalue( REGVAL_CTR *ctr, REGISTRY_VALUE *val ) +{ + REGISTRY_VALUE **ppreg; + + if ( val ) + { + /* allocate a slot in the array of pointers */ + + if ( ctr->num_values == 0 ) + ctr->values = talloc( ctr->ctx, sizeof(REGISTRY_VALUE*) ); + else { + ppreg = talloc_realloc( ctr->ctx, ctr->values, sizeof(REGISTRY_VALUE*)*(ctr->num_values+1) ); + if ( ppreg ) + ctr->values = ppreg; + } + + /* allocate a new value and store the pointer in the arrya */ + + ctr->values[ctr->num_values] = talloc( ctr->ctx, sizeof(REGISTRY_VALUE) ); + + /* init the value */ + + fstrcpy( ctr->values[ctr->num_values]->valuename, val->valuename ); + ctr->values[ctr->num_values]->type = val->type; + ctr->values[ctr->num_values]->data_p = talloc_memdup( ctr->ctx, val->data_p, val->size ); + ctr->values[ctr->num_values]->size = val->size; + ctr->num_values++; + } + + return ctr->num_values; +} + +/*********************************************************************** + Delete a single value from the registry container. + No need to free memory since it is talloc'd. + **********************************************************************/ + +int regval_ctr_delvalue( REGVAL_CTR *ctr, char *name ) +{ + int i; + + /* search for the value */ + + for ( i=0; inum_values; i++ ) { + if ( strcmp( ctr->values[i]->valuename, name ) == 0) + break; + } + + /* just return if we don't find it */ + + if ( i == ctr->num_values ) + return ctr->num_values; + + /* just shift everything down one */ + + for ( /* use previous i */; i<(ctr->num_values-1); i++ ) + memcpy( ctr->values[i], ctr->values[i+1], sizeof(REGISTRY_VALUE) ); + + /* paranoia */ + + ZERO_STRUCTP( ctr->values[i] ); + + ctr->num_values--; + + return ctr->num_values; +} + +/*********************************************************************** + Delete a single value from the registry container. + No need to free memory since it is talloc'd. + **********************************************************************/ + +REGISTRY_VALUE* regval_ctr_getvalue( REGVAL_CTR *ctr, char *name ) +{ + int i; + + /* search for the value */ + + for ( i=0; inum_values; i++ ) { + if ( strequal( ctr->values[i]->valuename, name ) ) + return ctr->values[i]; + } + + return NULL; +} + +/*********************************************************************** + free memory held by a REGVAL_CTR structure + **********************************************************************/ + +void regval_ctr_destroy( REGVAL_CTR *ctr ) +{ + if ( ctr ) { + talloc_destroy( ctr->ctx ); + ZERO_STRUCTP( ctr ); + } +} + + -- cgit From 189c4b8fd36078cac83d7c2d56d5efc3f44a421b Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Aug 2002 11:38:39 +0000 Subject: fix broken dependencies.... (This used to be commit 8eab2e79412c771ef57d39e7d61816b705350e0f) --- source3/Makefile.in | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 25040789a4..2aa254bce7 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -181,9 +181,9 @@ LIBMSRPC_SERVER_OBJ = libsmb/trust_passwd.o LIBMSRPC_PICOBJ = $(LIBMSRPC_OBJ:.o=.po) -REGOBJS_OBJ = registry/reg_objects.c +REGOBJS_OBJ = registry/reg_objects.o REGISTRY_OBJ = registry/reg_frontend.o registry/reg_cachehook.o registry/reg_printing.o \ - registry/reg_db.o $(REGOBJS_OBJ) + registry/reg_db.o RPC_SERVER_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o \ rpc_server/srv_lsa_hnd.o rpc_server/srv_netlog.o rpc_server/srv_netlog_nt.o \ @@ -192,7 +192,7 @@ RPC_SERVER_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o \ rpc_server/srv_srvsvc.o rpc_server/srv_srvsvc_nt.o \ rpc_server/srv_util.o rpc_server/srv_wkssvc.o rpc_server/srv_wkssvc_nt.o \ rpc_server/srv_pipe.o rpc_server/srv_dfs.o rpc_server/srv_dfs_nt.o \ - rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o $(REGISTRY_OBJ) + rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o # this includes only the low level parse code, not stuff # that requires knowledge of security contexts @@ -203,7 +203,8 @@ RPC_PARSE_OBJ = rpc_parse/parse_lsa.o rpc_parse/parse_net.o \ rpc_parse/parse_reg.o rpc_parse/parse_rpc.o \ rpc_parse/parse_samr.o rpc_parse/parse_srv.o \ rpc_parse/parse_wks.o \ - rpc_parse/parse_spoolss.o rpc_parse/parse_dfs.o + rpc_parse/parse_spoolss.o rpc_parse/parse_dfs.o \ + $(REGOBJS_OBJ) RPC_CLIENT_OBJ = rpc_client/cli_pipe.o @@ -270,7 +271,7 @@ SMBD_OBJ_BASE = $(SMBD_OBJ_SRV) $(MSDFS_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_ $(NOTIFY_OBJ) $(GROUPDB_OBJ) $(AUTH_OBJ) \ $(LIBMSRPC_OBJ) $(LIBMSRPC_SERVER_OBJ) \ $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \ - $(LIB_SMBD_OBJ) + $(LIB_SMBD_OBJ) $(REGISTRY_OBJ) PRINTING_OBJ = printing/pcap.o printing/print_svid.o \ @@ -494,7 +495,7 @@ WINBINDD_OBJ = \ $(LIBNMB_OBJ) $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ $(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(RPC_PARSE_OBJ) \ $(PROFILE_OBJ) $(UNIGRP_OBJ) \ - $(SECRETS_OBJ) $(LIBADS_OBJ) $(REGOBJS_OBJ) + $(SECRETS_OBJ) $(LIBADS_OBJ) WBINFO_OBJ = nsswitch/wbinfo.o libsmb/smbencrypt.o libsmb/smbdes.o -- cgit From bba043c9e4059f96b78c702bd9b13e2efb053cdd Mon Sep 17 00:00:00 2001 From: Jean-Fran§ois Micouleau Date: Fri, 30 Aug 2002 11:57:06 +0000 Subject: allow rpcclient's samlogon command to use cli_net_3(). J.F. (This used to be commit 3cf419bdfbd3c56f31fb0794b206ab4bd2ac7120) --- source3/rpcclient/cmd_netlogon.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source3/rpcclient/cmd_netlogon.c b/source3/rpcclient/cmd_netlogon.c index 0f61eaaae8..98ba92e5a3 100644 --- a/source3/rpcclient/cmd_netlogon.c +++ b/source3/rpcclient/cmd_netlogon.c @@ -273,12 +273,14 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, int logon_type = NET_LOGON_TYPE; char *username, *password; uint32 neg_flags = 0x000001ff; + int auth_level = 2; /* Check arguments */ - if (argc < 3 || argc > 4) { + if (argc < 3 || argc > 6) { fprintf(stderr, "Usage: samlogon " - "[logon_type]\n"); + "[logon_type] [neg flags] [auth level (2 or 3)]\n" + "neg flags being 0x000001ff or 0x6007ffff\n"); return NT_STATUS_OK; } @@ -288,6 +290,12 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, if (argc == 4) sscanf(argv[3], "%i", &logon_type); + if (argc == 5) + sscanf(argv[4], "%i", &neg_flags); + + if (argc == 6) + sscanf(argv[5], "%i", &auth_level); + /* Authenticate ourselves with the domain controller */ if (!secrets_init()) { @@ -300,7 +308,7 @@ static NTSTATUS cmd_netlogon_sam_logon(struct cli_state *cli, goto done; } - result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd, &neg_flags, 2); + result = cli_nt_setup_creds(cli, get_sec_chan(), trust_passwd, &neg_flags, auth_level); if (!NT_STATUS_IS_OK(result)) { fprintf(stderr, "Error initialising session creds\n"); -- cgit From 3cf5819133219f720d2b2f0b886eaa01380d1bbd Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Aug 2002 12:46:54 +0000 Subject: fix proto (This used to be commit 4f00844da05b37cf9755def40a63c11e7f82153e) --- source3/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 2aa254bce7..499a098577 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -455,7 +455,7 @@ PROTO_OBJ = $(SMBD_OBJ_MAIN) \ $(PRINTING_OBJ) $(PRINTBACKEND_OBJ) $(OPLOCK_OBJ) $(NOTIFY_OBJ) \ $(QUOTAOBJS) $(PASSDB_OBJ) $(GROUPDB_OBJ) $(MSDFS_OBJ) \ $(READLINE_OBJ) $(PROFILE_OBJ) $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \ - $(LIB_SMBD_OBJ) $(SAM_OBJ) + $(LIB_SMBD_OBJ) $(SAM_OBJ) $(REGISTRY_OBJ) NSS_OBJ_0 = nsswitch/wins.o $(PARAM_OBJ) $(UBIQX_OBJ) $(LIBSMB_OBJ) \ $(LIB_OBJ) $(NSSWINS_OBJ) -- cgit From dd0d4b527006d4f3724e496ff9d8be3cc1a176b3 Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Fri, 30 Aug 2002 14:05:22 +0000 Subject: based on function prototype, the args were switched - this gave an error on the IRIX compiler. could whoever put the FIXME message take a look and see if it is still broken. (This used to be commit 29a8f2121114cafca07797cadaeb26c9d0055b24) --- source3/lib/time.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/lib/time.c b/source3/lib/time.c index f37380df70..ef12dc15f3 100644 --- a/source3/lib/time.c +++ b/source3/lib/time.c @@ -43,7 +43,7 @@ int extra_time_offset = 0; void get_nttime_max(NTTIME *t) { /* FIXME: This is incorrect */ - unix_to_nt_time(get_time_t_max(),t); + unix_to_nt_time(t, get_time_t_max()); } /******************************************************************* -- cgit From 3cbe8922762817d38b6408154994714ca35f3734 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 30 Aug 2002 14:48:33 +0000 Subject: fix up print portion of registry. Merge from APP_HEAD. (This used to be commit ec37633548ed329c05b93499f75883d987b78f1e) --- source3/printing/nt_printing.c | 4 +- source3/registry/reg_printing.c | 69 ++++++++++++++++++++++------------ source3/rpc_parse/parse_reg.c | 74 +------------------------------------ source3/rpc_server/srv_spoolss_nt.c | 2 +- 4 files changed, 51 insertions(+), 98 deletions(-) diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index a5b4c5106a..bf90089448 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -2638,8 +2638,8 @@ WERROR add_printer_data( NT_PRINTER_INFO_LEVEL_2 *p2, char *key, char *value, regval_ctr_addvalue( &p2->data.keys[key_index].values, value, type, data, real_len ); - DEBUG(8,("add_printer_data: Added key => [%s], value => [%s], size => [%d]\n", - key, value, real_len )); + DEBUG(8,("add_printer_data: Added key => [%s], value => [%s], type=> [%d], size => [%d]\n", + key, value, type, real_len )); return result; } diff --git a/source3/registry/reg_printing.c b/source3/registry/reg_printing.c index 2bc9d056e4..a58a91a0a8 100644 --- a/source3/registry/reg_printing.c +++ b/source3/registry/reg_printing.c @@ -240,6 +240,7 @@ static int print_subpath_values_environments( char *key, REGVAL_CTR *val ) int buffer_size = 0; int i, length; char *filename; + UNISTR2 data;; DEBUG(8,("print_subpath_values_environments: Enter key => [%s]\n", key ? key : "NULL")); @@ -287,15 +288,23 @@ static int print_subpath_values_environments( char *key, REGVAL_CTR *val ) info3 = driver_ctr.info_3; filename = dos_basename( info3->driverpath ); - regval_ctr_addvalue( val, "Driver", REG_SZ, filename, strlen(filename)+1 ); + init_unistr2( &data, filename, strlen(filename)+1 ); + regval_ctr_addvalue( val, "Driver", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + filename = dos_basename( info3->configfile ); - regval_ctr_addvalue( val, "Configuration File", REG_SZ, filename, strlen(filename)+1 ); + init_unistr2( &data, filename, strlen(filename)+1 ); + regval_ctr_addvalue( val, "Configuration File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + filename = dos_basename( info3->datafile ); - regval_ctr_addvalue( val, "Data File", REG_SZ, filename, strlen(filename)+1 ); + init_unistr2( &data, filename, strlen(filename)+1 ); + regval_ctr_addvalue( val, "Data File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + filename = dos_basename( info3->helpfile ); - regval_ctr_addvalue( val, "Help File", REG_SZ, filename, strlen(filename)+1 ); - - regval_ctr_addvalue( val, "Data Type", REG_SZ, info3->defaultdatatype, strlen(info3->defaultdatatype)+1 ); + init_unistr2( &data, filename, strlen(filename)+1 ); + regval_ctr_addvalue( val, "Help File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + + init_unistr2( &data, info3->defaultdatatype, strlen(info3->defaultdatatype)+1 ); + regval_ctr_addvalue( val, "Data Type", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); regval_ctr_addvalue( val, "Version", REG_DWORD, (char*)&info3->cversion, sizeof(info3->cversion) ); @@ -313,19 +322,20 @@ static int print_subpath_values_environments( char *key, REGVAL_CTR *val ) length = strlen(filename); - buffer2 = Realloc( buffer, buffer_size + length + 1 ); + buffer2 = Realloc( buffer, buffer_size + (length + 1)*sizeof(uint16) ); if ( !buffer2 ) break; buffer = buffer2; + + init_unistr2( &data, filename, length+1 ); + memcpy( buffer+buffer_size, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); - memcpy( buffer+buffer_size, filename, length+1 ); - - buffer_size += length + 1; + buffer_size += (length + 1)*sizeof(uint16); } /* terminated by double NULL. Add the final one here */ - buffer2 = Realloc( buffer, buffer_size + 1 ); + buffer2 = Realloc( buffer, buffer_size + 2 ); if ( !buffer2 ) { SAFE_FREE( buffer ); buffer_size = 0; @@ -333,12 +343,14 @@ static int print_subpath_values_environments( char *key, REGVAL_CTR *val ) else { buffer = buffer2; buffer[buffer_size++] = '\0'; + buffer[buffer_size++] = '\0'; } } regval_ctr_addvalue( val, "Dependent Files", REG_MULTI_SZ, buffer, buffer_size ); free_a_printer_driver( driver_ctr, 3 ); + SAFE_FREE( key2 ); SAFE_FREE( buffer ); @@ -522,9 +534,10 @@ static int print_subpath_values_printers( char *key, REGVAL_CTR *val ) fstring printername; NT_PRINTER_DATA *p_data; int i, key_index; + UNISTR2 data; /* - * There are tw cases to deal with here + * Theres are tw cases to deal with here * (1) enumeration of printer_info_2 values * (2) enumeration of the PrinterDriverData subney */ @@ -559,17 +572,27 @@ static int print_subpath_values_printers( char *key, REGVAL_CTR *val ) regval_ctr_addvalue( val, "UntilTime", REG_DWORD, (char*)&info2->untiltime, sizeof(info2->untiltime) ); regval_ctr_addvalue( val, "cjobs", REG_DWORD, (char*)&info2->cjobs, sizeof(info2->cjobs) ); regval_ctr_addvalue( val, "AveragePPM", REG_DWORD, (char*)&info2->averageppm, sizeof(info2->averageppm) ); - - regval_ctr_addvalue( val, "Name", REG_SZ, info2->printername, sizeof(info2->printername)+1 ); - regval_ctr_addvalue( val, "Location", REG_SZ, info2->location, sizeof(info2->location)+1 ); - regval_ctr_addvalue( val, "Comment", REG_SZ, info2->comment, sizeof(info2->comment)+1 ); - regval_ctr_addvalue( val, "Parameters", REG_SZ, info2->parameters, sizeof(info2->parameters)+1 ); - regval_ctr_addvalue( val, "Port", REG_SZ, info2->portname, sizeof(info2->portname)+1 ); - regval_ctr_addvalue( val, "Server", REG_SZ, info2->servername, sizeof(info2->servername)+1 ); - regval_ctr_addvalue( val, "Share", REG_SZ, info2->sharename, sizeof(info2->sharename)+1 ); - regval_ctr_addvalue( val, "Driver", REG_SZ, info2->drivername, sizeof(info2->drivername)+1 ); - regval_ctr_addvalue( val, "Separator File", REG_SZ, info2->sepfile, sizeof(info2->sepfile)+1 ); - regval_ctr_addvalue( val, "Print Processor", REG_SZ, "winprint", sizeof("winprint")+1 ); + + init_unistr2( &data, info2->printername, strlen(info2->printername)+1 ); + regval_ctr_addvalue( val, "Name", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->location, strlen(info2->location)+1 ); + regval_ctr_addvalue( val, "Location", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->comment, strlen(info2->comment)+1 ); + regval_ctr_addvalue( val, "Comment", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->parameters, strlen(info2->parameters)+1 ); + regval_ctr_addvalue( val, "Parameters", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->portname, strlen(info2->portname)+1 ); + regval_ctr_addvalue( val, "Port", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->servername, strlen(info2->servername)+1 ); + regval_ctr_addvalue( val, "Server", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->sharename, strlen(info2->sharename)+1 ); + regval_ctr_addvalue( val, "Share", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->drivername, strlen(info2->drivername)+1 ); + regval_ctr_addvalue( val, "Driver", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, info2->sepfile, strlen(info2->sepfile)+1 ); + regval_ctr_addvalue( val, "Separator File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); + init_unistr2( &data, "winprint", strlen("winprint")+1 ); + regval_ctr_addvalue( val, "Print Processor", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) ); /* use a prs_struct for converting the devmode and security diff --git a/source3/rpc_parse/parse_reg.c b/source3/rpc_parse/parse_reg.c index 1387aaf6ea..f3018cfb37 100644 --- a/source3/rpc_parse/parse_reg.c +++ b/source3/rpc_parse/parse_reg.c @@ -34,83 +34,13 @@ static uint32 reg_init_buffer2( BUFFER2 *buf2, REGISTRY_VALUE *val ) { - UNISTR2 unistr; uint32 real_size = 0; - char *string; - char *list = NULL; - char *list2 = NULL; - int len = 0; if ( !buf2 || !val ) return 0; - real_size = val->size; - - switch (val->type ) - { - case REG_SZ: - string = (char*)regval_data_p( val ); - DEBUG(10,("reg_init_buffer2: REG_SZ string => [%s]\n", string)); - - if ( string ) - len = strlen(string)+1; - - init_unistr2( &unistr, (char*)val->data_p, len ); - init_buffer2( buf2, (char*)unistr.buffer, unistr.uni_str_len*2 ); - real_size = unistr.uni_str_len*2; - break; - - case REG_MULTI_SZ: - string = (char*)val->data_p; - real_size = 0; - while ( string && *string ) - { - DEBUG(10,("reg_init_buffer2: REG_MULTI_SZ string => [%s], size => [%d]\n", string, real_size )); - - init_unistr2( &unistr, string, strlen(string)+1 ); - - list2 = Realloc( list, real_size + unistr.uni_str_len*2 ); - if ( !list2 ) - break; - list = list2; - - memcpy( list+real_size, unistr.buffer, unistr.uni_str_len*2 ); - - real_size += unistr.uni_str_len*2; - - string += strlen(string)+1; - } - - list2 = Realloc( list, real_size + 2 ); - if ( !list2 ) - break; - list = list2; - list[real_size++] = 0x0; - list[real_size++] = 0x0; - - init_buffer2( buf2, (char*)list, real_size ); - - DEBUG(10,("reg_init_buffer2: REG_MULTI_SZ size => [%d]\n", real_size )); - - break; - - case REG_BINARY: - DEBUG(10,("reg_init_buffer2: REG_BINARY size => [%d]\n", val->size )); - - init_buffer2( buf2, val->data_p, val->size ); - break; - - case REG_DWORD: - DEBUG(10,("reg_init_buffer2: REG_DWORD value => [%d]\n", *(uint32*)val->data_p)); - init_buffer2( buf2, val->data_p, val->size ); - break; - - default: - DEBUG(0,("reg_init_buffer2: Unsupported registry data type [%d]\n", val->type)); - break; - } - - SAFE_FREE( list ); + real_size = regval_size(val); + init_buffer2( buf2, (char*)regval_data_p(val), real_size ); return real_size; } diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index d1f92aef13..c4105f9780 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -7911,7 +7911,7 @@ done: WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u, SPOOL_R_SETPRINTERDATAEX *r_u) { - POLICY_HND *handle = &q_u->handle; + POLICY_HND *handle = &q_u->handle; uint32 type = q_u->type; uint8 *data = q_u->data; uint32 real_len = q_u->real_len; -- cgit From bf544f12f53ad19919d660bd15028a5ed1eda8a1 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 30 Aug 2002 17:22:33 +0000 Subject: Added attribute specific OPEN tests (for SYSTEM and HIDDEN). Jeremy. (This used to be commit 4eeef6ef530acf1cc4e08e24af902c15af57ece7) --- source3/torture/torture.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/source3/torture/torture.c b/source3/torture/torture.c index e7a8eb04b6..89d62b44a6 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -3417,6 +3417,50 @@ static BOOL run_opentest(int dummy) cli_unlink(&cli1, fname); + /* Test 8 - attributes test test... */ + fnum1 = cli_nt_create_full(&cli1, fname,FILE_WRITE_DATA, FILE_ATTRIBUTE_HIDDEN, + FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0); + + if (fnum1 == -1) { + printf("test 8 open 1 of %s failed (%s)\n", fname, cli_errstr(&cli1)); + return False; + } + + if (!cli_close(&cli1, fnum1)) { + printf("test 8 close 1 of %s failed (%s)\n", fname, cli_errstr(&cli1)); + return False; + } + + /* FILE_SUPERSEDE && FILE_OVERWRITE_IF have the same effect here. */ + fnum1 = cli_nt_create_full(&cli1, fname,FILE_READ_DATA, FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL, + FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0); + + if (fnum1 == -1) { + printf("test 8 open 2 of %s failed (%s)\n", fname, cli_errstr(&cli1)); + return False; + } + + if (!cli_close(&cli1, fnum1)) { + printf("test 8 close 2 of %s failed (%s)\n", fname, cli_errstr(&cli1)); + return False; + } + + /* This open should fail with ACCESS_DENIED for FILE_SUPERSEDE, FILE_OVERWRITE and FILE_OVERWRITE_IF. */ + fnum1 = cli_nt_create_full(&cli1, fname,FILE_READ_DATA, FILE_ATTRIBUTE_NORMAL, + FILE_SHARE_NONE, FILE_OVERWRITE, 0); + + if (fnum1 != -1) { + printf("test 8 open 3 of %s succeeded - should have failed with (NT_STATUS_ACCESS_DENIED)\n", fname); + correct = False; + cli_close(&cli1, fnum1); + } else { + printf("test 8 open 3 of %s gave %s (correct error should be %s)\n", fname, cli_errstr(&cli1), "ACCESS_DENIED"); + } + + printf("Attribute open test #8 passed.\n"); + + cli_unlink(&cli1, fname); + if (!torture_close_connection(&cli1)) { correct = False; } -- cgit From 85c9ee4ddb9c03f017b2ba559351757dc7b0cf40 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 30 Aug 2002 18:01:26 +0000 Subject: Put PRINTER_DRIVER back in (This used to be commit 0a92c4db1fed6eff577a67e9c4fd54bd4fe4afac) --- docs/textdocs/outdated/PRINTER_DRIVER.txt | 240 ++++++++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 docs/textdocs/outdated/PRINTER_DRIVER.txt diff --git a/docs/textdocs/outdated/PRINTER_DRIVER.txt b/docs/textdocs/outdated/PRINTER_DRIVER.txt new file mode 100644 index 0000000000..5bf82e0cfe --- /dev/null +++ b/docs/textdocs/outdated/PRINTER_DRIVER.txt @@ -0,0 +1,240 @@ +!== +!== PRINTER_DRIVER.txt for Samba release 2.0.4 18 May 1999 +!== +========================================================================== + Supporting the famous PRINTER$ share + + Jean-Francois.Micouleau@utc.fr, 10/26/97 + modified by herb@sgi.com 1/2/98 + +=========================================================================== + +Disclaimer: + + This ONLY works with Windows 95 + It does NOT work with Windows NT 4 + + +Goal: + + When you click on a samba shared printer, you can now install the driver + automatically onto the Windows 95 machine, as you would from an NT server. + +How To: + + It's a three step config. + + First, create a new directory, where you will put the driver files, and + make a share in smb.conf pointing to it. + + Example: + + [printer$] + path=/usr/local/samba/printer + public=yes + writable=no + browseable=yes + + Second, you have to build the list of drivers required for a specific + printer. This is the most complicated thing to do. Get the files + 'msprint.inf' and 'msprint2.inf' from Windows 95, the easiest way is to + grab them from a working Windows 95 computer. They are usually located + in 'c:\windows\inf'. Look in them for the printer you have. Run the new + program 'make_printerdef' with the file name and the printer name as + parameters. If you have drivers for an unsupported or updated printer, + first install these drivers on an Windows 95 system. There will be a + file created in your inf directory named 'oem?.inf' (where the ? is some + number). Use this file instead of msprint.inf. + + Example: (from the /usr/local/samba/lib directory) + + make_printerdef msprint.inf "Apple LaserWriter" >> printers.def + + The program will print out a list of required files to stderr. + Copy all the files listed into the directory you created in step 1. + If you have "preserve case = yes" make sure your files names match + EXACTLY the names listed. + + Third, you need to add 2 new parameters in smb.conf. One is in the + [global] section, called 'printer driver file' pointing to the printer + description file you just created, and the other in each printer share, + called 'printer driver location' pointing to where the client will get + the drivers. Don't forget to set correctly the printer driver parameter + to the Windows printer name. + + Example: + + [global] + printer driver file=/usr/local/samba/lib/printers.def + + [lp] + comment = My old printer laser + browseable = yes + printable = yes + public = yes + writable = no + create mode = 0700 + printer driver=Apple LaserWriter + printer driver location=\\%h\PRINTER$ + + %h will expand to the computer name, and PRINTER$ is the name of the + share created in step one. + + +If it doesn't work for you, don't send flame ! It worked for me. In case of +trouble don't hesitate to send me a mail with your smb.conf file and +printers.def + + +******* added by herb@sgi.com + +For those of you who like to know the details, and in case I have guessed +wrong on some of the fields - The following is the format of the entries +in the printers.def file: (entries are 1 single line - they are split here +for readability) + +:::: +:: + +The and the can be empty. +If no or are specified in the inf file, +these will default to the section name for the printer. + +The following is an excerpt from the MSPRINT2.INF file on a WIN95 machine. +I have deleted all but the entries relating to installing a driver for the +"QMS ColorScript 100 Model 30" printer. Using this "file" I'll try to +explain how the printers.def file is created. + +make_printerdef is run with the first argument being the name of this +file (MSPRINT2.INF in this case) and the second argument being the +name of the printer ("QMS ColorScript 100 Model 30" in this case). + +The printer name is first found in the "Model section" to obtain the +name of the "Installer Section" (this is the name after the equal sign). +We ignore the alternate name. + +The "Installer Section" contains entries for "CopyFiles" and "DataSection". +The "CopyFiles" line gives a list of all the required files for this +printer. If the name begins with an @ it is the name of a file (after +you strip off the @), otherwise it is the name of a "Copy Section" which +in turn is a list of files required. This printer has one file listed +"QCS30503.SPD" and two sections "COLOR_QMS_100_30" and "PSCRIPT". The +"COLOR_QMS_100_30" section is listed in the "[DestinationDirs]" as +having a value of 23. This means that all files listed in this section +should go into the "color" subdirectory. The list of files to copy for +this printer is thus: + +QCS30503.SPD,color\QMS10030.ICM,PSCRIPT.DRV,PSCRIPT.HLP,PSCRIPT.INI, +TESTPS.TXT,APPLE380.SPD,FONTS.MFM,ICONLIB.DLL,PSMON.DLL + +From the "Data Section" we obtain values for "DriverFile", "HelpFile", +and "LanguageMonitor". The % around the value for "LanguageMonitor" +indicates that it is a string that can be localized so its actual value +is obtained from the "[Strings]" section. The "Data Section" could also +have contained an entry for "DefaultDataType". + +Using the information we have obtained we can now construct the entry +for the printers.def file. + + -> QMS ColorScript 100 Model 30 (name given + on the command line) + -> PSCRIPT.DRV (given in Data Section) + -> QCS30503.SPD (defaults to Install Section name) + -> PSCRIPT.HLP (given in Data Section) + -> PostScript Language Monitor (given in Data Section) + -> RAW (default if not specified) + + +So.... the enty (actually one line but split here for readability) would +be: + +QMS ColorScript 100 Model 30:PSCRIPT.DRV:QCS30503.SPD: +PSCRIPT.HLP:PostScript Language Monitor:RAW: +QCS30503.SPD,color\QMS10030.ICM,PSCRIPT.DRV,PSCRIPT.HLP,PSCRIPT.INI, +TESTPS.TXT,APPLE380.SPD,FONTS.MFM,ICONLIB.DLL,PSMON.DLL + +---------------------- Info from MSPRINT2.INF ------------------------ +; +; The Manufacturer section lists all of the manufacturers that we will +; display in the Dialog box + +[Manufacturer] +"QMS" + + +; +; Model sections. Each section here corresponds with an entry listed in the +; [Manufacturer] section, above. The models will be displayed in the order +; that they appear in the INF file. +; +; Each model lists a variation of its own name as a compatible ID. This +; is done primarily as an optimization during upgrade. +; +[QMS] +"QMS ColorScript 100 Model 30" = QCS30503.SPD,QMS_ColorScript_100_Model_30 + + +; +; Installer Sections +; +; These sections control file installation, and reference all files that +; need to be copied. The section name will be assumed to be the driver +; file, unless there is an explicit DriverFile section listed. +; +[QCS30503.SPD] +CopyFiles=@QCS30503.SPD,COLOR_QMS_100_30,PSCRIPT +DataSection=PSCRIPT_DATA + +; Copy Sections +; +; Lists of files that are actually copied. These sections are referenced +; from the installer sections, above. Only create a section if it contains +; two or more files (if we only copy a single file, identify it in the +; installer section, using the @filename notation) or if it's a color +; profile (since the DestinationDirs can only handle sections, and not +; individual files). +; +[COLOR_QMS_100_30] +QMS10030.ICM + +[PSCRIPT] +PSCRIPT.DRV +PSCRIPT.HLP +PSCRIPT.INI +TESTPS.TXT +APPLE380.SPD +FONTS.MFM +ICONLIB.DLL +PSMON.DLL + + +; +; Data Sections +; +; These sections contain data that is shared between devices. +; +[PSCRIPT_DATA] +DriverFile=PSCRIPT.DRV +HelpFile=PSCRIPT.HLP +LanguageMonitor=%PS_MONITOR% + + +; +; Color profiles go to the colors directory. All other files go to the +; system directory +; + +[DestinationDirs] +DefaultDestDir=11 +COLOR_QMS_100_30=23 +COLOR_TEKTRONIX_200I=23 +COLOR_TEKTRONIX_III_PXI=23 + + +; +; Localizable Strings +; +[Strings] +MS="Microsoft" +PS_MONITOR="PostScript Language Monitor,PSMON.DLL" + -- cgit From 0b9bf47fda49b743b8b7335d121517709a33ae0f Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 30 Aug 2002 18:56:00 +0000 Subject: Better error reporting on OPEN test. Jeremy. (This used to be commit 4e836c4ce2b51e42ab4f29c6c916fe6a73a58654) --- source3/torture/torture.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 89d62b44a6..977591bc53 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -844,7 +844,7 @@ static BOOL run_locktest1(int dummy) printf("error: This server appears not to support timed lock requests\n"); } printf("server slept for %u seconds for a %u second timeout\n", - t2-t1, lock_timeout); + (unsigned int)(t2-t1), lock_timeout); if (!cli_close(&cli1, fnum2)) { printf("close1 failed (%s)\n", cli_errstr(&cli1)); @@ -3454,7 +3454,9 @@ static BOOL run_opentest(int dummy) correct = False; cli_close(&cli1, fnum1); } else { - printf("test 8 open 3 of %s gave %s (correct error should be %s)\n", fname, cli_errstr(&cli1), "ACCESS_DENIED"); + if (check_error(__LINE__, &cli1, ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED)) { + printf("correct error code NT_STATUS_ACCESS_DENIED/ERRDOS:ERRnoaccess returned\n"); + } } printf("Attribute open test #8 passed.\n"); -- cgit From 39e21d4ef21152724f2fff573f88ee25216aef0e Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Fri, 30 Aug 2002 18:56:46 +0000 Subject: off by one in writing to malloced array. this fixes smbd crash I saw at the CIFS conference - finally got purify working (This used to be commit cf9bb66aa9c3217cb8394058c65c84ffc6ae269a) --- source3/auth/auth_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index 118126a275..5ae942fac7 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -980,8 +980,8 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, /* and create (by appending rids) the 'domain' sids */ for (i = 0; i < info3->num_groups2; i++) { - sid_copy(&all_group_SIDs[i+n_lgroupSIDs+1], &(info3->dom_sid.sid)); - if (!sid_append_rid(&all_group_SIDs[i+n_lgroupSIDs+1], info3->gids[i].g_rid)) { + sid_copy(&all_group_SIDs[i+n_lgroupSIDs], &(info3->dom_sid.sid)); + if (!sid_append_rid(&all_group_SIDs[i+n_lgroupSIDs], info3->gids[i].g_rid)) { nt_status = NT_STATUS_INVALID_PARAMETER; DEBUG(3,("create_nt_token_info3: could not append additional group rid 0x%x\n", info3->gids[i].g_rid)); -- cgit From fcdecb7c29a4ae6d48e7cdf61dae43f06c2e930a Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 30 Aug 2002 18:57:23 +0000 Subject: Correctly fail opens with mismatching SYSTEM or HIDDEN attributes if we are mapping system or hidden. Jeremy. (This used to be commit bd1e3df9ffa0717f26696a222e5ec6a0198b3352) --- source3/smbd/open.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 8c6e8ed805..47e859d04b 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -679,6 +679,31 @@ static void kernel_flock(files_struct *fsp, int deny_mode) } +static BOOL open_match_attributes(connection_struct *conn, char *path, mode_t existing_mode, mode_t new_mode) +{ + uint32 old_dos_mode, new_dos_mode; + SMB_STRUCT_STAT sbuf; + + ZERO_STRUCT(sbuf); + + sbuf.st_mode = existing_mode; + old_dos_mode = dos_mode(conn, path, &sbuf); + + sbuf.st_mode = new_mode; + new_dos_mode = dos_mode(conn, path, &sbuf); + + /* If we're mapping SYSTEM and HIDDEN ensure they match. */ + if (lp_map_system(SNUM(conn))) { + if ((old_dos_mode & FILE_ATTRIBUTE_SYSTEM) != (new_dos_mode & FILE_ATTRIBUTE_SYSTEM)) + return False; + } + if (lp_map_hidden(SNUM(conn))) { + if ((old_dos_mode & FILE_ATTRIBUTE_HIDDEN) != (new_dos_mode & FILE_ATTRIBUTE_HIDDEN)) + return False; + } + return True; +} + /**************************************************************************** Open a file with a share mode. On output from this open we are guarenteeing that @@ -773,6 +798,17 @@ files_struct *open_file_shared1(connection_struct *conn,char *fname, SMB_STRUCT_ if (CAN_WRITE(conn) && (GET_FILE_OPEN_DISPOSITION(ofun) == FILE_EXISTS_TRUNCATE)) flags2 |= O_TRUNC; + /* We only care about matching attributes on file exists and truncate. */ + if (file_existed && (GET_FILE_OPEN_DISPOSITION(ofun) == FILE_EXISTS_TRUNCATE)) { + if (!open_match_attributes(conn, fname, psbuf->st_mode, mode)) { + DEBUG(5,("open_file_shared: attributes missmatch for file %s (0%o, 0%o)\n", + fname, psbuf->st_mode, mode )); + file_free(fsp); + errno = EACCES; + return NULL; + } + } + if (GET_FILE_OPEN_DISPOSITION(ofun) == FILE_EXISTS_FAIL) flags2 |= O_EXCL; -- cgit From 8e33a5d6cc45d15f5c9088ce896132aa288d7700 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 30 Aug 2002 19:06:07 +0000 Subject: Correct error message. Jeremy. (This used to be commit e9392c4a2e1e1ce44fcd1a1105477c17a3410f14) --- source3/torture/torture.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 977591bc53..047b4c7a24 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -3459,7 +3459,7 @@ static BOOL run_opentest(int dummy) } } - printf("Attribute open test #8 passed.\n"); + printf("Attribute open test #8 %s.\n", correct ? "passed" : "failed"); cli_unlink(&cli1, fname); -- cgit From 35b7dfaa203689f761d38d7d243b4f335543bf4c Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 30 Aug 2002 19:29:59 +0000 Subject: Fix bug with stat mode open being done on read-only open with truncate. Jeremy. (This used to be commit 18b9cbd857177a911ef95c9322bdf0709161cd84) --- source3/smbd/open.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 47e859d04b..8cc73a681d 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -139,18 +139,20 @@ static BOOL open_file(files_struct *fsp,connection_struct *conn, * as we always opened files read-write in that release. JRA. */ - if ((accmode == O_RDONLY) && ((flags & O_TRUNC) == O_TRUNC)) + if ((accmode == O_RDONLY) && ((flags & O_TRUNC) == O_TRUNC)) { + DEBUG(10,("open_file: truncate requested on read-only open for file %s\n",fname )); local_flags = (flags & ~O_ACCMODE)|O_RDWR; + } - /* - * We can't actually truncate here as the file may be locked. - * open_file_shared will take care of the truncate later. JRA. - */ + if ((desired_access & (FILE_READ_DATA|FILE_WRITE_DATA|FILE_APPEND_DATA|FILE_EXECUTE)) || + (local_flags & O_CREAT) || ((local_flags & O_TRUNC) == O_TRUNC) ) { - local_flags &= ~O_TRUNC; + /* + * We can't actually truncate here as the file may be locked. + * open_file_shared will take care of the truncate later. JRA. + */ - if ((desired_access & (FILE_READ_DATA|FILE_WRITE_DATA|FILE_APPEND_DATA|FILE_EXECUTE)) || - (local_flags & O_CREAT)) { + local_flags &= ~O_TRUNC; /* actually do the open */ fsp->fd = fd_open(conn, fname, local_flags, mode); -- cgit From 724d1c3d2d04f706c4d0f13c0b59b598bdb10807 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 30 Aug 2002 23:56:37 +0000 Subject: Add a fix for 'query_disp_info level 2', which should return all machines in the DC's SAM. We were only returning workstations, not PDCs or BDCs. Win2k's 'Computer Manager' tool uses this to list all computers in the domain (as opposed to using NetBIOS). Andrew Bartlett (This used to be commit 004090edffef6cc04c286b9924b8c47ea3260ef2) --- source3/rpc_server/srv_samr_nt.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c index ee4335cb0a..927acb24b8 100644 --- a/source3/rpc_server/srv_samr_nt.c +++ b/source3/rpc_server/srv_samr_nt.c @@ -198,7 +198,7 @@ static void samr_clear_sam_passwd(SAM_ACCOUNT *sam_pass) } -static NTSTATUS load_sampwd_entries(struct samr_info *info, uint16 acb_mask) +static NTSTATUS load_sampwd_entries(struct samr_info *info, uint16 acb_mask, BOOL all_machines) { SAM_ACCOUNT *pwd = NULL; DISP_USER_INFO *pwd_array = NULL; @@ -221,10 +221,19 @@ static NTSTATUS load_sampwd_entries(struct samr_info *info, uint16 acb_mask) for (; (NT_STATUS_IS_OK(nt_status = pdb_init_sam_talloc(mem_ctx, &pwd))) && pdb_getsampwent(pwd) == True; pwd=NULL) { - if (acb_mask != 0 && !(pdb_get_acct_ctrl(pwd) & acb_mask)) { - pdb_free_sam(&pwd); - DEBUG(5,(" acb_mask %x reject\n", acb_mask)); - continue; + if (all_machines) { + if (!((pdb_get_acct_ctrl(pwd) & ACB_WSTRUST) + || (pdb_get_acct_ctrl(pwd) & ACB_SVRTRUST))) { + DEBUG(5,("load_sampwd_entries: '%s' is not a machine account - ACB: %x - skipping\n", pdb_get_username(pwd), acb_mask)); + pdb_free_sam(&pwd); + continue; + } + } else { + if (acb_mask != 0 && !(pdb_get_acct_ctrl(pwd) & acb_mask)) { + pdb_free_sam(&pwd); + DEBUG(5,(" acb_mask %x reject\n", acb_mask)); + continue; + } } /* Realloc some memory for the array of ptr to the SAM_ACCOUNT structs */ @@ -746,7 +755,7 @@ NTSTATUS _samr_enum_dom_users(pipes_struct *p, SAMR_Q_ENUM_DOM_USERS *q_u, DEBUG(5,("_samr_enum_dom_users: %d\n", __LINE__)); become_root(); - r_u->status=load_sampwd_entries(info, q_u->acb_mask); + r_u->status=load_sampwd_entries(info, q_u->acb_mask, False); unbecome_root(); if (!NT_STATUS_IS_OK(r_u->status)) @@ -1100,7 +1109,6 @@ NTSTATUS _samr_query_dispinfo(pipes_struct *p, SAMR_Q_QUERY_DISPINFO *q_u, { struct samr_info *info = NULL; uint32 struct_size=0x20; /* W2K always reply that, client doesn't care */ - uint16 acb_mask; uint32 max_entries=q_u->max_entries; uint32 enum_context=q_u->start_idx; @@ -1151,20 +1159,14 @@ NTSTATUS _samr_query_dispinfo(pipes_struct *p, SAMR_Q_QUERY_DISPINFO *q_u, * JFM, 12/20/2001 */ - /* Get what we need from the password database */ - - if (q_u->switch_level==2) - acb_mask = ACB_WSTRUST; - else - acb_mask = ACB_NORMAL; - /* Get what we need from the password database */ switch (q_u->switch_level) { case 0x1: case 0x2: case 0x4: become_root(); - r_u->status=load_sampwd_entries(info, acb_mask); + /* Level 2 is for all machines, otherwise only 'normal' users */ + r_u->status=load_sampwd_entries(info, ACB_NORMAL, q_u->switch_level==2); unbecome_root(); if (!NT_STATUS_IS_OK(r_u->status)) { DEBUG(5, ("_samr_query_dispinfo: load_sampwd_entries failed\n")); @@ -2083,7 +2085,7 @@ NTSTATUS _samr_query_dom_info(pipes_struct *p, SAMR_Q_QUERY_DOMAIN_INFO *q_u, SA break; case 0x02: become_root(); - r_u->status=load_sampwd_entries(info, ACB_NORMAL); + r_u->status=load_sampwd_entries(info, ACB_NORMAL, False); unbecome_root(); if (!NT_STATUS_IS_OK(r_u->status)) { DEBUG(5, ("_samr_query_dispinfo: load_sampwd_entries failed\n")); @@ -4247,10 +4249,10 @@ NTSTATUS _samr_unknown_2e(pipes_struct *p, SAMR_Q_UNKNOWN_2E *q_u, SAMR_R_UNKNOW break; case 0x02: become_root(); - r_u->status=load_sampwd_entries(info, ACB_NORMAL); + r_u->status=load_sampwd_entries(info, ACB_NORMAL, False); unbecome_root(); if (!NT_STATUS_IS_OK(r_u->status)) { - DEBUG(5, ("_samr_query_dispinfo: load_sampwd_entries failed\n")); + DEBUG(5, ("_samr_unknown_2e: load_sampwd_entries failed\n")); return r_u->status; } num_users=info->disp_info.num_user_account; @@ -4258,7 +4260,7 @@ NTSTATUS _samr_unknown_2e(pipes_struct *p, SAMR_Q_UNKNOWN_2E *q_u, SAMR_R_UNKNOW r_u->status=load_group_domain_entries(info, get_global_sam_sid()); if (NT_STATUS_IS_ERR(r_u->status)) { - DEBUG(5, ("_samr_query_dispinfo: load_group_domain_entries failed\n")); + DEBUG(5, ("_samr_unknown_2e: load_group_domain_entries failed\n")); return r_u->status; } num_groups=info->disp_info.num_group_account; -- cgit From 40e9d9a54ef65f6e2f54ce3361108e17c0eb8b8f Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 31 Aug 2002 06:38:27 +0000 Subject: Avoid writing unitialised bytes to the wire (and consequent valgrind warnings) by zeroing them out if they don't have meaning. Andrew Bartlett (This used to be commit 52db44b5c01e16923393b0ec9a8d0f530be7bb2d) --- source3/rpc_parse/parse_reg.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source3/rpc_parse/parse_reg.c b/source3/rpc_parse/parse_reg.c index f3018cfb37..2698e82440 100644 --- a/source3/rpc_parse/parse_reg.c +++ b/source3/rpc_parse/parse_reg.c @@ -1701,7 +1701,11 @@ BOOL reg_io_q_open_entry(char *desc, REG_Q_OPEN_ENTRY *r_q, prs_struct *ps, int void init_reg_r_open_entry(REG_R_OPEN_ENTRY *r_r, POLICY_HND *pol, NTSTATUS status) { - memcpy(&r_r->pol, pol, sizeof(r_r->pol)); + if (NT_STATUS_IS_OK(status)) { + memcpy(&r_r->pol, pol, sizeof(r_r->pol)); + } else { + ZERO_STRUCT(r_r->pol); + } r_r->status = status; } -- cgit From 7aca67c3e90b55e590d8741d3c24bc37b45120b7 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 31 Aug 2002 06:59:00 +0000 Subject: Add a bit of 'const' and move a lot of our 'repeditive' DEBUG() statements to 'DEBUGADD', so we don't repeat headers. (Makes them much easier to read). (Based on patch by kai) Andrew Bartlett (This used to be commit 9deada345c5f89f338530c4de62835cc1eeb3d0e) --- source3/lib/util.c | 83 +++++++++++++++++++++------------------------ source3/lib/util_seaccess.c | 19 ++++++----- source3/libsmb/clispnego.c | 34 ++++++++++--------- source3/smbd/sesssetup.c | 2 -- 4 files changed, 67 insertions(+), 71 deletions(-) diff --git a/source3/lib/util.c b/source3/lib/util.c index 377457a714..51b92568b4 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -260,8 +260,8 @@ void show_msg(char *buf) int i; int bcc=0; - if (DEBUGLEVEL < 5) return; - + if (!DEBUGLVL(5)) return; + DEBUG(5,("size=%d\nsmb_com=0x%x\nsmb_rcls=%d\nsmb_reh=%d\nsmb_err=%d\nsmb_flg=%d\nsmb_flg2=%d\n", smb_len(buf), (int)CVAL(buf,smb_com), @@ -270,31 +270,26 @@ void show_msg(char *buf) (int)SVAL(buf,smb_err), (int)CVAL(buf,smb_flg), (int)SVAL(buf,smb_flg2))); - DEBUG(5,("smb_tid=%d\nsmb_pid=%d\nsmb_uid=%d\nsmb_mid=%d\nsmt_wct=%d\n", + DEBUGADD(5,("smb_tid=%d\nsmb_pid=%d\nsmb_uid=%d\nsmb_mid=%d\n", (int)SVAL(buf,smb_tid), (int)SVAL(buf,smb_pid), (int)SVAL(buf,smb_uid), - (int)SVAL(buf,smb_mid), - (int)CVAL(buf,smb_wct))); + (int)SVAL(buf,smb_mid))); + DEBUGADD(5,("smt_wct=%d\n",(int)CVAL(buf,smb_wct))); for (i=0;i<(int)CVAL(buf,smb_wct);i++) - { - DEBUG(5,("smb_vwv[%d]=%d (0x%X)\n",i, + DEBUGADD(5,("smb_vwv[%2d]=%5d (0x%X)\n",i, SVAL(buf,smb_vwv+2*i),SVAL(buf,smb_vwv+2*i))); - } - + bcc = (int)SVAL(buf,smb_vwv+2*(CVAL(buf,smb_wct))); - DEBUG(5,("smb_bcc=%d\n",bcc)); + DEBUGADD(5,("smb_bcc=%d\n",bcc)); if (DEBUGLEVEL < 10) return; - if (DEBUGLEVEL < 50) - { - bcc = MIN(bcc, 512); - } + if (DEBUGLEVEL < 50) bcc = MIN(bcc, 512); - dump_data(10, smb_buf(buf), bcc); + dump_data(10, smb_buf(buf), bcc); } /******************************************************************* @@ -1574,35 +1569,35 @@ void print_asc(int level, const unsigned char *buf,int len) void dump_data(int level, const char *buf1,int len) { - const unsigned char *buf = (const unsigned char *)buf1; - int i=0; - if (len<=0) return; - - DEBUG(level,("[%03X] ",i)); - for (i=0;i8) DEBUG(level,(" ")); - while (n--) DEBUG(level,(" ")); - - n = MIN(8,i%16); - print_asc(level,&buf[i-(i%16)],n); DEBUG(level,(" ")); - n = (i%16) - n; - if (n>0) print_asc(level,&buf[i-n],n); - DEBUG(level,("\n")); - } + const unsigned char *buf = (const unsigned char *)buf1; + int i=0; + if (len<=0) return; + + if (!DEBUGLVL(level)) return; + + DEBUGADD(level,("[%03X] ",i)); + for (i=0;i8) DEBUGADD(level,(" ")); + while (n--) DEBUGADD(level,(" ")); + n = MIN(8,i%16); + print_asc(level,&buf[i-(i%16)],n); DEBUGADD(level,( " " )); + n = (i%16) - n; + if (n>0) print_asc(level,&buf[i-n],n); + DEBUGADD(level,("\n")); + } } char *tab_depth(int depth) diff --git a/source3/lib/util_seaccess.c b/source3/lib/util_seaccess.c index 87711ff5ad..b137023e55 100644 --- a/source3/lib/util_seaccess.c +++ b/source3/lib/util_seaccess.c @@ -44,7 +44,7 @@ static BOOL token_sid_in_ace(const NT_USER_TOKEN *token, const SEC_ACE *ace) bits not yet granted. Zero means permission allowed (no more needed bits). **********************************************************************************/ -static uint32 check_ace(SEC_ACE *ace, NT_USER_TOKEN *token, uint32 acc_desired, +static uint32 check_ace(SEC_ACE *ace, const NT_USER_TOKEN *token, uint32 acc_desired, NTSTATUS *status) { uint32 mask = ace->info.mask; @@ -104,7 +104,7 @@ static uint32 check_ace(SEC_ACE *ace, NT_USER_TOKEN *token, uint32 acc_desired, include other bits requested. **********************************************************************************/ -static BOOL get_max_access( SEC_ACL *the_acl, NT_USER_TOKEN *token, uint32 *granted, +static BOOL get_max_access( SEC_ACL *the_acl, const NT_USER_TOKEN *token, uint32 *granted, uint32 desired, NTSTATUS *status) { @@ -264,12 +264,13 @@ BOOL se_access_check(SEC_DESC *sd, const NT_USER_TOKEN *token, } /* The user sid is the first in the token */ - - DEBUG(3, ("se_access_check: user sid is %s\n", sid_to_string(sid_str, &token->user_sids[PRIMARY_USER_SID_INDEX]) )); - - for (i = 1; i < token->num_sids; i++) { - DEBUG(3, ("se_access_check: also %s\n", - sid_to_string(sid_str, &token->user_sids[i]))); + if (DEBUGLVL(3)) { + DEBUG(3, ("se_access_check: user sid is %s\n", sid_to_string(sid_str, &token->user_sids[PRIMARY_USER_SID_INDEX]) )); + + for (i = 1; i < token->num_sids; i++) { + DEBUGADD(3, ("se_access_check: also %s\n", + sid_to_string(sid_str, &token->user_sids[i]))); + } } /* Is the token the owner of the SID ? */ @@ -299,7 +300,7 @@ BOOL se_access_check(SEC_DESC *sd, const NT_USER_TOKEN *token, for ( i = 0 ; i < the_acl->num_aces && tmp_acc_desired != 0; i++) { SEC_ACE *ace = &the_acl->ace[i]; - DEBUG(10,("se_access_check: ACE %u: type %d, flags = 0x%02x, SID = %s mask = %x, current desired = %x\n", + DEBUGADD(10,("se_access_check: ACE %u: type %d, flags = 0x%02x, SID = %s mask = %x, current desired = %x\n", (unsigned int)i, ace->type, ace->flags, sid_to_string(sid_str, &ace->trustee), (unsigned int) ace->info.mask, diff --git a/source3/libsmb/clispnego.c b/source3/libsmb/clispnego.c index 1eeae8b171..fc25436d10 100644 --- a/source3/libsmb/clispnego.c +++ b/source3/libsmb/clispnego.c @@ -686,37 +686,39 @@ BOOL msrpc_parse(DATA_BLOB *blob, void debug_ntlmssp_flags(uint32 neg_flags) { + DEBUG(3,("Got NTLMSSP neg_flags=0x%08x\n", neg_flags)); + if (neg_flags & NTLMSSP_NEGOTIATE_UNICODE) - DEBUG(4, (" NTLMSSP_NEGOTIATE_UNICODE\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_UNICODE\n")); if (neg_flags & NTLMSSP_NEGOTIATE_OEM) - DEBUG(4, (" NTLMSSP_NEGOTIATE_OEM\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_OEM\n")); if (neg_flags & NTLMSSP_REQUEST_TARGET) - DEBUG(4, (" NTLMSSP_REQUEST_TARGET\n")); + DEBUGADD(4, (" NTLMSSP_REQUEST_TARGET\n")); if (neg_flags & NTLMSSP_NEGOTIATE_SIGN) - DEBUG(4, (" NTLMSSP_NEGOTIATE_SIGN\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_SIGN\n")); if (neg_flags & NTLMSSP_NEGOTIATE_SEAL) - DEBUG(4, (" NTLMSSP_NEGOTIATE_SEAL\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_SEAL\n")); if (neg_flags & NTLMSSP_NEGOTIATE_LM_KEY) - DEBUG(4, (" NTLMSSP_NEGOTIATE_LM_KEY\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_LM_KEY\n")); if (neg_flags & NTLMSSP_NEGOTIATE_NETWARE) - DEBUG(4, (" NTLMSSP_NEGOTIATE_NETWARE\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_NETWARE\n")); if (neg_flags & NTLMSSP_NEGOTIATE_NTLM) - DEBUG(4, (" NTLMSSP_NEGOTIATE_NTLM\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_NTLM\n")); if (neg_flags & NTLMSSP_NEGOTIATE_DOMAIN_SUPPLIED) - DEBUG(4, (" NTLMSSP_NEGOTIATE_DOMAIN_SUPPLIED\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_DOMAIN_SUPPLIED\n")); if (neg_flags & NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED) - DEBUG(4, (" NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED\n")); if (neg_flags & NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL) - DEBUG(4, (" NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL\n")); if (neg_flags & NTLMSSP_NEGOTIATE_ALWAYS_SIGN) - DEBUG(4, (" NTLMSSP_NEGOTIATE_ALWAYS_SIGN\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_ALWAYS_SIGN\n")); if (neg_flags & NTLMSSP_NEGOTIATE_NTLM2) - DEBUG(4, (" NTLMSSP_NEGOTIATE_NTLM2\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_NTLM2\n")); if (neg_flags & NTLMSSP_CHAL_TARGET_INFO) - DEBUG(4, (" NTLMSSP_CHAL_TARGET_INFO\n")); + DEBUGADD(4, (" NTLMSSP_CHAL_TARGET_INFO\n")); if (neg_flags & NTLMSSP_NEGOTIATE_128) - DEBUG(4, (" NTLMSSP_NEGOTIATE_128\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_128\n")); if (neg_flags & NTLMSSP_NEGOTIATE_KEY_EXCH) - DEBUG(4, (" NTLMSSP_NEGOTIATE_KEY_EXCH\n")); + DEBUGADD(4, (" NTLMSSP_NEGOTIATE_KEY_EXCH\n")); } diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index a49982dcfe..c37c655fd1 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -294,8 +294,6 @@ static int reply_spnego_negotiate(connection_struct *conn, return ERROR_NT(NT_STATUS_LOGON_FAILURE); } - DEBUG(3,("Got neg_flags=0x%08x\n", neg_flags)); - debug_ntlmssp_flags(neg_flags); if (ntlmssp_auth_context) { -- cgit From 110954e8e1c8025831d2c7621ac4a21679e60a1e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 31 Aug 2002 08:51:38 +0000 Subject: Add a dash of static. (This used to be commit e3af3adac1a01842bc5242e68393196497a1d71c) --- source3/libsmb/clierror.c | 4 ++-- source3/libsmb/nterr.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source3/libsmb/clierror.c b/source3/libsmb/clierror.c index 591c04db22..e1507c6048 100644 --- a/source3/libsmb/clierror.c +++ b/source3/libsmb/clierror.c @@ -156,7 +156,7 @@ void cli_dos_error(struct cli_state *cli, uint8 *eclass, uint32 *ecode) /* Return a UNIX errno from a dos error class, error number tuple */ -int cli_errno_from_dos(uint8 eclass, uint32 num) +static int cli_errno_from_dos(uint8 eclass, uint32 num) { if (eclass == ERRDOS) { switch (num) { @@ -205,7 +205,7 @@ static struct { {NT_STATUS(0), 0} }; -int cli_errno_from_nt(NTSTATUS status) +static int cli_errno_from_nt(NTSTATUS status) { int i; DEBUG(10,("cli_errno_from_nt: 32 bit codes: code=%08x\n", NT_STATUS_V(status))); diff --git a/source3/libsmb/nterr.c b/source3/libsmb/nterr.c index e2da6318e1..02fd53fc05 100644 --- a/source3/libsmb/nterr.c +++ b/source3/libsmb/nterr.c @@ -28,7 +28,7 @@ typedef const struct NTSTATUS nt_errcode; } nt_err_code_struct; -nt_err_code_struct nt_errs[] = +static nt_err_code_struct nt_errs[] = { { "NT_STATUS_OK", NT_STATUS_OK }, { "NT_STATUS_UNSUCCESSFUL", NT_STATUS_UNSUCCESSFUL }, -- cgit From 4cb4534dd6ca8d2eeed5419a2dcf9e28c015b6eb Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sat, 31 Aug 2002 16:17:36 +0000 Subject: Convert M_DEBUG(0 to M_DEBUG(10 for non-error cases ... (This used to be commit d5c10e7dc76216db793319f9beb99dd12441e76b) --- source3/smbd/mangle_hash2.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source3/smbd/mangle_hash2.c b/source3/smbd/mangle_hash2.c index 6b53cc72aa..a0a3d51139 100644 --- a/source3/smbd/mangle_hash2.c +++ b/source3/smbd/mangle_hash2.c @@ -200,7 +200,7 @@ static BOOL is_mangled_component(const char *name) { int len, i; - M_DEBUG(0,("is_mangled_component %s ?\n", name)); + M_DEBUG(10,("is_mangled_component %s ?\n", name)); /* check the length */ len = strlen(name); @@ -234,7 +234,7 @@ static BOOL is_mangled_component(const char *name) } } - M_DEBUG(0,("is_mangled %s -> yes\n", name)); + M_DEBUG(10,("is_mangled %s -> yes\n", name)); return True; } @@ -257,7 +257,7 @@ static BOOL is_mangled(const char *name) const char *p; const char *s; - M_DEBUG(0,("is_mangled %s ?\n", name)); + M_DEBUG(10,("is_mangled %s ?\n", name)); for (s=name; (p=strchr(s, '/')); s=p+1) { char *component = strndup(s, PTR_DIFF(p, s)); @@ -367,7 +367,7 @@ static BOOL check_cache(char *name) /* make sure that this is a mangled name from this cache */ if (!is_mangled(name)) { - M_DEBUG(0,("check_cache: %s -> not mangled\n", name)); + M_DEBUG(10,("check_cache: %s -> not mangled\n", name)); return False; } @@ -382,7 +382,7 @@ static BOOL check_cache(char *name) /* now look in the prefix cache for that hash */ prefix = cache_lookup(hash); if (!prefix) { - M_DEBUG(0,("check_cache: %s -> %08X -> not found\n", name, hash)); + M_DEBUG(10,("check_cache: %s -> %08X -> not found\n", name, hash)); return False; } @@ -395,10 +395,10 @@ static BOOL check_cache(char *name) } if (extension[0]) { - M_DEBUG(0,("check_cache: %s -> %s.%s\n", name, prefix, extension)); + M_DEBUG(10,("check_cache: %s -> %s.%s\n", name, prefix, extension)); slprintf(name, sizeof(fstring), "%s.%s", prefix, extension); } else { - M_DEBUG(0,("check_cache: %s -> %s\n", name, prefix)); + M_DEBUG(10,("check_cache: %s -> %s\n", name, prefix)); fstrcpy(name, prefix); } @@ -573,7 +573,7 @@ static void name_map(char *name, BOOL need83, BOOL cache83) cache_insert(name, prefix_len, hash); } - M_DEBUG(0,("name_map: %s -> %08X -> %s (cache=%d)\n", + M_DEBUG(10,("name_map: %s -> %08X -> %s (cache=%d)\n", name, hash, new_name, cache83)); /* and overwrite the old name */ -- cgit From 21a58f5a64e202c0daa99d6924b933f324350946 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 1 Sep 2002 07:52:54 +0000 Subject: Fix segfault in net command (This used to be commit 26bee60a419593a5afe4e48614f7f3fc414596a5) --- source3/utils/net_rpc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index cb5350b3ed..25ed337c1f 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -2141,7 +2141,7 @@ BOOL net_rpc_check(unsigned flags) /* flags (i.e. server type) may depend on command */ if (!net_find_server(flags, &server_ip, &server_name)) - goto done; + return False; ZERO_STRUCT(cli); if (cli_initialise(&cli) == False) -- cgit From 098b0b40fe8a165c16a5353be0314136de42bac2 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 1 Sep 2002 10:24:34 +0000 Subject: wrong way to handle things, bug found by kai (This used to be commit 58f912da47d18a6a548c50dc9d4298c6bec7ea0d) --- source3/lib/debug.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/source3/lib/debug.c b/source3/lib/debug.c index 65cac144cc..e20f329860 100644 --- a/source3/lib/debug.c +++ b/source3/lib/debug.c @@ -372,8 +372,7 @@ static void debug_dump_status(int level) parse the debug levels from smbcontrol. Example debug level parameter: printdrivers:7 ****************************************************************************/ -BOOL debug_parse_params(char **params, int *debuglevel_class, - BOOL *debuglevel_class_isset) +static BOOL debug_parse_params(char **params) { int i, ndx; char *class_name; @@ -386,8 +385,8 @@ BOOL debug_parse_params(char **params, int *debuglevel_class, * v.s. "all:10", this is the traditional way to set DEBUGLEVEL */ if (isdigit((int)params[0][0])) { - debuglevel_class[DBGC_ALL] = atoi(params[0]); - debuglevel_class_isset[DBGC_ALL] = True; + DEBUGLEVEL_CLASS[DBGC_ALL] = atoi(params[0]); + DEBUGLEVEL_CLASS_ISSET[DBGC_ALL] = True; i = 1; /* start processing at the next params */ } else @@ -398,8 +397,8 @@ BOOL debug_parse_params(char **params, int *debuglevel_class, if ((class_name=strtok(params[i],":")) && (class_level=strtok(NULL, "\0")) && ((ndx = debug_lookup_classname(class_name)) != -1)) { - debuglevel_class[ndx] = atoi(class_level); - debuglevel_class_isset[ndx] = True; + DEBUGLEVEL_CLASS[ndx] = atoi(class_level); + DEBUGLEVEL_CLASS_ISSET[ndx] = True; } else { DEBUG(0,("debug_parse_params: unrecognized debug class name or format [%s]\n", params[i])); return False; @@ -426,8 +425,7 @@ BOOL debug_parse_levels(const char *params_str) params = str_list_make(params_str, NULL); - if (debug_parse_params(params, DEBUGLEVEL_CLASS, - DEBUGLEVEL_CLASS_ISSET)) + if (debug_parse_params(params)) { debug_dump_status(5); str_list_free(¶ms); -- cgit From 45fc6b503eee83153074e2a55a5189260e06db06 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:37:35 +0000 Subject: Implemented some more client side spoolss functions: - getprinterdataex(), setprinterdataex(), enumprinterdataex() Pass data type down to setprinterdata() fn instead of hardcoding REG_SZ (This used to be commit 62a60782533851b3380aa0db300fa16dfe6ca72e) --- source3/rpc_client/cli_spoolss.c | 163 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 162 insertions(+), 1 deletion(-) diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index 7369e5008a..cff1f1d0a9 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -1933,6 +1933,68 @@ WERROR cli_spoolss_getprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, return result; } +WERROR cli_spoolss_getprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, + uint32 offered, uint32 *needed, + POLICY_HND *hnd, char *keyname, + char *valuename, uint32 *data_type, + char **data, uint32 *data_size) +{ + prs_struct qbuf, rbuf; + SPOOL_Q_GETPRINTERDATAEX q; + SPOOL_R_GETPRINTERDATAEX r; + WERROR result = W_ERROR(ERRgeneral); + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + /* Initialise parse structures */ + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); + + /* Initialise input parameters */ + + make_spoolss_q_getprinterdataex(&q, hnd, keyname, valuename, offered); + + /* Marshall data and send request */ + + if (!spoolss_io_q_getprinterdataex("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, SPOOLSS_GETPRINTERDATAEX, &qbuf, &rbuf)) + goto done; + + /* Unmarshall response */ + + if (!spoolss_io_r_getprinterdataex("", &r, &rbuf, 0)) + goto done; + + result = r.status; + + if (needed) + *needed = r.needed; + + if (!W_ERROR_IS_OK(r.status)) + goto done; + + /* Return output parameters */ + + if (data_type) + *data_type = r.type; + + if (data) { + *data = (char *)talloc(mem_ctx, r.needed); + memcpy(*data, r.data, r.needed); + } + + if (data_size) + *data_size = r.needed; + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} + /* Set printer data */ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, @@ -1955,7 +2017,7 @@ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Initialise input parameters */ - make_spoolss_q_setprinterdata(&q, hnd, value, data, data_size); + make_spoolss_q_setprinterdata(&q, hnd, value, data_type, data, data_size); /* Marshall data and send request */ @@ -1980,6 +2042,51 @@ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, return result; } +WERROR cli_spoolss_setprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, + POLICY_HND *hnd, char * key, char *value, + uint32 data_type, char *data, + uint32 data_size) +{ + prs_struct qbuf, rbuf; + SPOOL_Q_SETPRINTERDATAEX q; + SPOOL_R_SETPRINTERDATAEX r; + WERROR result = W_ERROR(ERRgeneral); + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + /* Initialise parse structures */ + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); + + /* Initialise input parameters */ + + make_spoolss_q_setprinterdataex(&q, hnd, key, value, data_type, data, data_size); + + /* Marshall data and send request */ + + if (!spoolss_io_q_setprinterdataex("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, SPOOLSS_SETPRINTERDATAEX, &qbuf, &rbuf)) + goto done; + + /* Unmarshall response */ + + if (!spoolss_io_r_setprinterdataex("", &r, &rbuf, 0)) + goto done; + + result = r.status; + + if (!W_ERROR_IS_OK(r.status)) + goto done; + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} + /* Enum printer data */ WERROR cli_spoolss_enumprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, @@ -2055,6 +2162,60 @@ WERROR cli_spoolss_enumprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, return result; } +WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, + uint32 offered, uint32 *needed, + POLICY_HND *hnd, char *key, + uint32 *returned, PRINTER_ENUM_VALUES **values) +{ + prs_struct qbuf, rbuf; + SPOOL_Q_ENUMPRINTERDATAEX q; + SPOOL_R_ENUMPRINTERDATAEX r; + WERROR result = W_ERROR(ERRgeneral); + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + /* Initialise parse structures */ + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); + + /* Initialise input parameters */ + + make_spoolss_q_enumprinterdataex(&q, hnd, key, offered); + + /* Marshall data and send request */ + + if (!spoolss_io_q_enumprinterdataex("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, SPOOLSS_ENUMPRINTERDATAEX, &qbuf, &rbuf)) + goto done; + + /* Unmarshall response */ + + if (!spoolss_io_r_enumprinterdataex("", &r, &rbuf, 0)) + goto done; + + result = r.status; + + if (needed) + *needed = r.needed; + + if (!W_ERROR_IS_OK(r.status)) + goto done; + + /* Return data */ + + *returned = r.returned; + + /* TODO: figure out a nice way to return data */ + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} + /* Write data to printer */ WERROR cli_spoolss_writeprinter(struct cli_state *cli, TALLOC_CTX *mem_ctx, -- cgit From f76bdfdcaaafc5ad904014257a23726d5d53fd87 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:41:12 +0000 Subject: Implemented some more client side spoolss functions: - getprinterdataex(), setprinterdataex(), enumprinterdataex() Pass data type down to setprinterdata() fn instead of hardcoding REG_SZ. Did some trickyness to get enumprinterdataex replies unmarshalled properly. The code seems to have been written to require the number of entries returned before unpacking said entries. Skip to the end of the response and read the number of entries then jump back and process the printer data. (This used to be commit 6a1953f2431cc848abf210bdecd7080738991296) --- source3/rpc_parse/parse_spoolss.c | 103 +++++++++++++++++++++++++++++++++++--- 1 file changed, 96 insertions(+), 7 deletions(-) diff --git a/source3/rpc_parse/parse_spoolss.c b/source3/rpc_parse/parse_spoolss.c index b8762b35e2..db3ea5046a 100644 --- a/source3/rpc_parse/parse_spoolss.c +++ b/source3/rpc_parse/parse_spoolss.c @@ -1211,6 +1211,26 @@ BOOL make_spoolss_q_getprinterdata(SPOOL_Q_GETPRINTERDATA *q_u, return True; } +/******************************************************************* + * make a structure. + ********************************************************************/ + +BOOL make_spoolss_q_getprinterdataex(SPOOL_Q_GETPRINTERDATAEX *q_u, + const POLICY_HND *handle, + char *keyname, char *valuename, uint32 size) +{ + if (q_u == NULL) return False; + + DEBUG(5,("make_spoolss_q_getprinterdataex\n")); + + q_u->handle = *handle; + init_unistr2(&q_u->valuename, valuename, strlen(valuename) + 1); + init_unistr2(&q_u->keyname, keyname, strlen(keyname) + 1); + q_u->size = size; + + return True; +} + /******************************************************************* * read a structure. * called from spoolss_q_getprinterdata (srv_spoolss.c) @@ -1344,7 +1364,7 @@ BOOL spoolss_io_r_getprinterdata(char *desc, SPOOL_R_GETPRINTERDATA *r_u, prs_st if (UNMARSHALLING(ps) && r_u->size) { r_u->data = prs_alloc_mem(ps, r_u->size); - if(r_u->data) + if(!r_u->data) return False; } @@ -6065,13 +6085,27 @@ BOOL make_spoolss_q_enumprinterdata(SPOOL_Q_ENUMPRINTERDATA *q_u, return True; } +/******************************************************************* +********************************************************************/ + +BOOL make_spoolss_q_enumprinterdataex(SPOOL_Q_ENUMPRINTERDATAEX *q_u, + const POLICY_HND *hnd, char *key, + uint32 size) +{ + memcpy(&q_u->handle, hnd, sizeof(q_u->handle)); + init_unistr2(&q_u->key, key, strlen(key)+1); + q_u->size = size; + + return True; +} + /******************************************************************* ********************************************************************/ BOOL make_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u, const POLICY_HND *hnd, - char* value, char* data, uint32 data_size) + char* value, uint32 data_type, char* data, uint32 data_size) { memcpy(&q_u->handle, hnd, sizeof(q_u->handle)); - q_u->type = REG_SZ; + q_u->type = data_type; init_unistr2(&q_u->value, value, strlen(value)+1); q_u->max_len = q_u->real_len = data_size; @@ -6079,6 +6113,24 @@ BOOL make_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u, const POLICY_HND return True; } + +/******************************************************************* +********************************************************************/ +BOOL make_spoolss_q_setprinterdataex(SPOOL_Q_SETPRINTERDATAEX *q_u, const POLICY_HND *hnd, + char *key, char* value, uint32 data_type, char* data, + uint32 data_size) +{ + memcpy(&q_u->handle, hnd, sizeof(q_u->handle)); + q_u->type = data_type; + init_unistr2(&q_u->value, value, strlen(value)+1); + init_unistr2(&q_u->key, key, strlen(key)+1); + + q_u->max_len = q_u->real_len = data_size; + q_u->data = data; + + return True; +} + /******************************************************************* ********************************************************************/ @@ -6863,6 +6915,12 @@ BOOL spoolss_io_r_getprinterdataex(char *desc, SPOOL_R_GETPRINTERDATAEX *r_u, pr if (!prs_uint32("size", ps, depth, &r_u->size)) return False; + if (UNMARSHALLING(ps) && r_u->size) { + r_u->data = prs_alloc_mem(ps, r_u->size); + if(!r_u->data) + return False; + } + if (!prs_uint8s(False,"data", ps, depth, r_u->data, r_u->size)) return False; @@ -7083,9 +7141,6 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, prs_debug(ps, depth, desc, "spoolss_io_printer_enum_values_ctr"); depth++; - if (!prs_uint32("size", ps, depth, &ctr->size)) - return False; - /* * offset data begins at 20 bytes per structure * size_of_array. * Don't forget the uint32 at the beginning @@ -7095,6 +7150,13 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, /* first loop to write basic enum_value information */ + if (UNMARSHALLING(ps)) { + ctr->values = (PRINTER_ENUM_VALUES *)prs_alloc_mem( + ps, ctr->size_of_array * sizeof(PRINTER_ENUM_VALUES)); + if (!ctr->values) + return False; + } + for (i=0; isize_of_array; i++) { valuename_offset = current_offset; @@ -7131,6 +7193,13 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, if (!prs_unistr("valuename", ps, depth, &ctr->values[i].valuename)) return False; + if (UNMARSHALLING(ps)) { + ctr->values[i].data = (uint8 *)prs_alloc_mem( + ps, ctr->values[i].data_len); + if (!ctr->values[i].data) + return False; + } + if (!prs_uint8s(False, "data", ps, depth, ctr->values[i].data, ctr->values[i].data_len)) return False; @@ -7148,15 +7217,21 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps, BOOL spoolss_io_r_enumprinterdataex(char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, prs_struct *ps, int depth) { + int data_offset, end_offset; prs_debug(ps, depth, desc, "spoolss_io_r_enumprinterdataex"); depth++; if(!prs_align(ps)) return False; - if (!spoolss_io_printer_enum_values_ctr("", ps, &r_u->ctr, depth )) + if (!prs_uint32("size", ps, depth, &r_u->ctr.size)) return False; + data_offset = prs_offset(ps); + + if (!prs_set_offset(ps, data_offset + r_u->ctr.size)) + return False; + if(!prs_align(ps)) return False; @@ -7169,6 +7244,20 @@ BOOL spoolss_io_r_enumprinterdataex(char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, if(!prs_werror("status", ps, depth, &r_u->status)) return False; + r_u->ctr.size_of_array = r_u->returned; + + end_offset = prs_offset(ps); + + if (!prs_set_offset(ps, data_offset)) + return False; + + if (r_u->ctr.size) + if (!spoolss_io_printer_enum_values_ctr("", ps, &r_u->ctr, depth )) + return False; + + if (!prs_set_offset(ps, end_offset)) + return False; + return True; } -- cgit From d75fc27fa1b68762317999d65a232284abf72ef6 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:42:39 +0000 Subject: Fix transposed args in open_pipe_creds() function. (This used to be commit 63e59b0b737a1cd4ccc588b27e86be8262296052) --- source3/python/py_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/python/py_common.c b/source3/python/py_common.c index a65206e022..6247bf6371 100644 --- a/source3/python/py_common.c +++ b/source3/python/py_common.c @@ -211,7 +211,7 @@ struct cli_state *open_pipe_creds(char *server, PyObject *creds, /* Extract credentials from the python dictionary */ - if (!py_parse_creds(creds, &username, &password, &domain, errstr)) + if (!py_parse_creds(creds, &username, &domain, &password, errstr)) return NULL; /* Now try to connect */ -- cgit From fc8c6e7cf08d4570514bdae6d6b37a5e3112c924 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:44:00 +0000 Subject: Added methods for getprinterdataex, setprinterdataex and enumprinterdataex. (This used to be commit ac84b220aa2910abec309f2dc048adb84f609786) --- source3/python/py_spoolss.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source3/python/py_spoolss.c b/source3/python/py_spoolss.c index 95be77de55..4451cd87b2 100644 --- a/source3/python/py_spoolss.c +++ b/source3/python/py_spoolss.c @@ -281,6 +281,18 @@ Set the form given by the dictionary argument."}, METH_VARARGS | METH_KEYWORDS, "Delete printer data." }, + { "getprinterdataex", (PyCFunction)spoolss_hnd_getprinterdataex, + METH_VARARGS | METH_KEYWORDS, + "Get printer data." }, + + { "setprinterdataex", (PyCFunction)spoolss_hnd_setprinterdataex, + METH_VARARGS | METH_KEYWORDS, + "Set printer data." }, + + { "enumprinterdataex", (PyCFunction)spoolss_hnd_enumprinterdataex, + METH_VARARGS | METH_KEYWORDS, + "Enumerate printer data." }, + { "deleteprinterdataex", (PyCFunction)spoolss_hnd_deleteprinterdataex, METH_VARARGS | METH_KEYWORDS, "Delete printer data." }, -- cgit From 7ee13d88a18cd99c6d92f400af988961a9ac15d4 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:44:48 +0000 Subject: make proto (This used to be commit 88a97d2174eee884de52e848d30bc2c459bf28bb) --- source3/python/py_spoolss_proto.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source3/python/py_spoolss_proto.h b/source3/python/py_spoolss_proto.h index 5b68ef815a..b5c6a3239e 100644 --- a/source3/python/py_spoolss_proto.h +++ b/source3/python/py_spoolss_proto.h @@ -91,6 +91,9 @@ PyObject *spoolss_hnd_getprinterdata(PyObject *self, PyObject *args, PyObject *k 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_getprinterdataex(PyObject *self, PyObject *args, PyObject *kw); +PyObject *spoolss_hnd_setprinterdataex(PyObject *self, PyObject *args, PyObject *kw); +PyObject *spoolss_hnd_enumprinterdataex(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 */ -- cgit From 1f914af0ecd688e12c533c9eac6a1eadd2675022 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 2 Sep 2002 07:47:42 +0000 Subject: Add a 'key' field to printer data dictionary. Implemented getprinterdataex, setprinterdataex and enumprinterdataex (doesn't quite work yet). (This used to be commit fb0f4f7bfe81923adfe71549973da2be57f0e71f) --- source3/python/py_spoolss_printerdata.c | 152 ++++++++++++++++++++++++++++---- 1 file changed, 134 insertions(+), 18 deletions(-) diff --git a/source3/python/py_spoolss_printerdata.c b/source3/python/py_spoolss_printerdata.c index e1e43fa736..ff8b935679 100644 --- a/source3/python/py_spoolss_printerdata.c +++ b/source3/python/py_spoolss_printerdata.c @@ -20,14 +20,15 @@ #include "python/py_spoolss.h" -static BOOL py_from_printerdata(PyObject **dict, char *value, +static BOOL py_from_printerdata(PyObject **dict, char *key, 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, "key", Py_BuildValue("s", key ? key : "")); PyDict_SetItemString(*dict, "value", Py_BuildValue("s", value)); + PyDict_SetItemString(*dict, "type", Py_BuildValue("i", data_type)); PyDict_SetItemString(*dict, "data", Py_BuildValue("s#", data, data_size)); @@ -35,25 +36,26 @@ static BOOL py_from_printerdata(PyObject **dict, char *value, return True; } -static BOOL py_to_printerdata(char **value, uint32 *data_type, +static BOOL py_to_printerdata(char **key, char **value, uint32 *data_type, char **data, uint32 *data_size, PyObject *dict) { PyObject *obj; - if ((obj = PyDict_GetItemString(dict, "type"))) { + if ((obj = PyDict_GetItemString(dict, "key"))) { - if (!PyInt_Check(obj)) { + if (!PyString_Check(obj)) { PyErr_SetString(spoolss_error, - "type not an integer"); + "key not a string"); return False; } - *data_type = PyInt_AsLong(obj); - } else { - PyErr_SetString(spoolss_error, "no type present"); - return False; - } + *key = PyString_AsString(obj); + + if (!key[0]) + *key = NULL; + } else + *key = NULL; if ((obj = PyDict_GetItemString(dict, "value"))) { @@ -69,6 +71,20 @@ static BOOL py_to_printerdata(char **value, uint32 *data_type, return False; } + 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, "data"))) { if (!PyString_Check(obj)) { @@ -118,7 +134,7 @@ PyObject *spoolss_hnd_getprinterdata(PyObject *self, PyObject *args, PyObject *k return NULL; } - py_from_printerdata(&result, value, data_type, data, needed); + py_from_printerdata(&result, NULL, value, data_type, data, needed); return result; } @@ -128,7 +144,7 @@ PyObject *spoolss_hnd_setprinterdata(PyObject *self, PyObject *args, PyObject *k spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { "data", NULL }; PyObject *py_data; - char *value, *data; + char *key, *value, *data; uint32 data_size, data_type; WERROR werror; @@ -136,7 +152,7 @@ PyObject *spoolss_hnd_setprinterdata(PyObject *self, PyObject *args, PyObject *k args, kw, "O!", kwlist, &PyDict_Type, &py_data)) return NULL; - if (!py_to_printerdata(&value, &data_type, &data, &data_size, py_data)) + if (!py_to_printerdata(&key, &value, &data_type, &data, &data_size, py_data)) return NULL; /* Call rpc function */ @@ -189,8 +205,8 @@ PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject * value_needed, data_needed, NULL, NULL, &value, &data_type, &data, &data_size); - if (py_from_printerdata(&obj, value, data_type, data, - data_size)) + if (py_from_printerdata( + &obj, NULL, value, data_type, data, data_size)) PyDict_SetItemString(result, value, obj); ndx++; @@ -225,10 +241,110 @@ PyObject *spoolss_hnd_deleteprinterdata(PyObject *self, PyObject *args, PyObject return Py_None; } -PyObject *spoolss_hnd_deleteprinterdataex(PyObject *self, PyObject *args, PyObject *kw) +PyObject *spoolss_hnd_getprinterdataex(PyObject *self, PyObject *args, PyObject *kw) +{ + spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; + static char *kwlist[] = { "key", "value", NULL }; + char *key, *value; + WERROR werror; + uint32 needed, data_type, data_size; + char *data; + PyObject *result; + + /* Parse parameters */ + + if (!PyArg_ParseTupleAndKeywords(args, kw, "ss", kwlist, &key, &value)) + return NULL; + + /* Call rpc function */ + + werror = cli_spoolss_getprinterdataex( + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key, + value, &data_type, &data, &data_size); + + if (W_ERROR_V(werror) == ERRmoredata) + werror = cli_spoolss_getprinterdataex( + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key, + 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, key, value, data_type, data, needed); + + return result; +} + +PyObject *spoolss_hnd_setprinterdataex(PyObject *self, PyObject *args, PyObject *kw) { - /* Not supported by Samba server */ + spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; + static char *kwlist[] = { "data", NULL }; + PyObject *py_data; + char *key, *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(&key, &value, &data_type, &data, &data_size, py_data)) + return NULL; + /* Call rpc function */ + + werror = cli_spoolss_setprinterdataex( + hnd->cli, hnd->mem_ctx, &hnd->pol, key, 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_enumprinterdataex(PyObject *self, PyObject *args, PyObject *kw) +{ + spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; + static char *kwlist[] = { NULL }; + uint32 needed; + char *key, *value, *data; + WERROR werror; + PyObject *result; + + if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &key)) + return NULL; + + /* Get max buffer sizes for value and data */ + + werror = cli_spoolss_enumprinterdataex( + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key); + + if (W_ERROR_V(werror) == ERRmoredata) + werror = cli_spoolss_enumprinterdataex( + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key); + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); + return NULL; + } + + /* Iterate over all printerdata */ + + result = PyDict_New(); + + + + return result; +} + +PyObject *spoolss_hnd_deleteprinterdataex(PyObject *self, PyObject *args, PyObject *kw) +{ PyErr_SetString(spoolss_error, "Not implemented"); return NULL; } -- cgit From 618b02416dbfce79ef271d82790f5385dcfd609f Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 2 Sep 2002 09:02:40 +0000 Subject: small typo, kai is german :-) (This used to be commit f435bf0095694a283db47e33c9eb1b5b6df13d03) --- source3/include/sam.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/include/sam.h b/source3/include/sam.h index a2d980c2e3..1fca8ec4f6 100644 --- a/source3/include/sam.h +++ b/source3/include/sam.h @@ -107,7 +107,7 @@ typedef struct sam_group_handle { char *name; char *comment; DOM_SID sid; - int32 flags; /* specifies if the group is a lokal group or a global group */ + int32 flags; /* specifies if the group is a local group or a global group */ uint32 num_members; PRIVILEGE_SET privileges; } private; -- cgit From d38ab3857f841dee9f7ec2170730b87d5af6e480 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 2 Sep 2002 10:58:03 +0000 Subject: Fix typo - Thanks Kai (This used to be commit 8fb4534212e49d2f64f45cbeb481b9f4a69f3158) --- source3/lib/debug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/lib/debug.c b/source3/lib/debug.c index e20f329860..c8a4721bce 100644 --- a/source3/lib/debug.c +++ b/source3/lib/debug.c @@ -153,7 +153,7 @@ static const char *default_classname_table[] = { "rpc_srv", /* DBGC_RPC_SRV */ "rpc_cli", /* DBGC_RPC_CLI */ "passdb", /* DBGC_PASSDB */ - "sam" /* DBGC_SAM */ + "sam", /* DBGC_SAM */ "auth", /* DBGC_AUTH */ "winbind", /* DBGC_WINBIND */ NULL -- cgit From e0a8b7e0d0705c8f1597cc24cf62d830a5dea2ca Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 2 Sep 2002 13:47:51 +0000 Subject: usrmgr expects unicode as ProductType. This looks a bit like a hack ;-) Volker (This used to be commit f673eac06ab4af97a4d28427f7444696402ae680) --- source3/rpc_server/srv_reg_nt.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source3/rpc_server/srv_reg_nt.c b/source3/rpc_server/srv_reg_nt.c index cd9596d2a7..f96de7e533 100644 --- a/source3/rpc_server/srv_reg_nt.c +++ b/source3/rpc_server/srv_reg_nt.c @@ -342,6 +342,9 @@ NTSTATUS _reg_info(pipes_struct *p, REG_Q_INFO *q_u, REG_R_INFO *r_u) { NTSTATUS status = NT_STATUS_NO_SUCH_FILE; fstring name; + char *value_ascii = ""; + fstring value; + int value_length; REGISTRY_KEY *regkey = find_regkey_index_by_hnd( p, &q_u->pol ); REGISTRY_VALUE *val = NULL; REGISTRY_VALUE emptyval; @@ -380,15 +383,20 @@ NTSTATUS _reg_info(pipes_struct *p, REG_Q_INFO *q_u, REG_R_INFO *r_u) switch (lp_server_role()) { case ROLE_DOMAIN_PDC: case ROLE_DOMAIN_BDC: - regval_ctr_addvalue( ®vals, REGSTR_PRODUCTTYPE, REG_SZ, REG_PT_LANMANNT, strlen(REG_PT_LANMANNT)+1 ); + value_ascii = REG_PT_LANMANNT; break; case ROLE_STANDALONE: - regval_ctr_addvalue( ®vals, REGSTR_PRODUCTTYPE, REG_SZ, REG_PT_SERVERNT, strlen(REG_PT_SERVERNT)+1 ); + value_ascii = REG_PT_SERVERNT; break; case ROLE_DOMAIN_MEMBER: - regval_ctr_addvalue( ®vals, REGSTR_PRODUCTTYPE, REG_SZ, REG_PT_WINNT, strlen(REG_PT_WINNT)+1 ); + value_ascii = REG_PT_WINNT; break; } + value_length = push_ucs2(value, value, value_ascii, + sizeof(value), + STR_TERMINATE|STR_NOALIGN); + regval_ctr_addvalue(®vals, REGSTR_PRODUCTTYPE, REG_SZ, + value, value_length); val = dup_registry_value( regval_ctr_specific_value( ®vals, 0 ) ); -- cgit From 882ff84daad4052d87cbf3d83de6cb281b09251a Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 00:26:19 +0000 Subject: Return data from enumprinterdataex by deep copying on passed in tdb context. (This used to be commit 1f629aa54ea3733c356c21f9f707b7f6075f6429) --- source3/rpc_client/cli_spoolss.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index cff1f1d0a9..d2492dc53b 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -2171,6 +2171,7 @@ WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, SPOOL_Q_ENUMPRINTERDATAEX q; SPOOL_R_ENUMPRINTERDATAEX r; WERROR result = W_ERROR(ERRgeneral); + int i; ZERO_STRUCT(q); ZERO_STRUCT(r); @@ -2207,7 +2208,22 @@ WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, *returned = r.returned; - /* TODO: figure out a nice way to return data */ + /* Again, we have to deep copy the results on the passed in + tdb context as they will disappear after the prs_free at + the end of this function. */ + + *values = talloc(mem_ctx, sizeof(PRINTER_ENUM_VALUES) * r.returned); + + for (i = 0; i < r.returned; i++) { + PRINTER_ENUM_VALUES *v = &r.ctr.values[i]; + + (*values)[i].valuename.buffer = talloc(mem_ctx, v->value_len * 2); + unistrcpy((*values)[i].valuename.buffer, v->valuename.buffer); + (*values)[i].type = v->type; + (*values)[i].data = talloc(mem_ctx, v->data_len); + memcpy((*values)[i].data, v->data, v->data_len); + (*values)[i].data_len = v->data_len; + } done: prs_mem_free(&qbuf); -- cgit From 611f9c899dceb912a27a20e74a5bb22809999286 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 00:40:06 +0000 Subject: Return dictionary of printerdata in enumprinterdataex. (This used to be commit 348b6778d8b9e42f27da51652c7198cc42048059) --- source3/python/py_spoolss_printerdata.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/source3/python/py_spoolss_printerdata.c b/source3/python/py_spoolss_printerdata.c index ff8b935679..7f2c0bfe88 100644 --- a/source3/python/py_spoolss_printerdata.c +++ b/source3/python/py_spoolss_printerdata.c @@ -312,10 +312,11 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { NULL }; - uint32 needed; - char *key, *value, *data; + uint32 needed, returned, i; + char *key; WERROR werror; PyObject *result; + PRINTER_ENUM_VALUES *values; if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &key)) return NULL; @@ -323,11 +324,13 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject /* Get max buffer sizes for value and data */ werror = cli_spoolss_enumprinterdataex( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key); + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key, + &returned, &values); if (W_ERROR_V(werror) == ERRmoredata) werror = cli_spoolss_enumprinterdataex( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key); + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key, + &returned, &values); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); @@ -338,8 +341,18 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject result = PyDict_New(); - + for (i = 0; i < returned; i++) { + PyObject *item; + fstring value = ""; + rpcstr_pull(value, values[i].valuename.buffer, sizeof(value), -1, STR_TERMINATE); + item = PyDict_New(); + py_from_printerdata(&item, key, value, values[i].type, values[i].data, + values[i].data_len); + + PyDict_SetItemString(result, value, item); + } + return result; } -- cgit From 2a18e89da74c9b4e352e41ca5fe261f332018f85 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:10:21 +0000 Subject: Implement deleteprinterdataex (This used to be commit a89fe79e222b36eda123ccdbca96badb7714776e) --- source3/python/py_spoolss_printerdata.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/source3/python/py_spoolss_printerdata.c b/source3/python/py_spoolss_printerdata.c index 7f2c0bfe88..0c62baab72 100644 --- a/source3/python/py_spoolss_printerdata.c +++ b/source3/python/py_spoolss_printerdata.c @@ -358,6 +358,26 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject PyObject *spoolss_hnd_deleteprinterdataex(PyObject *self, PyObject *args, PyObject *kw) { - PyErr_SetString(spoolss_error, "Not implemented"); - return NULL; + spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; + static char *kwlist[] = { "key", "value", NULL }; + char *key, *value; + WERROR werror; + + /* Parse parameters */ + + if (!PyArg_ParseTupleAndKeywords(args, kw, "ss", kwlist, &key, &value)) + return NULL; + + /* Call rpc function */ + + werror = cli_spoolss_deleteprinterdataex( + hnd->cli, hnd->mem_ctx, &hnd->pol, key, value); + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; } -- cgit From 86d9d827ce2000a604eeb9af9c3c617bf0c2d9eb Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:30:26 +0000 Subject: Ignore *.pyc files. (This used to be commit 519d1589a9358d8c2de01bd23159e3d552554131) --- source3/python/.cvsignore | 1 + 1 file changed, 1 insertion(+) diff --git a/source3/python/.cvsignore b/source3/python/.cvsignore index 659ddbfdf9..8ce381cd39 100644 --- a/source3/python/.cvsignore +++ b/source3/python/.cvsignore @@ -1 +1,2 @@ setup.py +*.pyc \ No newline at end of file -- cgit From 8e56ded996d3b083a1a12ce81dbf0ace4bbc6381 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:32:05 +0000 Subject: Rewrote to use gtkdictbrowser. (This used to be commit 6f78c4181449a995b9d5b2955981a20e4fdcc829) --- source3/python/gtdbtool | 263 ++---------------------------------------------- 1 file changed, 10 insertions(+), 253 deletions(-) diff --git a/source3/python/gtdbtool b/source3/python/gtdbtool index 792cdeecc0..d5c76fa318 100755 --- a/source3/python/gtdbtool +++ b/source3/python/gtdbtool @@ -1,242 +1,10 @@ #!/usr/bin/env python -from gtk import * import sys +from gtkdictbrowser import GtkDictBrowser +import gtk 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 @@ -250,33 +18,22 @@ except tdb.error, t: print "gtdbtool: error opening %s: %s" % (sys.argv[1], t) sys.exit(1) -# Create user interface +# Create interface -w = gtdbtool(t) - -# Set up a key display function. A lot of keys have \x00 appended to the -# end which mucks up gtk. +db = GtkDictBrowser(t) def display_key_x00(key): + """Remove \x00 from all keys as they mucks up GTK.""" 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 +db.register_get_key_text_fn(display_key_x00) -w.build_ui("gtdbtool: %s" % sys.argv[1]) +db.build_ui('gtdbtool') -# Override Python's handling of ctrl-c so we can break out of the gui -# from the command line. +# Override Python's handling of ctrl-c so we can break out of the +# gui from the command line. import signal signal.signal(signal.SIGINT, signal.SIG_DFL) -mainloop() +gtk.mainloop() -- cgit From 53495225a5e5392a98f1fbc252f0fddf48f0dd77 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:48:24 +0000 Subject: A printerdata browser I whipped up in about 5 minutes. (-: Usage: gprinterdata //win2kdc1/fooprinter (This used to be commit a3e52367c961070ce80ac3d4bba763ad9ec1007c) --- source3/python/gprinterdata | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 source3/python/gprinterdata diff --git a/source3/python/gprinterdata b/source3/python/gprinterdata new file mode 100755 index 0000000000..cd04e6f5a1 --- /dev/null +++ b/source3/python/gprinterdata @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +import sys +from gtkdictbrowser import GtkDictBrowser +import gtk +import spoolss +import string + +class printerdata: + def __init__(self, host): + host = string.replace(host, "/", "\\") + self.hnd = spoolss.openprinter(host) + + def keys(self): + return self.hnd.enumprinterdata().keys() + + def __getitem__(self, key): + return self.hnd.getprinterdata(key)['data'] + +# Initialise printerdata dictionary + +if len(sys.argv) != 2: + print "Usage: gprinterdata " + print "where is a UNC printer name." + sys.exit(1) + +try: + t = printerdata(sys.argv[1]) +except: + print "gprinterdata: error opening %s" % sys.argv[1] + sys.exit(1) + +# Create interface + +db = GtkDictBrowser(t) +db.build_ui('gprinterdata') + +# Override Python's handling of ctrl-c so we can break out of the +# gui from the command line. + +import signal +signal.signal(signal.SIGINT, signal.SIG_DFL) + +gtk.mainloop() -- cgit From 2e93f20c1b10f98de79f76a18e5d34b1465edfbf Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:55:21 +0000 Subject: Added utility function to convert python strings to hex dump + ascii. (This used to be commit 7a6b6a8b4871065e3178223a7da5fafd8792b0bc) --- source3/python/gtkdictbrowser.py | 73 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/source3/python/gtkdictbrowser.py b/source3/python/gtkdictbrowser.py index 1609dff9b4..6d6cdb3c8a 100755 --- a/source3/python/gtkdictbrowser.py +++ b/source3/python/gtkdictbrowser.py @@ -169,6 +169,79 @@ class GtkDictBrowser: def register_get_value_text_fn(self, regexp, fn): self.get_value_text_fns.append((regexp, fn)) +# +# A utility function to convert a string to the standard hex + ascii format. +# To display all values in hex do: +# register_get_value_text_fn("", gtkdictbrowser.hex_string) +# + +def hex_string(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 + # For testing purposes, create a fixed dictionary to browse with if __name__ == "__main__": -- cgit From 62d6c7f8f836d46e423e4150b7fab1cd7bd61d63 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 01:56:05 +0000 Subject: Display printerdata values in hex. (This used to be commit cdd64e0860bf05b115e0d107f6cb2b9e1f6d0e9b) --- source3/python/gprinterdata | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source3/python/gprinterdata b/source3/python/gprinterdata index cd04e6f5a1..52c6e42719 100755 --- a/source3/python/gprinterdata +++ b/source3/python/gprinterdata @@ -1,7 +1,7 @@ #!/usr/bin/env python import sys -from gtkdictbrowser import GtkDictBrowser +from gtkdictbrowser import GtkDictBrowser, hex_string import gtk import spoolss import string @@ -33,6 +33,7 @@ except: # Create interface db = GtkDictBrowser(t) +db.register_get_value_text_fn("", hex_string) db.build_ui('gprinterdata') # Override Python's handling of ctrl-c so we can break out of the -- cgit From 70a132c2d94cc0d5df25b542360ea62156d10c9f Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 03:18:19 +0000 Subject: Change JOB_INFO_CTR to return a pointer to an array rather than array of pointers. Implemented client function for deleteprinterdataex. (This used to be commit f7641c8fd1079c2ef444d4bca5b97b1285733d10) --- source3/rpc_client/cli_spoolss.c | 51 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index d2492dc53b..bdd7407026 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -1552,11 +1552,11 @@ WERROR cli_spoolss_enumjobs(struct cli_state *cli, TALLOC_CTX *mem_ctx, switch(level) { case 1: decode_jobs_1(mem_ctx, r.buffer, r.returned, - ctr->job.job_info_1); + &ctr->job.job_info_1); break; case 2: decode_jobs_2(mem_ctx, r.buffer, r.returned, - ctr->job.job_info_2); + &ctr->job.job_info_2); break; default: DEBUG(3, ("unsupported info level %d", level)); @@ -1665,10 +1665,10 @@ WERROR cli_spoolss_getjob(struct cli_state *cli, TALLOC_CTX *mem_ctx, switch(level) { case 1: - decode_jobs_1(mem_ctx, r.buffer, 1, ctr->job.job_info_1); + decode_jobs_1(mem_ctx, r.buffer, 1, &ctr->job.job_info_1); break; case 2: - decode_jobs_2(mem_ctx, r.buffer, 1, ctr->job.job_info_2); + decode_jobs_2(mem_ctx, r.buffer, 1, &ctr->job.job_info_2); break; default: DEBUG(3, ("unsupported info level %d", level)); @@ -2326,4 +2326,47 @@ WERROR cli_spoolss_deleteprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, return result; } +WERROR cli_spoolss_deleteprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, + POLICY_HND *hnd, char *key, char *value) +{ + prs_struct qbuf, rbuf; + SPOOL_Q_DELETEPRINTERDATAEX q; + SPOOL_R_DELETEPRINTERDATAEX r; + WERROR result = W_ERROR(ERRgeneral); + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + /* Initialise parse structures */ + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); + + /* Initialise input parameters */ + + make_spoolss_q_deleteprinterdataex(&q, hnd, key, value); + + /* Marshall data and send request */ + + if (!spoolss_io_q_deleteprinterdataex("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, SPOOLSS_DELETEPRINTERDATAEX, &qbuf, &rbuf)) + goto done; + + /* Unmarshall response */ + + if (!spoolss_io_r_deleteprinterdataex("", &r, &rbuf, 0)) + goto done; + + result = r.status; + + if (!W_ERROR_IS_OK(r.status)) + goto done; + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} + /** @} **/ -- cgit From f02b14f7c61496950178e4c8a41d9c68c983d51d Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 03:20:21 +0000 Subject: Change JOB_INFO_CTR to return a pointer to an array rather than array of pointers. (This used to be commit e9b71b354d923b2cd0f028dd197e7ca81339ec3a) --- source3/include/rpc_spoolss.h | 4 ++-- source3/rpcclient/cmd_spoolss.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source3/include/rpc_spoolss.h b/source3/include/rpc_spoolss.h index b7acf44c5d..456825a5f5 100755 --- a/source3/include/rpc_spoolss.h +++ b/source3/include/rpc_spoolss.h @@ -1240,8 +1240,8 @@ typedef struct job_info_ctr_info { union { - JOB_INFO_1 **job_info_1; - JOB_INFO_2 **job_info_2; + JOB_INFO_1 *job_info_1; + JOB_INFO_2 *job_info_2; void *info; } job; diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index 2ab90365a7..bd399196eb 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -1785,10 +1785,10 @@ static NTSTATUS cmd_spoolss_enum_jobs(struct cli_state *cli, for (i = 0; i < num_jobs; i++) { switch(level) { case 1: - display_job_info_1(ctr.job.job_info_1[i]); + display_job_info_1(&ctr.job.job_info_1[i]); break; case 2: - display_job_info_2(ctr.job.job_info_2[i]); + display_job_info_2(&ctr.job.job_info_2[i]); break; default: d_printf("unknown info level %d\n", level); -- cgit From 386a41695001ff56c7ef1f6f25d94555fb58aed0 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 03:21:53 +0000 Subject: Implemented client function for deleteprinterdataex. (This used to be commit 6d792c683df3a4f97e1a04a57bf4890aab35aecd) --- source3/rpc_parse/parse_spoolss.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source3/rpc_parse/parse_spoolss.c b/source3/rpc_parse/parse_spoolss.c index db3ea5046a..29902d395e 100644 --- a/source3/rpc_parse/parse_spoolss.c +++ b/source3/rpc_parse/parse_spoolss.c @@ -7606,6 +7606,21 @@ BOOL make_spoolss_q_deleteprinterdata(SPOOL_Q_DELETEPRINTERDATA *q_u, return True; } +/******************************************************************* + * init a structure. + ********************************************************************/ + +BOOL make_spoolss_q_deleteprinterdataex(SPOOL_Q_DELETEPRINTERDATAEX *q_u, + POLICY_HND *handle, char *key, + char *value) +{ + memcpy(&q_u->handle, handle, sizeof(POLICY_HND)); + init_unistr2(&q_u->valuename, value, strlen(value) + 1); + init_unistr2(&q_u->keyname, key, strlen(key) + 1); + + return True; +} + /******************************************************************* * init a structure. ********************************************************************/ -- cgit From 207455610418a32b428f1f267091e2ec7d245ece Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 03:48:28 +0000 Subject: The session key in NTLMSSP AUTH blobs is actually an empty string. Also, the negotiate blob has two ASCI strings encoded in the same way that the UNICODE strings are, they are just in ASCII. The PARSER and Generator will have to deal with that. (This used to be commit aaa7a681ce4ee52edb23c73a53aeabb07fd5b7d8) --- source3/libsmb/cliconnect.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index e9b2b7b32e..c441cf28a8 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -540,7 +540,7 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, workgroup, user, cli->calling.name, - sess_key, 16, + sess_key, 0, neg_flags); /* wrap it in SPNEGO */ -- cgit From bb30cd160b7d01b38fb6473d15a9056118d51a42 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 03:53:50 +0000 Subject: Add type A to the small MSRPC generator ... (This used to be commit 7f8fd5f270af74dcb3fd18af74233f7db4d8f9a7) --- source3/libsmb/clispnego.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source3/libsmb/clispnego.c b/source3/libsmb/clispnego.c index fc25436d10..8376398e3f 100644 --- a/source3/libsmb/clispnego.c +++ b/source3/libsmb/clispnego.c @@ -471,6 +471,7 @@ DATA_BLOB spnego_gen_auth_response(void) U = unicode string (input is unix string) a = address (1 byte type, 1 byte length, unicode string, all inline) + A = ASCII string (pointer + length) Actually same as B B = data blob (pointer + length) b = data blob in header (pointer + length) d = word (4 bytes) @@ -500,6 +501,7 @@ BOOL msrpc_gen(DATA_BLOB *blob, s = va_arg(ap, char *); data_size += (str_charnum(s) * 2) + 4; break; + case 'A': case 'B': b = va_arg(ap, uint8 *); head_size += 8; -- cgit From 629ad6941e95fef465059c248ea0d99a32be2a98 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 04:10:58 +0000 Subject: Make sure that an NTLMSSP negotiate blob has the correct stuff in it! (This used to be commit b28267f52c0a5c175b067d7c2d10eca83c20e640) --- source3/libsmb/cliconnect.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index c441cf28a8..7ef9b2ab82 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -486,11 +486,12 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, memset(sess_key, 0, 16); /* generate the ntlmssp negotiate packet */ - msrpc_gen(&blob, "CddB", + msrpc_gen(&blob, "CddAA", "NTLMSSP", NTLMSSP_NEGOTIATE, neg_flags, - sess_key, 16); + workgroup, strlen(workgroup), + cli->calling.name, strlen(cli->calling.name)); /* and wrap it in a SPNEGO wrapper */ msg1 = gen_negTokenTarg(mechs, blob); -- cgit From 9a4110d3d13effc260940b012b8af4ba057462de Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 04:56:39 +0000 Subject: Fix setprinterdata rpcclient command to use new cli_spoolss_setprinterdata function. Also fixed crash bug - I don't think anyone uses this command anymore... (This used to be commit 82c9bf2a6f03c801e701636aff726090483cea25) --- source3/rpcclient/cmd_spoolss.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index bd399196eb..15648e4d1b 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -1620,7 +1620,8 @@ static NTSTATUS cmd_spoolss_setprinterdata(struct cli_state *cli, POLICY_HND pol; BOOL opened_hnd = False; PRINTER_INFO_CTR ctr; - PRINTER_INFO_0 *info = NULL; + PRINTER_INFO_0 info; + REGISTRY_VALUE value; /* parse the command arguements */ if (argc != 4) { @@ -1642,6 +1643,8 @@ static NTSTATUS cmd_spoolss_setprinterdata(struct cli_state *cli, opened_hnd = True; + ctr.printers_0 = &info; + result = cli_spoolss_getprinter(cli, mem_ctx, 0, &needed, &pol, 0, &ctr); @@ -1652,13 +1655,16 @@ static NTSTATUS cmd_spoolss_setprinterdata(struct cli_state *cli, goto done; printf("%s\n", timestring(True)); - printf("\tchange_id (before set)\t:[0x%x]\n", info->change_id); + printf("\tchange_id (before set)\t:[0x%x]\n", info.change_id); /* Set the printer data */ - result = cli_spoolss_setprinterdata( - cli, mem_ctx, &pol, argv[2], REG_SZ, argv[3], - strlen(argv[3]) + 1); + fstrcpy(value.valuename, argv[2]); + value.type = REG_SZ; + value.size = strlen(argv[3]) + 1; + value.data_p = talloc_memdup(mem_ctx, argv[3], value.size); + + result = cli_spoolss_setprinterdata(cli, mem_ctx, &pol, &value); if (!W_ERROR_IS_OK(result)) { printf ("Unable to set [%s=%s]!\n", argv[2], argv[3]); @@ -1675,7 +1681,7 @@ static NTSTATUS cmd_spoolss_setprinterdata(struct cli_state *cli, goto done; printf("%s\n", timestring(True)); - printf("\tchange_id (after set)\t:[0x%x]\n", info->change_id); + printf("\tchange_id (after set)\t:[0x%x]\n", info.change_id); done: /* cleanup */ -- cgit From 45664627c78e118c65f4d34a44eac3485b97f99e Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 04:58:36 +0000 Subject: Fixed enumjobs command to use new JOB_INFO_CTR structure. (This used to be commit 9db5be03617740e705bce51784fdb80784779acb) --- source3/python/py_spoolss_jobs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/python/py_spoolss_jobs.c b/source3/python/py_spoolss_jobs.c index cc5d42e0ee..59754bd36d 100644 --- a/source3/python/py_spoolss_jobs.c +++ b/source3/python/py_spoolss_jobs.c @@ -150,10 +150,10 @@ PyObject *spoolss_hnd_getjob(PyObject *self, PyObject *args, PyObject *kw) switch(level) { case 1: - py_from_JOB_INFO_1(&result, ctr.job.job_info_1); + py_from_JOB_INFO_1(&result, &ctr.job.job_info_1[0]); break; case 2: - py_from_JOB_INFO_2(&result, ctr.job.job_info_2); + py_from_JOB_INFO_2(&result, &ctr.job.job_info_2[0]); break; } -- cgit From b2e4d8e5f9c208ad5edf5fb2e01c8f1f14fb96a9 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 05:00:17 +0000 Subject: Convert to new REGISTRY_VALUE cli_spoolss routines. (This used to be commit 100aa8c893464d65f1b2225dab9dc5b58bbcff91) --- source3/python/py_spoolss_printerdata.c | 112 +++++++++++++++++--------------- 1 file changed, 61 insertions(+), 51 deletions(-) diff --git a/source3/python/py_spoolss_printerdata.c b/source3/python/py_spoolss_printerdata.c index 0c62baab72..ffff2b3a67 100644 --- a/source3/python/py_spoolss_printerdata.c +++ b/source3/python/py_spoolss_printerdata.c @@ -21,7 +21,7 @@ #include "python/py_spoolss.h" static BOOL py_from_printerdata(PyObject **dict, char *key, char *value, - uint32 data_type, char *data, + uint16 data_type, uint8 *data, uint32 data_size) { *dict = PyDict_New(); @@ -36,8 +36,8 @@ static BOOL py_from_printerdata(PyObject **dict, char *key, char *value, return True; } -static BOOL py_to_printerdata(char **key, char **value, uint32 *data_type, - char **data, uint32 *data_size, +static BOOL py_to_printerdata(char **key, char **value, uint16 *data_type, + uint8 **data, uint32 *data_size, PyObject *dict) { PyObject *obj; @@ -50,10 +50,12 @@ static BOOL py_to_printerdata(char **key, char **value, uint32 *data_type, return False; } - *key = PyString_AsString(obj); + if (key) { + *key = PyString_AsString(obj); - if (!key[0]) - *key = NULL; + if (!key[0]) + *key = NULL; + } } else *key = NULL; @@ -107,34 +109,36 @@ PyObject *spoolss_hnd_getprinterdata(PyObject *self, PyObject *args, PyObject *k { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { "value", NULL }; - char *value; + char *valuename; WERROR werror; - uint32 needed, data_type, data_size; - char *data; + uint32 needed; PyObject *result; + REGISTRY_VALUE value; /* Parse parameters */ - if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &value)) + if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &valuename)) return NULL; /* Call rpc function */ werror = cli_spoolss_getprinterdata( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, value, - &data_type, &data, &data_size); + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, valuename, + &value); 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); + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, + valuename, &value); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); return NULL; } - py_from_printerdata(&result, NULL, value, data_type, data, needed); + py_from_printerdata( + &result, NULL, valuename, value.type, value.data_p, + value.size); return result; } @@ -144,22 +148,25 @@ PyObject *spoolss_hnd_setprinterdata(PyObject *self, PyObject *args, PyObject *k spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { "data", NULL }; PyObject *py_data; - char *key, *value, *data; - uint32 data_size, data_type; + char *valuename; WERROR werror; + REGISTRY_VALUE value; if (!PyArg_ParseTupleAndKeywords( args, kw, "O!", kwlist, &PyDict_Type, &py_data)) return NULL; - if (!py_to_printerdata(&key, &value, &data_type, &data, &data_size, py_data)) + if (!py_to_printerdata( + NULL, &valuename, &value.type, &value.data_p, + &value.size, py_data)) return NULL; + fstrcpy(value.valuename, valuename); + /* Call rpc function */ werror = cli_spoolss_setprinterdata( - hnd->cli, hnd->mem_ctx, &hnd->pol, value, data_type, - data, data_size); + hnd->cli, hnd->mem_ctx, &hnd->pol, &value); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); @@ -174,10 +181,10 @@ PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject * { 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; + uint32 data_needed, value_needed, ndx = 0; WERROR werror; PyObject *result; + REGISTRY_VALUE value; if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist)) return NULL; @@ -186,7 +193,7 @@ PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject * werror = cli_spoolss_enumprinterdata( hnd->cli, hnd->mem_ctx, &hnd->pol, ndx, 0, 0, - &value_needed, &data_needed, NULL, NULL, NULL, NULL); + &value_needed, &data_needed, NULL); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); @@ -202,12 +209,12 @@ PyObject *spoolss_hnd_enumprinterdata(PyObject *self, PyObject *args, PyObject * werror = cli_spoolss_enumprinterdata( hnd->cli, hnd->mem_ctx, &hnd->pol, ndx, - value_needed, data_needed, NULL, NULL, - &value, &data_type, &data, &data_size); + value_needed, data_needed, NULL, NULL, &value); if (py_from_printerdata( - &obj, NULL, value, data_type, data, data_size)) - PyDict_SetItemString(result, value, obj); + &obj, NULL, value.valuename, value.type, + value.data_p, value.size)) + PyDict_SetItemString(result, value.valuename, obj); ndx++; } @@ -245,34 +252,35 @@ PyObject *spoolss_hnd_getprinterdataex(PyObject *self, PyObject *args, PyObject { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { "key", "value", NULL }; - char *key, *value; + char *key, *valuename; WERROR werror; - uint32 needed, data_type, data_size; - char *data; + uint32 needed; PyObject *result; + REGISTRY_VALUE value; /* Parse parameters */ - if (!PyArg_ParseTupleAndKeywords(args, kw, "ss", kwlist, &key, &value)) + if (!PyArg_ParseTupleAndKeywords(args, kw, "ss", kwlist, &key, &valuename)) return NULL; /* Call rpc function */ werror = cli_spoolss_getprinterdataex( hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key, - value, &data_type, &data, &data_size); + valuename, &value); if (W_ERROR_V(werror) == ERRmoredata) werror = cli_spoolss_getprinterdataex( hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key, - value, &data_type, &data, &data_size); + valuename, &value); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); return NULL; } - py_from_printerdata(&result, key, value, data_type, data, needed); + py_from_printerdata( + &result, key, valuename, value.type, value.data_p, value.size); return result; } @@ -282,22 +290,24 @@ PyObject *spoolss_hnd_setprinterdataex(PyObject *self, PyObject *args, PyObject spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { "data", NULL }; PyObject *py_data; - char *key, *value, *data; - uint32 data_size, data_type; + char *keyname, *valuename; WERROR werror; + REGISTRY_VALUE value; if (!PyArg_ParseTupleAndKeywords( args, kw, "O!", kwlist, &PyDict_Type, &py_data)) return NULL; - if (!py_to_printerdata(&key, &value, &data_type, &data, &data_size, py_data)) + if (!py_to_printerdata( + &keyname, &valuename, &value.type, &value.data_p, &value.size, py_data)) return NULL; + fstrcpy(value.valuename, valuename); + /* Call rpc function */ werror = cli_spoolss_setprinterdataex( - hnd->cli, hnd->mem_ctx, &hnd->pol, key, value, data_type, - data, data_size); + hnd->cli, hnd->mem_ctx, &hnd->pol, keyname, &value); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); @@ -312,11 +322,11 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; static char *kwlist[] = { NULL }; - uint32 needed, returned, i; + uint32 needed, i; char *key; WERROR werror; PyObject *result; - PRINTER_ENUM_VALUES *values; + REGVAL_CTR ctr; if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &key)) return NULL; @@ -324,13 +334,12 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject /* Get max buffer sizes for value and data */ werror = cli_spoolss_enumprinterdataex( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key, - &returned, &values); + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, key, &ctr); if (W_ERROR_V(werror) == ERRmoredata) werror = cli_spoolss_enumprinterdataex( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key, - &returned, &values); + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, key, + &ctr); if (!W_ERROR_IS_OK(werror)) { PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); @@ -341,16 +350,17 @@ PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject result = PyDict_New(); - for (i = 0; i < returned; i++) { + for (i = 0; i < regval_ctr_numvals(&ctr); i++) { + REGISTRY_VALUE *value; PyObject *item; - fstring value = ""; - rpcstr_pull(value, values[i].valuename.buffer, sizeof(value), -1, STR_TERMINATE); item = PyDict_New(); - py_from_printerdata(&item, key, value, values[i].type, values[i].data, - values[i].data_len); + value = regval_ctr_specific_value(&ctr, i); - PyDict_SetItemString(result, value, item); + if (py_from_printerdata( + &item, key, value->valuename, value->type, + value->data_p, value->size)) + PyDict_SetItemString(result, value->valuename, item); } return result; -- cgit From 7616f86a63fb21d1a3f4d2076aa4f4b94e78ea43 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 3 Sep 2002 05:35:47 +0000 Subject: Conver cli_spoolss routines to use REGISTRY_VALUE and REGVAL_CTR code. Nice one jerry! (Hey I thought I checked this in already?) (This used to be commit f0c6303bebe0f494d70ac5371d7f6727413fe482) --- source3/rpc_client/cli_spoolss.c | 101 +++++++++++++-------------------------- 1 file changed, 34 insertions(+), 67 deletions(-) diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index bdd7407026..b568f38604 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -1874,8 +1874,7 @@ WERROR cli_spoolss_enddocprinter(struct cli_state *cli, TALLOC_CTX *mem_ctx, WERROR cli_spoolss_getprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, uint32 offered, uint32 *needed, POLICY_HND *hnd, char *valuename, - uint32 *data_type, char **data, - uint32 *data_size) + REGISTRY_VALUE *value) { prs_struct qbuf, rbuf; SPOOL_Q_GETPRINTERDATA q; @@ -1915,16 +1914,9 @@ WERROR cli_spoolss_getprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Return output parameters */ - if (data_type) - *data_type = r.type; - - if (data) { - *data = (char *)talloc(mem_ctx, r.needed); - memcpy(*data, r.data, r.needed); - } - - if (data_size) - *data_size = r.needed; + value->data_p = talloc_memdup(mem_ctx, r.data, r.needed); + value->type = r.type; + value->size = r.size; done: prs_mem_free(&qbuf); @@ -1936,8 +1928,7 @@ WERROR cli_spoolss_getprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, WERROR cli_spoolss_getprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, uint32 offered, uint32 *needed, POLICY_HND *hnd, char *keyname, - char *valuename, uint32 *data_type, - char **data, uint32 *data_size) + char *valuename, REGISTRY_VALUE *value) { prs_struct qbuf, rbuf; SPOOL_Q_GETPRINTERDATAEX q; @@ -1977,16 +1968,9 @@ WERROR cli_spoolss_getprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Return output parameters */ - if (data_type) - *data_type = r.type; - - if (data) { - *data = (char *)talloc(mem_ctx, r.needed); - memcpy(*data, r.data, r.needed); - } - - if (data_size) - *data_size = r.needed; + value->data_p = talloc_memdup(mem_ctx, r.data, r.needed); + value->type = r.type; + value->size = r.needed; done: prs_mem_free(&qbuf); @@ -1998,9 +1982,7 @@ WERROR cli_spoolss_getprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Set printer data */ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *hnd, char *value, - uint32 data_type, char *data, - uint32 data_size) + POLICY_HND *hnd, REGISTRY_VALUE *value) { prs_struct qbuf, rbuf; SPOOL_Q_SETPRINTERDATA q; @@ -2017,7 +1999,8 @@ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Initialise input parameters */ - make_spoolss_q_setprinterdata(&q, hnd, value, data_type, data, data_size); + make_spoolss_q_setprinterdata( + &q, hnd, value->valuename, value->type, value->data_p, value->size); /* Marshall data and send request */ @@ -2043,9 +2026,8 @@ WERROR cli_spoolss_setprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, } WERROR cli_spoolss_setprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *hnd, char * key, char *value, - uint32 data_type, char *data, - uint32 data_size) + POLICY_HND *hnd, char *keyname, + REGISTRY_VALUE *value) { prs_struct qbuf, rbuf; SPOOL_Q_SETPRINTERDATAEX q; @@ -2062,7 +2044,9 @@ WERROR cli_spoolss_setprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Initialise input parameters */ - make_spoolss_q_setprinterdataex(&q, hnd, key, value, data_type, data, data_size); + make_spoolss_q_setprinterdataex( + &q, hnd, keyname, value->valuename, value->type, value->data_p, + value->size); /* Marshall data and send request */ @@ -2093,8 +2077,7 @@ WERROR cli_spoolss_enumprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, POLICY_HND *hnd, uint32 ndx, uint32 value_offered, uint32 data_offered, uint32 *value_needed, uint32 *data_needed, - char **value, uint32 *data_type, char **data, - uint32 *data_size) + REGISTRY_VALUE *value) { prs_struct qbuf, rbuf; SPOOL_Q_ENUMPRINTERDATA q; @@ -2130,31 +2113,21 @@ WERROR cli_spoolss_enumprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, goto done; /* Return data */ - + if (value_needed) *value_needed = r.realvaluesize; if (data_needed) *data_needed = r.realdatasize; - if (data_type) - *data_type = r.type; - if (value) { - fstring the_value; - - rpcstr_pull(the_value, r.value, sizeof(the_value), -1, + rpcstr_pull(value->valuename, r.value, sizeof(value->valuename), -1, STR_TERMINATE); - - *value = talloc_strdup(mem_ctx, the_value); + value->data_p = talloc_memdup(mem_ctx, r.data, r.realdatasize); + value->type = r.type; + value->size = r.realdatasize; } - if (data) - *data = talloc_memdup(mem_ctx, r.data, r.realdatasize); - - if (data_size) - *data_size = r.realdatasize; - done: prs_mem_free(&qbuf); prs_mem_free(&rbuf); @@ -2164,8 +2137,8 @@ WERROR cli_spoolss_enumprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, uint32 offered, uint32 *needed, - POLICY_HND *hnd, char *key, - uint32 *returned, PRINTER_ENUM_VALUES **values) + POLICY_HND *hnd, char *keyname, + REGVAL_CTR *ctr) { prs_struct qbuf, rbuf; SPOOL_Q_ENUMPRINTERDATAEX q; @@ -2183,7 +2156,7 @@ WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Initialise input parameters */ - make_spoolss_q_enumprinterdataex(&q, hnd, key, offered); + make_spoolss_q_enumprinterdataex(&q, hnd, keyname, offered); /* Marshall data and send request */ @@ -2206,23 +2179,16 @@ WERROR cli_spoolss_enumprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, /* Return data */ - *returned = r.returned; - - /* Again, we have to deep copy the results on the passed in - tdb context as they will disappear after the prs_free at - the end of this function. */ - - *values = talloc(mem_ctx, sizeof(PRINTER_ENUM_VALUES) * r.returned); + ZERO_STRUCTP(ctr); + regval_ctr_init(ctr); for (i = 0; i < r.returned; i++) { PRINTER_ENUM_VALUES *v = &r.ctr.values[i]; + fstring name; - (*values)[i].valuename.buffer = talloc(mem_ctx, v->value_len * 2); - unistrcpy((*values)[i].valuename.buffer, v->valuename.buffer); - (*values)[i].type = v->type; - (*values)[i].data = talloc(mem_ctx, v->data_len); - memcpy((*values)[i].data, v->data, v->data_len); - (*values)[i].data_len = v->data_len; + rpcstr_pull(name, v->valuename.buffer, sizeof(name), -1, + STR_TERMINATE); + regval_ctr_addvalue(ctr, name, v->type, v->data, v->data_len); } done: @@ -2327,7 +2293,8 @@ WERROR cli_spoolss_deleteprinterdata(struct cli_state *cli, TALLOC_CTX *mem_ctx, } WERROR cli_spoolss_deleteprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ctx, - POLICY_HND *hnd, char *key, char *value) + POLICY_HND *hnd, char *keyname, + char *valuename) { prs_struct qbuf, rbuf; SPOOL_Q_DELETEPRINTERDATAEX q; @@ -2344,7 +2311,7 @@ WERROR cli_spoolss_deleteprinterdataex(struct cli_state *cli, TALLOC_CTX *mem_ct /* Initialise input parameters */ - make_spoolss_q_deleteprinterdataex(&q, hnd, key, value); + make_spoolss_q_deleteprinterdataex(&q, hnd, keyname, valuename); /* Marshall data and send request */ -- cgit From fc15341b8265f57a2bdd9be8a06c83e1fd90497a Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 06:34:40 +0000 Subject: Parse the NTLMSSP Challenge in cliconnect.c. This gets us closer ... Should have the challenge now. Need to check that it works. (This used to be commit 5784835db95baf62362d35d3beab5d534cc776e9) --- source3/libsmb/cliconnect.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 7ef9b2ab82..cb3b4373dc 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -473,11 +473,12 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, char *pass, char *workgroup) { const char *mechs[] = {OID_NTLMSSP, NULL}; - DATA_BLOB msg1; + DATA_BLOB msg1, struct_blob; DATA_BLOB blob, chal1, chal2, auth; uint8 challenge[8]; uint8 nthash[24], lmhash[24], sess_key[16]; - uint32 neg_flags; + uint32 neg_flags, chal_flags, ntlmssp_command, unkn1, unkn2; + pstring server_domain; /* FIX THIS, SHOULD be UCS2-LE */ neg_flags = NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_128 | @@ -518,6 +519,31 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, data_blob_free(&blob); + /* + * Ok, chal1 and chal2 are actually two identical copies of + * the NTLMSSP Challenge BLOB, and they contain, encoded in them + * the challenge to use. + */ + + if (!msrpc_parse(&chal1, "CdUdbddB", + "NTLMSSP", + &ntlmssp_command, + &server_domain, + &chal_flags, + challenge, 8, + &unkn1, &unkn2, + struct_blob.data, &struct_blob.length)) { + DEBUG(0, ("Failed to parse the NTLMSSP Challenge\n")); + return False; + } + + if (ntlmssp_command != NTLMSSP_CHALLENGE) { + DEBUG(0, ("NTLMSSP Response != NTLMSSP_CHALLENGE. Got %0X\n", + ntlmssp_command)); + return False; + } + + /* encrypt the password with the challenge */ memcpy(challenge, chal1.data + 24, 8); SMBencrypt(pass, challenge,lmhash); -- cgit From fd13038acff34acb9113afffd01af3e0fe90a6af Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 17:36:00 +0000 Subject: Fix the client side NTLMSSP. It now works between smbclient and smbd! However, it does not work with Win2K over 445 with raw NTLMSSP! (This used to be commit 53e4975337be2cab3ee89f2f62e5659855365b73) --- source3/libsmb/cliconnect.c | 9 ++++++--- source3/libsmb/clispnego.c | 47 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index cb3b4373dc..428167ebfa 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -486,16 +486,19 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, memset(sess_key, 0, 16); + DEBUG(10, ("sending NTLMSSP_NEGOTIATE\n")); + /* generate the ntlmssp negotiate packet */ msrpc_gen(&blob, "CddAA", "NTLMSSP", NTLMSSP_NEGOTIATE, neg_flags, workgroup, strlen(workgroup), - cli->calling.name, strlen(cli->calling.name)); - + cli->calling.name, strlen(cli->calling.name) + 1); + DEBUG(10, ("neg_flags: %0X, workgroup: %s, calling name %s\n", + neg_flags, workgroup, cli->calling.name)); /* and wrap it in a SPNEGO wrapper */ - msg1 = gen_negTokenTarg(mechs, blob); + msg1 = gen_negTokenInit(OID_NTLMSSP, blob); data_blob_free(&blob); /* now send that blob on its way */ diff --git a/source3/libsmb/clispnego.c b/source3/libsmb/clispnego.c index 8376398e3f..8aab0fdda9 100644 --- a/source3/libsmb/clispnego.c +++ b/source3/libsmb/clispnego.c @@ -73,6 +73,50 @@ DATA_BLOB spnego_gen_negTokenInit(uint8 guid[16], return ret; } +/* + Generate a negTokenInit as used by the client side ... It has a mechType + (OID), and a mechToken (a security blob) ... + + Really, we need to break out the NTLMSSP stuff as well, because it could be + raw in the packets! +*/ +DATA_BLOB gen_negTokenInit(const char *OID, DATA_BLOB blob) +{ + ASN1_DATA data; + DATA_BLOB ret; + + memset(&data, 0, sizeof(data)); + + asn1_push_tag(&data, ASN1_APPLICATION(0)); + asn1_write_OID(&data,OID_SPNEGO); + asn1_push_tag(&data, ASN1_CONTEXT(0)); + asn1_push_tag(&data, ASN1_SEQUENCE(0)); + + asn1_push_tag(&data, ASN1_CONTEXT(0)); + asn1_push_tag(&data, ASN1_SEQUENCE(0)); + asn1_write_OID(&data, OID); + asn1_pop_tag(&data); + asn1_pop_tag(&data); + + asn1_push_tag(&data, ASN1_CONTEXT(2)); + asn1_write_OctetString(&data,blob.data,blob.length); + asn1_pop_tag(&data); + + asn1_pop_tag(&data); + asn1_pop_tag(&data); + + asn1_pop_tag(&data); + + if (data.has_error) { + DEBUG(1,("Failed to build negTokenInit at offset %d\n", (int)data.ofs)); + asn1_free(&data); + } + + ret = data_blob(data.data, data.length); + asn1_free(&data); + + return ret; +} /* parse a negTokenInit packet giving a GUID, a list of supported @@ -553,7 +597,8 @@ BOOL msrpc_gen(DATA_BLOB *blob, } data_ofs += n*2; break; - + + case 'A': case 'B': b = va_arg(ap, uint8 *); n = va_arg(ap, int); -- cgit From a27923691ba8d1496c1eaaab2559a10e4f41d694 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 3 Sep 2002 19:18:12 +0000 Subject: Formatting tidyup and additon of cli_close_connection() before bugfix. Jeremy. (This used to be commit 3b71529c694b5b1093d99b7ef80835e72b1f8436) --- source3/libsmb/cliconnect.c | 115 ++++++++++++++++++-------------------------- source3/libsmb/clientgen.c | 104 ++++++++++++++++++++------------------- 2 files changed, 101 insertions(+), 118 deletions(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 428167ebfa..9ff4854998 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -50,14 +50,12 @@ static BOOL cli_session_setup_lanman2(struct cli_state *cli, char *user, fstring pword; char *p; - if (passlen > sizeof(pword)-1) { + if (passlen > sizeof(pword)-1) return False; - } /* if in share level security then don't send a password now */ - if (!(cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL)) { + if (!(cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL)) passlen = 0; - } if (passlen > 0 && (cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) && passlen != 24) { /* Encrypted mode needed, and non encrypted password supplied. */ @@ -99,9 +97,8 @@ static BOOL cli_session_setup_lanman2(struct cli_state *cli, char *user, show_msg(cli->inbuf); - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } /* use the returned vuid from now on */ cli->vuid = SVAL(cli->inbuf,smb_uid); @@ -118,17 +115,14 @@ static uint32 cli_session_setup_capabilities(struct cli_state *cli) { uint32 capabilities = CAP_NT_SMBS; - if (!cli->force_dos_errors) { + if (!cli->force_dos_errors) capabilities |= CAP_STATUS32; - } - if (cli->use_level_II_oplocks) { + if (cli->use_level_II_oplocks) capabilities |= CAP_LEVEL_II_OPLOCKS; - } - if (cli->capabilities & CAP_UNICODE) { + if (cli->capabilities & CAP_UNICODE) capabilities |= CAP_UNICODE; - } return capabilities; } @@ -167,9 +161,8 @@ static BOOL cli_session_setup_guest(struct cli_state *cli) show_msg(cli->inbuf); - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } cli->vuid = SVAL(cli->inbuf,smb_uid); @@ -223,9 +216,8 @@ static BOOL cli_session_setup_plaintext(struct cli_state *cli, char *user, show_msg(cli->inbuf); - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } cli->vuid = SVAL(cli->inbuf,smb_uid); p = smb_buf(cli->inbuf); @@ -259,20 +251,19 @@ static void set_signing_on_cli (struct cli_state *cli, char* pass, uint8 respons static void set_temp_signing_on_cli(struct cli_state *cli) { - if (cli->sign_info.negotiated_smb_signing) { + if (cli->sign_info.negotiated_smb_signing) cli->sign_info.temp_smb_signing = True; - } } -/** +/**************************************************************************** do a NT1 NTLM/LM encrypted session setup @param cli client state to create do session setup on @param user username @param pass *either* cleartext password (passlen !=24) or LM response. @param ntpass NT response, implies ntpasslen >=24, implies pass is not clear @param workgroup The user's domain. -*/ +****************************************************************************/ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, char *pass, int passlen, @@ -285,9 +276,8 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, char *p; BOOL have_plaintext = False; - if (passlen > sizeof(pword) || ntpasslen > sizeof(ntpword)) { + if (passlen > sizeof(pword) || ntpasslen > sizeof(ntpword)) return False; - } if (passlen != 24) { /* non encrypted password supplied. Ignore ntpass. */ @@ -303,11 +293,10 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, security=server, can't do signing becouse we don't have oringial key */ memcpy(pword, pass, 24); - if (ntpasslen == 24) { + if (ntpasslen == 24) memcpy(ntpword, ntpass, 24); - } else { + else ZERO_STRUCT(ntpword); - } } /* send a session setup command */ @@ -334,19 +323,16 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, p += clistr_push(cli, p, "Samba", -1, STR_TERMINATE); cli_setup_bcc(cli, p); - if (!cli_send_smb(cli)) { + if (!cli_send_smb(cli)) return False; - } - if (!cli_receive_smb(cli)) { + if (!cli_receive_smb(cli)) return False; - } show_msg(cli->inbuf); - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } /* use the returned vuid from now on */ cli->vuid = SVAL(cli->inbuf,smb_uid); @@ -433,7 +419,6 @@ static DATA_BLOB cli_session_setup_blob(struct cli_state *cli, DATA_BLOB blob) return blob2; } - #ifdef HAVE_KRB5 /**************************************************************************** Do a spnego/kerberos encrypted session setup. @@ -472,7 +457,6 @@ static BOOL cli_session_setup_kerberos(struct cli_state *cli, char *principal, c static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, char *pass, char *workgroup) { - const char *mechs[] = {OID_NTLMSSP, NULL}; DATA_BLOB msg1, struct_blob; DATA_BLOB blob, chal1, chal2, auth; uint8 challenge[8]; @@ -506,9 +490,8 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, data_blob_free(&msg1); - if (!NT_STATUS_EQUAL(cli_nt_error(cli), NT_STATUS_MORE_PROCESSING_REQUIRED)) { + if (!NT_STATUS_EQUAL(cli_nt_error(cli), NT_STATUS_MORE_PROCESSING_REQUIRED)) return False; - } #if 0 file_save("chal.dat", blob.data, blob.length); @@ -541,9 +524,9 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, } if (ntlmssp_command != NTLMSSP_CHALLENGE) { - DEBUG(0, ("NTLMSSP Response != NTLMSSP_CHALLENGE. Got %0X\n", - ntlmssp_command)); - return False; + DEBUG(0, ("NTLMSSP Response != NTLMSSP_CHALLENGE. Got %0X\n", + ntlmssp_command)); + return False; } @@ -584,9 +567,8 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, data_blob_free(&auth); data_blob_free(&blob); - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } set_signing_on_cli(cli, pass, nthash); @@ -687,38 +669,38 @@ BOOL cli_session_setup(struct cli_state *cli, flow a bit easier to understand (tridge) */ /* if its an older server then we have to use the older request format */ - if (cli->protocol < PROTOCOL_NT1) { + + if (cli->protocol < PROTOCOL_NT1) return cli_session_setup_lanman2(cli, user, pass, passlen, workgroup); - } /* if no user is supplied then we have to do an anonymous connection. passwords are ignored */ - if (!user || !*user) { + + if (!user || !*user) return cli_session_setup_guest(cli); - } /* if the server is share level then send a plaintext null password at this point. The password is sent in the tree connect */ - if ((cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL) == 0) { + + if ((cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL) == 0) return cli_session_setup_plaintext(cli, user, "", workgroup); - } /* if the server doesn't support encryption then we have to use plaintext. The second password is ignored */ - if ((cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) == 0) { + + if ((cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) == 0) return cli_session_setup_plaintext(cli, user, pass, workgroup); - } /* Indidicate signing */ - /* if the server supports extended security then use SPNEGO */ - if (cli->capabilities & CAP_EXTENDED_SECURITY) { + + if (cli->capabilities & CAP_EXTENDED_SECURITY) return cli_session_setup_spnego(cli, user, pass, workgroup); - } /* otherwise do a NT1 style session setup */ + return cli_session_setup_nt1(cli, user, pass, passlen, ntpass, ntpasslen, workgroup); @@ -808,15 +790,13 @@ BOOL cli_send_tconX(struct cli_state *cli, if (!cli_receive_smb(cli)) return False; - if (cli_is_error(cli)) { + if (cli_is_error(cli)) return False; - } clistr_pull(cli, cli->dev, smb_buf(cli->inbuf), sizeof(fstring), -1, STR_TERMINATE|STR_ASCII); - if (strcasecmp(share,"IPC$")==0) { + if (strcasecmp(share,"IPC$")==0) fstrcpy(cli->dev, "IPC"); - } if (cli->protocol >= PROTOCOL_NT1 && smb_buflen(cli->inbuf) == 3) { @@ -856,9 +836,8 @@ void cli_negprot_send(struct cli_state *cli) char *p; int numprots; - if (cli->protocol < PROTOCOL_NT1) { + if (cli->protocol < PROTOCOL_NT1) cli->use_spnego = False; - } memset(cli->outbuf,'\0',smb_size); @@ -897,9 +876,8 @@ BOOL cli_negprot(struct cli_state *cli) return False; } - if (cli->protocol < PROTOCOL_NT1) { + if (cli->protocol < PROTOCOL_NT1) cli->use_spnego = False; - } memset(cli->outbuf,'\0',smb_size); @@ -986,9 +964,8 @@ BOOL cli_negprot(struct cli_state *cli) cli->max_xmit = MIN(cli->max_xmit, CLI_BUFFER_SIZE); /* a way to force ascii SMB */ - if (getenv("CLI_FORCE_ASCII")) { + if (getenv("CLI_FORCE_ASCII")) cli->capabilities &= ~CAP_UNICODE; - } return True; } @@ -1018,7 +995,8 @@ BOOL cli_session_request(struct cli_state *cli, len += name_len(p); /* 445 doesn't have session request */ - if (cli->port == 445) return True; + if (cli->port == 445) + return True; if (cli->sign_info.use_smb_signing) { DEBUG(0, ("Cannot send session resquest again, particularly after setting up SMB Signing\n")); @@ -1132,7 +1110,8 @@ BOOL cli_connect(struct cli_state *cli, const char *host, struct in_addr *ip) cli->fd = open_socket_out(SOCK_STREAM, &cli->dest_ip, port, cli->timeout); } - if (cli->fd != -1) cli->port = port; + if (cli->fd != -1) + cli->port = port; } if (cli->fd == -1) { DEBUG(1,("Error connecting to %s (%s)\n", @@ -1207,11 +1186,10 @@ NTSTATUS cli_full_connection(struct cli_state **output_cli, return NT_STATUS_UNSUCCESSFUL; } - if (dest_ip) { + if (dest_ip) ip = *dest_ip; - } else { + else ZERO_STRUCT(ip); - } again: @@ -1239,11 +1217,10 @@ again: return NT_STATUS_UNSUCCESSFUL; } - if (flags & CLI_FULL_CONNECTION_DONT_SPNEGO) { + if (flags & CLI_FULL_CONNECTION_DONT_SPNEGO) cli->use_spnego = False; - } else if (flags & CLI_FULL_CONNECTION_USE_KERBEROS) { + else if (flags & CLI_FULL_CONNECTION_USE_KERBEROS) cli->use_kerberos = True; - } if (!cli_negprot(cli)) { DEBUG(1,("failed negprot\n")); diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index 560d391320..facf361a6b 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -32,49 +32,48 @@ int cli_set_port(struct cli_state *cli, int port) } /**************************************************************************** - read an smb from a fd ignoring all keepalive packets. Note that the buffer - *MUST* be of size BUFFER_SIZE+SAFETY_MARGIN. - The timeout is in milliseconds - - This is exactly the same as receive_smb except that it never returns - a session keepalive packet (just as receive_smb used to do). - receive_smb was changed to return keepalives as the oplock processing means this call - should never go into a blocking read. + Read an smb from a fd ignoring all keepalive packets. Note that the buffer + *MUST* be of size BUFFER_SIZE+SAFETY_MARGIN. + The timeout is in milliseconds + + This is exactly the same as receive_smb except that it never returns + a session keepalive packet (just as receive_smb used to do). + receive_smb was changed to return keepalives as the oplock processing means this call + should never go into a blocking read. ****************************************************************************/ static BOOL client_receive_smb(int fd,char *buffer, unsigned int timeout) { - BOOL ret; - - for(;;) - { - ret = receive_smb(fd, buffer, timeout); - - if (!ret) - { - DEBUG(10,("client_receive_smb failed\n")); - show_msg(buffer); - return ret; - } - - /* Ignore session keepalive packets. */ - if(CVAL(buffer,0) != SMBkeepalive) - break; - } - show_msg(buffer); - return ret; -} + BOOL ret; + + for(;;) { + ret = receive_smb(fd, buffer, timeout); + + if (!ret) { + DEBUG(10,("client_receive_smb failed\n")); + show_msg(buffer); + return ret; + } + /* Ignore session keepalive packets. */ + if(CVAL(buffer,0) != SMBkeepalive) + break; + } + show_msg(buffer); + return ret; +} /**************************************************************************** -recv an smb + Recv an smb. ****************************************************************************/ + BOOL cli_receive_smb(struct cli_state *cli) { BOOL ret; /* fd == -1 causes segfaults -- Tom (tom@ninja.nl) */ - if (cli->fd == -1) return False; + if (cli->fd == -1) + return False; again: ret = client_receive_smb(cli->fd,cli->inbuf,cli->timeout); @@ -151,15 +150,12 @@ void cli_setup_packet(struct cli_state *cli) uint16 flags2; SCVAL(cli->outbuf,smb_flg,0x8); flags2 = FLAGS2_LONG_PATH_COMPONENTS; - if (cli->capabilities & CAP_UNICODE) { + if (cli->capabilities & CAP_UNICODE) flags2 |= FLAGS2_UNICODE_STRINGS; - } - if (cli->capabilities & CAP_STATUS32) { + if (cli->capabilities & CAP_STATUS32) flags2 |= FLAGS2_32_BIT_ERROR_CODES; - } - if (cli->use_spnego) { + if (cli->use_spnego) flags2 |= FLAGS2_EXTENDED_SECURITY; - } if (cli->sign_info.use_smb_signing || cli->sign_info.temp_smb_signing) flags2 |= FLAGS2_SMB_SECURITY_SIGNATURES; @@ -168,18 +164,18 @@ void cli_setup_packet(struct cli_state *cli) } /**************************************************************************** -setup the bcc length of the packet from a pointer to the end of the data + Setup the bcc length of the packet from a pointer to the end of the data. ****************************************************************************/ + void cli_setup_bcc(struct cli_state *cli, void *p) { set_message_bcc(cli->outbuf, PTR_DIFF(p, smb_buf(cli->outbuf))); } - - /**************************************************************************** -initialise credentials of a client structure + Initialise credentials of a client structure. ****************************************************************************/ + void cli_init_creds(struct cli_state *cli, const struct ntuser_creds *usr) { /* copy_nt_creds(&cli->usr, usr); */ @@ -194,10 +190,10 @@ void cli_init_creds(struct cli_state *cli, const struct ntuser_creds *usr) cli->ntlmssp_flags,cli->ntlmssp_cli_flgs)); } - /**************************************************************************** -initialise a client structure + Initialise a client structure. ****************************************************************************/ + struct cli_state *cli_initialise(struct cli_state *cli) { BOOL alloced_cli = False; @@ -280,11 +276,11 @@ struct cli_state *cli_initialise(struct cli_state *cli) } /**************************************************************************** -shutdown a client structure + Close a client connection and free the memory without destroying cli itself. ****************************************************************************/ -void cli_shutdown(struct cli_state *cli) + +void cli_close_connection(struct cli_state *cli) { - BOOL allocated; SAFE_FREE(cli->outbuf); SAFE_FREE(cli->inbuf); @@ -295,25 +291,35 @@ void cli_shutdown(struct cli_state *cli) if (cli->fd != -1) close(cli->fd); - allocated = cli->allocated; +} + +/**************************************************************************** + Shutdown a client structure. +****************************************************************************/ + +void cli_shutdown(struct cli_state *cli) +{ + BOOL allocated = cli->allocated; + cli_close_connection(cli); ZERO_STRUCTP(cli); if (allocated) { free(cli); } } - /**************************************************************************** -set socket options on a open connection + Set socket options on a open connection. ****************************************************************************/ + void cli_sockopt(struct cli_state *cli, char *options) { set_socket_options(cli->fd, options); } /**************************************************************************** -set the PID to use for smb messages. Return the old pid. + Set the PID to use for smb messages. Return the old pid. ****************************************************************************/ + uint16 cli_setpid(struct cli_state *cli, uint16 pid) { uint16 ret = cli->pid; -- cgit From 0d9cde27370e3c6cc6df28c7ee8a32aa57e3ce42 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 3 Sep 2002 19:19:20 +0000 Subject: Fix crashbug discovered by "Kim R. Pedersen" where cli struct was being deallocated in a called function. Jeremy. (This used to be commit e33e9defa657aa54594bb0c27f9be2f7b12aab1b) --- source3/libsmb/cliconnect.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 9ff4854998..885463bd34 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -1307,7 +1307,13 @@ with error %s.\n", desthost, cli_errstr(cli) )); return False; } - cli_shutdown(cli); + /* + * We need to close the connection here but can't call cli_shutdown as + * will free an allocated cli struct. cli_close_connection was invented + * for this purpose. JRA. Based on work by "Kim R. Pedersen" . + */ + + cli_close_connection(cli); if (!cli_initialise(cli) || !cli_connect(cli, desthost, pdest_ip) || -- cgit From fedc33df428411fb8a58c4e9d2d7d8fa0e9d2923 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 3 Sep 2002 20:10:25 +0000 Subject: Ensure we open UNIX fifo's non-blocking like we used to do. Jeremy. (This used to be commit 53f411df10f1e152d8d596cd24a2f66af9eb6e51) --- source3/smbd/open.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 8cc73a681d..a95793a050 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -154,6 +154,17 @@ static BOOL open_file(files_struct *fsp,connection_struct *conn, local_flags &= ~O_TRUNC; +#if defined(O_NONBLOCK) && defined(S_ISFIFO) + /* + * We would block on opening a FIFO with no one else on the + * other end. Do what we used to do and add O_NONBLOCK to the + * open flags. JRA. + */ + + if (VALID_STAT(*psbuf) && S_ISFIFO(psbuf->st_mode)) + local_flags |= O_NONBLOCK; +#endif + /* actually do the open */ fsp->fd = fd_open(conn, fname, local_flags, mode); -- cgit From f04ca060c2f30f4b5c01867b8db117e00912750c Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 3 Sep 2002 21:35:26 +0000 Subject: Fix the struct_blob. (This used to be commit ce152b33c8b08905ea863d47a620c90ca47c8566) --- source3/libsmb/cliconnect.c | 13 ++++++++----- source3/libsmb/clispnego.c | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 885463bd34..1f3635d6d7 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -458,7 +458,7 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, char *pass, char *workgroup) { DATA_BLOB msg1, struct_blob; - DATA_BLOB blob, chal1, chal2, auth; + DATA_BLOB blob, chal1, chal2, auth, challenge_blob; uint8 challenge[8]; uint8 nthash[24], lmhash[24], sess_key[16]; uint32 neg_flags, chal_flags, ntlmssp_command, unkn1, unkn2; @@ -516,9 +516,9 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, &ntlmssp_command, &server_domain, &chal_flags, - challenge, 8, + &challenge_blob, 8, &unkn1, &unkn2, - struct_blob.data, &struct_blob.length)) { + &struct_blob)) { DEBUG(0, ("Failed to parse the NTLMSSP Challenge\n")); return False; } @@ -529,11 +529,14 @@ static BOOL cli_session_setup_ntlmssp(struct cli_state *cli, char *user, return False; } + DEBUG(10, ("Challenge:\n")); + dump_data(10, challenge_blob.data, 8); - /* encrypt the password with the challenge */ - memcpy(challenge, chal1.data + 24, 8); + /* encrypt the password with the challenge which is in the blob */ + memcpy(challenge, challenge_blob.data, 8); SMBencrypt(pass, challenge,lmhash); SMBNTencrypt(pass, challenge,nthash); + data_blob_free(&challenge_blob); #if 0 file_save("nthash.dat", nthash, 24); diff --git a/source3/libsmb/clispnego.c b/source3/libsmb/clispnego.c index 8aab0fdda9..04ec6ed39e 100644 --- a/source3/libsmb/clispnego.c +++ b/source3/libsmb/clispnego.c @@ -518,6 +518,7 @@ DATA_BLOB spnego_gen_auth_response(void) A = ASCII string (pointer + length) Actually same as B B = data blob (pointer + length) b = data blob in header (pointer + length) + D d = word (4 bytes) C = constant ascii string */ -- cgit From 59f40f31edfd50d76ef72295dd92327614e4e2ac Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 4 Sep 2002 01:14:24 +0000 Subject: DeletePrinterDriver[Ex]() fixes from APP_HEAD (This used to be commit 04874134ed83847988bad5fcad3463395dc283fb) --- source3/printing/nt_printing.c | 272 +++++++++++++++++------------------- source3/rpc_server/srv_spoolss_nt.c | 137 ++++++++++++++---- 2 files changed, 238 insertions(+), 171 deletions(-) diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index bf90089448..2a96f9a83e 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -1745,7 +1745,7 @@ static WERROR get_a_printer_driver_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 **info_ptr, dbuf = tdb_fetch(tdb_drivers, kbuf); if (!dbuf.dptr) - return WERR_ACCESS_DENIED; + return WERR_UNKNOWN_PRINTER_DRIVER; len += tdb_unpack(dbuf.dptr, dbuf.dsize, "dffffffff", &driver.cversion, @@ -1864,7 +1864,7 @@ static uint32 dump_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 NT_PRINTER_DRIVER_INFO_LEVEL_3 *info3; int i; - DEBUG(106,("Dumping printer driver at level [%d]\n", level)); + DEBUG(20,("Dumping printer driver at level [%d]\n", level)); switch (level) { @@ -3724,13 +3724,13 @@ uint32 free_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 level) to a printer ****************************************************************************/ -BOOL printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i ) +BOOL printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3 ) { int snum; int n_services = lp_numservices(); NT_PRINTER_INFO_LEVEL *printer = NULL; - if ( !i ) + if ( !info_3 ) return False; DEBUG(5,("printer_driver_in_use: Beginning search through ntprinters.tdb...\n")); @@ -3745,7 +3745,7 @@ BOOL printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i ) if ( !W_ERROR_IS_OK(get_a_printer(&printer, 2, lp_servicename(snum))) ) continue; - if ( !StrCaseCmp(i->name, printer->info_2->drivername) ) { + if ( !StrCaseCmp(info_3->name, printer->info_2->drivername) ) { free_a_printer( &printer, 2 ); return True; } @@ -3767,7 +3767,7 @@ BOOL printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i ) static BOOL drv_file_in_use( char* file, NT_PRINTER_DRIVER_INFO_LEVEL_3 *info ) { - char *s; + int i = 0; if ( !info ) return False; @@ -3783,16 +3783,18 @@ static BOOL drv_file_in_use( char* file, NT_PRINTER_DRIVER_INFO_LEVEL_3 *info ) if ( strequal(file, info->helpfile) ) return True; - - s = (char*) info->dependentfiles; - if ( s ) { - while ( *s ) - { - if ( strequal(file, s) ) - return True; - s += strlen(s) + 1; - } + /* see of there are any dependent files to examine */ + + if ( !info->dependentfiles ) + return False; + + while ( *info->dependentfiles[i] ) + { + if ( strequal(file, info->dependentfiles[i]) ) + return True; + + i++; } return False; @@ -3804,27 +3806,20 @@ static BOOL drv_file_in_use( char* file, NT_PRINTER_DRIVER_INFO_LEVEL_3 *info ) input parameter from the list *********************************************************************/ -static void trim_dependent_file( char* s ) +static void trim_dependent_file( fstring files[], int idx ) { - char *p; - - /* set p to the next character string in the list */ - - p = s + strlen( s ) + 1; - - /* check to see that we have another string to copy back */ - if ( *p == '\0' ) + /* bump everything down a slot */ + + while( *files[idx+1] ) { - /* loop over s copying characters from p to s */ - while ( *p!='\0' && *(p+1)!='\0' ) - *s++ = *p++; + fstrcpy( files[idx], files[idx+1] ); + idx++; } - /* add the two trailing NULL's */ - - *s = '\0'; - *(s+1) = '\0'; + *files[idx] = '\0'; + + return; } /********************************************************************** @@ -3834,8 +3829,8 @@ static void trim_dependent_file( char* s ) static BOOL trim_overlap_drv_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *src, NT_PRINTER_DRIVER_INFO_LEVEL_3 *drv ) { - BOOL in_use = False; - char *s; + BOOL in_use = False; + int i = 0; if ( !src || !drv ) return False; @@ -3844,33 +3839,43 @@ static BOOL trim_overlap_drv_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *src, if ( drv_file_in_use(src->driverpath, drv) ) { in_use = True; + DEBUG(10,("Removing driverfile [%s] from list\n", src->driverpath)); fstrcpy( src->driverpath, "" ); } if ( drv_file_in_use(src->datafile, drv) ) { in_use = True; + DEBUG(10,("Removing datafile [%s] from list\n", src->datafile)); fstrcpy( src->datafile, "" ); } if ( drv_file_in_use(src->configfile, drv) ) { in_use = True; + DEBUG(10,("Removing configfile [%s] from list\n", src->configfile)); fstrcpy( src->configfile, "" ); } - s = (char*)src->dependentfiles; - - if ( s ) { - while ( *s ) - { - if ( drv_file_in_use(s, drv) ) { - in_use = True; - trim_dependent_file( s ); - } - else - s += strlen(s) + 1; - } + if ( drv_file_in_use(src->helpfile, drv) ) { + in_use = True; + DEBUG(10,("Removing helpfile [%s] from list\n", src->helpfile)); + fstrcpy( src->helpfile, "" ); } + + /* are there any dependentfiles to examine? */ + + if ( !src->dependentfiles ) + return in_use; + while ( *src->dependentfiles[i] ) + { + if ( drv_file_in_use(src->dependentfiles[i], drv) ) { + in_use = True; + DEBUG(10,("Removing [%s] from dependent file list\n", src->dependentfiles[i])); + trim_dependent_file( src->dependentfiles, i ); + } + else + i++; + } return in_use; } @@ -3894,59 +3899,62 @@ BOOL printer_driver_files_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info ) fstring *list = NULL; NT_PRINTER_DRIVER_INFO_LEVEL driver; + if ( !info ) + return False; + + version = info->cversion; + /* loop over all driver versions */ DEBUG(5,("printer_driver_files_in_use: Beginning search through ntdrivers.tdb...\n")); - for ( version=0; versionenvironment, version); + list = NULL; + ndrivers = get_ntdrivers(&list, info->environment, version); - DEBUGADD(4,("we have:[%d] drivers in environment [%s] and version [%d]\n", - ndrivers, info->environment, version)); + DEBUGADD(4,("we have:[%d] drivers in environment [%s] and version [%d]\n", + ndrivers, info->environment, version)); - if (ndrivers == -1) - continue; - - /* check each driver for overlap in files */ + /* check each driver for overlap in files */ - for (i=0; ienvironment, version)) ) - { - SAFE_FREE(list); - return True; - } + if ( !W_ERROR_IS_OK(get_a_printer_driver(&driver, 3, list[i], + info->environment, version)) ) + { + SAFE_FREE(list); + return True; + } - /* check if d2 uses any files from d1 */ - /* only if this is a different driver than the one being deleted */ + /* check if d2 uses any files from d1 */ + /* only if this is a different driver than the one being deleted */ - if ( !strequal(info->name, driver.info_3->name) - || (info->cversion != driver.info_3->cversion) ) - { - if ( trim_overlap_drv_files(info, driver.info_3) ) { - free_a_printer_driver(driver, 3); - SAFE_FREE( list ); - return True; - } + if ( !strequal(info->name, driver.info_3->name) ) + { + if ( trim_overlap_drv_files(info, driver.info_3) ) { + free_a_printer_driver(driver, 3); + SAFE_FREE( list ); + return True; } + } - free_a_printer_driver(driver, 3); - } - - SAFE_FREE(list); - } + free_a_printer_driver(driver, 3); + } + + SAFE_FREE(list); DEBUG(5,("printer_driver_files_in_use: Completed search through ntdrivers.tdb...\n")); + driver.info_3 = info; + + if ( DEBUGLEVEL >= 20 ) + dump_a_printer_driver( driver, 3 ); + return False; } @@ -3956,17 +3964,18 @@ BOOL printer_driver_files_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info ) this. ****************************************************************************/ -static BOOL delete_driver_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, struct current_user *user ) +static BOOL delete_driver_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3, struct current_user *user ) { + int i = 0; char *s; connection_struct *conn; DATA_BLOB null_pw; NTSTATUS nt_status; - if ( !i ) + if ( !info_3 ) return False; - DEBUG(6,("delete_driver_files: deleting driver [%s] - version [%d]\n", i->name, i->cversion)); + DEBUG(6,("delete_driver_files: deleting driver [%s] - version [%d]\n", info_3->name, info_3->cversion)); /* * Connect to the print$ share under the same account as the @@ -3994,49 +4003,55 @@ static BOOL delete_driver_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, struct curre /* now delete the files; must strip the '\print$' string from fron of path */ - if ( *i->driverpath ) { - if ( (s = strchr( &i->driverpath[1], '\\' )) != NULL ) { + if ( *info_3->driverpath ) { + if ( (s = strchr( &info_3->driverpath[1], '\\' )) != NULL ) { DEBUG(10,("deleting driverfile [%s]\n", s)); unlink_internals(conn, 0, s); } } - if ( *i->configfile ) { - if ( (s = strchr( &i->configfile[1], '\\' )) != NULL ) { + if ( *info_3->configfile ) { + if ( (s = strchr( &info_3->configfile[1], '\\' )) != NULL ) { DEBUG(10,("deleting configfile [%s]\n", s)); unlink_internals(conn, 0, s); } } - if ( *i->datafile ) { - if ( (s = strchr( &i->datafile[1], '\\' )) != NULL ) { + if ( *info_3->datafile ) { + if ( (s = strchr( &info_3->datafile[1], '\\' )) != NULL ) { DEBUG(10,("deleting datafile [%s]\n", s)); unlink_internals(conn, 0, s); } } - if ( *i->helpfile ) { - if ( (s = strchr( &i->helpfile[1], '\\' )) != NULL ) { + if ( *info_3->helpfile ) { + if ( (s = strchr( &info_3->helpfile[1], '\\' )) != NULL ) { DEBUG(10,("deleting helpfile [%s]\n", s)); unlink_internals(conn, 0, s); } } - s = (char*)i->dependentfiles; + /* check if we are done removing files */ - while ( s && *s ) { - char *file; + if ( info_3->dependentfiles ) + { + while ( *info_3->dependentfiles[i] ) { + char *file; - if ( (file = strchr( s+1, '\\' )) != NULL ) - { - DEBUG(10,("deleting dependent file [%s]\n", file)); - unlink_internals(conn, 0, file ); - file += strlen( file ) + 1; + /* bypass the "\print$" portion of the path */ + + if ( (file = strchr( info_3->dependentfiles[i]+1, '\\' )) != NULL ) + { + DEBUG(10,("deleting dependent file [%s]\n", file)); + unlink_internals(conn, 0, file ); + } + + i++; } - - s = file; } + unbecome_user(); + return True; } @@ -4045,7 +4060,7 @@ static BOOL delete_driver_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, struct curre previously looked up. ***************************************************************************/ -static WERROR delete_printer_driver_internal( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, struct current_user *user, +WERROR delete_printer_driver( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3, struct current_user *user, uint32 version, BOOL delete_files ) { pstring key; @@ -4055,14 +4070,14 @@ static WERROR delete_printer_driver_internal( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, /* delete the tdb data first */ - get_short_archi(arch, i->environment); + get_short_archi(arch, info_3->environment); slprintf(key, sizeof(key)-1, "%s%s/%d/%s", DRIVERS_PREFIX, - arch, version, i->name); + arch, version, info_3->name); DEBUG(5,("delete_printer_driver: key = [%s] delete_files = %s\n", key, delete_files ? "TRUE" : "FALSE" )); - ctr.info_3 = i; + ctr.info_3 = info_3; dump_a_printer_driver( ctr, 3 ); kbuf.dptr=key; @@ -4072,7 +4087,7 @@ static WERROR delete_printer_driver_internal( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, dbuf = tdb_fetch( tdb_drivers, kbuf ); if ( !dbuf.dptr ) { - DEBUG(8,("delete_printer_driver_internal: Driver unknown [%s]\n", key)); + DEBUG(8,("delete_printer_driver: Driver unknown [%s]\n", key)); return WERR_UNKNOWN_PRINTER_DRIVER; } @@ -4081,7 +4096,7 @@ static WERROR delete_printer_driver_internal( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, /* ok... the driver exists so the delete should return success */ if (tdb_delete(tdb_drivers, kbuf) == -1) { - DEBUG (0,("delete_printer_driver_internal: fail to delete %s!\n", key)); + DEBUG (0,("delete_printer_driver: fail to delete %s!\n", key)); return WERR_ACCESS_DENIED; } @@ -4092,51 +4107,14 @@ static WERROR delete_printer_driver_internal( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, */ if ( delete_files ) - delete_driver_files( i, user ); - - - DEBUG(5,("delete_printer_driver_internal: driver delete successful [%s]\n", key)); - - return WERR_OK; -} - -/**************************************************************************** - Remove a printer driver from the TDB. This assumes that the the driver was - previously looked up. - ***************************************************************************/ - -WERROR delete_printer_driver( NT_PRINTER_DRIVER_INFO_LEVEL_3 *i, struct current_user *user, - uint32 version, BOOL delete_files ) -{ - WERROR err; - - /* - * see if we should delete all versions of this driver - * (DRIVER_ANY_VERSION uis only set for "Windows NT x86") - */ - - if ( version == DRIVER_ANY_VERSION ) - { - /* Windows NT 4.0 */ - - err = delete_printer_driver_internal(i, user, 2, delete_files ); - if ( !W_ERROR_IS_OK(err) && (W_ERROR_V(err) != ERRunknownprinterdriver ) ) - return err; + delete_driver_files( info_3, user ); - /* Windows 2000/XP */ - err = delete_printer_driver_internal(i, user, 3, delete_files ); - if ( !W_ERROR_IS_OK(err) && (W_ERROR_V(err) != ERRunknownprinterdriver ) ) - return err; + DEBUG(5,("delete_printer_driver: driver delete successful [%s]\n", key)); return WERR_OK; } - /* just delete what they asked for */ - - return delete_printer_driver_internal(i, user, version, delete_files ); -} - /**************************************************************************** Store a security desc for a printer. ****************************************************************************/ diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index c4105f9780..37f8071e69 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1593,8 +1593,11 @@ WERROR _spoolss_deleteprinterdriver(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIVER fstring driver; fstring arch; NT_PRINTER_DRIVER_INFO_LEVEL info; + NT_PRINTER_DRIVER_INFO_LEVEL info_win2k; int version; struct current_user user; + WERROR status; + WERROR status_win2k = WERR_ACCESS_DENIED; get_current_user(&user, p); @@ -1602,25 +1605,58 @@ WERROR _spoolss_deleteprinterdriver(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIVER unistr2_to_ascii(arch, &q_u->arch, sizeof(arch)-1 ); /* check that we have a valid driver name first */ - if ((version=get_version_id(arch)) == -1) { - /* this is what NT returns */ + + if ((version=get_version_id(arch)) == -1) return WERR_INVALID_ENVIRONMENT; + + ZERO_STRUCT(info); + ZERO_STRUCT(info_win2k); + + if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) + { + /* try for Win2k driver if "Windows NT x86" */ + + if ( version == 2 ) { + version = 3; + if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) { + status = WERR_UNKNOWN_PRINTER_DRIVER; + goto done; + } + } } - /* if they said "Windows NT x86", then try for version 2 & 3 */ + if (printer_driver_in_use(info.info_3)) { + status = WERR_PRINTER_DRIVER_IN_USE; + goto done; + } if ( version == 2 ) - version = DRIVER_ANY_VERSION; + { + if (W_ERROR_IS_OK(get_a_printer_driver(&info_win2k, 3, driver, arch, 3))) + { + /* if we get to here, we now have 2 driver info structures to remove */ + /* remove the Win2k driver first*/ - ZERO_STRUCT(info); + status_win2k = delete_printer_driver(info_win2k.info_3, &user, 3, False ); + free_a_printer_driver( info_win2k, 3 ); + + /* this should not have failed---if it did, report to client */ + if ( !W_ERROR_IS_OK(status_win2k) ) + goto done; + } + } - if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) - return WERR_UNKNOWN_PRINTER_DRIVER; + status = delete_printer_driver(info.info_3, &user, version, False); + + /* if at least one of the deletes succeeded return OK */ - if (printer_driver_in_use(info.info_3)) - return WERR_PRINTER_DRIVER_IN_USE; + if ( W_ERROR_IS_OK(status) || W_ERROR_IS_OK(status_win2k) ) + status = WERR_OK; + +done: + free_a_printer_driver( info, 3 ); - return delete_printer_driver(info.info_3, &user, DRIVER_ANY_VERSION, False); + return status; } /******************************************************************** @@ -1632,10 +1668,13 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV fstring driver; fstring arch; NT_PRINTER_DRIVER_INFO_LEVEL info; + NT_PRINTER_DRIVER_INFO_LEVEL info_win2k; int version; uint32 flags = q_u->delete_flags; BOOL delete_files; struct current_user user; + WERROR status; + WERROR status_win2k = WERR_ACCESS_DENIED; get_current_user(&user, p); @@ -1650,17 +1689,35 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV if ( flags & DPD_DELETE_SPECIFIC_VERSION ) version = q_u->version; - else if ( version == 2 ) - /* if they said "Windows NT x86", then try for version 2 & 3 */ - version = DRIVER_ANY_VERSION; ZERO_STRUCT(info); + ZERO_STRUCT(info_win2k); + + status = get_a_printer_driver(&info, 3, driver, arch, version); - if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) - return WERR_UNKNOWN_PRINTER_DRIVER; + if ( !W_ERROR_IS_OK(status) ) + { + /* if the client asked for a specific version, then we've failed */ - if ( printer_driver_in_use(info.info_3) ) - return WERR_PRINTER_DRIVER_IN_USE; + if ( flags & DPD_DELETE_SPECIFIC_VERSION ) + goto done; + + /* try for Win2k driver if "Windows NT x86" */ + + if ( version == 2 ) + { + version = 3; + if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) { + status = WERR_UNKNOWN_PRINTER_DRIVER; + goto done; + } + } + } + + if ( printer_driver_in_use(info.info_3) ) { + status = WERR_PRINTER_DRIVER_IN_USE; + goto done; + } /* * we have a couple of cases to consider. @@ -1676,16 +1733,48 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV delete_files = flags & (DPD_DELETE_ALL_FILES|DPD_DELETE_UNUSED_FILES); - if ( delete_files ) - { - /* fail if any files are in use and DPD_DELETE_ALL_FILES is set */ + /* fail if any files are in use and DPD_DELETE_ALL_FILES is set */ + + if ( delete_files && printer_driver_files_in_use(info.info_3) & (flags&DPD_DELETE_ALL_FILES) ) { + /* no idea of the correct error here */ + status = WERR_ACCESS_DENIED; + goto done; + } + + + /* also check for W32X86/3 if necessary; maybe we already have? */ + + if ( (version == 2) && ((flags&DPD_DELETE_SPECIFIC_VERSION) != DPD_DELETE_SPECIFIC_VERSION) ) { + if (W_ERROR_IS_OK(get_a_printer_driver(&info_win2k, 3, driver, arch, 3))) + { + + if ( delete_files && printer_driver_files_in_use(info_win2k.info_3) & (flags&DPD_DELETE_ALL_FILES) ) { + /* no idea of the correct error here */ + status = WERR_ACCESS_DENIED; + goto done; + } - if ( printer_driver_files_in_use(info.info_3) & (flags&DPD_DELETE_ALL_FILES) ) - /* no idea of the correct error here */ - return WERR_ACCESS_DENIED; + /* if we get to here, we now have 2 driver info structures to remove */ + /* remove the Win2k driver first*/ + + status_win2k = delete_printer_driver(info.info_3, &user, 3, delete_files); + free_a_printer_driver( info_win2k, 3 ); + + /* this should not have failed---if it did, report to client */ + + if ( !W_ERROR_IS_OK(status_win2k) ) + goto done; + } } - return delete_printer_driver(info.info_3, &user, version, delete_files); + status = delete_printer_driver(info.info_3, &user, version, delete_files); + + if ( W_ERROR_IS_OK(status) || W_ERROR_IS_OK(status_win2k) ) + status = WERR_OK; +done: + free_a_printer_driver( info, 3 ); + + return status; } -- cgit From 2d8e2cfc7915e0027f8359b50042312a6827d8a9 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 4 Sep 2002 01:15:01 +0000 Subject: remove inet_aton() (This used to be commit a7616b2b942eaf3be4e16fb9d38cdb42d8b95a94) --- source3/rpcclient/rpcclient.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c index 5f15c57577..5f1f7a9f9a 100644 --- a/source3/rpcclient/rpcclient.c +++ b/source3/rpcclient/rpcclient.c @@ -667,7 +667,7 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) break; } case 'I': - if (!inet_aton(opt_ipaddr, &server_ip)) { + if ( (server_ip.s_addr=inet_addr(opt_ipaddr)) == INADDR_NONE ) { fprintf(stderr, "%s not a valid IP address\n", opt_ipaddr); return 1; -- cgit From abff9f492a2a66a6e825ab4c73b8c83661df0f7e Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 4 Sep 2002 02:57:16 +0000 Subject: Quietened some debugs. (This used to be commit ea26b3e8efcb83e16f7eb5add031a8df99046a69) --- source3/nsswitch/winbindd_rpc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/nsswitch/winbindd_rpc.c b/source3/nsswitch/winbindd_rpc.c index 5ec34f663d..58d9092940 100644 --- a/source3/nsswitch/winbindd_rpc.c +++ b/source3/nsswitch/winbindd_rpc.c @@ -419,7 +419,7 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain, uint32 des_access = SEC_RIGHTS_MAXIMUM_ALLOWED; BOOL got_dom_pol = False, got_group_pol = False; - DEBUG(3,("rpc: lookup_groupmem rid=%u\n", group_rid)); + DEBUG(10,("rpc: lookup_groupmem %s rid=%u\n", domain->name, group_rid)); *num_names = 0; @@ -523,7 +523,7 @@ static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32 *seq) BOOL got_dom_pol = False; uint32 des_access = SEC_RIGHTS_MAXIMUM_ALLOWED; - DEBUG(3,("rpc: sequence_number\n")); + DEBUG(10,("rpc: fetch sequence_number for %s\n", domain->name)); *seq = DOM_SEQUENCE_NONE; -- cgit From 45f9cbe03374e8addeed0720a9d7dad8f6fb9f68 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 4 Sep 2002 04:30:41 +0000 Subject: Fix typo in comment. (This used to be commit 47b8ec632e20aa86c34f6a0a82d886fcc76f3000) --- source3/rpc_parse/parse_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/rpc_parse/parse_spoolss.c b/source3/rpc_parse/parse_spoolss.c index 29902d395e..55c387cdc5 100644 --- a/source3/rpc_parse/parse_spoolss.c +++ b/source3/rpc_parse/parse_spoolss.c @@ -659,7 +659,7 @@ BOOL spoolss_io_devmode(char *desc, prs_struct *ps, int depth, DEVICEMODE *devmo { "panningheight", NULL } }; - /* assign at run time to keep non-gcc vompilers happy */ + /* assign at run time to keep non-gcc compilers happy */ opt_fields[0].field = &devmode->icmmethod; opt_fields[1].field = &devmode->icmintent; -- cgit From 4b27cda2858961fcdaefcb9b47a4f7b3310566c3 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 4 Sep 2002 08:08:03 +0000 Subject: Set default ACB attributes on 'unixsam' accounts. This means that machine accounts added first to /etc/passwd will be honered correctly. Also, users 'upgraded' to smbpasswd will have the right flags. Andrew Bartlett (This used to be commit 474cc910c73e5567313bac438c7324a80e2e90d8) --- source3/passdb/passdb.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c index 7a8c40346f..05450c9f2f 100644 --- a/source3/passdb/passdb.c +++ b/source3/passdb/passdb.c @@ -251,6 +251,15 @@ NTSTATUS pdb_fill_sam_pw(SAM_ACCOUNT *sam_account, const struct passwd *pwd) pwd->pw_name, global_myname, pwd->pw_uid, pwd->pw_gid), False); + if (!pdb_set_acct_ctrl(sam_account, ACB_NORMAL)) { + DEBUG(1, ("Failed to set 'normal account' flags for user %s.\n", pwd->pw_name)); + return NT_STATUS_UNSUCCESSFUL; + } + } else { + if (!pdb_set_acct_ctrl(sam_account, ACB_WSTRUST)) { + DEBUG(1, ("Failed to set 'trusted workstation account' flags for user %s.\n", pwd->pw_name)); + return NT_STATUS_UNSUCCESSFUL; + } } return NT_STATUS_OK; } -- cgit From 65029365ba9e2df821a57173c7532e4cbc7b06e9 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 4 Sep 2002 10:58:42 +0000 Subject: don't use ENCTYPE_ARCFOUR_HMAC unless the kerberos lib supports it (This used to be commit 13dc9e37d2422c45ac5005dce26b349f88dbe505) --- source3/libsmb/clikrb5.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source3/libsmb/clikrb5.c b/source3/libsmb/clikrb5.c index 955a93285c..1fc400edb0 100644 --- a/source3/libsmb/clikrb5.c +++ b/source3/libsmb/clikrb5.c @@ -20,10 +20,6 @@ #include "includes.h" -#ifndef ENCTYPE_ARCFOUR_HMAC -#define ENCTYPE_ARCFOUR_HMAC 0x0017 -#endif - #ifdef HAVE_KRB5 /* we can't use krb5_mk_req because w2k wants the service to be in a particular format @@ -98,7 +94,10 @@ DATA_BLOB krb5_get_ticket(char *principal) krb5_context context; krb5_auth_context auth_context = NULL; DATA_BLOB ret; - krb5_enctype enc_types[] = {ENCTYPE_ARCFOUR_HMAC, + krb5_enctype enc_types[] = { +#ifdef ENCTYPE_ARCFOUR_HMAC + ENCTYPE_ARCFOUR_HMAC, +#endif ENCTYPE_DES_CBC_MD5, ENCTYPE_NULL}; -- cgit From a1aafce4dc69b4bc4967ce9b70550ee3ecfab43b Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 4 Sep 2002 19:13:06 +0000 Subject: Add bcast_msg_flags to connection struct. Allows sender to filter when sending broadcast messages. Also initial cut-down of printing notify messages (not yet finished). Jeremy. (This used to be commit aca333719695b278843c59e1c6eb07d6655fd59c) --- source3/include/local.h | 4 ---- source3/include/messages.h | 8 ++++++++ source3/include/smb.h | 1 + source3/lib/messages.c | 25 ++++++++++++++++++++++--- source3/printing/printing.c | 30 ++++++++++++++++++------------ source3/smbd/connection.c | 13 +++++++------ source3/smbd/reply.c | 2 +- source3/smbd/server.c | 2 +- source3/smbd/service.c | 2 +- 9 files changed, 59 insertions(+), 28 deletions(-) diff --git a/source3/include/local.h b/source3/include/local.h index 15231e92ee..5096e13fc3 100644 --- a/source3/include/local.h +++ b/source3/include/local.h @@ -67,10 +67,6 @@ #define MAX_OPEN_FILES 10000 #endif -/* the max number of simultanous connections to the server by all clients */ -/* zero means no limit. */ -#define MAXSTATUS 0 - #define WORDMAX 0xFFFF /* the maximum password length before we declare a likely attack */ diff --git a/source3/include/messages.h b/source3/include/messages.h index 58e606b40f..0e995039ff 100644 --- a/source3/include/messages.h +++ b/source3/include/messages.h @@ -59,4 +59,12 @@ #define MSG_SMB_SAM_SYNC 3003 #define MSG_SMB_SAM_REPL 3004 +/* Flags to classify messages - used in message_send_all() */ +/* Sender will filter by flag. */ + +#define FLAG_MSG_GENERAL 0x0001 +#define FLAG_MSG_SMBD 0x0002 +#define FLAG_MSG_NMBD 0x0004 +#define FLAG_MSG_PRINTING 0x0008 + #endif diff --git a/source3/include/smb.h b/source3/include/smb.h index f2eb37096c..909c1a57ec 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -718,6 +718,7 @@ struct connections_data { char addr[24]; char machine[FSTRING_LEN]; time_t start; + uint32 bcast_msg_flags; }; diff --git a/source3/lib/messages.c b/source3/lib/messages.c index e6d2de4a58..21470dff5c 100644 --- a/source3/lib/messages.c +++ b/source3/lib/messages.c @@ -382,10 +382,11 @@ void message_deregister(int msg_type) struct msg_all { int msg_type; + uint32 msg_flag; const void *buf; size_t len; BOOL duplicates; - int n_sent; + int n_sent; }; /**************************************************************************** @@ -405,13 +406,20 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void if (crec.cnum != -1) return 0; - /* if the msg send fails because the pid was not found (i.e. smbd died), + /* Don't send if the receiver hasn't registered an interest. */ + + if(!(crec.bcast_msg_flags & msg_all->msg_flag)) + return 0; + + /* If the msg send fails because the pid was not found (i.e. smbd died), * the msg has already been deleted from the messages.tdb.*/ + if (!message_send_pid(crec.pid, msg_all->msg_type, msg_all->buf, msg_all->len, msg_all->duplicates)) { - /* if the pid was not found delete the entry from connections.tdb */ + /* If the pid was not found delete the entry from connections.tdb */ + if (errno == ESRCH) { DEBUG(2,("pid %u doesn't exist - deleting connections %d [%s]\n", (unsigned int)crec.pid, crec.cnum, crec.name)); @@ -442,6 +450,17 @@ BOOL message_send_all(TDB_CONTEXT *conn_tdb, int msg_type, struct msg_all msg_all; msg_all.msg_type = msg_type; + if (msg_type < 1000) + msg_all.msg_flag = FLAG_MSG_GENERAL; + else if (msg_type > 1000 && msg_type < 2000) + msg_all.msg_flag = FLAG_MSG_NMBD; + else if (msg_type > 2000 && msg_type < 3000) + msg_all.msg_flag = FLAG_MSG_PRINTING; + else if (msg_type > 3000 && msg_type < 4000) + msg_all.msg_flag = FLAG_MSG_SMBD; + else + return False; + msg_all.buf = buf; msg_all.len = len; msg_all.duplicates = duplicates_allowed; diff --git a/source3/printing/printing.c b/source3/printing/printing.c index f3ee1a0d63..0dacfe820c 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -460,7 +460,7 @@ static void pjob_store_notify(int snum, uint32 jobid, struct printjob *old_data, Store a job structure back to the database. ****************************************************************************/ -static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) +static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob, BOOL donotify) { TDB_DATA old_data, new_data; BOOL ret; @@ -483,7 +483,7 @@ static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) /* Send notify updates for what has changed */ - if (ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { + if (donotify && ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { pjob_store_notify( snum, jobid, (struct printjob *)old_data.dptr, (struct printjob *)new_data.dptr); @@ -581,7 +581,7 @@ static void print_unix_job(int snum, print_queue_struct *q) fstrcpy(pj.user, q->fs_user); fstrcpy(pj.queuename, lp_const_servicename(snum)); - pjob_store(snum, jobid, &pj); + pjob_store(snum, jobid, &pj, True); } @@ -868,7 +868,7 @@ static void print_queue_update(int snum) pjob->sysjob = queue[i].job; pjob->status = queue[i].status; - pjob_store(snum, jobid, pjob); + pjob_store(snum, jobid, pjob, True); } /* now delete any queued entries that don't appear in the @@ -977,7 +977,7 @@ BOOL print_job_set_name(int snum, uint32 jobid, char *name) return False; fstrcpy(pjob->jobname, name); - return pjob_store(snum, jobid, pjob); + return pjob_store(snum, jobid, pjob, True); } /**************************************************************************** @@ -1009,7 +1009,7 @@ static BOOL print_job_delete1(int snum, uint32 jobid) /* Set the tdb entry to be deleting. */ pjob->status = LPQ_DELETING; - pjob_store(snum, jobid, pjob); + pjob_store(snum, jobid, pjob, True); if (pjob->spooled && pjob->sysjob != -1) result = (*(current_printif->job_delete))(snum, pjob); @@ -1172,7 +1172,7 @@ int print_job_write(int snum, uint32 jobid, const char *buf, int size) return_code = write(pjob->fd, buf, size); if (return_code>0) { pjob->size += size; - pjob_store(snum, jobid, pjob); + pjob_store(snum, jobid, pjob, True); } return return_code; } @@ -1265,6 +1265,7 @@ int print_queue_length(int snum, print_status_struct *pstatus) return len; } +#if 0 /* JRATEST */ /**************************************************************************** Determine the number of jobs in all queues. This is very expensive. Don't call ! JRA. @@ -1298,6 +1299,7 @@ static int get_total_jobs(void) } return total_jobs; } +#endif /* JRATEST */ /*************************************************************************** Start spooling a job - return the jobid. @@ -1362,6 +1364,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) return (uint32)-1; } +#if 0 /* JRATEST */ /* Insure the maximum print jobs in the system is not violated */ if (lp_totalprintjobs() && get_total_jobs() > lp_totalprintjobs()) { DEBUG(3, ("print_job_start: number of jobs (%d) larger than max printjobs per system (%d).\n", @@ -1370,6 +1373,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) errno = ENOSPC; return (uint32)-1; } +#endif /* JRATEST */ /* create the database entry */ ZERO_STRUCT(pjob); @@ -1407,7 +1411,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) if (!print_job_exists(snum, jobid)) break; } - if (jobid == next_jobid || !pjob_store(snum, jobid, &pjob)) { + if (jobid == next_jobid || !pjob_store(snum, jobid, &pjob, False)) { DEBUG(3, ("print_job_start: either jobid (%d)==next_jobid(%d) or pjob_store failed.\n", jobid, next_jobid )); jobid = -1; @@ -1420,6 +1424,9 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) goto fail; } + /* We've finished with the INFO/nextjob lock. */ + tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); + /* we have a job entry - now create the spool file */ slprintf(pjob.filename, sizeof(pjob.filename)-1, "%s/%s%.8u.XXXXXX", path, PRINT_SPOOL_PREFIX, (unsigned int)jobid); @@ -1438,9 +1445,8 @@ to open spool file %s.\n", pjob.filename)); goto fail; } - pjob_store(snum, jobid, &pjob); + pjob_store(snum, jobid, &pjob, False); - tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); release_print_db(pdb); /* @@ -1481,7 +1487,7 @@ void print_job_endpage(int snum, uint32 jobid) return; pjob->page_count++; - pjob_store(snum, jobid, pjob); + pjob_store(snum, jobid, pjob, True); } /**************************************************************************** @@ -1539,7 +1545,7 @@ BOOL print_job_end(int snum, uint32 jobid, BOOL normal_close) pjob->spooled = True; pjob->status = LPQ_QUEUED; - pjob_store(snum, jobid, pjob); + pjob_store(snum, jobid, pjob, True); /* make sure the database is up to date */ if (print_cache_expired(snum)) diff --git a/source3/smbd/connection.c b/source3/smbd/connection.c index 5609c2963d..bc897a95cb 100644 --- a/source3/smbd/connection.c +++ b/source3/smbd/connection.c @@ -28,10 +28,9 @@ static TDB_CONTEXT *tdb; TDB_CONTEXT *conn_tdb_ctx(void) { - if (!tdb) { + if (!tdb) tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, O_RDWR | O_CREAT, 0644); - } return tdb; } @@ -45,7 +44,8 @@ BOOL yield_connection(connection_struct *conn,char *name) struct connections_key key; TDB_DATA kbuf; - if (!tdb) return False; + if (!tdb) + return False; DEBUG(3,("Yielding connection to %s\n",name)); @@ -111,16 +111,16 @@ static int count_fn( TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *u Claim an entry in the connections database. ****************************************************************************/ -BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOOL Clear) +BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOOL Clear, uint32 msg_flags) { struct connections_key key; struct connections_data crec; TDB_DATA kbuf, dbuf; - if (!tdb) { + if (!tdb) tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, O_RDWR | O_CREAT, 0644); - } + if (!tdb) return False; @@ -176,6 +176,7 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO lp_servicename(SNUM(conn)),sizeof(crec.name)-1); } crec.start = time(NULL); + crec.bcast_msg_flags = msg_flags; StrnCpy(crec.machine,get_remote_machine_name(),sizeof(crec.machine)-1); StrnCpy(crec.addr,conn?conn->client_address:client_addr(),sizeof(crec.addr)-1); diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 010f0e47d3..263626dcc1 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -113,7 +113,7 @@ int reply_special(char *inbuf,char *outbuf) reload_services(True); reopen_logs(); - claim_connection(NULL,"",MAXSTATUS,True); + claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD|FLAG_MSG_PRINTING); already_got_session = True; break; diff --git a/source3/smbd/server.c b/source3/smbd/server.c index c748a87da2..8082c22cff 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -858,7 +858,7 @@ static void usage(char *pname) register_dmalloc_msgs(); /* Setup the main smbd so that we can get messages. */ - claim_connection(NULL,"",0,True); + claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD); /* DO NOT ENABLE THIS TILL YOU COPE WITH KILLING THESE TASKS AND INETD diff --git a/source3/smbd/service.c b/source3/smbd/service.c index d475451e6b..a8a590da80 100644 --- a/source3/smbd/service.c +++ b/source3/smbd/service.c @@ -578,7 +578,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser, if (!claim_connection(conn, lp_servicename(SNUM(conn)), lp_max_connections(SNUM(conn)), - False)) { + False,0)) { DEBUG(1,("too many connections - rejected\n")); conn_free(conn); *status = NT_STATUS_INSUFFICIENT_RESOURCES; -- cgit From cbaa14857b6fd2704fa920c1fb15011e70b7df0f Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 4 Sep 2002 21:59:38 +0000 Subject: Merge of (apparently working :-) new printing notify code. Jeremy. (This used to be commit 8595c6ce4d74539089b600b3b0ff858a04b793ff) --- source3/printing/notify.c | 110 ++++++++++++++++++++++++++++++------ source3/rpc_server/srv_spoolss_nt.c | 59 +++++++++++++++++-- source3/smbd/connection.c | 71 ++++++++++++++++++----- source3/smbd/process.c | 10 +++- 4 files changed, 213 insertions(+), 37 deletions(-) diff --git a/source3/printing/notify.c b/source3/printing/notify.c index 925d49a21d..4bde6a94f6 100644 --- a/source3/printing/notify.c +++ b/source3/printing/notify.c @@ -22,21 +22,96 @@ #include "printing.h" -/* - * Print notification routines - */ +static TALLOC_CTX *send_ctx; + +static struct notify_queue { + struct notify_queue *next, *prev; + void *buf; + size_t buflen; +} *notify_queue_head = NULL; + +/******************************************************************* + Used to decide if we need a short select timeout. +*******************************************************************/ + +BOOL print_notify_messages_pending(void) +{ + return (notify_queue_head != NULL); +} + +/******************************************************************* + Actually send the batched messages. +*******************************************************************/ + +void print_notify_send_messages(void) +{ + TDB_CONTEXT *tdb; + char *buf; + struct notify_queue *pq; + size_t msg_count = 0, offset = 0; + + if (!print_notify_messages_pending()) + return; + + if (!send_ctx) + return; + + tdb = conn_tdb_ctx(); + + if (!tdb) { + DEBUG(3, ("Failed to open connections database in send_spoolss_notify2_msg\n")); + return; + } + + /* Count the space needed to send the messages. */ + for (pq = notify_queue_head; pq; pq = pq->next, msg_count++) + offset += (pq->buflen + 4); + + offset += 4; /* For count. */ + + buf = talloc(send_ctx, offset); + if (!buf) { + DEBUG(0,("print_notify_send_messages: Out of memory\n")); + talloc_destroy_pool(send_ctx); + return; + } + + offset = 0; + SIVAL(buf,offset,msg_count); + offset += 4; + for (pq = notify_queue_head; pq; pq = pq->next) { + SIVAL(buf,offset,pq->buflen); + offset += 4; + memcpy(buf + offset, pq->buf, pq->buflen); + offset += pq->buflen; + } + + message_send_all(tdb, MSG_PRINTER_NOTIFY2, buf, offset, False, NULL); + talloc_destroy_pool(send_ctx); + notify_queue_head = NULL; +} + +/******************************************************************* + Batch up print notify messages. +*******************************************************************/ static void send_spoolss_notify2_msg(struct spoolss_notify_msg *msg) { char *buf = NULL; - int buflen = 0, len; - TDB_CONTEXT *tdb; + size_t buflen = 0, len; + struct notify_queue *pnqueue; /* Let's not waste any time with this */ if (lp_disable_spoolss()) return; + if (!send_ctx) + send_ctx = talloc_init_named("print notify queue"); + + if (!send_ctx) + goto fail; + /* Flatten data into a message */ again: @@ -59,24 +134,27 @@ again: msg->len, msg->notify.data); if (buflen != len) { - buf = Realloc(buf, len); + buf = talloc_realloc(send_ctx, buf, len); + if (!buf) + goto fail; buflen = len; goto again; } - /* Send message */ + /* Store the message on the pending queue. */ - tdb = conn_tdb_ctx(); + pnqueue = talloc(send_ctx, sizeof(*pnqueue)); + if (!pnqueue) + goto fail; - if (!tdb) { - DEBUG(3, ("Failed to open connections database in send_spoolss_notify2_msg\n")); - goto done; - } - - message_send_all(tdb, MSG_PRINTER_NOTIFY2, buf, buflen, False, NULL); + pnqueue->buf = buf; + pnqueue->buflen = buflen; + DLIST_ADD(notify_queue_head, pnqueue); + return; + + fail: -done: - SAFE_FREE(buf); + DEBUG(0,("send_spoolss_notify2_msg: Out of memory.\n")); } static void send_notify_field_values(const char *printer_name, uint32 type, diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 37f8071e69..a20fa615fd 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -220,6 +220,9 @@ static void free_printer_entry(void *ptr) Printer->notify.option=NULL; Printer->notify.client_connected=False; + /* Tell the connections db we're not interested in printer notify messages. */ + register_message_flags(False, FLAG_MSG_PRINTING); + /* Remove from the internal list. */ DLIST_REMOVE(printers_list, Printer); @@ -728,8 +731,7 @@ static struct notify2_message_table job_notify_table[] = { back registered **********************************************************************/ -static void process_notify2_message(struct spoolss_notify_msg *msg, - TALLOC_CTX *mem_ctx) +static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX *mem_ctx) { Printer_entry *p; @@ -837,8 +839,7 @@ done: Receive a notify2 message ********************************************************************/ -static void receive_notify2_message(int msg_type, pid_t src, void *buf, - size_t len) +static void receive_notify2_message(void *buf, size_t len) { struct spoolss_notify_msg msg; int offset = 0; @@ -882,6 +883,49 @@ static void receive_notify2_message(int msg_type, pid_t src, void *buf, talloc_destroy(mem_ctx); } +/******************************************************************** + Receive a notify2 message list + ********************************************************************/ + +static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, size_t len) +{ + size_t msg_count, i; + char *buf = (char *)msg; + char *msg_ptr; + + if (len < 4) + goto bad_msg; + + msg_count = IVAL(buf, 0); + msg_ptr = buf + 4; + + if (msg_count == 0) + goto bad_msg; + + for (i = 0; i < msg_count; i++) { + size_t msg_len; + + if (msg_ptr + 4 - buf > len) + goto bad_msg; + + msg_len = IVAL(msg_ptr,0); + msg_ptr += 4; + + if (msg_ptr + msg_len - buf > len) + goto bad_msg; + receive_notify2_message(msg_ptr, msg_len); + msg_ptr += msg_len; + } + + DEBUG(10,("receive_notify2_message_list: processed %u messages\n", + (unsigned int)msg_count )); + return; + + bad_msg: + + DEBUG(0,("receive_notify2_message_list: bad message format !\n")); +} + /******************************************************************** Send a message to ourself about new driver being installed so we can upgrade the information for each printer bound to this @@ -2133,7 +2177,7 @@ static BOOL srv_spoolss_replyopenprinter(char *printer, uint32 localprinter, uin if(!spoolss_connect_to_client(¬ify_cli, unix_printer)) return False; - message_register(MSG_PRINTER_NOTIFY2, receive_notify2_message); + message_register(MSG_PRINTER_NOTIFY2, receive_notify2_message_list); } smb_connections++; @@ -2196,6 +2240,8 @@ WERROR _spoolss_rffpcnex(pipes_struct *p, SPOOL_Q_RFFPCNEX *q_u, SPOOL_R_RFFPCNE &Printer->notify.client_hnd)) return WERR_SERVER_UNAVAILABLE; + /* Tell the connections db we're interested in printer notify messages. */ + register_message_flags(True, FLAG_MSG_PRINTING); Printer->notify.client_connected=True; return WERR_OK; @@ -5544,6 +5590,9 @@ WERROR _spoolss_fcpn(pipes_struct *p, SPOOL_Q_FCPN *q_u, SPOOL_R_FCPN *r_u) free_spool_notify_option(&Printer->notify.option); Printer->notify.client_connected=False; + /* Tell the connections db we're not interested in printer notify messages. */ + register_message_flags(False, FLAG_MSG_PRINTING); + return WERR_OK; } diff --git a/source3/smbd/connection.c b/source3/smbd/connection.c index bc897a95cb..ad394a01ca 100644 --- a/source3/smbd/connection.c +++ b/source3/smbd/connection.c @@ -35,6 +35,17 @@ TDB_CONTEXT *conn_tdb_ctx(void) return tdb; } +static void make_conn_key(connection_struct *conn,char *name, TDB_DATA *pkbuf, struct connections_key *pkey) +{ + ZERO_STRUCTP(pkey); + pkey->pid = sys_getpid(); + pkey->cnum = conn?conn->cnum:-1; + fstrcpy(pkey->name, name); + + pkbuf->dptr = (char *)pkey; + pkbuf->dsize = sizeof(*pkey); +} + /**************************************************************************** Delete a connection record. ****************************************************************************/ @@ -49,13 +60,7 @@ BOOL yield_connection(connection_struct *conn,char *name) DEBUG(3,("Yielding connection to %s\n",name)); - ZERO_STRUCT(key); - key.pid = sys_getpid(); - key.cnum = conn?conn->cnum:-1; - fstrcpy(key.name, name); - - kbuf.dptr = (char *)&key; - kbuf.dsize = sizeof(key); + make_conn_key(conn, name, &kbuf, &key); if (tdb_delete(tdb, kbuf) != 0) { int dbg_lvl = (!conn && (tdb_error(tdb) == TDB_ERR_NOEXIST)) ? 3 : 0; @@ -88,7 +93,7 @@ static int count_fn( TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *u memcpy(&crec, dbuf.dptr, sizeof(crec)); - if (crec.cnum == -1) + if (crec.cnum == -1) return 0; /* If the pid was not found delete the entry from connections.tdb */ @@ -156,13 +161,7 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO DEBUG(5,("claiming %s %d\n",name,max_connections)); - ZERO_STRUCT(key); - key.pid = sys_getpid(); - key.cnum = conn?conn->cnum:-1; - fstrcpy(key.name, name); - - kbuf.dptr = (char *)&key; - kbuf.dsize = sizeof(key); + make_conn_key(conn, name, &kbuf, &key); /* fill in the crec */ ZERO_STRUCT(crec); @@ -192,3 +191,45 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO return True; } + +BOOL register_message_flags(BOOL doreg, uint32 msg_flags) +{ + struct connections_key key; + struct connections_data *pcrec; + TDB_DATA kbuf, dbuf; + + if (!tdb) + return False; + + DEBUG(10,("register_message_flags: %s flags 0x%x\n", + doreg ? "adding" : "removing", + (unsigned int)msg_flags )); + + make_conn_key(NULL, "", &kbuf, &key); + + dbuf = tdb_fetch(tdb, kbuf); + if (!dbuf.dptr) { + DEBUG(0,("register_message_flags: tdb_fetch failed\n")); + return False; + } + + pcrec = (struct connections_data *)dbuf.dptr; + pcrec->bcast_msg_flags = msg_flags; + if (doreg) + pcrec->bcast_msg_flags |= msg_flags; + else + pcrec->bcast_msg_flags &= ~msg_flags; + + if (tdb_store(tdb, kbuf, dbuf, TDB_REPLACE) != 0) { + DEBUG(0,("register_message_flags: tdb_store failed with error %s.\n", + tdb_errorstr(tdb) )); + SAFE_FREE(dbuf.dptr); + return False; + } + + DEBUG(10,("register_message_flags: new flags 0x%x\n", + (unsigned int)pcrec->bcast_msg_flags )); + + SAFE_FREE(dbuf.dptr); + return True; +} diff --git a/source3/smbd/process.c b/source3/smbd/process.c index 2c35eadb18..c796797fad 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -1030,7 +1030,11 @@ static int setup_select_timeout(void) select_timeout *= 1000; t = change_notify_timeout(); - if (t != -1) select_timeout = MIN(select_timeout, t*1000); + if (t != -1) + select_timeout = MIN(select_timeout, t*1000); + + if (print_notify_messages_pending()) + select_timeout = MIN(select_timeout, 1000); return select_timeout; } @@ -1190,6 +1194,10 @@ machine %s in domain %s.\n", global_myname, global_myworkgroup )); force_check_log_size(); check_log_size(); + /* Send any queued printer notify message to interested smbd's. */ + + print_notify_send_messages(); + /* * Modify the select timeout depending upon * what we have remaining in our queues. -- cgit From cc5088b5f4174a7f44004746d3c7d395d51441ff Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 4 Sep 2002 22:02:53 +0000 Subject: Only cache the user list on the SAMR handle for a particular acb_mask/all_machines flag combination. The avoids a bug where we were listing users in the 'trusting domains' dialog in usrmgr. We might also need to invalidate the cache for some other SAMR actions. Andrew Bartlett (This used to be commit 65047aee7fefefaecded9772184a54c046ab1784) --- source3/rpc_server/srv_samr_nt.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c index 927acb24b8..e2336aca55 100644 --- a/source3/rpc_server/srv_samr_nt.c +++ b/source3/rpc_server/srv_samr_nt.c @@ -57,6 +57,8 @@ struct samr_info { DOM_SID sid; uint32 status; /* some sort of flag. best to record it. comes from opnum 0x39 */ uint32 acc_granted; + uint16 acb_mask; + BOOL all_machines; DISP_INFO disp_info; TALLOC_CTX *mem_ctx; @@ -150,26 +152,36 @@ static struct samr_info *get_samr_info_by_sid(DOM_SID *psid) return info; } + /******************************************************************* Function to free the per handle data. ********************************************************************/ -static void free_samr_db(struct samr_info *info) +static void free_samr_users(struct samr_info *info) { int i; - /* Groups are talloced */ - if (info->disp_info.user_dbloaded){ for (i=0; idisp_info.num_user_account; i++) { /* Not really a free, actually a 'clear' */ pdb_free_sam(&info->disp_info.disp_user_info[i].sam); } } - info->disp_info.user_dbloaded=False; + info->disp_info.num_user_account=0; +} + + +/******************************************************************* + Function to free the per handle data. + ********************************************************************/ +static void free_samr_db(struct samr_info *info) +{ + /* Groups are talloced */ + + free_samr_users(info); + info->disp_info.group_dbloaded=False; info->disp_info.num_group_account=0; - info->disp_info.num_user_account=0; } @@ -208,11 +220,15 @@ static NTSTATUS load_sampwd_entries(struct samr_info *info, uint16 acb_mask, BOO DEBUG(10,("load_sampwd_entries\n")); /* if the snapshoot is already loaded, return */ - if (info->disp_info.user_dbloaded==True) { + if ((info->disp_info.user_dbloaded==True) + && (info->acb_mask == acb_mask) + && (info->all_machines == all_machines)) { DEBUG(10,("load_sampwd_entries: already in memory\n")); return NT_STATUS_OK; } + free_samr_users(info); + if (!pdb_setsampwent(False)) { DEBUG(0, ("load_sampwd_entries: Unable to open passdb.\n")); return NT_STATUS_ACCESS_DENIED; @@ -261,6 +277,8 @@ static NTSTATUS load_sampwd_entries(struct samr_info *info, uint16 acb_mask, BOO /* the snapshoot is in memory, we're ready to enumerate fast */ + info->acb_mask = acb_mask; + info->all_machines = all_machines; info->disp_info.user_dbloaded=True; DEBUG(12,("load_sampwd_entries: done\n")); -- cgit From 2658e4ee23600e49a4231bc2b40c20a571c3f826 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 4 Sep 2002 23:40:49 +0000 Subject: Added better error code on out of space. Removed total jobs check - not applicable any more. Jeremy. (This used to be commit 8828e2ea3c668aab6cda1b4be9a7e4ce1c23ca81) --- source3/include/doserr.h | 13 ++++++---- source3/printing/printing.c | 49 +------------------------------------ source3/rpc_server/srv_spoolss_nt.c | 7 ++++++ 3 files changed, 16 insertions(+), 53 deletions(-) diff --git a/source3/include/doserr.h b/source3/include/doserr.h index 135d799596..93936463e6 100644 --- a/source3/include/doserr.h +++ b/source3/include/doserr.h @@ -148,17 +148,20 @@ /* these are win32 error codes. There are only a few places where these matter for Samba, primarily in the NT printing code */ #define WERR_OK W_ERROR(0) +#define WERR_BADFUNC W_ERROR(1) #define WERR_BADFILE W_ERROR(2) #define WERR_ACCESS_DENIED W_ERROR(5) #define WERR_BADFID W_ERROR(6) -#define WERR_BADFUNC W_ERROR(1) -#define WERR_INSUFFICIENT_BUFFER W_ERROR(122) +#define WERR_NOMEM W_ERROR(8) +#define WERR_GENERAL_FAILURE W_ERROR(31) +#define WERR_NOT_SUPPORTED W_ERROR(50) +#define WERR_PRINTQ_FULL W_ERROR(61) +#define WERR_NO_SPOOL_SPACE W_ERROR(62) #define WERR_NO_SUCH_SHARE W_ERROR(67) #define WERR_ALREADY_EXISTS W_ERROR(80) -#define WERR_INVALID_PARAM W_ERROR(87) -#define WERR_NOT_SUPPORTED W_ERROR(50) #define WERR_BAD_PASSWORD W_ERROR(86) -#define WERR_NOMEM W_ERROR(8) +#define WERR_INVALID_PARAM W_ERROR(87) +#define WERR_INSUFFICIENT_BUFFER W_ERROR(122) #define WERR_INVALID_NAME W_ERROR(123) #define WERR_UNKNOWN_LEVEL W_ERROR(124) #define WERR_OBJECT_PATH_INVALID W_ERROR(161) diff --git a/source3/printing/printing.c b/source3/printing/printing.c index 0dacfe820c..c6a210d018 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -1265,42 +1265,6 @@ int print_queue_length(int snum, print_status_struct *pstatus) return len; } -#if 0 /* JRATEST */ -/**************************************************************************** - Determine the number of jobs in all queues. This is very expensive. Don't - call ! JRA. -****************************************************************************/ - -static int get_total_jobs(void) -{ - int total_jobs = 0; - int snum; - int services = lp_numservices(); - - for (snum = 0; snum < services; snum++) { - struct tdb_print_db *pdb; - int jobs; - - if (!lp_print_ok(snum)) - continue; - - pdb = get_print_db_byname(lp_const_servicename(snum)); - if (!pdb) - continue; - - /* make sure the database is up to date */ - if (print_cache_expired(snum)) - print_queue_update(snum); - - jobs = tdb_fetch_int32(pdb->tdb, "INFO/total_jobs"); - if (jobs > 0) - total_jobs += jobs; - release_print_db(pdb); - } - return total_jobs; -} -#endif /* JRATEST */ - /*************************************************************************** Start spooling a job - return the jobid. ***************************************************************************/ @@ -1364,17 +1328,6 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) return (uint32)-1; } -#if 0 /* JRATEST */ - /* Insure the maximum print jobs in the system is not violated */ - if (lp_totalprintjobs() && get_total_jobs() > lp_totalprintjobs()) { - DEBUG(3, ("print_job_start: number of jobs (%d) larger than max printjobs per system (%d).\n", - njobs, lp_totalprintjobs() )); - release_print_db(pdb); - errno = ENOSPC; - return (uint32)-1; - } -#endif /* JRATEST */ - /* create the database entry */ ZERO_STRUCT(pjob); pjob.pid = local_pid; @@ -1445,7 +1398,7 @@ to open spool file %s.\n", pjob.filename)); goto fail; } - pjob_store(snum, jobid, &pjob, False); + pjob_store(snum, jobid, &pjob, True); release_print_db(pdb); diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index a20fa615fd..0236057475 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -5159,6 +5159,13 @@ WERROR _spoolss_writeprinter(pipes_struct *p, SPOOL_Q_WRITEPRINTER *q_u, SPOOL_R return WERR_BADFID; (*buffer_written) = print_job_write(snum, Printer->jobid, (char *)buffer, buffer_size); + if (*buffer_written == -1) { + r_u->buffer_written = 0; + if (errno == ENOSPC) + return WERR_NO_SPOOL_SPACE; + else + return WERR_ACCESS_DENIED; + } r_u->buffer_written = q_u->buffer_size2; -- cgit From 1974c5d92efe914a80339af75a2521b7141c97fe Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Sep 2002 02:00:14 +0000 Subject: The new popt_common_debug code obviates the need to muck around with AllowDebugChange, saving the debuglevel across lp_load() calls etc. (This used to be commit 561204905b78323fd0a03cc7ec5c9dbb2295bd5b) --- source3/rpcclient/rpcclient.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c index 5f1f7a9f9a..880fdc599a 100644 --- a/source3/rpcclient/rpcclient.c +++ b/source3/rpcclient/rpcclient.c @@ -581,7 +581,6 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) static int got_pass = 0; BOOL interactive = True; int opt; - int olddebug; static char *cmdstr = ""; const char *server; struct cli_state *cli; @@ -598,7 +597,6 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) struct cmd_set **cmd_set; struct in_addr server_ip; NTSTATUS nt_status; - extern BOOL AllowDebugChange; /* make sure the vars that get altered (4th field) are in a fixed location or certain compilers complain */ @@ -619,9 +617,6 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) setlinebuf(stdout); - DEBUGLEVEL = 1; - AllowDebugChange = False; - /* Parse options */ pc = poptGetContext("rpcclient", argc, (const char **) argv, @@ -697,12 +692,9 @@ static NTSTATUS process_cmd(struct cli_state *cli, char *cmd) reopen_logs(); /* Load smb.conf file */ - /* FIXME! How to get this DEBUGLEVEL to last over lp_load()? */ - olddebug = DEBUGLEVEL; - if (!lp_load(dyn_CONFIGFILE,True,False,False)) { + + if (!lp_load(dyn_CONFIGFILE,True,False,False)) fprintf(stderr, "Can't load %s\n", dyn_CONFIGFILE); - } - DEBUGLEVEL = olddebug; load_interfaces(); -- cgit From 58b5b6f4036c8d958a62b813b46e873c052a0327 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 5 Sep 2002 03:06:26 +0000 Subject: initial mem_ctx to NULL patch from metze (This used to be commit a4351a3923fd87e1c54119d997b673fcac34601b) --- source3/torture/samtest.c | 2 +- source3/torture/vfstest.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/torture/samtest.c b/source3/torture/samtest.c index 56b87dc257..490cc2cdf3 100644 --- a/source3/torture/samtest.c +++ b/source3/torture/samtest.c @@ -189,7 +189,7 @@ static NTSTATUS do_cmd(struct sam_context *sam, struct cmd_set *cmd_entry, char { char *p = cmd, **argv = NULL; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; - TALLOC_CTX *mem_ctx; + TALLOC_CTX *mem_ctx = NULL; pstring buf; int argc = 0, i; diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index 9f8062a02e..c68d2b04d2 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -264,7 +264,7 @@ static NTSTATUS do_cmd(struct vfs_state *vfs, struct cmd_set *cmd_entry, char *c char *p = cmd, **argv = NULL; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; pstring buf; - TALLOC_CTX *mem_ctx; + TALLOC_CTX *mem_ctx = NULL; int argc = 0, i; /* Count number of arguments first time through the loop then -- cgit From 481c0db0acf6bf305a630aae9751a6d9655e0cda Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Sep 2002 04:22:16 +0000 Subject: Roussed on Jeremy for not putting in enough debugs in the new print notify stuff. (-: (This used to be commit 87c156704f5d8913cf7bf3134ec5ba6403d36cca) --- source3/printing/notify.c | 6 ++++++ source3/rpc_server/srv_spoolss_nt.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/source3/printing/notify.c b/source3/printing/notify.c index 4bde6a94f6..728ef47d8a 100644 --- a/source3/printing/notify.c +++ b/source3/printing/notify.c @@ -86,6 +86,9 @@ void print_notify_send_messages(void) offset += pq->buflen; } + DEBUG(5, ("print_notify_send_messages: sending %d print notify message%s\n", + msg_count, msg_count != 1 ? "s" : "")); + message_send_all(tdb, MSG_PRINTER_NOTIFY2, buf, offset, False, NULL); talloc_destroy_pool(send_ctx); notify_queue_head = NULL; @@ -149,6 +152,9 @@ again: pnqueue->buf = buf; pnqueue->buflen = buflen; + + DEBUG(5, ("send_spoolss_notify2_msg: appending message 0x%02x/0x%02x to notify_queue_head\n", msg->type, msg->field)); + DLIST_ADD(notify_queue_head, pnqueue); return; diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 0236057475..3a2bde2d05 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -899,6 +899,8 @@ static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, siz msg_count = IVAL(buf, 0); msg_ptr = buf + 4; + DEBUG(5, ("receive_notify2_message_list: got %d messages in list\n", msg_count)); + if (msg_count == 0) goto bad_msg; -- cgit From 7b9439363ed4ca85677e7ca4e84ac67f71182842 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Sep 2002 04:25:21 +0000 Subject: A netshareenum reply always contains an enum_hnd. win2k returns zero total entries on an error whereas nt4 must send uninitialised data so we didn't catch this one before. (This used to be commit 88653130bc1e380b7d8dc6c62492f3bbc6f1c707) --- source3/rpc_parse/parse_srv.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/source3/rpc_parse/parse_srv.c b/source3/rpc_parse/parse_srv.c index 531267c308..672db36a28 100644 --- a/source3/rpc_parse/parse_srv.c +++ b/source3/rpc_parse/parse_srv.c @@ -1119,10 +1119,8 @@ BOOL srv_io_r_net_share_enum(char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct * if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries)) return False; - if(r_n->total_entries != 0) { - if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth)) - return False; - } + if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth)) + return False; if(!prs_werror("status", ps, depth, &r_n->status)) return False; -- cgit From 36cab08d37cba6143629987531319ca1b38051e6 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Sep 2002 04:33:07 +0000 Subject: Send any queued up print notify messages in exit_server() so they don't get lost if the client exits before timeout_processing() has a chance to run. (This used to be commit d7dde74aae64e9e142b80b7e3ba1bd69cec149b0) --- source3/smbd/server.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 8082c22cff..39d5e3bcd3 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -540,6 +540,8 @@ void exit_server(char *reason) invalidate_all_vuids(); + print_notify_send_messages(); + /* delete our entry in the connections database. */ yield_connection(NULL,""); -- cgit From 19a7d460e4f3e87b0aefb2596bc80778bbb3f67a Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 5 Sep 2002 04:33:52 +0000 Subject: We shouldn't add printing flag here. Jeremy. (This used to be commit f00102ba77d752bdf714fa83ac7fdc679e8d7f17) --- source3/smbd/reply.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 263626dcc1..01e7df282c 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -113,7 +113,7 @@ int reply_special(char *inbuf,char *outbuf) reload_services(True); reopen_logs(); - claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD|FLAG_MSG_PRINTING); + claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD); already_got_session = True; break; -- cgit From 8ac6e260b9d7f6d054bcee03b9de08e698784093 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 5 Sep 2002 05:26:29 +0000 Subject: Remove donotify as notifies are cheap now. Jeremy. (This used to be commit 78585de5811d10bcca156e296c7dd51eabe5d626) --- source3/printing/printing.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/source3/printing/printing.c b/source3/printing/printing.c index c6a210d018..df971a78c5 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -460,7 +460,7 @@ static void pjob_store_notify(int snum, uint32 jobid, struct printjob *old_data, Store a job structure back to the database. ****************************************************************************/ -static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob, BOOL donotify) +static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) { TDB_DATA old_data, new_data; BOOL ret; @@ -483,7 +483,7 @@ static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob, BOOL donot /* Send notify updates for what has changed */ - if (donotify && ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { + if (ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { pjob_store_notify( snum, jobid, (struct printjob *)old_data.dptr, (struct printjob *)new_data.dptr); @@ -581,7 +581,7 @@ static void print_unix_job(int snum, print_queue_struct *q) fstrcpy(pj.user, q->fs_user); fstrcpy(pj.queuename, lp_const_servicename(snum)); - pjob_store(snum, jobid, &pj, True); + pjob_store(snum, jobid, &pj); } @@ -868,7 +868,7 @@ static void print_queue_update(int snum) pjob->sysjob = queue[i].job; pjob->status = queue[i].status; - pjob_store(snum, jobid, pjob, True); + pjob_store(snum, jobid, pjob); } /* now delete any queued entries that don't appear in the @@ -977,7 +977,7 @@ BOOL print_job_set_name(int snum, uint32 jobid, char *name) return False; fstrcpy(pjob->jobname, name); - return pjob_store(snum, jobid, pjob, True); + return pjob_store(snum, jobid, pjob); } /**************************************************************************** @@ -1009,7 +1009,7 @@ static BOOL print_job_delete1(int snum, uint32 jobid) /* Set the tdb entry to be deleting. */ pjob->status = LPQ_DELETING; - pjob_store(snum, jobid, pjob, True); + pjob_store(snum, jobid, pjob); if (pjob->spooled && pjob->sysjob != -1) result = (*(current_printif->job_delete))(snum, pjob); @@ -1172,7 +1172,7 @@ int print_job_write(int snum, uint32 jobid, const char *buf, int size) return_code = write(pjob->fd, buf, size); if (return_code>0) { pjob->size += size; - pjob_store(snum, jobid, pjob, True); + pjob_store(snum, jobid, pjob); } return return_code; } @@ -1364,7 +1364,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) if (!print_job_exists(snum, jobid)) break; } - if (jobid == next_jobid || !pjob_store(snum, jobid, &pjob, False)) { + if (jobid == next_jobid || !pjob_store(snum, jobid, &pjob)) { DEBUG(3, ("print_job_start: either jobid (%d)==next_jobid(%d) or pjob_store failed.\n", jobid, next_jobid )); jobid = -1; @@ -1398,7 +1398,7 @@ to open spool file %s.\n", pjob.filename)); goto fail; } - pjob_store(snum, jobid, &pjob, True); + pjob_store(snum, jobid, &pjob); release_print_db(pdb); @@ -1440,7 +1440,7 @@ void print_job_endpage(int snum, uint32 jobid) return; pjob->page_count++; - pjob_store(snum, jobid, pjob, True); + pjob_store(snum, jobid, pjob); } /**************************************************************************** @@ -1498,7 +1498,7 @@ BOOL print_job_end(int snum, uint32 jobid, BOOL normal_close) pjob->spooled = True; pjob->status = LPQ_QUEUED; - pjob_store(snum, jobid, pjob, True); + pjob_store(snum, jobid, pjob); /* make sure the database is up to date */ if (print_cache_expired(snum)) -- cgit From 9f43ccb98e32b343b021f9ea6a8eeef7e1fe5c89 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Sep 2002 06:49:08 +0000 Subject: Delivery notify messages over the back channel in *reverse* order in which they are sent in the message. This is because a DLIST_ADD is used by the message sender which results in the first (post!) message being at the end of the list. Notify messages must be delivered in the order the events occur in otherwise the port monitor gets confused. (This used to be commit d41ff1f1a6cfad71ef35698d45e9fb97d9100898) --- source3/rpc_server/srv_spoolss_nt.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 3a2bde2d05..aa63284322 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -889,9 +889,9 @@ static void receive_notify2_message(void *buf, size_t len) static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, size_t len) { - size_t msg_count, i; + size_t msg_count, *msg_len_array, i; char *buf = (char *)msg; - char *msg_ptr; + char *msg_ptr, **msg_ptr_array; if (len < 4) goto bad_msg; @@ -904,6 +904,24 @@ static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, siz if (msg_count == 0) goto bad_msg; + /* Process notifies in *reverse* order in which they are sent + in the message. This is because a DLIST_ADD is used by the + message sender which results in the first (post!) message + being at the end of the list. Notify messages must be + delivered in the order the events occur in otherwise the + port monitor gets confused. */ + + if (!(msg_len_array = (size_t *)malloc(sizeof(size_t) * msg_count))) { + DEBUG(0, ("receive_notify2_message_list: out of memory\n")); + return; + } + + if (!(msg_ptr_array = (char **)malloc(sizeof(char *) * msg_count))) { + SAFE_FREE(msg_len_array); + DEBUG(0, ("receive_notify2_message_list: out of memory\n")); + return; + } + for (i = 0; i < msg_count; i++) { size_t msg_len; @@ -915,10 +933,19 @@ static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, siz if (msg_ptr + msg_len - buf > len) goto bad_msg; - receive_notify2_message(msg_ptr, msg_len); + + msg_len_array[i] = msg_len; + msg_ptr_array[i] = msg_ptr; + msg_ptr += msg_len; } + for(i = msg_count; i > 0; i--) + receive_notify2_message(msg_ptr_array[i - 1], msg_len_array[i - 1]); + + SAFE_FREE(msg_len_array); + SAFE_FREE(msg_ptr_array); + DEBUG(10,("receive_notify2_message_list: processed %u messages\n", (unsigned int)msg_count )); return; -- cgit From 4af9c9ce3b312131ba767ba27b5cd5b12d6a6007 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 5 Sep 2002 11:40:06 +0000 Subject: Fixed a little, long standing bug: smbclient -M should resolve name#03, not name#20. Volker (This used to be commit 99017e887e4189ac7f6e3b7df08f028dc155191e) --- source3/client/client.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/source3/client/client.c b/source3/client/client.c index d5a1f557e7..7afd8f25bc 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -2618,16 +2618,21 @@ static int do_message_op(void) { struct in_addr ip; struct nmb_name called, calling; - - zero_ip(&ip); + fstring server_name; + char name_type_hex[10]; make_nmb_name(&calling, global_myname, 0x0); make_nmb_name(&called , desthost, name_type); + safe_strcpy(server_name, desthost, sizeof(server_name)); + snprintf(name_type_hex, sizeof(name_type_hex), "#%X", name_type); + safe_strcat(server_name, name_type_hex, sizeof(server_name)); + zero_ip(&ip); if (have_ip) ip = dest_ip; - if (!(cli=cli_initialise(NULL)) || (cli_set_port(cli, port) != port) || !cli_connect(cli, desthost, &ip)) { + if (!(cli=cli_initialise(NULL)) || (cli_set_port(cli, port) != port) || + !cli_connect(cli, server_name, &ip)) { d_printf("Connection to %s failed\n", desthost); return 1; } -- cgit From 4cf52385994b62de71240b894b37f82b6daa6ee2 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 5 Sep 2002 12:55:56 +0000 Subject: Revert the "reverse" change to rpc_server/srv_spoolss_nt.c, simply add then entries to the end of the list in printing/notify.c using DLIST_ADD_END. Jeremy. (This used to be commit 047d6a05fb60172a2607bb7d7d03dda5403c61fa) --- source3/printing/notify.c | 8 ++++++-- source3/rpc_server/srv_spoolss_nt.c | 33 +++------------------------------ 2 files changed, 9 insertions(+), 32 deletions(-) diff --git a/source3/printing/notify.c b/source3/printing/notify.c index 728ef47d8a..003718ed72 100644 --- a/source3/printing/notify.c +++ b/source3/printing/notify.c @@ -102,7 +102,7 @@ static void send_spoolss_notify2_msg(struct spoolss_notify_msg *msg) { char *buf = NULL; size_t buflen = 0, len; - struct notify_queue *pnqueue; + struct notify_queue *pnqueue, *tmp_ptr; /* Let's not waste any time with this */ @@ -155,7 +155,11 @@ again: DEBUG(5, ("send_spoolss_notify2_msg: appending message 0x%02x/0x%02x to notify_queue_head\n", msg->type, msg->field)); - DLIST_ADD(notify_queue_head, pnqueue); + /* Note we add to the end of the list to ensure + * the messages are sent in the order they were received. JRA. + */ + DLIST_ADD_END(notify_queue_head, pnqueue, tmp_ptr); + return; fail: diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index aa63284322..3a2bde2d05 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -889,9 +889,9 @@ static void receive_notify2_message(void *buf, size_t len) static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, size_t len) { - size_t msg_count, *msg_len_array, i; + size_t msg_count, i; char *buf = (char *)msg; - char *msg_ptr, **msg_ptr_array; + char *msg_ptr; if (len < 4) goto bad_msg; @@ -904,24 +904,6 @@ static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, siz if (msg_count == 0) goto bad_msg; - /* Process notifies in *reverse* order in which they are sent - in the message. This is because a DLIST_ADD is used by the - message sender which results in the first (post!) message - being at the end of the list. Notify messages must be - delivered in the order the events occur in otherwise the - port monitor gets confused. */ - - if (!(msg_len_array = (size_t *)malloc(sizeof(size_t) * msg_count))) { - DEBUG(0, ("receive_notify2_message_list: out of memory\n")); - return; - } - - if (!(msg_ptr_array = (char **)malloc(sizeof(char *) * msg_count))) { - SAFE_FREE(msg_len_array); - DEBUG(0, ("receive_notify2_message_list: out of memory\n")); - return; - } - for (i = 0; i < msg_count; i++) { size_t msg_len; @@ -933,19 +915,10 @@ static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, siz if (msg_ptr + msg_len - buf > len) goto bad_msg; - - msg_len_array[i] = msg_len; - msg_ptr_array[i] = msg_ptr; - + receive_notify2_message(msg_ptr, msg_len); msg_ptr += msg_len; } - for(i = msg_count; i > 0; i--) - receive_notify2_message(msg_ptr_array[i - 1], msg_len_array[i - 1]); - - SAFE_FREE(msg_len_array); - SAFE_FREE(msg_ptr_array); - DEBUG(10,("receive_notify2_message_list: processed %u messages\n", (unsigned int)msg_count )); return; -- cgit From ce2ac33b736324b818b0dd23be70bb23448320d5 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 5 Sep 2002 15:47:22 +0000 Subject: Move the fancy NT_STATUS macros to a new file, so we can include them earlier in includes.h Andrew Bartlett (This used to be commit ed184ed1905b49956528b6835f48a69ba3c1a045) --- source3/include/includes.h | 1 + source3/include/nt_status.h | 62 +++++++++++++++++++++++++++++++++++++++++++++ source3/include/smb.h | 38 --------------------------- 3 files changed, 63 insertions(+), 38 deletions(-) create mode 100644 source3/include/nt_status.h diff --git a/source3/include/includes.h b/source3/include/includes.h index 544487f273..b07b0c3649 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -702,6 +702,7 @@ extern int errno; #include "../tdb/spinlock.h" #include "../tdb/tdbutil.h" #include "talloc.h" +#include "nt_status.h" #include "ads.h" #include "interfaces.h" #include "hash.h" diff --git a/source3/include/nt_status.h b/source3/include/nt_status.h new file mode 100644 index 0000000000..1c80c5ecde --- /dev/null +++ b/source3/include/nt_status.h @@ -0,0 +1,62 @@ +/* + Unix SMB/CIFS implementation. + SMB parameters and setup, plus a whole lot more. + + Copyright (C) Andrew Tridgell 2001 + + 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 _NT_STATUS_H +#define _NT_STATUS_H + +/* The Splint code analysis tool doesn't like immediate structures. */ + +#ifdef _SPLINT_ /* http://www.splint.org */ +#undef HAVE_IMMEDIATE_STRUCTURES +#endif + +/* the following rather strange looking definitions of NTSTATUS and WERROR + and there in order to catch common coding errors where different error types + are mixed up. This is especially important as we slowly convert Samba + from using BOOL for internal functions +*/ + +#if defined(HAVE_IMMEDIATE_STRUCTURES) +typedef struct {uint32 v;} NTSTATUS; +#define NT_STATUS(x) ((NTSTATUS) { x }) +#define NT_STATUS_V(x) ((x).v) +#else +typedef uint32 NTSTATUS; +#define NT_STATUS(x) (x) +#define NT_STATUS_V(x) (x) +#endif + +#if defined(HAVE_IMMEDIATE_STRUCTURES) +typedef struct {uint32 v;} WERROR; +#define W_ERROR(x) ((WERROR) { x }) +#define W_ERROR_V(x) ((x).v) +#else +typedef uint32 WERROR; +#define W_ERROR(x) (x) +#define W_ERROR_V(x) (x) +#endif + +#define NT_STATUS_IS_OK(x) (NT_STATUS_V(x) == 0) +#define NT_STATUS_IS_ERR(x) ((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000) +#define NT_STATUS_EQUAL(x,y) (NT_STATUS_V(x) == NT_STATUS_V(y)) +#define W_ERROR_IS_OK(x) (W_ERROR_V(x) == 0) + +#endif diff --git a/source3/include/smb.h b/source3/include/smb.h index 909c1a57ec..2ee2f0cb72 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -193,44 +193,6 @@ typedef struct nttime_info } NTTIME; -/* The Splint code analysis tool doesn't like immediate structures. */ - -#ifdef _SPLINT_ /* http://www.splint.org */ -#undef HAVE_IMMEDIATE_STRUCTURES -#endif - -/* the following rather strange looking definitions of NTSTATUS and WERROR - and there in order to catch common coding errors where different error types - are mixed up. This is especially important as we slowly convert Samba - from using BOOL for internal functions -*/ - -#if defined(HAVE_IMMEDIATE_STRUCTURES) -typedef struct {uint32 v;} NTSTATUS; -#define NT_STATUS(x) ((NTSTATUS) { x }) -#define NT_STATUS_V(x) ((x).v) -#else -typedef uint32 NTSTATUS; -#define NT_STATUS(x) (x) -#define NT_STATUS_V(x) (x) -#endif - -#if defined(HAVE_IMMEDIATE_STRUCTURES) -typedef struct {uint32 v;} WERROR; -#define W_ERROR(x) ((WERROR) { x }) -#define W_ERROR_V(x) ((x).v) -#else -typedef uint32 WERROR; -#define W_ERROR(x) (x) -#define W_ERROR_V(x) (x) -#endif - -#define NT_STATUS_IS_OK(x) (NT_STATUS_V(x) == 0) -#define NT_STATUS_IS_ERR(x) ((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000) -#define NT_STATUS_EQUAL(x,y) (NT_STATUS_V(x) == NT_STATUS_V(y)) -#define W_ERROR_IS_OK(x) (W_ERROR_V(x) == 0) - - /* Allowable account control bits */ #define ACB_DISABLED 0x0001 /* 1 = User account disabled */ #define ACB_HOMDIRREQ 0x0002 /* 1 = Home directory required */ -- cgit From c9e550f76586e9dd4407e26aca4c29ac2186e730 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 01:12:52 +0000 Subject: cli_spoolss_enumprinterdrivers: Return WERR_UNKNOWN_LEVEL if we can't decode the returned buffer. (This used to be commit 0379a32d825e036c7f0dcabef46547cd678a2a1d) --- source3/rpc_client/cli_spoolss.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index b568f38604..caa2f2901b 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -848,6 +848,10 @@ WERROR cli_spoolss_enumprinterdrivers (struct cli_state *cli, case 3: decode_printer_driver_3(mem_ctx, r.buffer, r.returned, &ctr->info3); break; + default: + DEBUG(10, ("cli_spoolss_enumprinterdrivers: unknown info level %d\n", + level)); + return WERR_UNKNOWN_LEVEL; } } -- cgit From 2ec89150f81b3643fa36c7e17ecaab223a97bfcb Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 06:13:16 +0000 Subject: Display debug data we are marshalling/unmarshalling a UNISTR in a similar format to UNISTR2. (This used to be commit 2d227bdce26674affad87ad6d118e77604fb210a) --- source3/rpc_parse/parse_prs.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source3/rpc_parse/parse_prs.c b/source3/rpc_parse/parse_prs.c index 4de6b88e9c..843be33187 100644 --- a/source3/rpc_parse/parse_prs.c +++ b/source3/rpc_parse/parse_prs.c @@ -1061,7 +1061,9 @@ BOOL prs_unistr(char *name, prs_struct *ps, int depth, UNISTR *str) len++; - dump_data(5+depth, (char *)start, len * 2); + DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name)); + print_asc(5, (unsigned char*)start, 2*len); + DEBUG(5, ("\n")); } else { /* unmarshalling */ @@ -1114,6 +1116,10 @@ BOOL prs_unistr(char *name, prs_struct *ps, int depth, UNISTR *str) /* NULL terminate the UNISTR */ str->buffer[len++] = '\0'; } + + DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name)); + print_asc(5, (unsigned char*)str->buffer, 2*len); + DEBUG(5, ("\n")); } /* set the offset in the prs_struct; 'len' points to the -- cgit From 22b75d5c81b7e7ca99e11a304053dac618f7a14e Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 06:59:40 +0000 Subject: level keys are inserted by conv routines. (This used to be commit b5068bb9fe28cfdd7a00dbc50196eb60e3a46af1) --- source3/python/py_spoolss_drivers.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/source3/python/py_spoolss_drivers.c b/source3/python/py_spoolss_drivers.c index b5357a78ad..2e8fac4a4e 100644 --- a/source3/python/py_spoolss_drivers.c +++ b/source3/python/py_spoolss_drivers.c @@ -98,9 +98,6 @@ PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args, py_from_DRIVER_INFO_1(&value, &ctr.info1[i]); - PyDict_SetItemString( - value, "level", PyInt_FromLong(1)); - PyDict_SetItemString(result, name, value); } @@ -117,9 +114,6 @@ PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args, py_from_DRIVER_INFO_2(&value, &ctr.info2[i]); - PyDict_SetItemString( - value, "level", PyInt_FromLong(2)); - PyDict_SetItemString(result, name, value); } @@ -136,9 +130,6 @@ PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args, py_from_DRIVER_INFO_3(&value, &ctr.info3[i]); - PyDict_SetItemString( - value, "level", PyInt_FromLong(3)); - PyDict_SetItemString(result, name, value); } @@ -155,9 +146,6 @@ PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args, py_from_DRIVER_INFO_6(&value, &ctr.info6[i]); - PyDict_SetItemString( - value, "level", PyInt_FromLong(6)); - PyList_SetItem(result, i, value); } @@ -302,8 +290,6 @@ PyObject *spoolss_getprinterdriverdir(PyObject *self, PyObject *args, 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"); -- cgit From e411dc9687d84dae9e01c57a37ce1bc4b8c71a10 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 07:01:40 +0000 Subject: Decode list of dependent files in printer driver info3 and info6. It's a null terminated list of null terminated unicode strings. What a mess! (This used to be commit aae48211ff4f22e0c2e2fe57c370f465df4332bc) --- source3/python/py_spoolss_drivers_conv.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/source3/python/py_spoolss_drivers_conv.c b/source3/python/py_spoolss_drivers_conv.c index dbf33905ae..5d181f9cd9 100644 --- a/source3/python/py_spoolss_drivers_conv.c +++ b/source3/python/py_spoolss_drivers_conv.c @@ -46,7 +46,6 @@ struct pyconv py_DRIVER_INFO_3[] = { { "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 } @@ -80,6 +79,30 @@ struct pyconv py_DRIVER_DIRECTORY_1[] = { { NULL } }; +/* Convert a NULL terminated list of NULL terminated unicode strings + to a list of (char *) strings */ + +static PyObject *from_dependentfiles(uint16 *dependentfiles) +{ + PyObject *list; + int offset = 0; + + list = PyList_New(0); + + while (*(dependentfiles + offset) != 0) { + fstring name; + int len; + + len = rpcstr_pull(name, dependentfiles + offset, + sizeof(fstring), -1, STR_TERMINATE); + + offset += len / 2; + PyList_Append(list, PyString_FromString(name)); + } + + return list; +} + BOOL py_from_DRIVER_INFO_1(PyObject **dict, DRIVER_INFO_1 *info) { *dict = from_struct(info, py_DRIVER_INFO_1); @@ -108,6 +131,10 @@ 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)); + PyDict_SetItemString( + *dict, "dependent_files", + from_dependentfiles(info->dependentfiles)); + return True; } @@ -127,6 +154,9 @@ 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)); + PyDict_SetItemString( + *dict, "dependent_files", + from_dependentfiles (info->dependentfiles)); return True; } -- cgit From a2327b84858453ff250b7635f423ae94edf2740b Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 07:34:57 +0000 Subject: Move printerdata dictionary object into it's own file. (This used to be commit c211d2deca1019d3ef9bd08f5a01e76ede2d0191) --- source3/python/gprinterdata | 15 +++------------ source3/python/printerdata.py | 23 +++++++++++++++++++++++ source3/python/samba/printerdata.py | 23 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 source3/python/printerdata.py create mode 100644 source3/python/samba/printerdata.py diff --git a/source3/python/gprinterdata b/source3/python/gprinterdata index 52c6e42719..f1992db5a5 100755 --- a/source3/python/gprinterdata +++ b/source3/python/gprinterdata @@ -5,18 +5,8 @@ from gtkdictbrowser import GtkDictBrowser, hex_string import gtk import spoolss import string +import printerdata -class printerdata: - def __init__(self, host): - host = string.replace(host, "/", "\\") - self.hnd = spoolss.openprinter(host) - - def keys(self): - return self.hnd.enumprinterdata().keys() - - def __getitem__(self, key): - return self.hnd.getprinterdata(key)['data'] - # Initialise printerdata dictionary if len(sys.argv) != 2: @@ -25,7 +15,8 @@ if len(sys.argv) != 2: sys.exit(1) try: - t = printerdata(sys.argv[1]) + host = string.replace(sys.argv[1], "/", "\\") + t = printerdata.printerdata(host) except: print "gprinterdata: error opening %s" % sys.argv[1] sys.exit(1) diff --git a/source3/python/printerdata.py b/source3/python/printerdata.py new file mode 100644 index 0000000000..55b5fdf6ae --- /dev/null +++ b/source3/python/printerdata.py @@ -0,0 +1,23 @@ +# +# A python module that maps printerdata to a dictionary. We define +# two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData +# and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx +# + +import spoolss + +class printerdata: + def __init__(self, host, creds = {}): + self.hnd = spoolss.openprinter(host, creds = creds) + + def keys(self): + return self.hnd.enumprinterdata().keys() + + def __getitem__(self, key): + return self.hnd.getprinterdata(key)['data'] + + def __setitem__(self, key, value): + # Store as REG_BINARY for now + self.hnd.setprinterdata({"key": "", "value": key, "type": 3, + "data": value}) + diff --git a/source3/python/samba/printerdata.py b/source3/python/samba/printerdata.py new file mode 100644 index 0000000000..55b5fdf6ae --- /dev/null +++ b/source3/python/samba/printerdata.py @@ -0,0 +1,23 @@ +# +# A python module that maps printerdata to a dictionary. We define +# two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData +# and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx +# + +import spoolss + +class printerdata: + def __init__(self, host, creds = {}): + self.hnd = spoolss.openprinter(host, creds = creds) + + def keys(self): + return self.hnd.enumprinterdata().keys() + + def __getitem__(self, key): + return self.hnd.getprinterdata(key)['data'] + + def __setitem__(self, key, value): + # Store as REG_BINARY for now + self.hnd.setprinterdata({"key": "", "value": key, "type": 3, + "data": value}) + -- cgit From c9101c3b01b7a493944b1fec8612289d8dc531e7 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 6 Sep 2002 07:44:21 +0000 Subject: Initial version of printerdata_ex browsing. (This used to be commit c201a61a52ffbaf1b1b70e25e0ef2b29a89f921c) --- source3/python/gprinterdata | 13 ++++++++----- source3/python/printerdata.py | 15 +++++++++++++++ source3/python/samba/printerdata.py | 15 +++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/source3/python/gprinterdata b/source3/python/gprinterdata index f1992db5a5..59c5f3c315 100755 --- a/source3/python/gprinterdata +++ b/source3/python/gprinterdata @@ -9,16 +9,19 @@ import printerdata # Initialise printerdata dictionary -if len(sys.argv) != 2: - print "Usage: gprinterdata " +if len(sys.argv) < 2 or len(sys.argv) > 3: + print "Usage: gprinterdata [--ex] " print "where is a UNC printer name." sys.exit(1) try: - host = string.replace(sys.argv[1], "/", "\\") - t = printerdata.printerdata(host) + host = string.replace(sys.argv[len(sys.argv) - 1], "/", "\\") + if sys.argv[1] == "--ex": + t = printerdata.printerdata_ex(host) + else: + t = printerdata.printerdata(host) except: - print "gprinterdata: error opening %s" % sys.argv[1] + print "gprinterdata: error opening %s" % sys.argv[len(sys.argv) - 1] sys.exit(1) # Create interface diff --git a/source3/python/printerdata.py b/source3/python/printerdata.py index 55b5fdf6ae..3384de4f30 100644 --- a/source3/python/printerdata.py +++ b/source3/python/printerdata.py @@ -21,3 +21,18 @@ class printerdata: self.hnd.setprinterdata({"key": "", "value": key, "type": 3, "data": value}) +class printerdata_ex: + def __init__(self, host, creds = {}): + self.hnd = spoolss.openprinter(host, creds = creds) + + def keys(self): + return self.hnd.enumprinterdataex("PrinterDriverData").keys() + + def __getitem__(self, key): + return self.hnd.getprinterdataex("PrinterDriverData", key)['data'] + + def __setitem__(self, key, value): + # Store as REG_BINARY for now + self.hnd.setprinterdataex({"key": "PrinterDriverData", "value": key, "type": 3, + "data": value}) + diff --git a/source3/python/samba/printerdata.py b/source3/python/samba/printerdata.py index 55b5fdf6ae..3384de4f30 100644 --- a/source3/python/samba/printerdata.py +++ b/source3/python/samba/printerdata.py @@ -21,3 +21,18 @@ class printerdata: self.hnd.setprinterdata({"key": "", "value": key, "type": 3, "data": value}) +class printerdata_ex: + def __init__(self, host, creds = {}): + self.hnd = spoolss.openprinter(host, creds = creds) + + def keys(self): + return self.hnd.enumprinterdataex("PrinterDriverData").keys() + + def __getitem__(self, key): + return self.hnd.getprinterdataex("PrinterDriverData", key)['data'] + + def __setitem__(self, key, value): + # Store as REG_BINARY for now + self.hnd.setprinterdataex({"key": "PrinterDriverData", "value": key, "type": 3, + "data": value}) + -- cgit From 69b9cbf32744d4cb5327c8baca1308a48ae96b22 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 10:00:24 +0000 Subject: Detect and use syslog.h or sys/syslog.h corretly. Fixes lack of prototype for syslog() since Paul Green's POSIX patch. (This used to be commit d3b29b0b2d2ffd5c050900ff8cae441b91f95526) --- source3/configure | 1487 ++++++++++++++++++++++--------------------- source3/configure.in | 1 + source3/include/config.h.in | 8 +- source3/include/includes.h | 6 +- 4 files changed, 775 insertions(+), 727 deletions(-) diff --git a/source3/configure b/source3/configure index bc494a1663..e6120f6347 100755 --- a/source3/configure +++ b/source3/configure @@ -1118,7 +1118,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in mawk gawk nawk awk +for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -2498,6 +2498,46 @@ else fi done +for ac_hdr in sys/syslog.h syslog.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2506: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2516: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + # # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT. @@ -2506,14 +2546,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2557: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2535,17 +2575,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2539: checking for $ac_hdr" >&5 +echo "configure:2579: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2549: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2575,17 +2615,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2579: checking for $ac_hdr" >&5 +echo "configure:2619: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2615,17 +2655,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2619: checking for $ac_hdr" >&5 +echo "configure:2659: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2655,17 +2695,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2659: checking for $ac_hdr" >&5 +echo "configure:2699: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2695,17 +2735,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2699: checking for $ac_hdr" >&5 +echo "configure:2739: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2737,17 +2777,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2741: checking for $ac_hdr" >&5 +echo "configure:2781: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2779,17 +2819,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2783: checking for $ac_hdr" >&5 +echo "configure:2823: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2821,17 +2861,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2825: checking for $ac_hdr" >&5 +echo "configure:2865: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2875: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2859,7 +2899,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2863: checking size of int" >&5 +echo "configure:2903: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2867,19 +2907,18 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(int)); - exit(0); + return(0); } EOF -if { (eval echo configure:2883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2899,7 +2938,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2903: checking size of long" >&5 +echo "configure:2942: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2907,19 +2946,18 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(long)); - exit(0); + return(0); } EOF -if { (eval echo configure:2923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2939,7 +2977,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2943: checking size of short" >&5 +echo "configure:2981: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2947,19 +2985,18 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(short)); - exit(0); + return(0); } EOF -if { (eval echo configure:2963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -2980,12 +3017,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:2984: checking for working const" >&5 +echo "configure:3021: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3055,21 +3092,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3059: checking for inline" >&5 +echo "configure:3096: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3110: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3095,14 +3132,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3099: checking whether byte ordering is bigendian" >&5 +echo "configure:3136: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3113,11 +3150,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3154: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3128,7 +3165,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3148,7 +3185,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3185,14 +3222,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3189: checking whether char is unsigned" >&5 +echo "configure:3226: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3249,12 +3286,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3253: checking return type of signal handlers" >&5 +echo "configure:3290: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3271,7 +3308,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3312: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3290,12 +3327,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3294: checking for uid_t in sys/types.h" >&5 +echo "configure:3331: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3324,12 +3361,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3328: checking for mode_t" >&5 +echo "configure:3365: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3357,12 +3394,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3361: checking for off_t" >&5 +echo "configure:3398: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3390,12 +3427,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3394: checking for size_t" >&5 +echo "configure:3431: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3423,12 +3460,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3427: checking for pid_t" >&5 +echo "configure:3464: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3456,12 +3493,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3460: checking for st_rdev in struct stat" >&5 +echo "configure:3497: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3469,7 +3506,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3473: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3510: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3490,12 +3527,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3494: checking for d_off in dirent" >&5 +echo "configure:3531: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3505,7 +3542,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3509: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3526,12 +3563,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3530: checking for ino_t" >&5 +echo "configure:3567: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3559,12 +3596,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3563: checking for loff_t" >&5 +echo "configure:3600: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3592,12 +3629,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3596: checking for offset_t" >&5 +echo "configure:3633: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3625,12 +3662,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3629: checking for ssize_t" >&5 +echo "configure:3666: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3658,12 +3695,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3662: checking for wchar_t" >&5 +echo "configure:3699: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3705,7 +3742,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3709: checking for $ac_word" >&5 +echo "configure:3746: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3754,12 +3791,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3758: checking for $ac_func" >&5 +echo "configure:3795: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3808,7 +3845,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3812: checking for dlopen in -ldl" >&5 +echo "configure:3849: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3816,7 +3853,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3857,13 +3894,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3861: checking for immediate structures" >&5 +echo "configure:3898: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3881,7 +3918,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3904,13 +3941,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3908: checking for unix domain sockets" >&5 +echo "configure:3945: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3925,7 +3962,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3966: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3947,13 +3984,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3951: checking for socklen_t type" >&5 +echo "configure:3988: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3966,7 +4003,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:3970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -3987,13 +4024,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:3991: checking for sig_atomic_t type" >&5 +echo "configure:4028: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4006,7 +4043,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4029,20 +4066,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4033: checking for errno declaration" >&5 +echo "configure:4070: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4046: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4064,20 +4101,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4068: checking for setresuid declaration" >&5 +echo "configure:4105: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4099,20 +4136,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4103: checking for setresgid declaration" >&5 +echo "configure:4140: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4134,20 +4171,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4138: checking for asprintf declaration" >&5 +echo "configure:4175: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4151: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4169,20 +4206,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4173: checking for vasprintf declaration" >&5 +echo "configure:4210: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4204,20 +4241,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4208: checking for vsnprintf declaration" >&5 +echo "configure:4245: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4239,20 +4276,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4243: checking for snprintf declaration" >&5 +echo "configure:4280: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4293: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4276,7 +4313,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4280: checking for real setresuid" >&5 +echo "configure:4317: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4285,12 +4322,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4315,7 +4352,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4319: checking for real setresgid" >&5 +echo "configure:4356: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4324,13 +4361,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4353,7 +4390,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4357: checking for 8-bit clean memcmp" >&5 +echo "configure:4394: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4361,7 +4398,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4394,12 +4431,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4398: checking for $ac_func" >&5 +echo "configure:4435: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4448,7 +4485,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4452: checking for crypt in -lcrypt" >&5 +echo "configure:4489: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4456,7 +4493,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4500,7 +4537,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4504: checking whether to use readline" >&5 +echo "configure:4541: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4512,17 +4549,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4516: checking for $ac_hdr" >&5 +echo "configure:4553: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4526: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4552,17 +4589,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4556: checking for $ac_hdr" >&5 +echo "configure:4593: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4603: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4593,17 +4630,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4597: checking for $ac_hdr" >&5 +echo "configure:4634: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4644: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4626,7 +4663,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4630: checking for tgetent in -l${termlib}" >&5 +echo "configure:4667: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4634,7 +4671,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4667,7 +4704,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4671: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4708: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4675,7 +4712,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4737,17 +4774,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4741: checking for $ac_hdr" >&5 +echo "configure:4778: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4788: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4777,17 +4814,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4781: checking for $ac_hdr" >&5 +echo "configure:4818: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4828: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4818,17 +4855,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4822: checking for $ac_hdr" >&5 +echo "configure:4859: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4851,7 +4888,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4855: checking for tgetent in -l${termlib}" >&5 +echo "configure:4892: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4859,7 +4896,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4892,7 +4929,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4896: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4933: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4900,7 +4937,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4961,7 +4998,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:4965: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5002: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4969,7 +5006,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5013,12 +5050,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5017: checking for $ac_func" >&5 +echo "configure:5054: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5069,7 +5106,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5073: checking for printf in -lnsl_s" >&5 +echo "configure:5110: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5077,7 +5114,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5119,7 +5156,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5123: checking for printf in -lnsl" >&5 +echo "configure:5160: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5127,7 +5164,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5169,7 +5206,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5173: checking for connect in -lsocket" >&5 +echo "configure:5210: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5177,7 +5214,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5219,7 +5256,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5223: checking for connect in -linet" >&5 +echo "configure:5260: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5227,7 +5264,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5282,12 +5319,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5286: checking for $ac_func" >&5 +echo "configure:5323: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5336,7 +5373,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5340: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5377: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5344,7 +5381,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5385,12 +5422,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5389: checking for $ac_func" >&5 +echo "configure:5426: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5446,12 +5483,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5450: checking for $ac_func" >&5 +echo "configure:5487: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5501,12 +5538,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5505: checking for $ac_func" >&5 +echo "configure:5542: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5556,12 +5593,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5560: checking for $ac_func" >&5 +echo "configure:5597: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5625: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5611,12 +5648,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5615: checking for $ac_func" >&5 +echo "configure:5652: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5666,12 +5703,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5670: checking for $ac_func" >&5 +echo "configure:5707: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5721,12 +5758,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5725: checking for $ac_func" >&5 +echo "configure:5762: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5776,12 +5813,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5780: checking for $ac_func" >&5 +echo "configure:5817: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5845: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5831,12 +5868,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5835: checking for $ac_func" >&5 +echo "configure:5872: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5886,12 +5923,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5890: checking for $ac_func" >&5 +echo "configure:5927: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5941,12 +5978,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5945: checking for $ac_func" >&5 +echo "configure:5982: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5997,12 +6034,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6001: checking for $ac_func" >&5 +echo "configure:6038: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6054,12 +6091,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6058: checking for $ac_func" >&5 +echo "configure:6095: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6110,12 +6147,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6114: checking for $ac_func" >&5 +echo "configure:6151: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6165,12 +6202,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6169: checking for $ac_func" >&5 +echo "configure:6206: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6220,12 +6257,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6224: checking for $ac_func" >&5 +echo "configure:6261: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6275,12 +6312,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6279: checking for $ac_func" >&5 +echo "configure:6316: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6330,12 +6367,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6334: checking for $ac_func" >&5 +echo "configure:6371: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6385,12 +6422,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6389: checking for $ac_func" >&5 +echo "configure:6426: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6440,12 +6477,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6444: checking for $ac_func" >&5 +echo "configure:6481: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6495,12 +6532,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6499: checking for $ac_func" >&5 +echo "configure:6536: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6550,12 +6587,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6554: checking for $ac_func" >&5 +echo "configure:6591: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6605,12 +6642,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6609: checking for $ac_func" >&5 +echo "configure:6646: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6660,12 +6697,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6664: checking for $ac_func" >&5 +echo "configure:6701: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6715,12 +6752,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6719: checking for $ac_func" >&5 +echo "configure:6756: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6784: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6770,12 +6807,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6774: checking for $ac_func" >&5 +echo "configure:6811: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6825,12 +6862,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6829: checking for $ac_func" >&5 +echo "configure:6866: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6884,9 +6921,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6888: checking for stat64 in " >&5 +echo "configure:6925: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6917,9 +6954,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6921: checking for lstat64 in " >&5 +echo "configure:6958: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6950,9 +6987,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6954: checking for fstat64 in " >&5 +echo "configure:6991: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -6984,7 +7021,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:6988: checking for dn_expand in -lresolv" >&5 +echo "configure:7025: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -6992,7 +7029,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7041,12 +7078,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7045: checking for $ac_func" >&5 +echo "configure:7082: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7094,7 +7131,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7098: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7135: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7102,7 +7139,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7143,12 +7180,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7147: checking for $ac_func" >&5 +echo "configure:7184: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7202,12 +7239,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7206: checking for $ac_func" >&5 +echo "configure:7243: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7255,7 +7292,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7259: checking for putprpwnam in -lsec" >&5 +echo "configure:7296: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7263,7 +7300,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7304,12 +7341,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7308: checking for $ac_func" >&5 +echo "configure:7345: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7364,12 +7401,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7368: checking for $ac_func" >&5 +echo "configure:7405: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7417,7 +7454,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7421: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7458: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7425,7 +7462,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7466,12 +7503,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7470: checking for $ac_func" >&5 +echo "configure:7507: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7525,12 +7562,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7529: checking for $ac_func" >&5 +echo "configure:7566: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7578,7 +7615,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7582: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7619: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7586,7 +7623,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7627,12 +7664,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7631: checking for $ac_func" >&5 +echo "configure:7668: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7688,12 +7725,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7692: checking for $ac_func" >&5 +echo "configure:7729: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7741,7 +7778,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7745: checking for getspnam in -lgen" >&5 +echo "configure:7782: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7749,7 +7786,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7801: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7790,12 +7827,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7794: checking for $ac_func" >&5 +echo "configure:7831: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7850,12 +7887,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7854: checking for $ac_func" >&5 +echo "configure:7891: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7903,7 +7940,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7907: checking for getspnam in -lsecurity" >&5 +echo "configure:7944: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7911,7 +7948,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7952,12 +7989,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7956: checking for $ac_func" >&5 +echo "configure:7993: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8011,12 +8048,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8015: checking for $ac_func" >&5 +echo "configure:8052: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8064,7 +8101,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8068: checking for getspnam in -lsec" >&5 +echo "configure:8105: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8072,7 +8109,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8113,12 +8150,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8117: checking for $ac_func" >&5 +echo "configure:8154: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8173,12 +8210,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8177: checking for $ac_func" >&5 +echo "configure:8214: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8226,7 +8263,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8230: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8267: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8234,7 +8271,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8275,12 +8312,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8279: checking for $ac_func" >&5 +echo "configure:8316: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8334,12 +8371,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8338: checking for $ac_func" >&5 +echo "configure:8375: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8387,7 +8424,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8391: checking for bigcrypt in -lsec" >&5 +echo "configure:8428: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8395,7 +8432,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8436,12 +8473,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8440: checking for $ac_func" >&5 +echo "configure:8477: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8496,12 +8533,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8500: checking for $ac_func" >&5 +echo "configure:8537: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8549,7 +8586,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8553: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8590: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8557,7 +8594,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8598,12 +8635,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8602: checking for $ac_func" >&5 +echo "configure:8639: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8657,12 +8694,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8661: checking for $ac_func" >&5 +echo "configure:8698: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8710,7 +8747,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8714: checking for getprpwnam in -lsec" >&5 +echo "configure:8751: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8718,7 +8755,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8759,12 +8796,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8763: checking for $ac_func" >&5 +echo "configure:8800: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8831,7 +8868,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8835: checking ability to build shared libraries" >&5 +echo "configure:8872: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -8991,7 +9028,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8995: checking for $ac_word" >&5 +echo "configure:9032: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9048,17 +9085,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9052: checking linker flags for shared libraries" >&5 +echo "configure:9089: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9055: checking compiler flags for position-independent code" >&5 +echo "configure:9092: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9062: checking whether building shared libraries actually works" >&5 +echo "configure:9099: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9089,7 +9126,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9093: checking for long long" >&5 +echo "configure:9130: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9098,12 +9135,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9130,20 +9167,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9134: checking for LL suffix on long long integers" >&5 +echo "configure:9171: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9147: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9184: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9165,7 +9202,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9169: checking for 64 bit off_t" >&5 +echo "configure:9206: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9174,13 +9211,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9203,7 +9240,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9207: checking for off64_t" >&5 +echo "configure:9244: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9212,7 +9249,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9245,7 +9282,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9249: checking for 64 bit ino_t" >&5 +echo "configure:9286: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9254,13 +9291,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9283,7 +9320,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9287: checking for ino64_t" >&5 +echo "configure:9324: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9292,7 +9329,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9325,7 +9362,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9329: checking for dev64_t" >&5 +echo "configure:9366: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9334,7 +9371,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9367,13 +9404,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9371: checking for struct dirent64" >&5 +echo "configure:9408: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9426: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9406,7 +9443,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9410: checking for major macro" >&5 +echo "configure:9447: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9415,7 +9452,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9447,7 +9484,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9451: checking for minor macro" >&5 +echo "configure:9488: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9456,7 +9493,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9488,7 +9525,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9492: checking for unsigned char" >&5 +echo "configure:9529: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9497,12 +9534,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9525,13 +9562,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9529: checking for sin_len in sock" >&5 +echo "configure:9566: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9540,7 +9577,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9544: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9561,13 +9598,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9565: checking whether seekdir returns void" >&5 +echo "configure:9602: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9576,7 +9613,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9597,20 +9634,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9601: checking for __FILE__ macro" >&5 +echo "configure:9638: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9614: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9631,20 +9668,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9635: checking for __FUNCTION__ macro" >&5 +echo "configure:9672: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9648: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9685: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9665,7 +9702,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9669: checking if gettimeofday takes tz argument" >&5 +echo "configure:9706: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9674,14 +9711,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9704,13 +9741,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9708: checking for __va_copy" >&5 +echo "configure:9745: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9718,7 +9755,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9739,7 +9776,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9743: checking for C99 vsnprintf" >&5 +echo "configure:9780: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9748,7 +9785,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9775,7 +9812,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9798,7 +9835,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9802: checking for broken readdir" >&5 +echo "configure:9839: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9807,7 +9844,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9815,7 +9852,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9838,13 +9875,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9842: checking for utimbuf" >&5 +echo "configure:9879: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9852,7 +9889,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9856: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9876,12 +9913,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9880: checking for $ac_func" >&5 +echo "configure:9917: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9930,13 +9967,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9934: checking for ut_name in utmp" >&5 +echo "configure:9971: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9944,7 +9981,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9948: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9985: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -9965,13 +10002,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:9969: checking for ut_user in utmp" >&5 +echo "configure:10006: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9979,7 +10016,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10020: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10000,13 +10037,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10004: checking for ut_id in utmp" >&5 +echo "configure:10041: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10014,7 +10051,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10018: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10035,13 +10072,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10039: checking for ut_host in utmp" >&5 +echo "configure:10076: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10049,7 +10086,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10053: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10070,13 +10107,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10074: checking for ut_time in utmp" >&5 +echo "configure:10111: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10084,7 +10121,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10105,13 +10142,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10109: checking for ut_tv in utmp" >&5 +echo "configure:10146: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10119,7 +10156,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10140,13 +10177,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10144: checking for ut_type in utmp" >&5 +echo "configure:10181: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10154,7 +10191,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10175,13 +10212,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10179: checking for ut_pid in utmp" >&5 +echo "configure:10216: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10189,7 +10226,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10210,13 +10247,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10214: checking for ut_exit in utmp" >&5 +echo "configure:10251: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10224,7 +10261,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10245,13 +10282,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10249: checking for ut_addr in utmp" >&5 +echo "configure:10286: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10259,7 +10296,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10281,13 +10318,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10285: checking whether pututline returns pointer" >&5 +echo "configure:10322: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10295,7 +10332,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10299: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10336: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10317,13 +10354,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10321: checking for ut_syslen in utmpx" >&5 +echo "configure:10358: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10331,7 +10368,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10335: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10355,7 +10392,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10359: checking whether to use libiconv" >&5 +echo "configure:10396: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10368,7 +10405,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10372: checking for iconv_open in -liconv" >&5 +echo "configure:10409: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10376,7 +10413,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10430,7 +10467,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10434: checking for working iconv" >&5 +echo "configure:10471: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10439,7 +10476,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10450,7 +10487,7 @@ main() { } EOF -if { (eval echo configure:10454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10474,7 +10511,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10478: checking for Linux kernel oplocks" >&5 +echo "configure:10515: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10483,7 +10520,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10497,7 +10534,7 @@ main() { } EOF -if { (eval echo configure:10501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10520,7 +10557,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10524: checking for kernel change notify support" >&5 +echo "configure:10561: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10529,7 +10566,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10543,7 +10580,7 @@ main() { } EOF -if { (eval echo configure:10547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10566,7 +10603,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10570: checking for kernel share modes" >&5 +echo "configure:10607: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10575,7 +10612,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10591,7 +10628,7 @@ main() { } EOF -if { (eval echo configure:10595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10617,13 +10654,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10621: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10658: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10631,7 +10668,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10672: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10652,7 +10689,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10656: checking for irix specific capabilities" >&5 +echo "configure:10693: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10661,7 +10698,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10676,7 +10713,7 @@ main() { } EOF -if { (eval echo configure:10680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10704,13 +10741,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10708: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10745: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10720,7 +10757,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10724: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10741,13 +10778,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10745: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10782: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10757,7 +10794,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10798: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10778,13 +10815,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10782: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10819: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10794,7 +10831,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10798: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10815,13 +10852,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10819: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10856: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10831,7 +10868,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10853,13 +10890,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10857: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10894: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10873,7 +10910,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10914: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10894,16 +10931,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10898: checking for test routines" >&5 +echo "configure:10935: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10917,7 +10954,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10921: checking for ftruncate extend" >&5 +echo "configure:10958: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10926,11 +10963,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10953,7 +10990,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10957: checking for AF_LOCAL socket support" >&5 +echo "configure:10994: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10962,11 +10999,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -10990,7 +11027,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:10994: checking for broken getgroups" >&5 +echo "configure:11031: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10999,11 +11036,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11026,7 +11063,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11030: checking whether getpass should be replaced" >&5 +echo "configure:11067: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11034,7 +11071,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11070,7 +11107,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11074: checking for broken inet_ntoa" >&5 +echo "configure:11111: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11079,7 +11116,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11093,7 +11130,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11116,7 +11153,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11120: checking for secure mkstemp" >&5 +echo "configure:11157: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11125,7 +11162,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11142,7 +11179,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11165,7 +11202,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11169: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11206: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11174,12 +11211,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11202,7 +11239,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11206: checking for root" >&5 +echo "configure:11243: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11211,11 +11248,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11243,7 +11280,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11247: checking for iface AIX" >&5 +echo "configure:11284: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11252,7 +11289,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11284,7 +11321,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11288: checking for iface ifconf" >&5 +echo "configure:11325: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11293,7 +11330,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11326,7 +11363,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11330: checking for iface ifreq" >&5 +echo "configure:11367: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11335,7 +11372,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11372,7 +11409,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11376: checking for setresuid" >&5 +echo "configure:11413: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11381,7 +11418,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11415,7 +11452,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11419: checking for setreuid" >&5 +echo "configure:11456: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11424,7 +11461,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11457,7 +11494,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11461: checking for seteuid" >&5 +echo "configure:11498: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11466,7 +11503,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11499,7 +11536,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11503: checking for setuidx" >&5 +echo "configure:11540: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11508,7 +11545,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11541,7 +11578,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11545: checking for working mmap" >&5 +echo "configure:11582: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11550,11 +11587,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11577,7 +11614,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11581: checking for ftruncate needs root" >&5 +echo "configure:11618: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11586,11 +11623,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11613,7 +11650,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11617: checking for fcntl locking" >&5 +echo "configure:11654: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11622,11 +11659,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11649,7 +11686,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11653: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11690: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11658,11 +11695,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11687,7 +11724,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11691: checking for 64 bit fcntl locking" >&5 +echo "configure:11728: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11696,7 +11733,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11745,13 +11782,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11749: checking for st_blocks in struct stat" >&5 +echo "configure:11786: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11760,7 +11797,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11801: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11781,13 +11818,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11785: checking for st_blksize in struct stat" >&5 +echo "configure:11822: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11796,7 +11833,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11819,13 +11856,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11823: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11860: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11862,13 +11899,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11866: checking for broken nisplus include files" >&5 +echo "configure:11903: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11878,7 +11915,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11902,7 +11939,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11906: checking whether to use smbwrapper" >&5 +echo "configure:11943: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11949,7 +11986,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11953: checking whether to use AFS clear-text auth" >&5 +echo "configure:11990: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -11975,7 +12012,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11979: checking whether to use DFS clear-text auth" >&5 +echo "configure:12016: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12001,7 +12038,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12005: checking for /usr/kerberos" >&5 +echo "configure:12042: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12014,7 +12051,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12018: checking for kerberos 5 install path" >&5 +echo "configure:12055: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12043,17 +12080,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12047: checking for $ac_hdr" >&5 +echo "configure:12084: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12057: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12086,17 +12123,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12090: checking for $ac_hdr" >&5 +echo "configure:12127: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12100: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12126,7 +12163,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12130: checking for _et_list in -lcom_err" >&5 +echo "configure:12167: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12134,7 +12171,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12166,7 +12203,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12170: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12207: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12174,7 +12211,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12210,7 +12247,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12214: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12251: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12218,7 +12255,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12257,7 +12294,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12261: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12298: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12265,7 +12302,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12305,7 +12342,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12309: checking for ber_scanf in -llber" >&5 +echo "configure:12346: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12313,7 +12350,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12349,7 +12386,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12353: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12390: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12357,7 +12394,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12399,12 +12436,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12403: checking for $ac_func" >&5 +echo "configure:12440: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12452,13 +12489,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12456: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12493: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12467,7 +12504,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12471: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12508: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12489,7 +12526,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12493: checking whether to use AUTOMOUNT" >&5 +echo "configure:12530: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12514,7 +12551,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12518: checking whether to use SMBMOUNT" >&5 +echo "configure:12555: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12551,7 +12588,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12555: checking whether to use PAM" >&5 +echo "configure:12592: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12577,7 +12614,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12581: checking for pam_get_data in -lpam" >&5 +echo "configure:12618: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12585,7 +12622,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12623,7 +12660,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12627: checking whether to use pam_smbpass" >&5 +echo "configure:12664: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12661,12 +12698,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12665: checking for $ac_func" >&5 +echo "configure:12702: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12715,7 +12752,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12719: checking for crypt in -lcrypt" >&5 +echo "configure:12756: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12723,7 +12760,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12769,7 +12806,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12773: checking for a crypt that needs truncated salt" >&5 +echo "configure:12810: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12778,11 +12815,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12808,7 +12845,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12812: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12849: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12840,7 +12877,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12844: checking whether to use TDB SAM database" >&5 +echo "configure:12881: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12865,7 +12902,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12869: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12906: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12896,7 +12933,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12900: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12937: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12921,7 +12958,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12925: checking whether to use syslog logging" >&5 +echo "configure:12962: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12946,7 +12983,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12950: checking whether to use profiling" >&5 +echo "configure:12987: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -12974,7 +13011,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:12978: checking whether to support disk-quotas" >&5 +echo "configure:13015: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -12985,13 +13022,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:12989: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13026: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13003,7 +13040,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13044: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13052,7 +13089,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13056: checking whether to support utmp accounting" >&5 +echo "configure:13093: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13077,7 +13114,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13081: checking chosen man pages' language(s)" >&5 +echo "configure:13118: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13108,7 +13145,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13112: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13149: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13136,14 +13173,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13140: checking how to get filesystem space usage" >&5 +echo "configure:13177: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13147: checking statvfs64 function (SVR4)" >&5 +echo "configure:13184: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13151,7 +13188,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13198,12 +13235,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13202: checking statvfs function (SVR4)" >&5 +echo "configure:13239: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13211,7 +13248,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13236,7 +13273,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13240: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13277: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13244,7 +13281,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13257,7 +13294,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13284,7 +13321,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13288: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13325: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13292,7 +13329,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13338,7 +13375,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13342: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13379: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13346,7 +13383,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13356,7 +13393,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13383,7 +13420,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13387: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13424: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13391,7 +13428,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13407,7 +13444,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13434,7 +13471,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13438: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13475: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13442,7 +13479,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13462,7 +13499,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13495,9 +13532,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13499: checking if large file support can be enabled" >&5 +echo "configure:13536: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13551: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13575,7 +13612,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13579: checking whether to support ACLs" >&5 +echo "configure:13616: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13628,7 +13665,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13632: checking for acl_get_file in -lacl" >&5 +echo "configure:13669: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13636,7 +13673,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13675,13 +13712,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13679: checking for ACL support" >&5 +echo "configure:13716: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13689,7 +13726,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13709,13 +13746,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13713: checking for acl_get_perm_np" >&5 +echo "configure:13750: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13723,7 +13760,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13770,7 +13807,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13774: checking whether to build winbind" >&5 +echo "configure:13811: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13866,20 +13903,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13870: checking whether struct passwd has pw_comment" >&5 +echo "configure:13907: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13883: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13920: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13904,20 +13941,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13908: checking whether struct passwd has pw_age" >&5 +echo "configure:13945: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13958: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13956,7 +13993,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:13960: checking for poptGetContext in -lpopt" >&5 +echo "configure:13997: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13964,7 +14001,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13999,7 +14036,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14003: checking whether to use included popt" >&5 +echo "configure:14040: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14022,16 +14059,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14026: checking configure summary" >&5 +echo "configure:14063: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source3/configure.in b/source3/configure.in index e4bc698257..168a6f4746 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -432,6 +432,7 @@ AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h) AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h) AC_CHECK_HEADERS(security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn.h) +AC_CHECK_HEADERS(sys/syslog.h syslog.h) # # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT. diff --git a/source3/include/config.h.in b/source3/include/config.h.in index 70c0ae2f3c..7945e49c79 100644 --- a/source3/include/config.h.in +++ b/source3/include/config.h.in @@ -1,4 +1,4 @@ -/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */ +/* include/config.h.in. Generated automatically from configure.in by autoheader. */ /* Define if on AIX 3. System headers sometimes define this. @@ -1090,6 +1090,9 @@ /* Define if you have the header file. */ #undef HAVE_SYS_SYSCALL_H +/* Define if you have the header file. */ +#undef HAVE_SYS_SYSLOG_H + /* Define if you have the header file. */ #undef HAVE_SYS_TERMIO_H @@ -1108,6 +1111,9 @@ /* Define if you have the header file. */ #undef HAVE_SYSCALL_H +/* Define if you have the header file. */ +#undef HAVE_SYSLOG_H + /* Define if you have the header file. */ #undef HAVE_TERMIO_H diff --git a/source3/include/includes.h b/source3/include/includes.h index b07b0c3649..945ec2cbd7 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -217,8 +217,12 @@ #include #include -#ifdef WITH_SYSLOG +#ifdef HAVE_SYSLOG_H #include +#else +#ifdef HAVE_SYS_SYSLOG_H +#include +#endif #endif #include -- cgit From e4eed6e8f4d79b7ae6fc5447b1af02a73ef7777e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 10:38:26 +0000 Subject: One less user of Get_Pwnam_modify()... Andrew Bartlett (This used to be commit 06b8a6fef466e006724bc49165fe936cf8fcfbfa) --- source3/smbd/password.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source3/smbd/password.c b/source3/smbd/password.c index f3a09e8c64..ed3b14102b 100644 --- a/source3/smbd/password.c +++ b/source3/smbd/password.c @@ -224,9 +224,11 @@ add a name to the session users list void add_session_user(const char *user) { fstring suser; - StrnCpy(suser,user,sizeof(suser)-1); + struct passwd *passwd; - if (!Get_Pwnam_Modify(suser)) return; + if (!passwd = Get_Pwnam(user)) return; + + StrnCpy(suser,passwd->pw_name,sizeof(suser)-1); if (suser && *suser && !in_list(suser,session_users,False)) { -- cgit From 4aad4d7c73dcf8d1d0e932c21cae49a3700caf01 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 10:39:34 +0000 Subject: Add some DEBUG()s to some libads failure modes. (This used to be commit ad3c8da13b9d510f78fd56364cd0987de88a9b9f) --- source3/libads/ldap.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index 2cfbedc6d4..428fc02065 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -608,14 +608,17 @@ ADS_STATUS ads_do_search(ADS_STRUCT *ads, const char *bind_path, int scope, char *utf8_exp, *utf8_path, **search_attrs = NULL; TALLOC_CTX *ctx; - if (!(ctx = talloc_init())) + if (!(ctx = talloc_init())) { + DEBUG(1,("ads_do_search: talloc_init() failed!")); return ADS_ERROR(LDAP_NO_MEMORY); + } /* 0 means the conversion worked but the result was empty so we only fail if it's negative. In any case, it always at least nulls out the dest */ if ((push_utf8_talloc(ctx, &utf8_exp, exp) < 0) || (push_utf8_talloc(ctx, &utf8_path, bind_path) < 0)) { + DEBUG(1,("ads_do_search: push_utf8_talloc() failed!")); rc = LDAP_NO_MEMORY; goto done; } @@ -627,6 +630,7 @@ ADS_STATUS ads_do_search(ADS_STRUCT *ads, const char *bind_path, int scope, /* if (!(search_attrs = ads_push_strvals(ctx, attrs))) */ if (!(str_list_copy(&search_attrs, attrs))) { + DEBUG(1,("ads_do_search: str_list_copy() failed!")); rc = LDAP_NO_MEMORY; goto done; } -- cgit From c4d1f9a1e8961c051eb1cee2aa9d93b1b120d836 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 10:43:52 +0000 Subject: Oops... (This used to be commit 9a6f932da1c85a331a8427f055b5fa798dbda89b) --- source3/smbd/password.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/password.c b/source3/smbd/password.c index ed3b14102b..f2956237dd 100644 --- a/source3/smbd/password.c +++ b/source3/smbd/password.c @@ -226,7 +226,7 @@ void add_session_user(const char *user) fstring suser; struct passwd *passwd; - if (!passwd = Get_Pwnam(user)) return; + if (!(passwd = Get_Pwnam(user))) return; StrnCpy(suser,passwd->pw_name,sizeof(suser)-1); -- cgit From eec38ee3bb4bceeaa82abf8df1cce92b6a5781ce Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 11:46:59 +0000 Subject: Patch from "Stefan (metze) Metzmacher" to extend the ADS_STATUS system to include NTSTATUS, and to provide a better general infrustructure for his sam_ads work. I've also added some extra failure mode DEBUG()s to parts of the code. NOTE: The ADS_ERR_OK() macro is rather sensitive to braketing issues - without the final set of brakets, the test is essentially inverted - causing some intersting 'error = success' messages... Andrew Bartlett (This used to be commit 5b9a7ab901bc311f3ad08462a8a68d133c34a8b4) --- source3/Makefile.in | 2 +- source3/include/ads.h | 124 +++++++++++++++++++++++++++++++++------- source3/libads/ads_status.c | 48 +++++++++++++--- source3/libads/ldap.c | 2 + source3/nsswitch/winbindd_ads.c | 8 +-- source3/smbd/sesssetup.c | 3 + source3/utils/net_ads.c | 2 +- 7 files changed, 154 insertions(+), 35 deletions(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 499a098577..531ca74474 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -153,7 +153,7 @@ PARAM_OBJ = param/loadparm.o param/params.o dynconfig.o LIBADS_OBJ = libads/ldap.o libads/ldap_printer.o libads/sasl.o \ libads/krb5_setpw.o libads/kerberos.o libads/ldap_user.o \ libads/ads_struct.o libads/ads_status.o \ - libads/disp_sec.o + libads/disp_sec.o libads/ads_utils.o LIBADS_SERVER_OBJ = libads/util.o libads/kerberos_verify.o diff --git a/source3/include/ads.h b/source3/include/ads.h index 7504a369b4..6106eb6b40 100644 --- a/source3/include/ads.h +++ b/source3/include/ads.h @@ -92,11 +92,14 @@ typedef struct { /* there are 4 possible types of errors the ads subsystem can produce */ enum ads_error_type {ADS_ERROR_KRB5, ADS_ERROR_GSS, - ADS_ERROR_LDAP, ADS_ERROR_SYSTEM}; + ADS_ERROR_LDAP, ADS_ERROR_SYSTEM, ADS_ERROR_NT}; typedef struct { enum ads_error_type error_type; - int rc; + union err_state{ + int rc; + NTSTATUS nt_status; + } err; /* For error_type = ADS_ERROR_GSS minor_status describe GSS API error */ /* Where rc represents major_status of GSS API error */ int minor_status; @@ -109,12 +112,14 @@ typedef void **ADS_MODLIST; #endif /* macros to simplify error returning */ -#define ADS_ERROR(rc) ads_build_error(ADS_ERROR_LDAP, rc, 0) +#define ADS_ERROR(rc) ADS_ERROR_LDAP(rc) +#define ADS_ERROR_LDAP(rc) ads_build_error(ADS_ERROR_LDAP, rc, 0) #define ADS_ERROR_SYSTEM(rc) ads_build_error(ADS_ERROR_SYSTEM, rc?rc:EINVAL, 0) #define ADS_ERROR_KRB5(rc) ads_build_error(ADS_ERROR_KRB5, rc, 0) #define ADS_ERROR_GSS(rc, minor) ads_build_error(ADS_ERROR_GSS, rc, minor) +#define ADS_ERROR_NT(rc) ads_build_nt_error(ADS_ERROR_NT,rc) -#define ADS_ERR_OK(status) ((status).rc == 0) +#define ADS_ERR_OK(status) ((status.error_type == ADS_ERROR_NT) ? NT_STATUS_IS_OK(status.err.nt_status):(status.err.rc == 0)) #define ADS_SUCCESS ADS_ERROR(0) /* time between reconnect attempts */ @@ -128,23 +133,100 @@ typedef void **ADS_MODLIST; #define ADS_NO_REFERRALS_OID "1.2.840.113556.1.4.1339" #define ADS_SERVER_SORT_OID "1.2.840.113556.1.4.473" -#define UF_DONT_EXPIRE_PASSWD 0x10000 -#define UF_MNS_LOGON_ACCOUNT 0x20000 -#define UF_SMARTCARD_REQUIRED 0x40000 -#define UF_TRUSTED_FOR_DELEGATION 0x80000 -#define UF_NOT_DELEGATED 0x100000 -#define UF_USE_DES_KEY_ONLY 0x200000 -#define UF_DONT_REQUIRE_PREAUTH 0x400000 - -#define UF_TEMP_DUPLICATE_ACCOUNT 0x0100 -#define UF_NORMAL_ACCOUNT 0x0200 -#define UF_INTERDOMAIN_TRUST_ACCOUNT 0x0800 -#define UF_WORKSTATION_TRUST_ACCOUNT 0x1000 -#define UF_SERVER_TRUST_ACCOUNT 0x2000 - -/* account types */ -#define ATYPE_GROUP 0x10000000 -#define ATYPE_USER 0x30000000 +/* UserFlags for userAccountControl */ +#define UF_SCRIPT 0x00000001 +#define UF_ACCOUNTDISABLE 0x00000002 +#define UF_UNUSED_1 0x00000004 +#define UF_HOMEDIR_REQUIRED 0x00000008 + +#define UF_LOCKOUT 0x00000010 +#define UF_PASSWD_NOTREQD 0x00000020 +#define UF_PASSWD_CANT_CHANGE 0x00000040 +#define UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED 0x00000080 + +#define UF_TEMP_DUPLICATE_ACCOUNT 0x00000100 +#define UF_NORMAL_ACCOUNT 0x00000200 +#define UF_UNUSED_2 0x00000400 +#define UF_INTERDOMAIN_TRUST_ACCOUNT 0x00000800 + +#define UF_WORKSTATION_TRUST_ACCOUNT 0x00001000 +#define UF_SERVER_TRUST_ACCOUNT 0x00002000 +#define UF_UNUSED_3 0x00004000 +#define UF_UNUSED_4 0x00008000 + +#define UF_DONT_EXPIRE_PASSWD 0x00010000 +#define UF_MNS_LOGON_ACCOUNT 0x00020000 +#define UF_SMARTCARD_REQUIRED 0x00040000 +#define UF_TRUSTED_FOR_DELEGATION 0x00080000 + +#define UF_NOT_DELEGATED 0x00100000 +#define UF_USE_DES_KEY_ONLY 0x00200000 +#define UF_DONT_REQUIRE_PREAUTH 0x00400000 +#define UF_UNUSED_5 0x00800000 + +#define UF_UNUSED_6 0x01000000 +#define UF_UNUSED_7 0x02000000 +#define UF_UNUSED_8 0x04000000 +#define UF_UNUSED_9 0x08000000 + +#define UF_UNUSED_10 0x10000000 +#define UF_UNUSED_11 0x20000000 +#define UF_UNUSED_12 0x40000000 +#define UF_UNUSED_13 0x80000000 + +#define UF_MACHINE_ACCOUNT_MASK (\ + UF_INTERDOMAIN_TRUST_ACCOUNT |\ + UF_WORKSTATION_TRUST_ACCOUNT |\ + UF_SERVER_TRUST_ACCOUNT \ + ) + +#define UF_ACCOUNT_TYPE_MASK (\ + UF_TEMP_DUPLICATE_ACCOUNT |\ + UF_NORMAL_ACCOUNT |\ + UF_INTERDOMAIN_TRUST_ACCOUNT |\ + UF_WORKSTATION_TRUST_ACCOUNT |\ + UF_SERVER_TRUST_ACCOUNT \ + ) + +#define UF_SETTABLE_BITS (\ + UF_SCRIPT |\ + UF_ACCOUNTDISABLE |\ + UF_HOMEDIR_REQUIRED |\ + UF_LOCKOUT |\ + UF_PASSWD_NOTREQD |\ + UF_PASSWD_CANT_CHANGE |\ + UF_ACCOUNT_TYPE_MASK | \ + UF_DONT_EXPIRE_PASSWD | \ + UF_MNS_LOGON_ACCOUNT |\ + UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED |\ + UF_SMARTCARD_REQUIRED |\ + UF_TRUSTED_FOR_DELEGATION |\ + UF_NOT_DELEGATED |\ + UF_USE_DES_KEY_ONLY |\ + UF_DONT_REQUIRE_PREAUTH \ + ) + +/* sAMAccountType */ +#define ATYPE_NORMAL_ACCOUNT 0x30000000 /* 805306368 */ +#define ATYPE_WORKSTATION_TRUST 0x30000001 /* 805306369 */ +#define ATYPE_INTERDOMAIN_TRUST 0x30000002 /* 805306370 */ +#define ATYPE_SECURITY_GLOBAL_GROUP 0x10000000 /* 268435456 */ +#define ATYPE_DISTRIBUTION_GLOBAL_GROUP 0x10000001 /* 268435457 */ +#define ATYPE_DISTRIBUTION_UNIVERSAL_GROUP AT_DISTRIBUTION_GLOBAL_GROUP +#define ATYPE_SECURITY_LOCAL_GROUP 0x20000000 /* 536870912 */ +#define ATYPE_DISTRIBUTION_LOCAL_GROUP 0x20000001 /* 536870913 */ + +#define ATYPE_ACCOUNT ATYPE_NORMAL_ACCOUNT /* 0x30000000 805306368 */ +#define ATYPE_GLOBAL_GROUP ATYPE_SECURITY_GLOBAL_GROUP /* 0x10000000 268435456 */ +#define ATYPE_LOCAL_GROUP ATYPE_SECURITY_LOCAL_GROUP /* 0x20000000 536870912 */ + +/* groupType */ +#define GTYPE_SECURITY_BUILTIN_LOCAL_GROUP 0x80000005 /* -2147483643 */ +#define GTYPE_SECURITY_DOMAIN_LOCAL_GROUP 0x80000004 /* -2147483644 */ +#define GTYPE_SECURITY_GLOBAL_GROUP 0x80000002 /* -2147483646 */ +#define GTYPE_DISTRIBUTION_GLOBAL_GROUP 0x00000002 /* 2 */ +#define GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP 0x00000004 /* 4 */ +#define GTYPE_DISTRIBUTION_UNIVERSAL_GROUP 0x00000008 /* 8 */ /* Mailslot or cldap getdcname response flags */ #define ADS_PDC 0x00000001 /* DC is PDC */ diff --git a/source3/libads/ads_status.c b/source3/libads/ads_status.c index 2d1830435f..d85f9c9b58 100644 --- a/source3/libads/ads_status.c +++ b/source3/libads/ads_status.c @@ -30,19 +30,49 @@ ADS_STATUS ads_build_error(enum ads_error_type etype, int rc, int minor_status) { ADS_STATUS ret; - ret.error_type = etype; - ret.rc = rc; + + if (etype == ADS_ERROR_NT) { + DEBUG(0,("don't use ads_build_error with ADS_ERROR_NT!\n")); + ret.err.rc = -1; + ret.error_type = ADS_ERROR_SYSTEM; + ret.minor_status = 0; + return ret; + } + + ret.err.rc = rc; + ret.error_type = etype; ret.minor_status = minor_status; return ret; } +ADS_STATUS ads_build_nt_error(enum ads_error_type etype, + NTSTATUS nt_status) +{ + ADS_STATUS ret; + + if (etype != ADS_ERROR_NT) { + DEBUG(0,("don't use ads_build_nt_error without ADS_ERROR_NT!\n")); + ret.err.rc = -1; + ret.error_type = ADS_ERROR_SYSTEM; + ret.minor_status = 0; + return ret; + } + ret.err.nt_status = nt_status; + ret.error_type = etype; + ret.minor_status = 0; + return ret; +} + /* do a rough conversion between ads error codes and NT status codes we'll need to fill this in more */ -NTSTATUS ads_ntstatus(ADS_STATUS rc) +NTSTATUS ads_ntstatus(ADS_STATUS status) { - if (ADS_ERR_OK(rc)) return NT_STATUS_OK; + if (status.error_type == ADS_ERROR_NT){ + return status.err.nt_status; + } + if (ADS_ERR_OK(status)) return NT_STATUS_OK; return NT_STATUS_UNSUCCESSFUL; } @@ -59,14 +89,14 @@ const char *ads_errstr(ADS_STATUS status) switch (status.error_type) { case ADS_ERROR_SYSTEM: - return strerror(status.rc); + return strerror(status.err.rc); #ifdef HAVE_LDAP case ADS_ERROR_LDAP: - return ldap_err2string(status.rc); + return ldap_err2string(status.err.rc); #endif #ifdef HAVE_KRB5 case ADS_ERROR_KRB5: - return error_message(status.rc); + return error_message(status.err.rc); #endif #ifdef HAVE_GSSAPI case ADS_ERROR_GSS: @@ -76,7 +106,7 @@ const char *ads_errstr(ADS_STATUS status) gss_buffer_desc msg1, msg2; msg1.value = NULL; msg2.value = NULL; - gss_display_status(&minor, status.rc, GSS_C_GSS_CODE, + gss_display_status(&minor, status.err.rc, GSS_C_GSS_CODE, GSS_C_NULL_OID, &msg_ctx, &msg1); gss_display_status(&minor, status.minor_status, GSS_C_MECH_CODE, GSS_C_NULL_OID, &msg_ctx, &msg2); @@ -86,6 +116,8 @@ const char *ads_errstr(ADS_STATUS status) return ret; } #endif + case ADS_ERROR_NT: + return nt_errstr(ads_ntstatus(status)); default: return "Unknown ADS error type!? (not compiled in?)"; } diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index 428fc02065..2f70d3a285 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -1648,6 +1648,7 @@ ADS_STATUS ads_server_info(ADS_STRUCT *ads) if (!p) { ldap_value_free(values); ldap_msgfree(res); + DEBUG(1, ("ads_server_info: returned ldap server name did not contain a ':' so was deemed invalid\n")); return ADS_ERROR(LDAP_DECODING_ERROR); } @@ -1659,6 +1660,7 @@ ADS_STATUS ads_server_info(ADS_STRUCT *ads) ldap_value_free(values); ldap_msgfree(res); SAFE_FREE(ads->config.ldap_server_name); + DEBUG(1, ("ads_server_info: returned ldap server name did not contain '$@' so was deemed invalid\n")); return ADS_ERROR(LDAP_DECODING_ERROR); } diff --git a/source3/nsswitch/winbindd_ads.c b/source3/nsswitch/winbindd_ads.c index b0b70178a4..4f91ed0f20 100644 --- a/source3/nsswitch/winbindd_ads.c +++ b/source3/nsswitch/winbindd_ads.c @@ -143,7 +143,7 @@ static ADS_STRUCT *ads_cached_connection(struct winbindd_domain *domain) /* if we get ECONNREFUSED then it might be a NT4 server, fall back to MSRPC */ if (status.error_type == ADS_ERROR_SYSTEM && - status.rc == ECONNREFUSED) { + status.err.rc == ECONNREFUSED) { DEBUG(1,("Trying MSRPC methods\n")); domain->methods = &msrpc_methods; } @@ -170,9 +170,9 @@ static void sid_from_rid(struct winbindd_domain *domain, uint32 rid, DOM_SID *si static enum SID_NAME_USE ads_atype_map(uint32 atype) { switch (atype & 0xF0000000) { - case ATYPE_GROUP: + case ATYPE_GLOBAL_GROUP: return SID_NAME_DOM_GRP; - case ATYPE_USER: + case ATYPE_ACCOUNT: return SID_NAME_USER; default: DEBUG(1,("hmm, need to map account type 0x%x\n", atype)); @@ -339,7 +339,7 @@ static NTSTATUS enum_dom_groups(struct winbindd_domain *domain, if (!ads_pull_uint32(ads, msg, "sAMAccountType", &account_type) || - !(account_type & ATYPE_GROUP)) continue; + !(account_type & ATYPE_GLOBAL_GROUP)) continue; name = pull_username(ads, mem_ctx, msg); gecos = ads_pull_string(ads, mem_ctx, msg, "name"); diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index c37c655fd1..0253422596 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -313,6 +313,9 @@ static int reply_spnego_negotiate(connection_struct *conn, NTLMSSP_NEGOTIATE_128 | NTLMSSP_NEGOTIATE_NTLM | NTLMSSP_CHAL_TARGET_INFO; + + if (neg_flags & NTLMSSP_NEGOTIATE_NTLM2) + chal_flags |= NTLMSSP_NEGOTIATE_NTLM2; { DATA_BLOB domain_blob, struct_blob; diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c index eb1c3fe059..8c85bd82f9 100644 --- a/source3/utils/net_ads.c +++ b/source3/utils/net_ads.c @@ -635,7 +635,7 @@ int net_ads_join(int argc, const char **argv) rc = ads_search_dn(ads, &res, dn, NULL); ads_msgfree(ads, res); - if (rc.error_type == ADS_ERROR_LDAP && rc.rc == LDAP_NO_SUCH_OBJECT) { + if (rc.error_type == ADS_ERROR_LDAP && rc.err.rc == LDAP_NO_SUCH_OBJECT) { d_printf("ads_join_realm: organizational unit %s does not exist (dn:%s)\n", org_unit, dn); return -1; -- cgit From a92724025a877241b7ee25d6e9cd7c72bdfa2974 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 11:49:16 +0000 Subject: Revert accidental commit - I'll need to do a fair bit more testing before I commit changes to NTLMSSP flags. (This used to be commit d200770796d871b3994a06fab45624068fdc5682) --- source3/smbd/sesssetup.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index 0253422596..c37c655fd1 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -313,9 +313,6 @@ static int reply_spnego_negotiate(connection_struct *conn, NTLMSSP_NEGOTIATE_128 | NTLMSSP_NEGOTIATE_NTLM | NTLMSSP_CHAL_TARGET_INFO; - - if (neg_flags & NTLMSSP_NEGOTIATE_NTLM2) - chal_flags |= NTLMSSP_NEGOTIATE_NTLM2; { DATA_BLOB domain_blob, struct_blob; -- cgit From 2d881357149c4cec6c109b801cef487ae0955126 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 11:58:18 +0000 Subject: patch from metze: add a 'vfs' debug class (This used to be commit 601b56e04fddd9ddfb9be5b0a625d6d279df7f4c) --- source3/include/debug.h | 2 +- source3/lib/debug.c | 1 + source3/smbd/vfs-wrap.c | 4 ++++ source3/smbd/vfs.c | 4 ++++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/source3/include/debug.h b/source3/include/debug.h index a926143701..4b0b4b1ac4 100644 --- a/source3/include/debug.h +++ b/source3/include/debug.h @@ -92,7 +92,7 @@ extern int DEBUGLEVEL; #define DBGC_SAM 9 #define DBGC_AUTH 10 #define DBGC_WINBIND 11 - +#define DBGC_VFS 12 /* So you can define DBGC_CLASS before including debug.h */ #ifndef DBGC_CLASS diff --git a/source3/lib/debug.c b/source3/lib/debug.c index c8a4721bce..f4f3ee2f9f 100644 --- a/source3/lib/debug.c +++ b/source3/lib/debug.c @@ -156,6 +156,7 @@ static const char *default_classname_table[] = { "sam", /* DBGC_SAM */ "auth", /* DBGC_AUTH */ "winbind", /* DBGC_WINBIND */ + "vfs", /* DBGC_VFS */ NULL }; diff --git a/source3/smbd/vfs-wrap.c b/source3/smbd/vfs-wrap.c index 394086dc07..6878a42b48 100644 --- a/source3/smbd/vfs-wrap.c +++ b/source3/smbd/vfs-wrap.c @@ -20,6 +20,10 @@ #include "includes.h" +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_VFS + + /* Check for NULL pointer parameters in vfswrap_* functions */ /* We don't want to have NULL function pointers lying around. Someone diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index 686499288d..6869c61861 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -24,6 +24,10 @@ #include "includes.h" +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_VFS + + /* Some structures to help us initialise the vfs operations table */ struct vfs_syminfo { -- cgit From 68defac58da3f927cd8fb1405f3c648b7dec7f82 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 12:57:12 +0000 Subject: This commit includes part of the patch from metze posted to the list, and a few of my own changes. In particular: I've added a SAM_ASSERT macro. This expands to either SMB_ASSERT() (which should help us track down bugs) or a return of NT_STATUS_CHECK_FAIL. Metze's changes are mostly to bring the code into line with current discussions on things like adding users/groups, flags etc. I've adjusted a fair bit of the 'const' in the SAM stuff. Const is currently used only for pointers, not for local variables or non-pointer paramters. The benifits and reasons for extending this further need discussion on samba-technical. Also, some of the 'context' paramters should not be const, to allow backend modules to do fancy caching etc in them. Andrew Bartlett (This used to be commit e13bc432628a6131be082caedc75cd8a3d206e5a) --- source3/include/sam.h | 76 ++++++++++------- source3/sam/api.c | 27 ++++-- source3/sam/get_set_account.c | 192 +++++++++++++++++------------------------- source3/sam/get_set_domain.c | 62 +++++++------- source3/sam/get_set_group.c | 69 ++++++--------- source3/sam/interface.c | 58 ++++++------- 6 files changed, 225 insertions(+), 259 deletions(-) diff --git a/source3/include/sam.h b/source3/include/sam.h index 1fca8ec4f6..53d56a2a80 100644 --- a/source3/include/sam.h +++ b/source3/include/sam.h @@ -25,7 +25,18 @@ #ifndef _SAM_H #define _SAM_H -#define SAM_INTERFACE_VERSION 1 +/* We want to track down bugs early */ +#if 1 +#define SAM_ASSERT(x) SMB_ASSERT(x) +#else +#define SAM_ASSERT(x) while (0) { \ + if (!(x)) return NT_STATUS_FAIL_CHECK;\ + } +#endif + + +/* let it be 0 until we have a stable interface --metze */ +#define SAM_INTERFACE_VERSION 0 /* use this inside a passdb module */ #define SAM_MODULE_VERSIONING_MAGIC \ @@ -104,12 +115,11 @@ typedef struct sam_group_handle { struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ void (*free_fn)(struct sam_group_handle **); struct sam_group_data { - char *name; - char *comment; + char *group_name; + char *group_desc; DOM_SID sid; - int32 flags; /* specifies if the group is a local group or a global group */ + uint16 group_ctrl; /* specifies if the group is a local group or a global group */ uint32 num_members; - PRIVILEGE_SET privileges; } private; } SAM_GROUP_HANDLE; @@ -117,7 +127,6 @@ typedef struct sam_group_handle { typedef struct sam_group_member { DOM_SID sid; BOOL group; /* specifies if it is a group or a account */ - } SAM_GROUP_MEMBER; typedef struct sam_account_enum { @@ -125,15 +134,23 @@ typedef struct sam_account_enum { char *account_name; char *full_name; char *account_desc; - uint16 acc_ctrl; + uint16 acct_ctrl; } SAM_ACCOUNT_ENUM; typedef struct sam_group_enum { DOM_SID sid; - char *groupname; - char *comment; + char *group_name; + char *group_desc; + uint16 group_ctrl; } SAM_GROUP_ENUM; + +/* bits for group_ctrl: to spezify if the group is global group or alias */ +#define GCB_LOCAL_GROUP 0x0001 +#define GCB_ALIAS_GROUP GCB_LOCAL_GROUP +#define GCB_GLOBAL_GROUP 0x0002 + + typedef struct sam_context { struct sam_methods *methods; @@ -155,36 +172,35 @@ typedef struct sam_context NTSTATUS (*sam_enum_domains) (const struct sam_context *, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char **domain_names); NTSTATUS (*sam_lookup_domain) (const struct sam_context *, const NT_USER_TOKEN * access_token, const char *domain, DOM_SID **domainsid); - NTSTATUS (*sam_get_domain_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain); + NTSTATUS (*sam_get_domain_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain); /* Account API */ - NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_create_account) (const struct sam_context *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); NTSTATUS (*sam_add_account) (const struct sam_context *, const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_update_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_delete_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account); - NTSTATUS (*sam_enum_accounts) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domain, int32 *account_count, SAM_ACCOUNT_ENUM **accounts); + NTSTATUS (*sam_enum_accounts) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domain, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts); - NTSTATUS (*sam_get_account_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account); - NTSTATUS (*sam_get_account_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_get_account_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_get_account_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account); /* Group API */ - + NTSTATUS (*sam_create_group) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group); NTSTATUS (*sam_add_group) (const struct sam_context *, const DOM_SID *domainsid, const SAM_GROUP_HANDLE *group); NTSTATUS (*sam_update_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group); NTSTATUS (*sam_delete_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group); - NTSTATUS (*sam_enum_groups) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups); - NTSTATUS (*sam_get_group_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); - NTSTATUS (*sam_get_group_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_enum_groups) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups); + NTSTATUS (*sam_get_group_by_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_get_group_by_name) (const struct sam_context *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group); NTSTATUS (*sam_add_member_to_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); NTSTATUS (*sam_delete_member_from_group) (const struct sam_context *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); NTSTATUS (*sam_enum_groupmembers) (const struct sam_context *, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members); - NTSTATUS (*sam_get_groups_of_account) (const struct sam_context *, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups); - + NTSTATUS (*sam_get_groups_of_sid) (const struct sam_context *, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups); void (*free_fn)(struct sam_context **); } SAM_CONTEXT; @@ -208,34 +224,34 @@ typedef struct sam_methods /* Domain API */ NTSTATUS (*sam_update_domain) (const struct sam_methods *, const SAM_DOMAIN_HANDLE *domain); - NTSTATUS (*sam_get_domain_handle) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_DOMAIN_HANDLE **domain); + NTSTATUS (*sam_get_domain_handle) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain); /* Account API */ - NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_create_account) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account); NTSTATUS (*sam_add_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_update_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); NTSTATUS (*sam_delete_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account); - NTSTATUS (*sam_enum_accounts) (const struct sam_methods *, const NT_USER_TOKEN *access_token, int32 *account_count, SAM_ACCOUNT_ENUM **accounts); + NTSTATUS (*sam_enum_accounts) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts); - NTSTATUS (*sam_get_account_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account); - NTSTATUS (*sam_get_account_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_get_account_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account); + NTSTATUS (*sam_get_account_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account); /* Group API */ - NTSTATUS (*sam_create_group) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_create_group) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group); NTSTATUS (*sam_add_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group); NTSTATUS (*sam_update_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group); NTSTATUS (*sam_delete_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group); - NTSTATUS (*sam_enum_groups) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups); - NTSTATUS (*sam_get_group_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); - NTSTATUS (*sam_get_group_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_enum_groups) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups); + NTSTATUS (*sam_get_group_by_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group); + NTSTATUS (*sam_get_group_by_name) (const struct sam_methods *, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group); NTSTATUS (*sam_add_member_to_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); NTSTATUS (*sam_delete_member_from_group) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member); NTSTATUS (*sam_enum_groupmembers) (const struct sam_methods *, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members); - NTSTATUS (*sam_get_groups_of_account) (const struct sam_methods *, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups); + NTSTATUS (*sam_get_groups_of_sid) (const struct sam_methods *, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups); void (*free_private_data)(void **); } SAM_METHODS; diff --git a/source3/sam/api.c b/source3/sam/api.c index a941dcb0b9..5d850becce 100644 --- a/source3/sam/api.c +++ b/source3/sam/api.c @@ -120,7 +120,7 @@ NTSTATUS sam_get_domain_by_sid(const NT_USER_TOKEN *access_token, const uint32 a /* Account API */ -NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -128,7 +128,7 @@ NTSTATUS sam_create_account(const NT_USER_TOKEN *access_token, const uint32 acce return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_create_account(sam_context, access_token, access_desired, domainsid, account); + return sam_context->sam_create_account(sam_context, access_token, access_desired, domainsid, account_name, acct_ctrl, account); } NTSTATUS sam_add_account(const DOM_SID *domainsid, const SAM_ACCOUNT_HANDLE *account) @@ -164,7 +164,7 @@ NTSTATUS sam_delete_account(const SAM_ACCOUNT_HANDLE *account) return sam_context->sam_delete_account(sam_context, account); } -NTSTATUS sam_enum_accounts(const NT_USER_TOKEN *access_token, const DOM_SID *domain, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) +NTSTATUS sam_enum_accounts(const NT_USER_TOKEN *access_token, const DOM_SID *domain, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -172,7 +172,7 @@ NTSTATUS sam_enum_accounts(const NT_USER_TOKEN *access_token, const DOM_SID *dom return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_enum_accounts(sam_context, access_token, domain, account_count, accounts); + return sam_context->sam_enum_accounts(sam_context, access_token, domain, acct_ctrl, account_count, accounts); } NTSTATUS sam_get_account_by_sid(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) @@ -199,6 +199,17 @@ NTSTATUS sam_get_account_by_name(const NT_USER_TOKEN *access_token, const uint32 /* Group API */ +NTSTATUS sam_create_group(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) +{ + SAM_CONTEXT *sam_context = sam_get_static_context(False); + + if (!sam_context) { + return NT_STATUS_UNSUCCESSFUL; + } + + return sam_context->sam_create_group(sam_context, access_token, access_desired, domainsid, group_name, group_ctrl, group); +} + NTSTATUS sam_add_group(const DOM_SID *domainsid, const SAM_GROUP_HANDLE *group) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -232,7 +243,7 @@ NTSTATUS sam_delete_group(const SAM_GROUP_HANDLE *group) return sam_context->sam_delete_group(sam_context, group); } -NTSTATUS sam_enum_groups(const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_enum_groups(const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -240,7 +251,7 @@ NTSTATUS sam_enum_groups(const NT_USER_TOKEN *access_token, const DOM_SID *domai return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_enum_groups(sam_context, access_token, domainsid, type, groups_count, groups); + return sam_context->sam_enum_groups(sam_context, access_token, domainsid, group_ctrl, groups_count, groups); } NTSTATUS sam_get_group_by_sid(const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) @@ -298,7 +309,7 @@ NTSTATUS sam_enum_groupmembers(const SAM_GROUP_HANDLE *group, uint32 *members_co return sam_context->sam_enum_groupmembers(sam_context, group, members_count, members); } -NTSTATUS sam_get_groups_of_account(const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_get_groups_of_sid(const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { SAM_CONTEXT *sam_context = sam_get_static_context(False); @@ -306,6 +317,6 @@ NTSTATUS sam_get_groups_of_account(const SAM_ACCOUNT_HANDLE *account, const uint return NT_STATUS_UNSUCCESSFUL; } - return sam_context->sam_get_groups_of_account(sam_context, account, type, group_count, groups); + return sam_context->sam_get_groups_of_sid(sam_context, access_token, sids, group_ctrl, group_count, groups); } diff --git a/source3/sam/get_set_account.c b/source3/sam/get_set_account.c index b0104fa1c3..7bbfe39e14 100644 --- a/source3/sam/get_set_account.c +++ b/source3/sam/get_set_account.c @@ -25,11 +25,11 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM -NTSTATUS sam_get_account_domain_sid(const SAM_ACCOUNT_HANDLE *sampass, DOM_SID **sid) +NTSTATUS sam_get_account_domain_sid(const SAM_ACCOUNT_HANDLE *sampass, const DOM_SID **sid) { NTSTATUS status; SAM_DOMAIN_HANDLE *domain; - if (!sampass || !sid) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(!sampass || !sid); if (!NT_STATUS_IS_OK(status = sam_get_account_domain(sampass, &domain))){ DEBUG(0, ("sam_get_account_domain_sid: Can't get domain for account\n")); @@ -39,11 +39,11 @@ NTSTATUS sam_get_account_domain_sid(const SAM_ACCOUNT_HANDLE *sampass, DOM_SID * return sam_get_domain_sid(domain, sid); } -NTSTATUS sam_get_account_domain_name(const SAM_ACCOUNT_HANDLE *sampass, char **domain_name) +NTSTATUS sam_get_account_domain_name(const SAM_ACCOUNT_HANDLE *sampass, const char **domain_name) { NTSTATUS status; SAM_DOMAIN_HANDLE *domain; - if (!sampass || !domain_name) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && domain_name); if (!NT_STATUS_IS_OK(status = sam_get_account_domain(sampass, &domain))){ DEBUG(0, ("sam_get_account_domain_name: Can't get domain for account\n")); @@ -55,7 +55,7 @@ NTSTATUS sam_get_account_domain_name(const SAM_ACCOUNT_HANDLE *sampass, char **d NTSTATUS sam_get_account_acct_ctrl(const SAM_ACCOUNT_HANDLE *sampass, uint16 *acct_ctrl) { - if(!sampass || !acct_ctrl) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && acct_ctrl); *acct_ctrl = sampass->private.acct_ctrl; @@ -64,7 +64,7 @@ NTSTATUS sam_get_account_acct_ctrl(const SAM_ACCOUNT_HANDLE *sampass, uint16 *ac NTSTATUS sam_get_account_logon_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *logon_time) { - if(!sampass || !logon_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && logon_time) ; *logon_time = sampass->private.logon_time; @@ -73,7 +73,7 @@ NTSTATUS sam_get_account_logon_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *l NTSTATUS sam_get_account_logoff_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *logoff_time) { - if(!sampass || !logoff_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && logoff_time) ; *logoff_time = sampass->private.logoff_time; @@ -82,7 +82,7 @@ NTSTATUS sam_get_account_logoff_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME * NTSTATUS sam_get_account_kickoff_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *kickoff_time) { - if (!sampass || !kickoff_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && kickoff_time); *kickoff_time = sampass->private.kickoff_time; @@ -91,7 +91,7 @@ NTSTATUS sam_get_account_kickoff_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME NTSTATUS sam_get_account_pass_last_set_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *pass_last_set_time) { - if (!sampass || !pass_last_set_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && pass_last_set_time); *pass_last_set_time = sampass->private.pass_last_set_time; @@ -100,7 +100,7 @@ NTSTATUS sam_get_account_pass_last_set_time(const SAM_ACCOUNT_HANDLE *sampass, N NTSTATUS sam_get_account_pass_can_change_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *pass_can_change_time) { - if (!sampass || !pass_can_change_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && pass_can_change_time); *pass_can_change_time = sampass->private.pass_can_change_time; @@ -109,7 +109,7 @@ NTSTATUS sam_get_account_pass_can_change_time(const SAM_ACCOUNT_HANDLE *sampass, NTSTATUS sam_get_account_pass_must_change_time(const SAM_ACCOUNT_HANDLE *sampass, NTTIME *pass_must_change_time) { - if (!sampass || !pass_must_change_time) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && pass_must_change_time); *pass_must_change_time = sampass->private.pass_must_change_time; @@ -118,7 +118,7 @@ NTSTATUS sam_get_account_pass_must_change_time(const SAM_ACCOUNT_HANDLE *sampass NTSTATUS sam_get_account_logon_divs(const SAM_ACCOUNT_HANDLE *sampass, uint16 *logon_divs) { - if (!sampass || !logon_divs) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && logon_divs); *logon_divs = sampass->private.logon_divs; @@ -127,16 +127,16 @@ NTSTATUS sam_get_account_logon_divs(const SAM_ACCOUNT_HANDLE *sampass, uint16 *l NTSTATUS sam_get_account_hours_len(const SAM_ACCOUNT_HANDLE *sampass, uint32 *hours_len) { - if (!sampass || !hours_len) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && hours_len); *hours_len = sampass->private.hours_len; return NT_STATUS_OK; } -NTSTATUS sam_get_account_hours(const SAM_ACCOUNT_HANDLE *sampass, uint8 **hours) +NTSTATUS sam_get_account_hours(const SAM_ACCOUNT_HANDLE *sampass, const uint8 **hours) { - if (!sampass || !hours) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && hours); *hours = sampass->private.hours; @@ -145,7 +145,7 @@ NTSTATUS sam_get_account_hours(const SAM_ACCOUNT_HANDLE *sampass, uint8 **hours) NTSTATUS sam_get_account_nt_pwd(const SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB *nt_pwd) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); SMB_ASSERT((!sampass->private.nt_pw.data) || sampass->private.nt_pw.length == NT_HASH_LEN); @@ -157,7 +157,7 @@ NTSTATUS sam_get_account_nt_pwd(const SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB *nt NTSTATUS sam_get_account_lm_pwd(const SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB *lm_pwd) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); SMB_ASSERT((!sampass->private.lm_pw.data) || sampass->private.lm_pw.length == LM_HASH_LEN); @@ -176,25 +176,25 @@ NTSTATUS sam_get_account_lm_pwd(const SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB *lm NTSTATUS sam_get_account_plaintext_pwd(const SAM_ACCOUNT_HANDLE *sampass, char **plain_pwd) { - if (!sampass || !plain_pwd) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && plain_pwd); *plain_pwd = sampass->private.plaintext_pw; return NT_STATUS_OK; } -NTSTATUS sam_get_account_sid(const SAM_ACCOUNT_HANDLE *sampass, DOM_SID **sid) +NTSTATUS sam_get_account_sid(const SAM_ACCOUNT_HANDLE *sampass, const DOM_SID **sid) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *sid = &(sampass->private.account_sid); return NT_STATUS_OK; } -NTSTATUS sam_get_account_pgroup(const SAM_ACCOUNT_HANDLE *sampass, DOM_SID **sid) +NTSTATUS sam_get_account_pgroup(const SAM_ACCOUNT_HANDLE *sampass, const DOM_SID **sid) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *sid = &(sampass->private.group_sid); @@ -209,7 +209,7 @@ NTSTATUS sam_get_account_pgroup(const SAM_ACCOUNT_HANDLE *sampass, DOM_SID **sid NTSTATUS sam_get_account_init_flag(const SAM_ACCOUNT_HANDLE *sampass, uint32 *initflag) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *initflag = sampass->private.init_flag; @@ -218,7 +218,7 @@ NTSTATUS sam_get_account_init_flag(const SAM_ACCOUNT_HANDLE *sampass, uint32 *in NTSTATUS sam_get_account_name(const SAM_ACCOUNT_HANDLE *sampass, char **account_name) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *account_name = sampass->private.account_name; @@ -227,7 +227,7 @@ NTSTATUS sam_get_account_name(const SAM_ACCOUNT_HANDLE *sampass, char **account_ NTSTATUS sam_get_account_domain(const SAM_ACCOUNT_HANDLE *sampass, SAM_DOMAIN_HANDLE **domain) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *domain = sampass->private.domain; @@ -236,7 +236,7 @@ NTSTATUS sam_get_account_domain(const SAM_ACCOUNT_HANDLE *sampass, SAM_DOMAIN_HA NTSTATUS sam_get_account_fullname(const SAM_ACCOUNT_HANDLE *sampass, char **fullname) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *fullname = sampass->private.full_name; @@ -245,7 +245,7 @@ NTSTATUS sam_get_account_fullname(const SAM_ACCOUNT_HANDLE *sampass, char **full NTSTATUS sam_get_account_homedir(const SAM_ACCOUNT_HANDLE *sampass, char **homedir) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *homedir = sampass->private.home_dir; @@ -254,7 +254,7 @@ NTSTATUS sam_get_account_homedir(const SAM_ACCOUNT_HANDLE *sampass, char **homed NTSTATUS sam_get_account_unix_home_dir(const SAM_ACCOUNT_HANDLE *sampass, char **uhomedir) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *uhomedir = sampass->private.unix_home_dir; @@ -263,7 +263,7 @@ NTSTATUS sam_get_account_unix_home_dir(const SAM_ACCOUNT_HANDLE *sampass, char * NTSTATUS sam_get_account_dir_drive(const SAM_ACCOUNT_HANDLE *sampass, char **dirdrive) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *dirdrive = sampass->private.dir_drive; @@ -272,7 +272,7 @@ NTSTATUS sam_get_account_dir_drive(const SAM_ACCOUNT_HANDLE *sampass, char **dir NTSTATUS sam_get_account_logon_script(const SAM_ACCOUNT_HANDLE *sampass, char **logon_script) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *logon_script = sampass->private.logon_script; @@ -281,7 +281,7 @@ NTSTATUS sam_get_account_logon_script(const SAM_ACCOUNT_HANDLE *sampass, char ** NTSTATUS sam_get_account_profile_path(const SAM_ACCOUNT_HANDLE *sampass, char **profile_path) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *profile_path = sampass->private.profile_path; @@ -290,7 +290,7 @@ NTSTATUS sam_get_account_profile_path(const SAM_ACCOUNT_HANDLE *sampass, char ** NTSTATUS sam_get_account_description(const SAM_ACCOUNT_HANDLE *sampass, char **description) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *description = sampass->private.acct_desc; @@ -299,7 +299,7 @@ NTSTATUS sam_get_account_description(const SAM_ACCOUNT_HANDLE *sampass, char **d NTSTATUS sam_get_account_workstations(const SAM_ACCOUNT_HANDLE *sampass, char **workstations) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *workstations = sampass->private.workstations; @@ -308,7 +308,7 @@ NTSTATUS sam_get_account_workstations(const SAM_ACCOUNT_HANDLE *sampass, char ** NTSTATUS sam_get_account_unknown_str(const SAM_ACCOUNT_HANDLE *sampass, char **unknown_str) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *unknown_str = sampass->private.unknown_str; @@ -317,7 +317,7 @@ NTSTATUS sam_get_account_unknown_str(const SAM_ACCOUNT_HANDLE *sampass, char **u NTSTATUS sam_get_account_munged_dial(const SAM_ACCOUNT_HANDLE *sampass, char **munged_dial) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); *munged_dial = sampass->private.munged_dial; @@ -326,7 +326,7 @@ NTSTATUS sam_get_account_munged_dial(const SAM_ACCOUNT_HANDLE *sampass, char **m NTSTATUS sam_get_account_unknown_1(const SAM_ACCOUNT_HANDLE *sampass, uint32 *unknown1) { - if (!sampass || !unknown1) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && unknown1); *unknown1 = sampass->private.unknown_1; @@ -335,7 +335,7 @@ NTSTATUS sam_get_account_unknown_1(const SAM_ACCOUNT_HANDLE *sampass, uint32 *un NTSTATUS sam_get_account_unknown_2(const SAM_ACCOUNT_HANDLE *sampass, uint32 *unknown2) { - if (!sampass || !unknown2) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && unknown2); *unknown2 = sampass->private.unknown_2; @@ -344,7 +344,7 @@ NTSTATUS sam_get_account_unknown_2(const SAM_ACCOUNT_HANDLE *sampass, uint32 *un NTSTATUS sam_get_account_unknown_3(const SAM_ACCOUNT_HANDLE *sampass, uint32 *unknown3) { - if (!sampass || !unknown3) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && unknown3); *unknown3 = sampass->private.unknown_3; @@ -357,8 +357,7 @@ NTSTATUS sam_get_account_unknown_3(const SAM_ACCOUNT_HANDLE *sampass, uint32 *un NTSTATUS sam_set_account_acct_ctrl(SAM_ACCOUNT_HANDLE *sampass, uint16 flags) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.acct_ctrl = flags; @@ -367,8 +366,7 @@ NTSTATUS sam_set_account_acct_ctrl(SAM_ACCOUNT_HANDLE *sampass, uint16 flags) NTSTATUS sam_set_account_logon_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.logon_time = mytime; @@ -380,8 +378,7 @@ NTSTATUS sam_set_account_logon_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, NTSTATUS sam_set_account_logoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.logoff_time = mytime; @@ -393,8 +390,7 @@ NTSTATUS sam_set_account_logoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, NTSTATUS sam_set_account_kickoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.kickoff_time = mytime; @@ -406,8 +402,7 @@ NTSTATUS sam_set_account_kickoff_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime NTSTATUS sam_set_account_pass_can_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.pass_can_change_time = mytime; @@ -419,8 +414,7 @@ NTSTATUS sam_set_account_pass_can_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTIM NTSTATUS sam_set_account_pass_must_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.pass_must_change_time = mytime; @@ -432,8 +426,7 @@ NTSTATUS sam_set_account_pass_must_change_time(SAM_ACCOUNT_HANDLE *sampass, NTTI NTSTATUS sam_set_account_pass_last_set_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME mytime) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.pass_last_set_time = mytime; @@ -442,8 +435,7 @@ NTSTATUS sam_set_account_pass_last_set_time(SAM_ACCOUNT_HANDLE *sampass, NTTIME NTSTATUS sam_set_account_hours_len(SAM_ACCOUNT_HANDLE *sampass, uint32 len) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.hours_len = len; return NT_STATUS_OK; @@ -451,8 +443,7 @@ NTSTATUS sam_set_account_hours_len(SAM_ACCOUNT_HANDLE *sampass, uint32 len) NTSTATUS sam_set_account_logon_divs(SAM_ACCOUNT_HANDLE *sampass, uint16 hours) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.logon_divs = hours; return NT_STATUS_OK; @@ -467,18 +458,16 @@ NTSTATUS sam_set_account_logon_divs(SAM_ACCOUNT_HANDLE *sampass, uint16 hours) NTSTATUS sam_set_account_init_flag(SAM_ACCOUNT_HANDLE *sampass, uint32 flag) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.init_flag |= flag; return NT_STATUS_OK; } -NTSTATUS sam_set_account_sid(SAM_ACCOUNT_HANDLE *sampass, DOM_SID *u_sid) +NTSTATUS sam_set_account_sid(SAM_ACCOUNT_HANDLE *sampass, const DOM_SID *u_sid) { - if (!sampass || !u_sid) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && u_sid); sid_copy(&sampass->private.account_sid, u_sid); @@ -488,11 +477,10 @@ NTSTATUS sam_set_account_sid(SAM_ACCOUNT_HANDLE *sampass, DOM_SID *u_sid) return NT_STATUS_OK; } -NTSTATUS sam_set_account_sid_from_string(SAM_ACCOUNT_HANDLE *sampass, fstring u_sid) +NTSTATUS sam_set_account_sid_from_string(SAM_ACCOUNT_HANDLE *sampass, const char *u_sid) { DOM_SID new_sid; - if (!sampass || !u_sid) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && u_sid); DEBUG(10, ("sam_set_account_sid_from_string: setting account sid %s\n", u_sid)); @@ -510,10 +498,9 @@ NTSTATUS sam_set_account_sid_from_string(SAM_ACCOUNT_HANDLE *sampass, fstring u_ return NT_STATUS_OK; } -NTSTATUS sam_set_account_pgroup_sid(SAM_ACCOUNT_HANDLE *sampass, DOM_SID *g_sid) +NTSTATUS sam_set_account_pgroup_sid(SAM_ACCOUNT_HANDLE *sampass, const DOM_SID *g_sid) { - if (!sampass || !g_sid) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && g_sid); sid_copy(&sampass->private.group_sid, g_sid); @@ -523,11 +510,10 @@ NTSTATUS sam_set_account_pgroup_sid(SAM_ACCOUNT_HANDLE *sampass, DOM_SID *g_sid) return NT_STATUS_OK; } -NTSTATUS sam_set_account_pgroup_string(SAM_ACCOUNT_HANDLE *sampass, fstring g_sid) +NTSTATUS sam_set_account_pgroup_string(SAM_ACCOUNT_HANDLE *sampass, const char *g_sid) { DOM_SID new_sid; - if (!sampass || !g_sid) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && g_sid); DEBUG(10, ("sam_set_group_sid_from_string: setting group sid %s\n", g_sid)); @@ -550,8 +536,7 @@ NTSTATUS sam_set_account_pgroup_string(SAM_ACCOUNT_HANDLE *sampass, fstring g_si NTSTATUS sam_set_account_domain(SAM_ACCOUNT_HANDLE *sampass, SAM_DOMAIN_HANDLE *domain) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.domain = domain; @@ -564,8 +549,7 @@ NTSTATUS sam_set_account_domain(SAM_ACCOUNT_HANDLE *sampass, SAM_DOMAIN_HANDLE * NTSTATUS sam_set_account_name(SAM_ACCOUNT_HANDLE *sampass, const char *account_name) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_account_name: setting nt account_name %s, was %s\n", account_name, sampass->private.account_name)); @@ -580,8 +564,7 @@ NTSTATUS sam_set_account_name(SAM_ACCOUNT_HANDLE *sampass, const char *account_n NTSTATUS sam_set_account_fullname(SAM_ACCOUNT_HANDLE *sampass, const char *full_name) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_account_fullname: setting full name %s, was %s\n", full_name, sampass->private.full_name)); @@ -596,8 +579,7 @@ NTSTATUS sam_set_account_fullname(SAM_ACCOUNT_HANDLE *sampass, const char *full_ NTSTATUS sam_set_account_logon_script(SAM_ACCOUNT_HANDLE *sampass, const char *logon_script, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_logon_script: from %s to %s\n", logon_script, sampass->private.logon_script)); @@ -614,8 +596,7 @@ NTSTATUS sam_set_account_logon_script(SAM_ACCOUNT_HANDLE *sampass, const char *l NTSTATUS sam_set_account_profile_path(SAM_ACCOUNT_HANDLE *sampass, const char *profile_path, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_profile_path: setting profile path %s, was %s\n", profile_path, sampass->private.profile_path)); @@ -635,8 +616,7 @@ NTSTATUS sam_set_account_profile_path(SAM_ACCOUNT_HANDLE *sampass, const char *p NTSTATUS sam_set_account_dir_drive(SAM_ACCOUNT_HANDLE *sampass, const char *dir_drive, BOOL store) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_dir_drive: setting dir drive %s, was %s\n", dir_drive, sampass->private.dir_drive)); @@ -657,7 +637,7 @@ NTSTATUS sam_set_account_dir_drive(SAM_ACCOUNT_HANDLE *sampass, const char *dir_ NTSTATUS sam_set_account_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *home_dir, BOOL store) { - if (!sampass) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_homedir: setting home dir %s, was %s\n", home_dir, sampass->private.home_dir)); @@ -678,8 +658,7 @@ NTSTATUS sam_set_account_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *home_d NTSTATUS sam_set_account_unix_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *unix_home_dir) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_unix_homedir: setting home dir %s, was %s\n", unix_home_dir, sampass->private.unix_home_dir)); @@ -695,8 +674,7 @@ NTSTATUS sam_set_account_unix_homedir(SAM_ACCOUNT_HANDLE *sampass, const char *u NTSTATUS sam_set_account_acct_desc(SAM_ACCOUNT_HANDLE *sampass, const char *acct_desc) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.acct_desc = talloc_strdup(sampass->mem_ctx, acct_desc); @@ -709,8 +687,7 @@ NTSTATUS sam_set_account_acct_desc(SAM_ACCOUNT_HANDLE *sampass, const char *acct NTSTATUS sam_set_account_workstations(SAM_ACCOUNT_HANDLE *sampass, const char *workstations) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); DEBUG(10, ("sam_set_workstations: setting workstations %s, was %s\n", workstations, sampass->private.workstations)); @@ -726,8 +703,7 @@ NTSTATUS sam_set_account_workstations(SAM_ACCOUNT_HANDLE *sampass, const char *w NTSTATUS sam_set_account_unknown_str(SAM_ACCOUNT_HANDLE *sampass, const char *unknown_str) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.unknown_str = talloc_strdup(sampass->mem_ctx, unknown_str); @@ -740,8 +716,7 @@ NTSTATUS sam_set_account_unknown_str(SAM_ACCOUNT_HANDLE *sampass, const char *un NTSTATUS sam_set_account_munged_dial(SAM_ACCOUNT_HANDLE *sampass, const char *munged_dial) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.munged_dial = talloc_strdup(sampass->mem_ctx, munged_dial); return NT_STATUS_OK; @@ -751,10 +726,9 @@ NTSTATUS sam_set_account_munged_dial(SAM_ACCOUNT_HANDLE *sampass, const char *mu Set the account's NT hash. ********************************************************************/ -NTSTATUS sam_set_account_nt_pwd(SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB data) +NTSTATUS sam_set_account_nt_pwd(SAM_ACCOUNT_HANDLE *sampass, const DATA_BLOB data) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.nt_pw = data; @@ -765,10 +739,9 @@ NTSTATUS sam_set_account_nt_pwd(SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB data) Set the account's LM hash. ********************************************************************/ -NTSTATUS sam_set_account_lm_pwd(SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB data) +NTSTATUS sam_set_account_lm_pwd(SAM_ACCOUNT_HANDLE *sampass, const DATA_BLOB data) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.lm_pw = data; @@ -782,8 +755,7 @@ NTSTATUS sam_set_account_lm_pwd(SAM_ACCOUNT_HANDLE *sampass, DATA_BLOB data) NTSTATUS sam_set_account_plaintext_pwd(SAM_ACCOUNT_HANDLE *sampass, const char *plain_pwd) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.plaintext_pw = talloc_strdup(sampass->mem_ctx, plain_pwd); @@ -792,8 +764,7 @@ NTSTATUS sam_set_account_plaintext_pwd(SAM_ACCOUNT_HANDLE *sampass, const char * NTSTATUS sam_set_account_unknown_1(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.unknown_1 = unkn; @@ -802,8 +773,7 @@ NTSTATUS sam_set_account_unknown_1(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) NTSTATUS sam_set_account_unknown_2(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.unknown_2 = unkn; @@ -812,8 +782,7 @@ NTSTATUS sam_set_account_unknown_2(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) NTSTATUS sam_set_account_unknown_3(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); sampass->private.unknown_3 = unkn; return NT_STATUS_OK; @@ -821,8 +790,7 @@ NTSTATUS sam_set_account_unknown_3(SAM_ACCOUNT_HANDLE *sampass, uint32 unkn) NTSTATUS sam_set_account_hours(SAM_ACCOUNT_HANDLE *sampass, const uint8 *hours) { - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); if (!hours) { memset ((char *)sampass->private.hours, 0, MAX_HOURS_LEN); @@ -846,8 +814,7 @@ NTSTATUS sam_set_account_pass_changed_now(SAM_ACCOUNT_HANDLE *sampass) uint32 expire; NTTIME temptime; - if (!sampass) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass); unix_to_nt_time(&temptime, time(NULL)); if (!NT_STATUS_IS_OK(sam_set_account_pass_last_set_time(sampass, temptime))) @@ -881,8 +848,7 @@ NTSTATUS sam_set_account_passwd(SAM_ACCOUNT_HANDLE *sampass, const char *plainte uchar new_lanman_p16[16]; uchar new_nt_p16[16]; - if (!sampass || !plaintext) - return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(sampass && plaintext); nt_lm_owf_gen(plaintext, new_nt_p16, new_lanman_p16); diff --git a/source3/sam/get_set_domain.c b/source3/sam/get_set_domain.c index 8ca876524a..c70a4a3f09 100644 --- a/source3/sam/get_set_domain.c +++ b/source3/sam/get_set_domain.c @@ -25,9 +25,9 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM -NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, DOM_SID **sid) +NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, const DOM_SID **sid) { - if (!domain || !sid) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&sid); *sid = &(domain->private.sid); @@ -36,7 +36,7 @@ NTSTATUS sam_get_domain_sid(SAM_DOMAIN_HANDLE *domain, DOM_SID **sid) NTSTATUS sam_get_domain_num_accounts(SAM_DOMAIN_HANDLE *domain, uint32 *num_accounts) { - if (!domain || !num_accounts) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&num_accounts); *num_accounts = domain->private.num_accounts; @@ -45,7 +45,7 @@ NTSTATUS sam_get_domain_num_accounts(SAM_DOMAIN_HANDLE *domain, uint32 *num_acco NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups) { - if (!domain || !num_groups) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&num_groups); *num_groups = domain->private.num_groups; @@ -54,25 +54,25 @@ NTSTATUS sam_get_domain_num_groups(SAM_DOMAIN_HANDLE *domain, uint32 *num_groups NTSTATUS sam_get_domain_num_aliases(SAM_DOMAIN_HANDLE *domain, uint32 *num_aliases) { - if (!domain || !num_aliases) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&num_aliases); *num_aliases = domain->private.num_aliases; return NT_STATUS_OK; } -NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, char **domain_name) +NTSTATUS sam_get_domain_name(SAM_DOMAIN_HANDLE *domain, const char **domain_name) { - if (!domain || !domain_name) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&domain_name); *domain_name = domain->private.name; return NT_STATUS_OK; } -NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) +NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, const char **server_name) { - if (!domain || !server_name) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&server_name); *server_name = domain->private.servername; @@ -81,7 +81,7 @@ NTSTATUS sam_get_domain_server(SAM_DOMAIN_HANDLE *domain, char **server_name) NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwordage) { - if (!domain || !max_passwordage) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&max_passwordage); *max_passwordage = domain->private.max_passwordage; @@ -90,7 +90,7 @@ NTSTATUS sam_get_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *max_passwo NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwordage) { - if (!domain || !min_passwordage) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&min_passwordage); *min_passwordage = domain->private.min_passwordage; @@ -99,7 +99,7 @@ NTSTATUS sam_get_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME *min_passwo NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lockout_duration) { - if (!domain || !lockout_duration) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&lockout_duration); *lockout_duration = domain->private.lockout_duration; @@ -108,7 +108,7 @@ NTSTATUS sam_get_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME *lock NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_lockout_count) { - if (!domain || !reset_lockout_count) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&reset_lockout_count); *reset_lockout_count = domain->private.reset_count; @@ -117,7 +117,7 @@ NTSTATUS sam_get_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME *reset_loc NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_passwordlength) { - if (!domain || !min_passwordlength) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&min_passwordlength); *min_passwordlength = domain->private.min_passwordlength; @@ -126,7 +126,7 @@ NTSTATUS sam_get_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 *min_pas NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_history) { - if (!domain || !password_history) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&password_history); *password_history = domain->private.password_history; @@ -135,7 +135,7 @@ NTSTATUS sam_get_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 *password_ NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout_count) { - if (!domain || !lockout_count) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&lockout_count); *lockout_count = domain->private.lockout_count; @@ -144,7 +144,7 @@ NTSTATUS sam_get_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 *lockout NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logoff) { - if (!domain || !force_logoff) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain &&force_logoff); *force_logoff = domain->private.force_logoff; @@ -154,7 +154,7 @@ NTSTATUS sam_get_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL *force_logo NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_pwdchange) { - if (!domain || !login_pwdchange) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain && login_pwdchange); *login_pwdchange = domain->private.login_pwdchange; @@ -163,9 +163,9 @@ NTSTATUS sam_get_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL *login_p /* Set */ -NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name) +NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, const char *domain_name) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.name = talloc_strdup(domain->mem_ctx, domain_name); @@ -175,7 +175,7 @@ NTSTATUS sam_set_domain_name(SAM_DOMAIN_HANDLE *domain, char *domain_name) NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwordage) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.max_passwordage = max_passwordage; @@ -184,7 +184,7 @@ NTSTATUS sam_set_domain_max_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME max_passwor NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwordage) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.min_passwordage = min_passwordage; @@ -193,7 +193,7 @@ NTSTATUS sam_set_domain_min_pwdage(SAM_DOMAIN_HANDLE *domain, NTTIME min_passwor NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME lockout_duration) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.lockout_duration = lockout_duration; @@ -201,7 +201,7 @@ NTSTATUS sam_set_domain_lockout_duration(SAM_DOMAIN_HANDLE *domain, NTTIME locko } NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lockout_count) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.reset_count = reset_lockout_count; @@ -210,7 +210,7 @@ NTSTATUS sam_set_domain_reset_count(SAM_DOMAIN_HANDLE *domain, NTTIME reset_lock NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 min_passwordlength) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.min_passwordlength = min_passwordlength; @@ -219,7 +219,7 @@ NTSTATUS sam_set_domain_min_pwdlength(SAM_DOMAIN_HANDLE *domain, uint16 min_pass NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 password_history) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.password_history = password_history; @@ -228,7 +228,7 @@ NTSTATUS sam_set_domain_pwd_history(SAM_DOMAIN_HANDLE *domain, uint16 password_h NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_count) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.lockout_count = lockout_count; @@ -237,7 +237,7 @@ NTSTATUS sam_set_domain_lockout_count(SAM_DOMAIN_HANDLE *domain, uint16 lockout_ NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL force_logoff) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.force_logoff = force_logoff; @@ -246,16 +246,16 @@ NTSTATUS sam_set_domain_force_logoff(SAM_DOMAIN_HANDLE *domain, BOOL force_logof NTSTATUS sam_set_domain_login_pwdchange(SAM_DOMAIN_HANDLE *domain, BOOL login_pwdchange) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.login_pwdchange = login_pwdchange; return NT_STATUS_OK; } -NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, char *server_name) +NTSTATUS sam_set_domain_server(SAM_DOMAIN_HANDLE *domain, const char *server_name) { - if (!domain) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(domain); domain->private.servername = talloc_strdup(domain->mem_ctx, server_name); diff --git a/source3/sam/get_set_group.c b/source3/sam/get_set_group.c index dac5ffca9f..11ea9258a7 100644 --- a/source3/sam/get_set_group.c +++ b/source3/sam/get_set_group.c @@ -27,97 +27,80 @@ /* sam group get functions */ -NTSTATUS sam_get_group_sid(const SAM_GROUP_HANDLE *group, DOM_SID **sid) +NTSTATUS sam_get_group_sid(const SAM_GROUP_HANDLE *group, const DOM_SID **sid) { - if (!group || !sid) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group && sid); *sid = &(group->private.sid); return NT_STATUS_OK; } -NTSTATUS sam_get_group_typ(const SAM_GROUP_HANDLE *group, uint32 *typ) +NTSTATUS sam_get_group_ctrl(const SAM_GROUP_HANDLE *group, uint32 *group_ctrl) { - if (!group || !typ) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group && group_ctrl); - *typ = group->private.flags; + *group_ctrl = group->private.group_ctrl; return NT_STATUS_OK; } -NTSTATUS sam_get_group_name(const SAM_GROUP_HANDLE *group, char **group_name) +NTSTATUS sam_get_group_name(const SAM_GROUP_HANDLE *group, const char **group_name) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - *group_name = group->private.name; + *group_name = group->private.group_name; return NT_STATUS_OK; } -NTSTATUS sam_get_group_comment(const SAM_GROUP_HANDLE *group, char **comment) +NTSTATUS sam_get_group_comment(const SAM_GROUP_HANDLE *group, const char **group_desc) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - *comment = group->private.comment; - - return NT_STATUS_OK; -} - -NTSTATUS sam_get_group_priv_set(const SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set) -{ - if (!group) return NT_STATUS_UNSUCCESSFUL; - - *priv_set = group->private.privileges; + *group_desc = group->private.group_desc; return NT_STATUS_OK; } /* sam group set functions */ -NTSTATUS sam_set_group_sid(SAM_GROUP_HANDLE *group, DOM_SID *sid) +NTSTATUS sam_set_group_sid(SAM_GROUP_HANDLE *group, const DOM_SID *sid) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - if (!sid) ZERO_STRUCT(group->private.sid); - else sid_copy(&(group->private.sid), sid); + if (!sid) + ZERO_STRUCT(group->private.sid); + else + sid_copy(&(group->private.sid), sid); return NT_STATUS_OK; } -NTSTATUS sam_set_group_typ(SAM_GROUP_HANDLE *group, uint32 typ) +NTSTATUS sam_set_group_group_ctrl(SAM_GROUP_HANDLE *group, uint32 group_ctrl) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - group->private.flags = typ; + group->private.group_ctrl = group_ctrl; return NT_STATUS_OK; } -NTSTATUS sam_set_group_name(SAM_GROUP_HANDLE *group, char *group_name) +NTSTATUS sam_set_group_name(SAM_GROUP_HANDLE *group, const char *group_name) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - group->private.name = talloc_strdup(group->mem_ctx, group_name); + group->private.group_name = talloc_strdup(group->mem_ctx, group_name); return NT_STATUS_OK; } -NTSTATUS sam_set_group_comment(SAM_GROUP_HANDLE *group, char *comment) +NTSTATUS sam_set_group_description(SAM_GROUP_HANDLE *group, const char *group_desc) { - if (!group) return NT_STATUS_UNSUCCESSFUL; + SAM_ASSERT(group); - group->private.comment = talloc_strdup(group->mem_ctx, comment); + group->private.group_desc = talloc_strdup(group->mem_ctx, group_desc); return NT_STATUS_OK; } - -NTSTATUS sam_set_group_priv_set(SAM_GROUP_HANDLE *group, PRIVILEGE_SET *priv_set) -{ - if (!group) return NT_STATUS_UNSUCCESSFUL; - - if (!priv_set) ZERO_STRUCT(group->private.privileges); - else memcpy(&(group->private.privileges), priv_set, sizeof(PRIVILEGE_SET)); - - return NT_STATUS_OK; -} diff --git a/source3/sam/interface.c b/source3/sam/interface.c index ef2a4d5f8a..9ba273e6f3 100644 --- a/source3/sam/interface.c +++ b/source3/sam/interface.c @@ -48,11 +48,8 @@ NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_me DEBUG(5,("sam_get_methods_by_sid: %d\n", __LINE__)); - if ((!context) || (!context->methods)) - { - DEBUG(2,("sam_get_methods_by_sid: invalid sam_context specified!\n")); - return NT_STATUS_INVALID_PARAMETER; - } + /* invalid sam_context specified */ + SAM_ASSERT(context && context->methods) tmp_methods = context->methods; @@ -77,11 +74,8 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m DEBUG(5,("sam_get_methods_by_name: %d\n", __LINE__)); - if ((!context) || (!context->methods)) - { - DEBUG(2,("sam_get_methods_by_sid: invalid sam_context specified!\n")); - return NT_STATUS_INVALID_PARAMETER; - } + /* invalid sam_context specified */ + SAM_ASSERT(context && context->methods) tmp_methods = context->methods; @@ -229,10 +223,8 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE DEBUG(5,("context_sam_enum_domains: %d\n", __LINE__)); - if ((!context)|| (!context->methods)) { - DEBUG(2,("context_sam_enum_domains: invalid sam_context specified!\n")); - return NT_STATUS_INVALID_PARAMETER; - } + /* invalid sam_context specified */ + SAM_ASSERT(context && context->methods) if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { DEBUG(4,("samr_make_sam_obj_sd failed\n")); @@ -298,10 +290,8 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK DEBUG(5,("context_sam_lookup_domain: %d\n", __LINE__)); - if ((!context)|| (!context->methods)) { - DEBUG(2,("context_sam_lookup_domain: invalid sam_context specified!\n")); - return NT_STATUS_INVALID_PARAMETER; - } + /* invalid sam_context specified */ + SAM_ASSERT(context && context->methods) if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { DEBUG(4,("samr_make_sam_obj_sd failed\n")); @@ -354,7 +344,7 @@ NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER return NT_STATUS_OK; } -NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, DOM_SID *domainsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -371,7 +361,7 @@ NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TO return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account_name, acct_ctrl, account))) { DEBUG(4,("context_sam_create_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; @@ -383,7 +373,7 @@ NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TO NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) { DOM_SID domainsid; - DOM_SID *accountsid; + const DOM_SID *accountsid; SAM_METHODS *tmp_methods; uint32 rid; NTSTATUS nt_status; @@ -422,7 +412,7 @@ NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUN { DOM_SID domainsid; SAM_METHODS *tmp_methods; - DOM_SID *accountsid; + const DOM_SID *accountsid; uint32 rid; NTSTATUS nt_status; @@ -460,7 +450,7 @@ NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUN { DOM_SID domainsid; SAM_METHODS *tmp_methods; - DOM_SID *accountsid; + const DOM_SID *accountsid; uint32 rid; NTSTATUS nt_status; @@ -494,7 +484,7 @@ NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUN return NT_STATUS_OK; } -NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) +NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 acct_ctrl, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -511,7 +501,7 @@ NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOK return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, account_count, accounts))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, acct_ctrl, account_count, accounts))) { DEBUG(4,("context_sam_enum_accounts for domain %s in backend %s failed\n", tmp_methods->domain->private.name, tmp_methods->backendname)); return nt_status; @@ -582,14 +572,14 @@ NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_US return NT_STATUS_OK; } -NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, DOM_SID *sid, SAM_GROUP_HANDLE **group) +NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_create_group: %d\n", __LINE__)); - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, domainsid))) { DEBUG(4,("sam_get_methods_by_sid failed\n")); return nt_status; } @@ -599,7 +589,7 @@ NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKE return NT_STATUS_UNSUCCESSFUL; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, type, group))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, group_name, group_ctrl, group))) { DEBUG(4,("context_sam_create_group in backend %s failed\n", tmp_methods->backendname)); return nt_status; @@ -611,7 +601,7 @@ NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKE NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { DOM_SID domainsid; - DOM_SID *groupsid; + const DOM_SID *groupsid; SAM_METHODS *tmp_methods; uint32 rid; NTSTATUS nt_status; @@ -649,7 +639,7 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { DOM_SID domainsid; - DOM_SID *groupsid; + const DOM_SID *groupsid; struct sam_methods *tmp_methods; uint32 rid; NTSTATUS nt_status; @@ -688,7 +678,7 @@ NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HA { DOM_SID domainsid; SAM_METHODS *tmp_methods; - DOM_SID *groupsid; + const DOM_SID *groupsid; uint32 rid; NTSTATUS nt_status; @@ -722,7 +712,7 @@ NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HA return NT_STATUS_OK; } -NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups) +NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID *domainsid, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -739,7 +729,7 @@ NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN return NT_STATUS_NOT_IMPLEMENTED; } - if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, type, groups_count, groups))) { + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, group_ctrl, groups_count, groups))) { DEBUG(4,("context_sam_enum_groups for domain %s in backend %s failed\n", tmp_methods->domain->private.name, tmp_methods->backendname)); return nt_status; @@ -823,7 +813,7 @@ NTSTATUS context_sam_enum_groupmembers(const SAM_CONTEXT *context, const SAM_GRO return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS context_sam_get_groups_of_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { return NT_STATUS_NOT_IMPLEMENTED; } -- cgit From 6c8e4faba19b78b8147ca9274ce65551ec27cba5 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:00:37 +0000 Subject: Updates to sam_skel from metze, add sam/group.c and add a DEBUG() to the SAM_ASSERT if we are not going to crash. (This used to be commit f91fcb166107e45ffb3de95a3da65c79992341eb) --- examples/sam/sam_skel.c | 50 ++++++------- source3/include/sam.h | 7 +- source3/sam/group.c | 193 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 223 insertions(+), 27 deletions(-) create mode 100644 source3/sam/group.c diff --git a/examples/sam/sam_skel.c b/examples/sam/sam_skel.c index 9b684270a0..5dae5a5843 100644 --- a/examples/sam/sam_skel.c +++ b/examples/sam/sam_skel.c @@ -32,26 +32,26 @@ SAM_MODULE_VERSIONING_MAGIC /* General API */ -NTSTATUS sam_skel_get_sec_desc(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) +NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_set_sec_desc(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) +NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_lookup_sid(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) +NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_lookup_name(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type) +NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -60,13 +60,13 @@ NTSTATUS sam_skel_lookup_name(const struct sam_methods *sam_method, const NT_USE /* Domain API */ -NTSTATUS sam_skel_update_domain(const struct sam_methods *sam_method, const SAM_DOMAIN_HANDLE *domain) +NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_method, const SAM_DOMAIN_HANDLE *domain) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_domain_handle(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_DOMAIN_HANDLE **domain) +NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -75,44 +75,44 @@ NTSTATUS sam_skel_get_domain_handle(const struct sam_methods *sam_method, const /* Account API */ -NTSTATUS sam_skel_create_account(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_update_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_accounts(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, int32 *account_count, SAM_ACCOUNT_ENUM **accounts) +NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_account_by_sid(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_account_by_name(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -121,69 +121,69 @@ NTSTATUS sam_skel_get_account_by_name(const struct sam_methods *sam_method, cons /* Group API */ -NTSTATUS sam_skel_create_group(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const uint32 type, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_update_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_groups(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 type, uint32 *groups_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_group_by_sid(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_group_by_name(const struct sam_methods *sam_method, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_member_to_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_member_from_group(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_groupmembers(const struct sam_methods *sam_method, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) +NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_groups_of_account(const struct sam_methods *sam_method, const SAM_ACCOUNT_HANDLE *account, const uint32 type, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -238,7 +238,7 @@ NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, cons (*sam_method)->sam_delete_member_from_group = sam_skel_delete_member_from_group; (*sam_method)->sam_enum_groupmembers = sam_skel_enum_groupmembers; - (*sam_method)->sam_get_groups_of_account = sam_skel_get_groups_of_account; + (*sam_method)->sam_get_groups_of_sid = sam_skel_get_groups_of_sid; (*sam_method)->free_private_data = NULL; diff --git a/source3/include/sam.h b/source3/include/sam.h index 53d56a2a80..afa7e55c65 100644 --- a/source3/include/sam.h +++ b/source3/include/sam.h @@ -30,8 +30,11 @@ #define SAM_ASSERT(x) SMB_ASSERT(x) #else #define SAM_ASSERT(x) while (0) { \ - if (!(x)) return NT_STATUS_FAIL_CHECK;\ - } + if (!(x)) { + DEBUG(0, ("SAM_ASSERT failed!\n")) + return NT_STATUS_FAIL_CHECK;\ + } \ + } #endif diff --git a/source3/sam/group.c b/source3/sam/group.c new file mode 100644 index 0000000000..7e4bcc1425 --- /dev/null +++ b/source3/sam/group.c @@ -0,0 +1,193 @@ +/* + Unix SMB/CIFS implementation. + SAM_GROUP_HANDLE /SAM_GROUP_ENUM helpers + + Copyright (C) Stefan (metze) Metzmacher 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" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_SAM + +/************************************************************ + Fill the SAM_GROUP_HANDLE with default values. + ***********************************************************/ + +static void sam_fill_default_group(SAM_GROUP_HANDLE *group) +{ + ZERO_STRUCT(group->private); /* Don't touch the talloc context */ + +} + +static void destroy_sam_group_handle_talloc(SAM_GROUP_HANDLE **group) +{ + if (*group) { + + talloc_destroy((*group)->mem_ctx); + *group = NULL; + } +} + + +/********************************************************************** + Alloc memory and initialises a SAM_GROUP_HANDLE on supplied mem_ctx. +***********************************************************************/ + +NTSTATUS sam_init_group_talloc(TALLOC_CTX *mem_ctx, SAM_GROUP_HANDLE **group) +{ + SMB_ASSERT(*group != NULL); + + if (!mem_ctx) { + DEBUG(0,("sam_init_group_talloc: mem_ctx was NULL!\n")); + return NT_STATUS_UNSUCCESSFUL; + } + + *group=(SAM_GROUP_HANDLE *)talloc(mem_ctx, sizeof(SAM_GROUP_HANDLE)); + + if (*group==NULL) { + DEBUG(0,("sam_init_group_talloc: error while allocating memory\n")); + return NT_STATUS_NO_MEMORY; + } + + (*group)->mem_ctx = mem_ctx; + + (*group)->free_fn = NULL; + + sam_fill_default_group(*group); + + return NT_STATUS_OK; +} + + +/************************************************************* + Alloc memory and initialises a struct SAM_GROUP_HANDLE. + ************************************************************/ + +NTSTATUS sam_init_group(SAM_GROUP_HANDLE **group) +{ + TALLOC_CTX *mem_ctx; + NTSTATUS nt_status; + + mem_ctx = talloc_init_named("sam internal SAM_GROUP_HANDLE allocation"); + + if (!mem_ctx) { + DEBUG(0,("sam_init_group: error while doing talloc_init()\n")); + return NT_STATUS_NO_MEMORY; + } + + if (!NT_STATUS_IS_OK(nt_status = sam_init_group_talloc(mem_ctx, group))) { + talloc_destroy(mem_ctx); + return nt_status; + } + + (*group)->free_fn = destroy_sam_group_handle_talloc; + + return NT_STATUS_OK; +} + + +/************************************************************ + Reset the SAM_GROUP_HANDLE. + ***********************************************************/ + +NTSTATUS sam_reset_group(SAM_GROUP_HANDLE *group) +{ + SMB_ASSERT(group != NULL); + + sam_fill_default_group(group); + + return NT_STATUS_OK; +} + + +/************************************************************ + Free the SAM_GROUP_HANDLE and the member pointers. + ***********************************************************/ + +NTSTATUS sam_free_group(SAM_ACCOUNT_HANDLE **group) +{ + SMB_ASSERT(*group != NULL); + + if ((*group)->free_fn) { + (*group)->free_fn(group); + } + + return NT_STATUS_OK; +} + + +/********************************************************** + Encode the group control bits into a string. + length = length of string to encode into (including terminating + null). length *MUST BE MORE THAN 2* ! + **********************************************************/ + +char *sam_encode_acct_ctrl(uint16 group_ctrl, size_t length) +{ + static fstring group_str; + size_t i = 0; + + group_str[i++] = '['; + + if (group_ctrl & GCB_LOCAL_GROUP ) group_str[i++] = 'L'; + if (group_ctrl & GCB_GLOBAL_GROUP ) group_str[i++] = 'G'; + + for ( ; i < length - 2 ; i++ ) + group_str[i] = ' '; + + i = length - 2; + group_str[i++] = ']'; + group_str[i++] = '\0'; + + return group_str; +} + +/********************************************************** + Decode the group control bits from a string. + **********************************************************/ + +uint16 sam_decode_group_ctrl(const char *p) +{ + uint16 group_ctrl = 0; + BOOL finished = False; + + /* + * Check if the account type bits have been encoded after the + * NT password (in the form [NDHTUWSLXI]). + */ + + if (*p != '[') + return 0; + + for (p++; *p && !finished; p++) { + switch (*p) { + case 'L': { group_ctrl |= GCB_LOCAL_GROUP; break; /* 'L'ocal Aliases Group. */ } + case 'G': { group_ctrl |= GCB_GLOBAL_GROUP; break; /* 'G'lobal Domain Group. */ } + + case ' ': { break; } + case ':': + case '\n': + case '\0': + case ']': + default: { finished = True; } + } + } + + return group_ctrl; +} + -- cgit From 337668fd88c098f9d0daaa9aea12ddc5c1c3db9e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:05:04 +0000 Subject: Make it possible to actually build these modules - process the Makefile.in at the end of configure. (This used to be commit 6953db6a98432cfbb946dd2d3cbe64e7dee0b71d) --- source3/configure | 4 ++-- source3/configure.in | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source3/configure b/source3/configure index e6120f6347..e7ce3ee4df 100755 --- a/source3/configure +++ b/source3/configure @@ -14188,7 +14188,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff --git a/source3/configure.in b/source3/configure.in index 168a6f4746..32c2fe114b 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2828,7 +2828,7 @@ AC_SUBST(builddir) # I added make files that are outside /source directory. # I know this is not a good solution, will work out a better # solution soon. --simo -AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile) +AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) ################################################# # Print very concise instructions on building/use -- cgit From 29e092d4e0f5ee7deb225d2c34262a4792eac962 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:17:55 +0000 Subject: Get our consts back in line with current norms - only for pointer protection. Debate about extending this policy welcomed on samba-technical. Andrew Bartlett (This used to be commit 5f59abb410110c22b6fffd7502443b5259d12e5a) --- source3/sam/interface.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source3/sam/interface.c b/source3/sam/interface.c index 9ba273e6f3..efc1f10f29 100644 --- a/source3/sam/interface.c +++ b/source3/sam/interface.c @@ -318,7 +318,7 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK } -NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) +NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, SAM_DOMAIN_HANDLE **domain) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -344,7 +344,7 @@ NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER return NT_STATUS_OK; } -NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *account_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -511,7 +511,7 @@ NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOK } -NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; uint32 rid; @@ -546,7 +546,7 @@ NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USE return NT_STATUS_OK; } -NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account) +NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_ACCOUNT_HANDLE **account) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -572,7 +572,7 @@ NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_US return NT_STATUS_OK; } -NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) +NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *domainsid, const char *group_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -738,7 +738,7 @@ NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN return NT_STATUS_OK; } -NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; uint32 rid; @@ -773,7 +773,7 @@ NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_ return NT_STATUS_OK; } -NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group) +NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *domain, const char *name, SAM_GROUP_HANDLE **group) { SAM_METHODS *tmp_methods; NTSTATUS nt_status; -- cgit From 94d6c0e8952ce220d2ca3ef4f97e10517595fcbf Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:21:54 +0000 Subject: Fix some missing ; on the end of our SAM_ASSERT()... (This used to be commit 4d642e1fa4ed454a421a9f219a8cdecddb57fd31) --- source3/sam/interface.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source3/sam/interface.c b/source3/sam/interface.c index efc1f10f29..cd2f2361f3 100644 --- a/source3/sam/interface.c +++ b/source3/sam/interface.c @@ -49,7 +49,7 @@ NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_me DEBUG(5,("sam_get_methods_by_sid: %d\n", __LINE__)); /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods) + SAM_ASSERT(context && context->methods); tmp_methods = context->methods; @@ -75,7 +75,7 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m DEBUG(5,("sam_get_methods_by_name: %d\n", __LINE__)); /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods) + SAM_ASSERT(context && context->methods); tmp_methods = context->methods; @@ -224,7 +224,7 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE DEBUG(5,("context_sam_enum_domains: %d\n", __LINE__)); /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods) + SAM_ASSERT(context && context->methods); if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { DEBUG(4,("samr_make_sam_obj_sd failed\n")); @@ -291,7 +291,7 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK DEBUG(5,("context_sam_lookup_domain: %d\n", __LINE__)); /* invalid sam_context specified */ - SAM_ASSERT(context && context->methods) + SAM_ASSERT(context && context->methods); if (!NT_STATUS_IS_OK(nt_status = samr_make_sam_obj_sd(context->mem_ctx, &sd, &sd_size))) { DEBUG(4,("samr_make_sam_obj_sd failed\n")); -- cgit From 789d51b42ceb2d99658c72bf55904083d451fcab Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:37:11 +0000 Subject: This is the 'easy' parts of the trusted domains patch n+3 patch from Rafal Szczesniak It includes a conversion of make_user_info*() to NTSTATUS and some minor changes to other files. It also picks up on a nasty segfault that can occour in some security=domain cases. Andrew Bartlett (This used to be commit d1e1fc3e4bf72717b3593685f0ea5750d676952a) --- source3/Makefile.in | 3 +- source3/auth/auth_domain.c | 2 +- source3/auth/auth_util.c | 122 +++++++++++++++++++++++----------------- source3/rpc_server/srv_lsa_nt.c | 2 + source3/smbd/sesssetup.c | 24 ++++---- source3/utils/net_rpc.c | 8 +++ 6 files changed, 93 insertions(+), 68 deletions(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 531ca74474..796d994b13 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -242,7 +242,8 @@ UNIGRP_OBJ = libsmb/netlogon_unigrp.o AUTH_OBJ = auth/auth.o auth/auth_sam.o auth/auth_server.o auth/auth_domain.o \ auth/auth_rhosts.o auth/auth_unix.o auth/auth_util.o auth/auth_winbind.o \ - auth/auth_builtin.o auth/auth_compat.o $(PLAINTEXT_AUTH_OBJ) $(UNIGRP_OBJ) + auth/auth_builtin.o auth/auth_compat.o \ + $(PLAINTEXT_AUTH_OBJ) $(UNIGRP_OBJ) MANGLE_OBJ = smbd/mangle.o smbd/mangle_hash.o smbd/mangle_map.o smbd/mangle_hash2.o diff --git a/source3/auth/auth_domain.c b/source3/auth/auth_domain.c index f7a268de1f..e8f11bb3d5 100644 --- a/source3/auth/auth_domain.c +++ b/source3/auth/auth_domain.c @@ -251,7 +251,7 @@ static NTSTATUS attempt_connect_to_dc(struct cli_state **cli, } /*********************************************************************** - We have been asked to dynamcially determine the IP addresses of + We have been asked to dynamically determine the IP addresses of the PDC and BDC's for DOMAIN, and query them in turn. ************************************************************************/ static NTSTATUS find_connect_pdc(struct cli_state **cli, diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index 5ae942fac7..78dc0d4ee4 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -4,6 +4,7 @@ Copyright (C) Andrew Tridgell 1992-1998 Copyright (C) Andrew Bartlett 2001 Copyright (C) Jeremy Allison 2000-2001 + Copyright (C) Rafal Szczesniak 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 @@ -56,7 +57,7 @@ static int smb_create_user(const char *unix_user, const char *homedir) Add and Delete UNIX users on demand, based on NTSTATUS codes. ****************************************************************************/ -void smb_user_control(const auth_usersupplied_info *user_info, auth_serversupplied_info *server_info, NTSTATUS nt_status) +void smb_user_control(const auth_usersupplied_info *user_info, auth_serversupplied_info *server_info, NTSTATUS nt_status) { struct passwd *pwd=NULL; @@ -81,15 +82,15 @@ void smb_user_control(const auth_usersupplied_info *user_info, auth_serversuppli Create an auth_usersupplied_data structure ****************************************************************************/ -static BOOL make_user_info(auth_usersupplied_info **user_info, - const char *smb_name, - const char *internal_username, - const char *client_domain, - const char *domain, - const char *wksta_name, - DATA_BLOB lm_pwd, DATA_BLOB nt_pwd, - DATA_BLOB plaintext, - uint32 auth_flags, BOOL encrypted) +static NTSTATUS make_user_info(auth_usersupplied_info **user_info, + const char *smb_name, + const char *internal_username, + const char *client_domain, + const char *domain, + const char *wksta_name, + DATA_BLOB lm_pwd, DATA_BLOB nt_pwd, + DATA_BLOB plaintext, + uint32 auth_flags, BOOL encrypted) { DEBUG(5,("attempting to make a user_info for %s (%s)\n", internal_username, smb_name)); @@ -97,7 +98,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, *user_info = malloc(sizeof(**user_info)); if (!user_info) { DEBUG(0,("malloc failed for user_info (size %d)\n", sizeof(*user_info))); - return False; + return NT_STATUS_NO_MEMORY; } ZERO_STRUCTP(*user_info); @@ -109,7 +110,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, (*user_info)->smb_name.len = strlen(smb_name); } else { free_user_info(user_info); - return False; + return NT_STATUS_NO_MEMORY; } (*user_info)->internal_username.str = strdup(internal_username); @@ -117,7 +118,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, (*user_info)->internal_username.len = strlen(internal_username); } else { free_user_info(user_info); - return False; + return NT_STATUS_NO_MEMORY; } (*user_info)->domain.str = strdup(domain); @@ -125,7 +126,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, (*user_info)->domain.len = strlen(domain); } else { free_user_info(user_info); - return False; + return NT_STATUS_NO_MEMORY; } (*user_info)->client_domain.str = strdup(client_domain); @@ -133,7 +134,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, (*user_info)->client_domain.len = strlen(client_domain); } else { free_user_info(user_info); - return False; + return NT_STATUS_NO_MEMORY; } (*user_info)->wksta_name.str = strdup(wksta_name); @@ -141,7 +142,7 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, (*user_info)->wksta_name.len = strlen(wksta_name); } else { free_user_info(user_info); - return False; + return NT_STATUS_NO_MEMORY; } DEBUG(5,("making blobs for %s's user_info struct\n", internal_username)); @@ -155,26 +156,26 @@ static BOOL make_user_info(auth_usersupplied_info **user_info, DEBUG(10,("made an %sencrypted user_info for %s (%s)\n", encrypted ? "":"un" , internal_username, smb_name)); - return True; + return NT_STATUS_OK; } /**************************************************************************** Create an auth_usersupplied_data structure after appropriate mapping. ****************************************************************************/ -BOOL make_user_info_map(auth_usersupplied_info **user_info, - const char *smb_name, - const char *client_domain, - const char *wksta_name, - DATA_BLOB lm_pwd, DATA_BLOB nt_pwd, - DATA_BLOB plaintext, - uint32 ntlmssp_flags, BOOL encrypted) +NTSTATUS make_user_info_map(auth_usersupplied_info **user_info, + const char *smb_name, + const char *client_domain, + const char *wksta_name, + DATA_BLOB lm_pwd, DATA_BLOB nt_pwd, + DATA_BLOB plaintext, + uint32 ntlmssp_flags, BOOL encrypted) { const char *domain; fstring internal_username; fstrcpy(internal_username, smb_name); map_username(internal_username); - + DEBUG(5, ("make_user_info_map: Mapping user [%s]\\[%s] from workstation [%s]\n", client_domain, smb_name, wksta_name)); @@ -203,7 +204,7 @@ BOOL make_user_info_map(auth_usersupplied_info **user_info, client_domain, lp_winbind_separator(), smb_name) < 0) { DEBUG(0, ("make_user_info_map: asprintf() failed!\n")); - return False; + return NT_STATUS_NO_MEMORY; } DEBUG(5, ("make_user_info_map: testing for user %s\n", user)); @@ -245,6 +246,7 @@ BOOL make_user_info_netlogon_network(auth_usersupplied_info **user_info, const uchar *nt_network_pwd, int nt_pwd_len) { BOOL ret; + NTSTATUS nt_status; DATA_BLOB lm_blob = data_blob(lm_network_pwd, lm_pwd_len); DATA_BLOB nt_blob = data_blob(nt_network_pwd, nt_pwd_len); DATA_BLOB plaintext_blob = data_blob(NULL, 0); @@ -258,12 +260,14 @@ BOOL make_user_info_netlogon_network(auth_usersupplied_info **user_info, auth_flags |= AUTH_FLAG_NTLMv2_RESP; } - ret = make_user_info_map(user_info, - smb_name, client_domain, - wksta_name, - lm_blob, nt_blob, - plaintext_blob, - auth_flags, True); + nt_status = make_user_info_map(user_info, + smb_name, client_domain, + wksta_name, + lm_blob, nt_blob, + plaintext_blob, + auth_flags, True); + + ret = NT_STATUS_IS_OK(nt_status) ? True : False; data_blob_free(&lm_blob); data_blob_free(&nt_blob); @@ -329,6 +333,7 @@ BOOL make_user_info_netlogon_interactive(auth_usersupplied_info **user_info, { BOOL ret; + NTSTATUS nt_status; DATA_BLOB local_lm_blob = data_blob(local_lm_response, sizeof(local_lm_response)); DATA_BLOB local_nt_blob = data_blob(local_nt_response, sizeof(local_nt_response)); DATA_BLOB plaintext_blob = data_blob(NULL, 0); @@ -338,14 +343,15 @@ BOOL make_user_info_netlogon_interactive(auth_usersupplied_info **user_info, if (nt_interactive_pwd) auth_flags |= AUTH_FLAG_NTLM_RESP; - ret = make_user_info_map(user_info, - smb_name, client_domain, - wksta_name, - local_lm_blob, - local_nt_blob, - plaintext_blob, - auth_flags, True); + nt_status = make_user_info_map(user_info, + smb_name, client_domain, + wksta_name, + local_lm_blob, + local_nt_blob, + plaintext_blob, + auth_flags, True); + ret = NT_STATUS_IS_OK(nt_status) ? True : False; data_blob_free(&local_lm_blob); data_blob_free(&local_nt_blob); return ret; @@ -366,7 +372,7 @@ BOOL make_user_info_for_reply(auth_usersupplied_info **user_info, DATA_BLOB local_lm_blob; DATA_BLOB local_nt_blob; - BOOL ret = False; + NTSTATUS ret = NT_STATUS_UNSUCCESSFUL; uint32 auth_flags = AUTH_FLAG_NONE; /* @@ -397,25 +403,25 @@ BOOL make_user_info_for_reply(auth_usersupplied_info **user_info, } ret = make_user_info_map(user_info, smb_name, - client_domain, - get_remote_machine_name(), - local_lm_blob, - local_nt_blob, - plaintext_password, - auth_flags, False); + client_domain, + get_remote_machine_name(), + local_lm_blob, + local_nt_blob, + plaintext_password, + auth_flags, False); data_blob_free(&local_lm_blob); - return ret; + return NT_STATUS_IS_OK(ret) ? True : False; } /**************************************************************************** Create an auth_usersupplied_data structure ****************************************************************************/ -BOOL make_user_info_for_reply_enc(auth_usersupplied_info **user_info, - const char *smb_name, - const char *client_domain, - DATA_BLOB lm_resp, DATA_BLOB nt_resp) +NTSTATUS make_user_info_for_reply_enc(auth_usersupplied_info **user_info, + const char *smb_name, + const char *client_domain, + DATA_BLOB lm_resp, DATA_BLOB nt_resp) { uint32 auth_flags = AUTH_FLAG_NONE; @@ -450,14 +456,17 @@ BOOL make_user_info_guest(auth_usersupplied_info **user_info) DATA_BLOB nt_blob = data_blob(NULL, 0); DATA_BLOB plaintext_blob = data_blob(NULL, 0); uint32 auth_flags = AUTH_FLAG_NONE; + NTSTATUS nt_status; - return make_user_info(user_info, + nt_status = make_user_info(user_info, "","", "","", "", nt_blob, lm_blob, plaintext_blob, auth_flags, True); + + return NT_STATUS_IS_OK(nt_status) ? True : False; } /**************************************************************************** @@ -633,7 +642,14 @@ static NTSTATUS get_user_groups_from_local_sam(const DOM_SID *user_sid, return NT_STATUS_OK; } - usr = getpwuid_alloc(uid); + /* + * This is _essential_ to prevent occasional segfaults when + * winbind can't find uid -> username mapping + */ + if (!(usr = getpwuid_alloc(uid))) { + DEBUG(0, ("Couldn't find passdb structure for UID = %d ! Aborting.\n", uid)); + return NT_STATUS_NO_SUCH_USER; + }; n_unix_groups = groups_max(); if ((*unix_groups = malloc( sizeof(gid_t) * groups_max() ) ) == NULL) { diff --git a/source3/rpc_server/srv_lsa_nt.c b/source3/rpc_server/srv_lsa_nt.c index f28441886a..e187e1556e 100644 --- a/source3/rpc_server/srv_lsa_nt.c +++ b/source3/rpc_server/srv_lsa_nt.c @@ -473,6 +473,8 @@ NTSTATUS _lsa_enum_trust_dom(pipes_struct *p, LSA_Q_ENUM_TRUST_DOM *q_u, LSA_R_E /* * preferred length is set to 5 as a "our" preferred length * nt sets this parameter to 2 + * update (20.08.2002): it's not preferred length, but preferred size! + * it needs further investigation how to optimally choose this value */ uint32 max_num_domains = q_u->preferred_len < 5 ? q_u->preferred_len : 10; TRUSTDOM **trust_doms; diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index c37c655fd1..3dc9fe9208 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -439,14 +439,14 @@ static int reply_spnego_auth(connection_struct *conn, char *inbuf, char *outbuf, auth_flags |= AUTH_FLAG_NTLM_RESP; } else if (nthash.length > 24) { auth_flags |= AUTH_FLAG_NTLMv2_RESP; - } + }; + + nt_status = make_user_info_map(&user_info, user, workgroup, machine, + lmhash, nthash, plaintext_password, + auth_flags, True); - if (!make_user_info_map(&user_info, - user, workgroup, - machine, - lmhash, nthash, - plaintext_password, - auth_flags, True)) { + /* it looks a bit weird, but this function returns int type... */ + if (!NT_STATUS_IS_OK(nt_status)) { return ERROR_NT(NT_STATUS_NO_MEMORY); } @@ -621,7 +621,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf, NTSTATUS nt_status; BOOL doencrypt = global_encrypted_passwords_negotiated; - + START_PROFILE(SMBsesssetupX); ZERO_STRUCT(lm_resp); @@ -776,11 +776,9 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf, nt_status = check_guest_password(&server_info); } else if (doencrypt) { - if (!make_user_info_for_reply_enc(&user_info, - user, domain, - lm_resp, nt_resp)) { - nt_status = NT_STATUS_NO_MEMORY; - } else { + nt_status = make_user_info_for_reply_enc(&user_info, user, domain, + lm_resp, nt_resp); + if (NT_STATUS_IS_OK(nt_status)) { nt_status = negprot_global_auth_context->check_ntlm_password(negprot_global_auth_context, user_info, &server_info); diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index 25ed337c1f..4067ce344d 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -1972,6 +1972,12 @@ static int rpc_trustdom_list(int argc, const char **argv) d_printf("%s%s%s\n", trusted_dom_names[i], padding, ascii_sid); }; + + /* + * in case of no trusted domains say something rather + * than just display blank line + */ + if (!num_domains) d_printf("none\n"); } while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES)); @@ -2076,6 +2082,8 @@ static int rpc_trustdom_list(int argc, const char **argv) }; }; + if (!num_domains) d_printf("none\n"); + } while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES)); /* close opened samr and domain policy handles */ -- cgit From afc1a220b74bfbfa68541d3595038bcf138606c0 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 6 Sep 2002 13:37:40 +0000 Subject: move everything to flat VFS/ directory (This used to be commit d383c309d4a259fb28d7541777a8b3b53cca23bf) --- examples/VFS/Makefile.in | 2 +- examples/VFS/README.netatalk | 18 ++ examples/VFS/netatalk.c | 430 ++++++++++++++++++++++++++++++++++++++ examples/VFS/netatalk/Makefile.in | 28 --- examples/VFS/netatalk/README | 18 -- examples/VFS/netatalk/netatalk.c | 430 -------------------------------------- 6 files changed, 449 insertions(+), 477 deletions(-) create mode 100644 examples/VFS/README.netatalk create mode 100644 examples/VFS/netatalk.c delete mode 100644 examples/VFS/netatalk/Makefile.in delete mode 100644 examples/VFS/netatalk/README delete mode 100644 examples/VFS/netatalk/netatalk.c diff --git a/examples/VFS/Makefile.in b/examples/VFS/Makefile.in index 6ae4f49434..2ffd23b853 100644 --- a/examples/VFS/Makefile.in +++ b/examples/VFS/Makefile.in @@ -6,7 +6,7 @@ LDSHFLAGS = -shared srcdir = @builddir@ FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) -VFS_OBJS = audit.so recycle.so +VFS_OBJS = audit.so recycle.so netatalk.so # Default target diff --git a/examples/VFS/README.netatalk b/examples/VFS/README.netatalk new file mode 100644 index 0000000000..70f6eea316 --- /dev/null +++ b/examples/VFS/README.netatalk @@ -0,0 +1,18 @@ +There is the new netatalk module both for HEAD. +This one has some difference from previous module: + +-- it doesn't care about creating of .AppleDouble forks, just keeps ones in +sync; + +-- if share in smb.conf doesn't contain .AppleDouble item in hide or veto +list, it will be added automatically. + +To my way of thinking, module became more lightweight and speedy. + +How to compile: + +you should place proper netatalk.c into examples/VFS/ then run 'configure' +from source/ and then run 'make' from examples/VFS/. + +add string 'vfs object = /netatlk.so' to smb.conf. It may +be defined either as global or as share-specific parameter. diff --git a/examples/VFS/netatalk.c b/examples/VFS/netatalk.c new file mode 100644 index 0000000000..353be36e6f --- /dev/null +++ b/examples/VFS/netatalk.c @@ -0,0 +1,430 @@ +/* + * AppleTalk VFS module for Samba-3.x + * + * Copyright (C) Alexei Kotovich, 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 "config.h" +#include +#include +#ifdef HAVE_UTIME_H +#include +#endif +#ifdef HAVE_DIRENT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#include +#include +#include +#include + +#define APPLEDOUBLE ".AppleDouble" +#define ADOUBLEMODE 0777 + +/* atalk functions */ + +static int atalk_build_paths(TALLOC_CTX *ctx, const char *path, + const char *fname, char **adbl_path, char **orig_path, + SMB_STRUCT_STAT *adbl_info, SMB_STRUCT_STAT *orig_info); + +static int atalk_unlink_file(const char *path); + +static struct vfs_ops default_vfs_ops; /* For passthrough operation */ +static struct smb_vfs_handle_struct *atalk_handle; + +static int atalk_get_path_ptr(char *path) +{ + int i = 0; + int ptr = 0; + + for (i = 0; path[i]; i ++) { + if (path[i] == '/') + ptr = i; + /* get out some 'spam';) from win32's file name */ + else if (path[i] == ':') { + path[i] = '\0'; + break; + } + } + + return ptr; +} + +static int atalk_build_paths(TALLOC_CTX *ctx, const char *path, const char *fname, + char **adbl_path, char **orig_path, + SMB_STRUCT_STAT *adbl_info, SMB_STRUCT_STAT *orig_info) +{ + int ptr0 = 0; + int ptr1 = 0; + char *dname = 0; + char *name = 0; + + if (!ctx || !path || !fname || !adbl_path || !orig_path || + !adbl_info || !orig_info) + return -1; +#if 0 + DEBUG(3, ("ATALK: PATH: %s[%s]\n", path, fname)); +#endif + if (strstr(path, APPLEDOUBLE) || strstr(fname, APPLEDOUBLE)) { + DEBUG(3, ("ATALK: path %s[%s] already contains %s\n", path, fname, APPLEDOUBLE)); + return -1; + } + + if (fname[0] == '.') ptr0 ++; + if (fname[1] == '/') ptr0 ++; + + *orig_path = talloc_asprintf(ctx, "%s/%s", path, &fname[ptr0]); + + /* get pointer to last '/' */ + ptr1 = atalk_get_path_ptr(*orig_path); + + sys_lstat(*orig_path, orig_info); + + if (S_ISDIR(orig_info->st_mode)) { + *adbl_path = talloc_asprintf(ctx, "%s/%s/%s/", + path, &fname[ptr0], APPLEDOUBLE); + } else { + dname = talloc_strdup(ctx, *orig_path); + dname[ptr1] = '\0'; + name = *orig_path; + *adbl_path = talloc_asprintf(ctx, "%s/%s/%s", + dname, APPLEDOUBLE, &name[ptr1 + 1]); + } +#if 0 + DEBUG(3, ("ATALK: DEBUG:\n%s\n%s\n", *orig_path, *adbl_path)); +#endif + sys_lstat(*adbl_path, adbl_info); + return 0; +} + +static int atalk_unlink_file(const char *path) +{ + int ret = 0; + + become_root(); + ret = unlink(path); + unbecome_root(); + + return ret; +} + +static void atalk_add_to_list(name_compare_entry **list) +{ + int i, count = 0; + name_compare_entry *new_list = 0; + name_compare_entry *cur_list = 0; + + cur_list = *list; + + if (cur_list) { + for (i = 0, count = 0; cur_list[i].name; i ++, count ++) { + if (strstr(cur_list[i].name, APPLEDOUBLE)) + return; + } + } + + if (!(new_list = calloc(1, + (count == 0 ? 1 : count + 1) * sizeof(name_compare_entry)))) + return; + + for (i = 0; i < count; i ++) { + new_list[i].name = strdup(cur_list[i].name); + new_list[i].is_wild = cur_list[i].is_wild; + } + + new_list[i].name = strdup(APPLEDOUBLE); + new_list[i].is_wild = False; + + free_namearray(*list); + + *list = new_list; + new_list = 0; + cur_list = 0; +} + +static void atalk_rrmdir(TALLOC_CTX *ctx, char *path) +{ + int n; + char *dpath; + struct dirent **namelist; + + if (!path) return; + + n = scandir(path, &namelist, 0, alphasort); + if (n < 0) { + return; + } else { + while (n --) { + if (strcmp(namelist[n]->d_name, ".") == 0 || + strcmp(namelist[n]->d_name, "..") == 0) + continue; + if (!(dpath = talloc_asprintf(ctx, "%s/%s", + path, namelist[n]->d_name))) + continue; + atalk_unlink_file(dpath); + free(namelist[n]); + } + } +} + +/* Disk operations */ + +/* Directory operations */ + +DIR *atalk_opendir(struct connection_struct *conn, const char *fname) +{ + DIR *ret = 0; + + ret = default_vfs_ops.opendir(conn, fname); + + /* + * when we try to perform delete operation upon file which has fork + * in ./.AppleDouble and this directory wasn't hidden by Samba, + * MS Windows explorer causes the error: "Cannot find the specified file" + * There is some workaround to avoid this situation, i.e. if + * connection has not .AppleDouble entry in either veto or hide + * list then it would be nice to add one. + */ + + atalk_add_to_list(&conn->hide_list); + atalk_add_to_list(&conn->veto_list); + + return ret; +} + +static int atalk_rmdir(struct connection_struct *conn, const char *path) +{ + BOOL add = False; + TALLOC_CTX *ctx = 0; + char *dpath; + + if (!conn || !conn->origpath || !path) goto exit_rmdir; + + /* due to there is no way to change bDeleteVetoFiles variable + * from this module, gotta use talloc stuff.. + */ + + strstr(path, APPLEDOUBLE) ? (add = False) : (add = True); + + if (!(ctx = talloc_init_named("remove_directory"))) + goto exit_rmdir; + + if (!(dpath = talloc_asprintf(ctx, "%s/%s%s", + conn->origpath, path, add ? "/"APPLEDOUBLE : ""))) + goto exit_rmdir; + + atalk_rrmdir(ctx, dpath); + +exit_rmdir: + talloc_destroy(ctx); + return default_vfs_ops.rmdir(conn, path); +} + +/* File operations */ + +static int atalk_rename(struct connection_struct *conn, const char *old, const char *new) +{ + int ret = 0; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.rename(conn, old, new); + + if (!conn || !old) return ret; + + if (!(ctx = talloc_init_named("rename_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, old, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (S_ISDIR(orig_info.st_mode) || S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", adbl_path)); + goto exit_rename; + } + + atalk_unlink_file(adbl_path); + +exit_rename: + talloc_destroy(ctx); + return ret; +} + +static int atalk_unlink(struct connection_struct *conn, const char *path) +{ + int ret = 0, i; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.unlink(conn, path); + + if (!conn || !path) return ret; + + /* no .AppleDouble sync if veto or hide list is empty, + * otherwise "Cannot find the specified file" error will be caused + */ + + if (!conn->veto_list) return ret; + if (!conn->hide_list) return ret; + + for (i = 0; conn->veto_list[i].name; i ++) { + if (strstr(conn->veto_list[i].name, APPLEDOUBLE)) + break; + } + + if (!conn->veto_list[i].name) { + for (i = 0; conn->hide_list[i].name; i ++) { + if (strstr(conn->hide_list[i].name, APPLEDOUBLE)) + break; + else { + DEBUG(3, ("ATALK: %s is not hidden, skipped..\n", + APPLEDOUBLE)); + return ret; + } + } + } + + if (!(ctx = talloc_init_named("unlink_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (S_ISDIR(orig_info.st_mode) || S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", adbl_path)); + goto exit_unlink; + } + + atalk_unlink_file(adbl_path); + +exit_unlink: + talloc_destroy(ctx); + return ret; +} + +static int atalk_chmod(struct connection_struct *conn, const char *path, mode_t mode) +{ + int ret = 0; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.chmod(conn, path, mode); + + if (!conn || !path) return ret; + + if (!(ctx = talloc_init_named("chmod_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", orig_path)); + goto exit_chmod; + } + + chmod(adbl_path, ADOUBLEMODE); + +exit_chmod: + talloc_destroy(ctx); + return ret; +} + +static int atalk_chown(struct connection_struct *conn, const char *path, uid_t uid, gid_t gid) +{ + int ret = 0; + char *adbl_path = 0; + char *orig_path = 0; + SMB_STRUCT_STAT adbl_info; + SMB_STRUCT_STAT orig_info; + TALLOC_CTX *ctx; + + ret = default_vfs_ops.chown(conn, path, uid, gid); + + if (!conn || !path) return ret; + + if (!(ctx = talloc_init_named("chown_file"))) + return ret; + + if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, + &adbl_info, &orig_info) != 0) + return ret; + + if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) { + DEBUG(3, ("ATALK: %s has passed..\n", orig_path)); + goto exit_chown; + } + + chown(adbl_path, uid, gid); + +exit_chown: + talloc_destroy(ctx); + return ret; +} + +static vfs_op_tuple atalk_ops[] = { + + /* Directory operations */ + + {atalk_opendir, SMB_VFS_OP_OPENDIR, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_rmdir, SMB_VFS_OP_RMDIR, SMB_VFS_LAYER_TRANSPARENT}, + + /* File operations */ + + {atalk_rename, SMB_VFS_OP_RENAME, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_unlink, SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_chmod, SMB_VFS_OP_CHMOD, SMB_VFS_LAYER_TRANSPARENT}, + {atalk_chown, SMB_VFS_OP_CHOWN, SMB_VFS_LAYER_TRANSPARENT}, + + /* Finish VFS operations definition */ + + {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} +}; + +/* VFS initialisation function. Return vfs_op_tuple array back to SAMBA. */ +vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, + struct smb_vfs_handle_struct *vfs_handle) +{ + *vfs_version = SMB_VFS_INTERFACE_VERSION; + memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); + + atalk_handle = vfs_handle; + + DEBUG(3, ("ATALK: vfs module loaded\n")); + return atalk_ops; +} + +/* VFS finalization function. */ +void vfs_done(connection_struct *conn) +{ + DEBUG(3, ("ATALK: vfs module unloaded\n")); +} diff --git a/examples/VFS/netatalk/Makefile.in b/examples/VFS/netatalk/Makefile.in deleted file mode 100644 index a9a5d69b51..0000000000 --- a/examples/VFS/netatalk/Makefile.in +++ /dev/null @@ -1,28 +0,0 @@ -CC = @CC@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LDSHFLAGS = -shared -srcdir = @builddir@ -FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) - -VFS_OBJS = netatalk.so - -# Default target - -default: $(VFS_OBJS) - -# Pattern rules - -%.so: %.o - $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< - -%.o: %.c - $(CC) $(FLAGS) -c $< - -# Misc targets - -clean: - rm -rf .libs - rm -f core *~ *% *.bak \ - $(VFS_OBJ) $(VFS_OBJS) diff --git a/examples/VFS/netatalk/README b/examples/VFS/netatalk/README deleted file mode 100644 index 70f6eea316..0000000000 --- a/examples/VFS/netatalk/README +++ /dev/null @@ -1,18 +0,0 @@ -There is the new netatalk module both for HEAD. -This one has some difference from previous module: - --- it doesn't care about creating of .AppleDouble forks, just keeps ones in -sync; - --- if share in smb.conf doesn't contain .AppleDouble item in hide or veto -list, it will be added automatically. - -To my way of thinking, module became more lightweight and speedy. - -How to compile: - -you should place proper netatalk.c into examples/VFS/ then run 'configure' -from source/ and then run 'make' from examples/VFS/. - -add string 'vfs object = /netatlk.so' to smb.conf. It may -be defined either as global or as share-specific parameter. diff --git a/examples/VFS/netatalk/netatalk.c b/examples/VFS/netatalk/netatalk.c deleted file mode 100644 index 353be36e6f..0000000000 --- a/examples/VFS/netatalk/netatalk.c +++ /dev/null @@ -1,430 +0,0 @@ -/* - * AppleTalk VFS module for Samba-3.x - * - * Copyright (C) Alexei Kotovich, 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 "config.h" -#include -#include -#ifdef HAVE_UTIME_H -#include -#endif -#ifdef HAVE_DIRENT_H -#include -#endif -#ifdef HAVE_FCNTL_H -#include -#endif -#include -#include -#include -#include - -#define APPLEDOUBLE ".AppleDouble" -#define ADOUBLEMODE 0777 - -/* atalk functions */ - -static int atalk_build_paths(TALLOC_CTX *ctx, const char *path, - const char *fname, char **adbl_path, char **orig_path, - SMB_STRUCT_STAT *adbl_info, SMB_STRUCT_STAT *orig_info); - -static int atalk_unlink_file(const char *path); - -static struct vfs_ops default_vfs_ops; /* For passthrough operation */ -static struct smb_vfs_handle_struct *atalk_handle; - -static int atalk_get_path_ptr(char *path) -{ - int i = 0; - int ptr = 0; - - for (i = 0; path[i]; i ++) { - if (path[i] == '/') - ptr = i; - /* get out some 'spam';) from win32's file name */ - else if (path[i] == ':') { - path[i] = '\0'; - break; - } - } - - return ptr; -} - -static int atalk_build_paths(TALLOC_CTX *ctx, const char *path, const char *fname, - char **adbl_path, char **orig_path, - SMB_STRUCT_STAT *adbl_info, SMB_STRUCT_STAT *orig_info) -{ - int ptr0 = 0; - int ptr1 = 0; - char *dname = 0; - char *name = 0; - - if (!ctx || !path || !fname || !adbl_path || !orig_path || - !adbl_info || !orig_info) - return -1; -#if 0 - DEBUG(3, ("ATALK: PATH: %s[%s]\n", path, fname)); -#endif - if (strstr(path, APPLEDOUBLE) || strstr(fname, APPLEDOUBLE)) { - DEBUG(3, ("ATALK: path %s[%s] already contains %s\n", path, fname, APPLEDOUBLE)); - return -1; - } - - if (fname[0] == '.') ptr0 ++; - if (fname[1] == '/') ptr0 ++; - - *orig_path = talloc_asprintf(ctx, "%s/%s", path, &fname[ptr0]); - - /* get pointer to last '/' */ - ptr1 = atalk_get_path_ptr(*orig_path); - - sys_lstat(*orig_path, orig_info); - - if (S_ISDIR(orig_info->st_mode)) { - *adbl_path = talloc_asprintf(ctx, "%s/%s/%s/", - path, &fname[ptr0], APPLEDOUBLE); - } else { - dname = talloc_strdup(ctx, *orig_path); - dname[ptr1] = '\0'; - name = *orig_path; - *adbl_path = talloc_asprintf(ctx, "%s/%s/%s", - dname, APPLEDOUBLE, &name[ptr1 + 1]); - } -#if 0 - DEBUG(3, ("ATALK: DEBUG:\n%s\n%s\n", *orig_path, *adbl_path)); -#endif - sys_lstat(*adbl_path, adbl_info); - return 0; -} - -static int atalk_unlink_file(const char *path) -{ - int ret = 0; - - become_root(); - ret = unlink(path); - unbecome_root(); - - return ret; -} - -static void atalk_add_to_list(name_compare_entry **list) -{ - int i, count = 0; - name_compare_entry *new_list = 0; - name_compare_entry *cur_list = 0; - - cur_list = *list; - - if (cur_list) { - for (i = 0, count = 0; cur_list[i].name; i ++, count ++) { - if (strstr(cur_list[i].name, APPLEDOUBLE)) - return; - } - } - - if (!(new_list = calloc(1, - (count == 0 ? 1 : count + 1) * sizeof(name_compare_entry)))) - return; - - for (i = 0; i < count; i ++) { - new_list[i].name = strdup(cur_list[i].name); - new_list[i].is_wild = cur_list[i].is_wild; - } - - new_list[i].name = strdup(APPLEDOUBLE); - new_list[i].is_wild = False; - - free_namearray(*list); - - *list = new_list; - new_list = 0; - cur_list = 0; -} - -static void atalk_rrmdir(TALLOC_CTX *ctx, char *path) -{ - int n; - char *dpath; - struct dirent **namelist; - - if (!path) return; - - n = scandir(path, &namelist, 0, alphasort); - if (n < 0) { - return; - } else { - while (n --) { - if (strcmp(namelist[n]->d_name, ".") == 0 || - strcmp(namelist[n]->d_name, "..") == 0) - continue; - if (!(dpath = talloc_asprintf(ctx, "%s/%s", - path, namelist[n]->d_name))) - continue; - atalk_unlink_file(dpath); - free(namelist[n]); - } - } -} - -/* Disk operations */ - -/* Directory operations */ - -DIR *atalk_opendir(struct connection_struct *conn, const char *fname) -{ - DIR *ret = 0; - - ret = default_vfs_ops.opendir(conn, fname); - - /* - * when we try to perform delete operation upon file which has fork - * in ./.AppleDouble and this directory wasn't hidden by Samba, - * MS Windows explorer causes the error: "Cannot find the specified file" - * There is some workaround to avoid this situation, i.e. if - * connection has not .AppleDouble entry in either veto or hide - * list then it would be nice to add one. - */ - - atalk_add_to_list(&conn->hide_list); - atalk_add_to_list(&conn->veto_list); - - return ret; -} - -static int atalk_rmdir(struct connection_struct *conn, const char *path) -{ - BOOL add = False; - TALLOC_CTX *ctx = 0; - char *dpath; - - if (!conn || !conn->origpath || !path) goto exit_rmdir; - - /* due to there is no way to change bDeleteVetoFiles variable - * from this module, gotta use talloc stuff.. - */ - - strstr(path, APPLEDOUBLE) ? (add = False) : (add = True); - - if (!(ctx = talloc_init_named("remove_directory"))) - goto exit_rmdir; - - if (!(dpath = talloc_asprintf(ctx, "%s/%s%s", - conn->origpath, path, add ? "/"APPLEDOUBLE : ""))) - goto exit_rmdir; - - atalk_rrmdir(ctx, dpath); - -exit_rmdir: - talloc_destroy(ctx); - return default_vfs_ops.rmdir(conn, path); -} - -/* File operations */ - -static int atalk_rename(struct connection_struct *conn, const char *old, const char *new) -{ - int ret = 0; - char *adbl_path = 0; - char *orig_path = 0; - SMB_STRUCT_STAT adbl_info; - SMB_STRUCT_STAT orig_info; - TALLOC_CTX *ctx; - - ret = default_vfs_ops.rename(conn, old, new); - - if (!conn || !old) return ret; - - if (!(ctx = talloc_init_named("rename_file"))) - return ret; - - if (atalk_build_paths(ctx, conn->origpath, old, &adbl_path, &orig_path, - &adbl_info, &orig_info) != 0) - return ret; - - if (S_ISDIR(orig_info.st_mode) || S_ISREG(orig_info.st_mode)) { - DEBUG(3, ("ATALK: %s has passed..\n", adbl_path)); - goto exit_rename; - } - - atalk_unlink_file(adbl_path); - -exit_rename: - talloc_destroy(ctx); - return ret; -} - -static int atalk_unlink(struct connection_struct *conn, const char *path) -{ - int ret = 0, i; - char *adbl_path = 0; - char *orig_path = 0; - SMB_STRUCT_STAT adbl_info; - SMB_STRUCT_STAT orig_info; - TALLOC_CTX *ctx; - - ret = default_vfs_ops.unlink(conn, path); - - if (!conn || !path) return ret; - - /* no .AppleDouble sync if veto or hide list is empty, - * otherwise "Cannot find the specified file" error will be caused - */ - - if (!conn->veto_list) return ret; - if (!conn->hide_list) return ret; - - for (i = 0; conn->veto_list[i].name; i ++) { - if (strstr(conn->veto_list[i].name, APPLEDOUBLE)) - break; - } - - if (!conn->veto_list[i].name) { - for (i = 0; conn->hide_list[i].name; i ++) { - if (strstr(conn->hide_list[i].name, APPLEDOUBLE)) - break; - else { - DEBUG(3, ("ATALK: %s is not hidden, skipped..\n", - APPLEDOUBLE)); - return ret; - } - } - } - - if (!(ctx = talloc_init_named("unlink_file"))) - return ret; - - if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, - &adbl_info, &orig_info) != 0) - return ret; - - if (S_ISDIR(orig_info.st_mode) || S_ISREG(orig_info.st_mode)) { - DEBUG(3, ("ATALK: %s has passed..\n", adbl_path)); - goto exit_unlink; - } - - atalk_unlink_file(adbl_path); - -exit_unlink: - talloc_destroy(ctx); - return ret; -} - -static int atalk_chmod(struct connection_struct *conn, const char *path, mode_t mode) -{ - int ret = 0; - char *adbl_path = 0; - char *orig_path = 0; - SMB_STRUCT_STAT adbl_info; - SMB_STRUCT_STAT orig_info; - TALLOC_CTX *ctx; - - ret = default_vfs_ops.chmod(conn, path, mode); - - if (!conn || !path) return ret; - - if (!(ctx = talloc_init_named("chmod_file"))) - return ret; - - if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, - &adbl_info, &orig_info) != 0) - return ret; - - if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) { - DEBUG(3, ("ATALK: %s has passed..\n", orig_path)); - goto exit_chmod; - } - - chmod(adbl_path, ADOUBLEMODE); - -exit_chmod: - talloc_destroy(ctx); - return ret; -} - -static int atalk_chown(struct connection_struct *conn, const char *path, uid_t uid, gid_t gid) -{ - int ret = 0; - char *adbl_path = 0; - char *orig_path = 0; - SMB_STRUCT_STAT adbl_info; - SMB_STRUCT_STAT orig_info; - TALLOC_CTX *ctx; - - ret = default_vfs_ops.chown(conn, path, uid, gid); - - if (!conn || !path) return ret; - - if (!(ctx = talloc_init_named("chown_file"))) - return ret; - - if (atalk_build_paths(ctx, conn->origpath, path, &adbl_path, &orig_path, - &adbl_info, &orig_info) != 0) - return ret; - - if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) { - DEBUG(3, ("ATALK: %s has passed..\n", orig_path)); - goto exit_chown; - } - - chown(adbl_path, uid, gid); - -exit_chown: - talloc_destroy(ctx); - return ret; -} - -static vfs_op_tuple atalk_ops[] = { - - /* Directory operations */ - - {atalk_opendir, SMB_VFS_OP_OPENDIR, SMB_VFS_LAYER_TRANSPARENT}, - {atalk_rmdir, SMB_VFS_OP_RMDIR, SMB_VFS_LAYER_TRANSPARENT}, - - /* File operations */ - - {atalk_rename, SMB_VFS_OP_RENAME, SMB_VFS_LAYER_TRANSPARENT}, - {atalk_unlink, SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_TRANSPARENT}, - {atalk_chmod, SMB_VFS_OP_CHMOD, SMB_VFS_LAYER_TRANSPARENT}, - {atalk_chown, SMB_VFS_OP_CHOWN, SMB_VFS_LAYER_TRANSPARENT}, - - /* Finish VFS operations definition */ - - {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} -}; - -/* VFS initialisation function. Return vfs_op_tuple array back to SAMBA. */ -vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, - struct smb_vfs_handle_struct *vfs_handle) -{ - *vfs_version = SMB_VFS_INTERFACE_VERSION; - memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); - - atalk_handle = vfs_handle; - - DEBUG(3, ("ATALK: vfs module loaded\n")); - return atalk_ops; -} - -/* VFS finalization function. */ -void vfs_done(connection_struct *conn) -{ - DEBUG(3, ("ATALK: vfs module unloaded\n")); -} -- cgit From d0cef25c27d180b6f864e942058e1b6805971a76 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 6 Sep 2002 13:39:46 +0000 Subject: the current block module is completely broken, jelmer will commit a new one later. simo (This used to be commit 830f9910bb77562aa2dbef2f479c01493928692d) --- examples/VFS/block/Makefile.in | 28 --- examples/VFS/block/block.c | 439 ------------------------------------ examples/VFS/block/samba-block.conf | 6 - examples/VFS/block/smb.conf | 6 - 4 files changed, 479 deletions(-) delete mode 100644 examples/VFS/block/Makefile.in delete mode 100644 examples/VFS/block/block.c delete mode 100644 examples/VFS/block/samba-block.conf delete mode 100644 examples/VFS/block/smb.conf diff --git a/examples/VFS/block/Makefile.in b/examples/VFS/block/Makefile.in deleted file mode 100644 index 3deb17c596..0000000000 --- a/examples/VFS/block/Makefile.in +++ /dev/null @@ -1,28 +0,0 @@ -CC = @CC@ -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LDSHFLAGS = -shared -srcdir = @builddir@ -FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) - -VFS_OBJS = block.so - -# Default target - -default: $(VFS_OBJS) - -# Pattern rules - -%.so: %.o - $(CC) $(LDSHFLAGS) $(LDFLAGS) -o $@ $< - -%.o: %.c - $(CC) $(FLAGS) -c $< - -# Misc targets - -clean: - rm -rf .libs - rm -f core *~ *% *.bak \ - $(VFS_OBJ) $(VFS_OBJS) diff --git a/examples/VFS/block/block.c b/examples/VFS/block/block.c deleted file mode 100644 index eb388a97ea..0000000000 --- a/examples/VFS/block/block.c +++ /dev/null @@ -1,439 +0,0 @@ -/* - * - * Block access from links to dev mount points specified in PARAMCONF file - * - * Copyright (C) Ronald Kuetemeier, 2001 - * Copyright (C) Alexander Bokovoy, 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 "config.h" -#include -#include -#include -#include -#include -#include -#include -#include - - -#ifdef HAVE_UTIME_H -#include -#endif -#ifdef HAVE_DIRENT_H -#include -#endif -#include -#ifdef HAVE_FCNTL_H -#include -#endif - - -#include -#include - - - -static DIR *block_opendir(connection_struct *conn, char *fname); -static int block_connect(connection_struct *conn, const char *service, const char *user); -static void block_disconnect(connection_struct *conn); - -static struct smb_vfs_handle_struct *block_handle; - -/* VFS operations */ - - -static struct vfs_ops default_vfs_ops; /* For passthrough operation */ - -static vfs_op_tuple block_vfs_ops[] = { - - /* Disk operations */ - - {block_connect, SMB_VFS_OP_CONNECT, SMB_VFS_LAYER_TRANSPARENT}, - {block_disconnect, SMB_VFS_OP_DISCONNECT, SMB_VFS_LAYER_TRANSPARENT}, - - /* Directory operations */ - - {block_opendir, SMB_VFS_OP_OPENDIR, SMB_VFS_LAYER_TRANSPARENT}, - - {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} -}; - - -#ifndef PARAMCONF -#define PARAMCONF "/etc/samba-block.conf" -#endif - -extern BOOL pm_process(char *FileName, BOOL (*sfunc)(char *), BOOL(*pfunc)(char * , char *)); - -/* functions */ - -static BOOL enter_pblock_mount(char *dir); -static BOOL get_section(char *sect); -static BOOL get_parameter_value(char *param, char *value); -static BOOL load_param(void); -static BOOL search(struct stat *stat_buf); -static BOOL dir_search(char *linkstr, char *dir); -static BOOL enter_pblock_dir(char *dir); - - - -typedef struct block_dir -{ - dev_t st_dev; - int str_len; - char *dir_name; - struct block_dir *next; -} block_dir; - - -static char *params[] = {"mount_point","dir_name"}; -enum { MOUNT_POINT , DIR_NAME }; - -static struct block_dir *pblock_mountp = NULL; -static struct block_dir *pblock_dir = NULL; - - - -/* - * Load the conf file into a table - */ - -static BOOL load_param(void) -{ - - if ((pm_process(PARAMCONF,&get_section,&get_parameter_value)) == TRUE) - { - return TRUE; - - } - return FALSE; -} - - - -/* - * Enter the key and data into the list - * - */ - -static BOOL enter_pblock_mount(char *dir) -{ - struct stat stat_buf; - static struct block_dir *tmp_pblock; - - - if((stat(dir,&stat_buf)) != 0) - { - return FALSE; - } - - if(pblock_mountp == NULL) - { - pblock_mountp = calloc(1, sizeof(block_dir)); - if( pblock_mountp == NULL) - { - return FALSE; - } - tmp_pblock = pblock_mountp; - tmp_pblock->next = NULL; - - }else - { - tmp_pblock->next = calloc(1, sizeof(block_dir)); - if(tmp_pblock->next == NULL) - { - return FALSE; - } - tmp_pblock = tmp_pblock->next; - tmp_pblock->next = NULL; - - } - - - tmp_pblock->st_dev = stat_buf.st_dev; - tmp_pblock->dir_name = strdup(dir); - - - return TRUE; - -} - - -/* - * Enter the key and data into the list - * - */ - -static BOOL enter_pblock_dir(char *dir) -{ - static struct block_dir *tmp_pblock; - - - if(pblock_dir == NULL) - { - pblock_dir = calloc(1, sizeof(block_dir)); - if( pblock_dir == NULL) - { - return FALSE; - } - tmp_pblock = pblock_dir; - tmp_pblock->next = NULL; - - }else - { - tmp_pblock->next = calloc(1, sizeof(block_dir)); - if(tmp_pblock->next == NULL) - { - return FALSE; - } - tmp_pblock = tmp_pblock->next; - tmp_pblock->next = NULL; - - } - - - tmp_pblock->dir_name = strdup(dir); - tmp_pblock->str_len = strlen(dir); - - - return TRUE; - -} - - - - -/* - * Function callback for config section names - */ - -static BOOL get_section(char *sect) -{ - return TRUE; -} - - - -/* - * Function callback for config parameter value pairs - * - */ - -static BOOL get_parameter_value(char *param, char *value) -{ - int i = 0, maxargs = sizeof(params) / sizeof(char *); - - - for( i= 0; i < maxargs; i++) - { - if (strcmp(param,params[i]) == 0) - { - switch(i) - { - case MOUNT_POINT : - enter_pblock_mount(value); - break; - case DIR_NAME : - enter_pblock_dir(value); - break; - default : - break; - } - } - } - - return TRUE; - -} - - - - -/* VFS initialisation function. Return initialised vfs_op_tuple array - back to SAMBA. */ - -vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, - struct smb_vfs_handle_struct *vfs_handle) -{ - *vfs_version = SMB_VFS_INTERFACE_VERSION; - - memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); - - block_handle = vfs_handle; - - return block_vfs_ops; -} - - -/* VFS finalization function. */ -void vfs_done(connection_struct *conn) -{ -} - - -/* - * VFS connect and param file loading - */ - -static int block_connect(connection_struct *conn, const char *service, const char *user) -{ - if((load_param()) == FALSE) - { - - return -1; - - } - - DEBUG(0,("%s connecting \n",conn->user)); - - return (default_vfs_ops.connect(conn, service,user)); -} - -/* - * Free allocated structures and disconnect - * - */ - - -static void block_disconnect(struct connection_struct *conn) -{ - - struct block_dir *tmp_pblock = (pblock_mountp == NULL ? pblock_dir : pblock_mountp); - struct block_dir *free_pblock = NULL; - - while(tmp_pblock != NULL) - { - free(tmp_pblock->dir_name); - free_pblock = tmp_pblock; - tmp_pblock = tmp_pblock->next; - free(free_pblock); - - if(tmp_pblock == NULL && pblock_dir != NULL) - { - tmp_pblock = (pblock_mountp == NULL ? pblock_dir : NULL); - pblock_dir = NULL; - - } - - } - - - - default_vfs_ops.disconnect(conn); -} - -/* - * VFS opendir - */ - -static DIR *block_opendir(struct connection_struct *conn, char *fname) -{ - - char *dir_name = NULL; - struct stat stat_buf; - size_t len; - - len = strlen(conn->origpath) + 1 + strcspn(fname, "/"); - asprintf(&dir_name, "%s/%s", conn->origpath, fname); - dir_name[len] = '\0'; - - if((lstat(dir_name,&stat_buf)) == 0) - { - if((S_ISLNK(stat_buf.st_mode)) == 1) - { - stat(dir_name,&stat_buf); - if((search(&stat_buf) || dir_search(dir_name, fname) ) == TRUE) - { - DEBUG(0,("%s used link to blocked dir: %s \n", conn->user, dir_name)); - errno = EACCES; - return NULL; - } - } - } - - return (default_vfs_ops.opendir(conn, fname)); -} - - -/* - * Find mount point to block in list - */ - -static BOOL search(struct stat *stat_buf) -{ - struct block_dir *tmp_pblock = pblock_mountp; - - while(tmp_pblock != NULL) - { - - if(tmp_pblock->st_dev == stat_buf->st_dev) - { - return TRUE; - } - tmp_pblock = tmp_pblock->next; - } - - return FALSE; - -} - -/* - * Find dir in list to block id the starting point is link from a share - */ - -static BOOL dir_search(char *linkstr, char *dir) -{ - char buf[PATH_MAX +1], *ext_path; - int len = 0; - struct block_dir *tmp_pblock = pblock_dir; - - if((len = readlink(linkstr, buf, sizeof(buf))) == -1) - { - return TRUE; - - }else - { - buf[len] = '\0'; - } - - - if((ext_path = strchr(dir, '/')) != NULL) - { - pstrcat(buf, &ext_path[1]); - len = strlen(buf); - } - - while(tmp_pblock != NULL) - { - if(len < tmp_pblock->str_len) - { - tmp_pblock = tmp_pblock->next; - continue; - } - - if((strstr(buf, tmp_pblock->dir_name)) != NULL) - { - return TRUE; - } - tmp_pblock = tmp_pblock->next; - } - - - return FALSE; - -} diff --git a/examples/VFS/block/samba-block.conf b/examples/VFS/block/samba-block.conf deleted file mode 100644 index 7a137980b7..0000000000 --- a/examples/VFS/block/samba-block.conf +++ /dev/null @@ -1,6 +0,0 @@ -[ blocked ] -mount_point = / -mount_point = /boot -mount_point = /proc -dir_name = /usr/local/src/samba -dir_name = /usr/bin diff --git a/examples/VFS/block/smb.conf b/examples/VFS/block/smb.conf deleted file mode 100644 index 931196f402..0000000000 --- a/examples/VFS/block/smb.conf +++ /dev/null @@ -1,6 +0,0 @@ -[homes] - comment = Home Directories - vfs object = /usr/local/samba/lib/block.so - browseable = yes - writable = yes - -- cgit From 7a76d0e854c0c6aef0cb6f2bc68616ad7c557e0b Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 13:46:36 +0000 Subject: Seems I missed commiting this when I added the rest of metze's ADS patch. Oh well, here it is... Andrew Bartlett (This used to be commit 7c2a667640b01a0f19ddc3515c5ca7ac43d26e25) --- source3/libads/ads_utils.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 source3/libads/ads_utils.c diff --git a/source3/libads/ads_utils.c b/source3/libads/ads_utils.c new file mode 100644 index 0000000000..1789193d7e --- /dev/null +++ b/source3/libads/ads_utils.c @@ -0,0 +1,75 @@ +/* + Unix SMB/CIFS implementation. + ads (active directory) utility library + + Copyright (C) Stefan (metze) Metzmacher 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" + +#ifdef HAVE_ADS + + +/* +translated the ACB_CTRL Flags to UserFlags (userAccountControl) +*/ +uint32 ads_acb2uf(uint16 acb) +{ + uint32 uf = 0x00000000; + + if (acb & ACB_DISABLED) uf |= UF_ACCOUNTDISABLE; + if (acb & ACB_HOMDIRREQ) uf |= UF_HOMEDIR_REQUIRED; + if (acb & ACB_PWNOTREQ) uf |= UF_PASSWD_NOTREQD; + if (acb & ACB_TEMPDUP) uf |= UF_TEMP_DUPLICATE_ACCOUNT; + if (acb & ACB_NORMAL) uf |= UF_NORMAL_ACCOUNT; + if (acb & ACB_MNS) uf |= UF_MNS_LOGON_ACCOUNT; + if (acb & ACB_DOMTRUST) uf |= UF_INTERDOMAIN_TRUST_ACCOUNT; + if (acb & ACB_WSTRUST) uf |= UF_WORKSTATION_TRUST_ACCOUNT; + if (acb & ACB_SVRTRUST) uf |= UF_SERVER_TRUST_ACCOUNT; + if (acb & ACB_PWNOEXP) uf |= UF_DONT_EXPIRE_PASSWD; + if (acb & ACB_AUTOLOCK) uf |= UF_LOCKOUT; + + return uf; +} + +/* translated the UserFlags (userAccountControl) to ACB_CTRL Flags */ +uint16 ads_uf2acb(uint32 uf) +{ + uint16 acb = 0x0000; + + if (uf & UF_ACCOUNTDISABLE) acb |= ACB_DISABLED; + if (uf & UF_HOMEDIR_REQUIRED) acb |= ACB_HOMDIRREQ; + if (uf & UF_PASSWD_NOTREQD) acb |= ACB_PWNOTREQ; + if (uf & UF_MNS_LOGON_ACCOUNT) acb |= ACB_MNS; + if (uf & UF_DONT_EXPIRE_PASSWD) acb |= ACB_PWNOEXP; + if (uf & UF_LOCKOUT) acb |= ACB_AUTOLOCK; + + switch (uf & UF_ACCOUNT_TYPE_MASK) + { + case UF_TEMP_DUPLICATE_ACCOUNT: acb |= ACB_TEMPDUP;break; + case UF_NORMAL_ACCOUNT: acb |= ACB_NORMAL;break; + case UF_INTERDOMAIN_TRUST_ACCOUNT: acb |= ACB_DOMTRUST;break; + case UF_WORKSTATION_TRUST_ACCOUNT: acb |= ACB_WSTRUST;break; + case UF_SERVER_TRUST_ACCOUNT: acb |= ACB_SVRTRUST;break; + /*Fix Me: what should we do here? */ + default: acb |= ACB_NORMAL;break; + } + + return acb; +} + +#endif -- cgit From df4e6c9bcc2bb007e07c6f775e33f9174ea57931 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 6 Sep 2002 23:10:28 +0000 Subject: As per the 'OK' at CIFS2002, only use the readline headers (and this crasy #ifdef mess...) in readline.c, we don't need or use them in the rest of Samba. (This OK was of course conditional on 'if you break it, you better fix it...') Andrew Bartlett (This used to be commit 55ee289f587f107fa03c5f889491fdaab101df2d) --- source3/include/includes.h | 18 ------------------ source3/lib/readline.c | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/source3/include/includes.h b/source3/include/includes.h index 945ec2cbd7..dacac356e3 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -902,24 +902,6 @@ struct functable { #define ULTRIX_AUTH 1 #endif -#ifdef HAVE_LIBREADLINE -# ifdef HAVE_READLINE_READLINE_H -# include -# ifdef HAVE_READLINE_HISTORY_H -# include -# endif -# else -# ifdef HAVE_READLINE_H -# include -# ifdef HAVE_HISTORY_H -# include -# endif -# else -# undef HAVE_LIBREADLINE -# endif -# endif -#endif - #ifndef HAVE_STRDUP char *strdup(const char *s); #endif diff --git a/source3/lib/readline.c b/source3/lib/readline.c index d80c571dd3..58c4ecf482 100644 --- a/source3/lib/readline.c +++ b/source3/lib/readline.c @@ -21,6 +21,24 @@ #include "includes.h" +#ifdef HAVE_LIBREADLINE +# ifdef HAVE_READLINE_READLINE_H +# include +# ifdef HAVE_READLINE_HISTORY_H +# include +# endif +# else +# ifdef HAVE_READLINE_H +# include +# ifdef HAVE_HISTORY_H +# include +# endif +# else +# undef HAVE_LIBREADLINE +# endif +# endif +#endif + #ifdef HAVE_NEW_LIBREADLINE # define RL_COMPLETION_CAST (rl_completion_func_t *) #else -- cgit From 27cc26cec83f685c6d1dc73f855e01c082a09ca2 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sat, 7 Sep 2002 04:05:42 +0000 Subject: recycle.c: merged in modifications made my differnt people, cleaned up things, yet some work todo the code works but there are still some cases to be handled properly Makefile.in: this one seem much simpler and effective than the previous hack with file inclusion it should also be more portable we still need to find a solution to support multiple platforms or go back to libtool (This used to be commit e9f4bc77f84eeece82dea25f9c693cfb1d0a8464) --- examples/VFS/Makefile.in | 10 +- examples/VFS/recycle.c | 582 ++++++++++++++++++++++++++++++++++++----------- 2 files changed, 454 insertions(+), 138 deletions(-) diff --git a/examples/VFS/Makefile.in b/examples/VFS/Makefile.in index 2ffd23b853..46e1a90263 100644 --- a/examples/VFS/Makefile.in +++ b/examples/VFS/Makefile.in @@ -6,11 +6,8 @@ LDSHFLAGS = -shared srcdir = @builddir@ FLAGS = $(CFLAGS) -Iinclude -I$(srcdir)/include -I$(srcdir)/ubiqx -I$(srcdir)/smbwrapper -I. $(CPPFLAGS) -I$(srcdir) -VFS_OBJS = audit.so recycle.so netatalk.so - -# Default target - -default: $(VFS_OBJS) +# Auto target +default: $(patsubst %.c,%.so,$(wildcard *.c)) # Pattern rules @@ -24,5 +21,4 @@ default: $(VFS_OBJS) clean: rm -rf .libs - rm -f core *~ *% *.bak \ - $(VFS_OBJ) $(VFS_OBJS) + rm -f core *~ *% *.bak *.o *.so diff --git a/examples/VFS/recycle.c b/examples/VFS/recycle.c index 0a261c20df..bcf5f898cc 100644 --- a/examples/VFS/recycle.c +++ b/examples/VFS/recycle.c @@ -1,227 +1,547 @@ -/* - * Auditing VFS module for samba. Log selected file operations to syslog - * facility. +/* + * Recycle bin VFS module for Samba. * * Copyright (C) 2001, Brandon Stone, Amherst College, . * Copyright (C) 2002, Jeremy Allison - modified to make a VFS module. * Copyright (C) 2002, Alexander Bokovoy - cascaded VFS adoption, + * Copyright (C) 2002, Juergen Hasch - added some options. + * Copyright (C) 2002, Simo Sorce * * 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 "config.h" -#include -#include -#ifdef HAVE_UTIME_H -#include -#endif -#ifdef HAVE_DIRENT_H -#include -#endif -#include -#ifdef HAVE_FCNTL_H -#include -#endif -#include -#include -#include -#include - -/* VFS operations */ +#include "includes.h" + +#define ALLOC_CHECK(ptr, label) do { if ((ptr) == NULL) { DEBUG(0, ("recycle.bin: out of memory!\n")); errno = ENOMEM; goto label; } } while(0) + +static int vfs_recycle_debug_level = DBGC_VFS; + +#undef DBGC_CLASS +#define DBGC_CLASS vfs_recycle_debug_level +static const char *delimiter = "|"; /* delimiter for options */ + +/* One per connection */ + +typedef struct recycle_bin_struct +{ + TALLOC_CTX *ctx; + char *repository; /* name of the recycle bin directory */ + BOOL keep_directories; /* keep directory structure of deleted file in recycle bin */ + BOOL versions; /* create versions of deleted files with identical name */ + BOOL touch; /* touch access date of deleted file */ + char *exclude; /* which files to exclude */ + char *exclude_dir; /* which directories to exclude */ + char *noversions; /* which files to exclude from versioning */ + SMB_OFF_T maxsize; /* maximum file size to be saved */ +} recycle_bin_struct; + +static BOOL checkparam(char *haystack,char *needle); + +/* VFS operations */ static struct vfs_ops default_vfs_ops; /* For passthrough operation */ -static struct smb_vfs_handle_struct *recycle_handle; -static int recycle_unlink(connection_struct *, const char *); + static int recycle_connect(struct connection_struct *conn, const char *service, const char *user); static void recycle_disconnect(struct connection_struct *conn); +static int recycle_unlink(connection_struct *, const char *); + +#define VFS_OP(x) ((void *) x) static vfs_op_tuple recycle_ops[] = { /* Disk operations */ - - {recycle_connect, SMB_VFS_OP_CONNECT, SMB_VFS_LAYER_OPAQUE}, - {recycle_disconnect, SMB_VFS_OP_DISCONNECT, SMB_VFS_LAYER_OPAQUE}, + {VFS_OP(recycle_connect), SMB_VFS_OP_CONNECT, SMB_VFS_LAYER_TRANSPARENT}, + {VFS_OP(recycle_disconnect), SMB_VFS_OP_DISCONNECT, SMB_VFS_LAYER_TRANSPARENT}, /* File operations */ - - {recycle_unlink, SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_OPAQUE}, + {VFS_OP(recycle_unlink), SMB_VFS_OP_UNLINK, SMB_VFS_LAYER_TRANSPARENT}, - {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} + {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} }; -/* VFS initialisation function. Return initialised vfs_op_tuple array back to SAMBA. */ - -vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops, - struct smb_vfs_handle_struct *vfs_handle) +/** + * VFS initialisation function. + * + * @retval initialised vfs_op_tuple array + **/ +vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops) { + DEBUG(10, ("Initializing VFS module recycle\n")); *vfs_version = SMB_VFS_INTERFACE_VERSION; memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); - - DEBUG(5,("vfs_init: for recycle!\n")); - - /* Remember vfs_id for storing private information at connect */ - recycle_handle = vfs_handle; + vfs_recycle_debug_level = debug_add_class("recycle.bin"); + if (vfs_recycle_debug_level == -1) { + vfs_recycle_debug_level = DBGC_VFS; + DEBUG(0, ("vfs_recycle: Couldn't register custom debugging class!\n")); + } else { + DEBUG(0, ("vfs_recycle: Debug class number of 'vfs_recycle': %d\n", vfs_recycle_debug_level)); + } return recycle_ops; } -/* VFS finalization function. */ +/** + * VFS finalization function. + * + **/ void vfs_done(connection_struct *conn) { - DEBUG(5,("vfs_done_recycle: called for connection %p\n",conn)); + DEBUG(10,("Called for connection %d\n", SNUM(conn))); } static int recycle_connect(struct connection_struct *conn, const char *service, const char *user) { - fstring recycle_bin; + TALLOC_CTX *ctx = NULL; + recycle_bin_struct *recbin; + char *servicename; + char *tmp_str; - DEBUG(4,("recycle_connect: called for service %s as user %s\n", service, user)); + DEBUG(10, ("Called for service %s (%d) as user %s\n", service, SNUM(conn), user)); - fstrcpy(recycle_bin, (const char *)lp_parm_string(lp_servicename(SNUM(conn)),"vfs","recycle bin")); - if (!*recycle_bin) { - DEBUG(0,("recycle_connect: No options listed (vfs:recycle bin).\n" )); - return 0; /* No options. */ + if (!(ctx = talloc_init_named("recycle bin"))) { + DEBUG(0, ("Failed to allocate memory in VFS module recycle_bin\n")); + return 0; } - - standard_sub_conn(conn,recycle_bin,sizeof(fstring)); + recbin = talloc(ctx,sizeof(recycle_bin_struct)); + if ( recbin == NULL) { + DEBUG(0, ("Failed to allocate memory in VFS module recycle_bin\n")); + return -1; + } + recbin->ctx = ctx; + + /* Set defaults */ + recbin->repository = talloc_strdup(ctx, ".recycle"); + ALLOC_CHECK(recbin->repository, error); + recbin->keep_directories = False; + recbin->versions = False; + recbin->touch = False; + recbin->exclude = ""; + recbin->exclude_dir = ""; + recbin->noversions = ""; + recbin->maxsize = 0; + + /* parse configuration options */ + servicename = talloc_strdup(recbin->ctx, lp_servicename(SNUM(conn))); + DEBUG(10, ("servicename = %s\n",servicename)); + if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "repository")) != NULL) { + recbin->repository = talloc_sub_conn(ctx, conn, tmp_str); + ALLOC_CHECK(recbin->repository, error); + trim_string(recbin->repository, "/", "/"); + DEBUG(5, ("recycle.bin: repository = %s\n", recbin->repository)); + } + if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "mode")) != NULL) { + if (checkparam(tmp_str, "KEEP_DIRECTORIES") == True) + recbin->keep_directories = True; + if (checkparam(tmp_str, "VERSIONS") == True) + recbin->versions = True; + if (checkparam(tmp_str, "TOUCH") == True) + recbin->touch = True; + DEBUG(5, ("recycle.bin: mode = %s\n", tmp_str)); + } + if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "maxsize")) != NULL) { + recbin->maxsize = strtoul(tmp_str, NULL, 10); + if (recbin->maxsize == 0) { + recbin->maxsize = -1; + DEBUG(5, ("recycle.bin: maxsize = -infinite-\n")); + } else { + DEBUG(5, ("recycle.bin: maxsize = %ld\n", (long int)recbin->maxsize)); + } + } + if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "exclude")) != NULL) { + recbin->exclude = talloc_strdup(ctx, tmp_str); + ALLOC_CHECK(recbin->exclude, error); + DEBUG(5, ("recycle.bin: exclude = %s\n", recbin->exclude)); + } + if ((tmp_str = lp_parm_string(servicename,"recycle.bin", "exclude_dir")) != NULL) { + recbin->exclude_dir = talloc_strdup(ctx, tmp_str); + ALLOC_CHECK(recbin->exclude_dir, error); + DEBUG(5, ("recycle.bin: exclude_dir = %s\n", recbin->exclude_dir)); + } + if ((tmp_str = lp_parm_string(servicename,"recycle.bin", "noversions")) != NULL) { + recbin->noversions = talloc_strdup(ctx, tmp_str); + ALLOC_CHECK(recbin->noversions, error); + DEBUG(5, ("recycle.bin: noversions = %s\n", recbin->noversions)); + } - DEBUG(3,("recycle_connect: recycle name is %s\n", recycle_bin )); + conn->vfs_private = (void *)recbin; + return default_vfs_ops.connect(conn, service, user); - recycle_handle->data = (void *)strdup(recycle_bin); - return 0; +error: + talloc_destroy(ctx); + return -1; } static void recycle_disconnect(struct connection_struct *conn) { - SAFE_FREE(recycle_handle->data); + DEBUG(10, ("Disconnecting VFS module recycle bin\n")); + if (conn->vfs_private) { + talloc_destroy(((recycle_bin_struct *)conn->vfs_private)->ctx); + conn->vfs_private = NULL; + } + default_vfs_ops.disconnect(conn); } -static BOOL recycle_XXX_exist(connection_struct *conn, const char *dname, BOOL isdir) +static BOOL recycle_directory_exist(connection_struct *conn, const char *dname) { SMB_STRUCT_STAT st; - if (default_vfs_ops.stat(conn,dname,&st) != 0) - return(False); + if (default_vfs_ops.stat(conn, dname, &st) == 0) { + if (S_ISDIR(st.st_mode)) { + return True; + } + } - if (isdir) - return S_ISDIR(st.st_mode) ? True : False; - else - return S_ISREG(st.st_mode) ? True : False; -} - -static BOOL recycle_directory_exist(connection_struct *conn, const char *dname) -{ - return recycle_XXX_exist(conn, dname, True); + return False; } static BOOL recycle_file_exist(connection_struct *conn, const char *fname) { - return recycle_XXX_exist(conn, fname, False); + SMB_STRUCT_STAT st; + + if (default_vfs_ops.stat(conn, fname, &st) == 0) { + if (S_ISREG(st.st_mode)) { + return True; + } + } + + return False; } +/** + * Return file size + * @param conn connection + * @param fname file name + * @return size in bytes + **/ static SMB_OFF_T recycle_get_file_size(connection_struct *conn, const char *fname) { SMB_STRUCT_STAT st; + if (default_vfs_ops.stat(conn, fname, &st) != 0) { + DEBUG(0,("recycle.bin: stat for %s returned %s\n", fname, strerror(errno))); + return (SMB_OFF_T)0; + } + return(st.st_size); +} - if (default_vfs_ops.stat(conn,fname,&st) != 0) - return (SMB_OFF_T)-1; +/** + * Create directory tree + * @param conn connection + * @param dname Directory tree to be created + * @return Returns True for success + **/ +static BOOL recycle_create_dir(connection_struct *conn, const char *dname) +{ + int len; + mode_t mode; + char *new_dir = NULL; + char *tmp_str = NULL; + char *token; + char *tok_str; + BOOL ret = False; + + mode = S_IREAD | S_IWRITE | S_IEXEC; + + tmp_str = strdup(dname); + ALLOC_CHECK(tmp_str, done); + tok_str = tmp_str; + + len = strlen(dname); + new_dir = (char *)malloc(len + 1); + ALLOC_CHECK(new_dir, done); + *new_dir = '\0'; + + /* Create directory tree if neccessary */ + for(token = strtok(tok_str, "/"); token; token = strtok(NULL, "/")) { + safe_strcat(new_dir, token, len); + if (recycle_directory_exist(conn, new_dir)) + DEBUG(10, ("recycle.bin: dir %s already exists\n", new_dir)); + else { + DEBUG(5, ("recycle.bin: creating new dir %s\n", new_dir)); + if (default_vfs_ops.mkdir(conn, new_dir, mode) != 0) { + DEBUG(1,("recycle.bin: mkdir failed for %s with error: %s\n", new_dir, strerror(errno))); + ret = False; + goto done; + } + } + safe_strcat(new_dir, "/", len); + } - return(st.st_size); + ret = True; +done: + SAFE_FREE(tmp_str); + SAFE_FREE(new_dir); + return ret; } -/******************************************************************** - Check if file should be recycled -*********************************************************************/ +/** + * Check if needle is contained exactly in haystack + * @param haystack list of parameters separated by delimimiter character + * @param needle string to be matched exactly to haystack + * @return True if found + **/ +static BOOL checkparam(char *haystack, char *needle) +{ + char *token; + char *tok_str; + char *tmp_str; + BOOL ret = False; + + if (haystack == NULL || strlen(haystack) == 0 || needle == NULL || strlen(needle) == 0) { + return False; + } + + tmp_str = strdup(haystack); + ALLOC_CHECK(tmp_str, done); + token = tok_str = tmp_str; + + for(token = strtok(tok_str, delimiter); token; token = strtok(NULL, delimiter)) { + if(strcmp(token, needle) == 0) { + ret = True; + goto done; + } + } +done: + SAFE_FREE(tmp_str); + return ret; +} + +/** + * Check if needle is contained in haystack, * and ? patterns are resolved + * @param haystack list of parameters separated by delimimiter character + * @param needle string to be matched exectly to haystack including pattern matching + * @return True if found + **/ +static BOOL matchparam(char *haystack, char *needle) +{ + char *token; + char *tok_str; + char *tmp_str; + BOOL ret = False; + + if (haystack == NULL || strlen(haystack) == 0 || needle == NULL || strlen(needle) == 0) { + return False; + } + + tmp_str = strdup(haystack); + ALLOC_CHECK(tmp_str, done); + token = tok_str = tmp_str; + + for(token = strtok(tok_str, delimiter); token; token = strtok(NULL, delimiter)) { + if (!unix_wild_match(token, needle)) { + ret = True; + goto done; + } + } +done: + SAFE_FREE(tmp_str); + return ret; +} + +/** + * Touch access date + **/ +static void recycle_touch(connection_struct *conn, const char *fname) +{ + SMB_STRUCT_STAT st; + struct utimbuf tb; + time_t currtime; + + if (default_vfs_ops.stat(conn, fname, &st) != 0) { + DEBUG(0,("recycle.bin: stat for %s returned %s\n", fname, strerror(errno))); + return; + } + currtime = time(&currtime); + tb.actime = currtime; + tb.modtime = st.st_mtime; + + if (default_vfs_ops.utime(conn, fname, &tb) == -1 ) + DEBUG(0, ("recycle.bin: touching %s failed, reason = %s\n", fname, strerror(errno))); + } +/** + * Check if file should be recycled + **/ static int recycle_unlink(connection_struct *conn, const char *inname) { - fstring recycle_bin; - pstring fname; - char *base, *ext; - pstring bin; - int i=1, len, addlen; - int dir_mask=0770; - SMB_BIG_UINT dfree,dsize,bsize; + recycle_bin_struct *recbin; + char *file_name = NULL; + char *path_name = NULL; + char *temp_name = NULL; + char *final_name = NULL; + char *base; + int i; + SMB_BIG_UINT dfree, dsize, bsize; + SMB_OFF_T file_size, space_avail; + BOOL exist; + int rc; + + file_name = strdup(inname); + ALLOC_CHECK(file_name, done); + + if (conn->vfs_private) + recbin = (recycle_bin_struct *)conn->vfs_private; + else { + DEBUG(0, ("Recycle bin not initialized!\n")); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; + } - *recycle_bin = '\0'; - pstrcpy(fname, inname); + if(!recbin->repository || *(recbin->repository) == '\0') { + DEBUG(3, ("Recycle path not set, purging %s...\n", file_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; + } - if (recycle_handle->data) - fstrcpy(recycle_bin, (const char *)recycle_handle->data); + /* we don't recycle the recycle bin... */ + if (strncmp(file_name, recbin->repository, strlen(recbin->repository)) == 0) { + DEBUG(3, ("File is within recycling bin, unlinking ...\n")); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; + } - if(!*recycle_bin) { - DEBUG(1, ("recycle bin: share parameter not set, purging %s...\n", fname)); - return default_vfs_ops.unlink(conn,fname); + file_size = recycle_get_file_size(conn, file_name); + /* it is wrong to purge filenames only because they are empty imho + * --- simo + * + if(fsize == 0) { + DEBUG(3, ("File %s is empty, purging...\n", file_name)); + rc = default_vfs_ops.unlink(conn,file_name); + goto done; + } + */ + + /* FIXME: this is wrong, we should check the hole size of the recycle bin is + * not greater then maxsize, not the size of the single file, also it is better + * to remove older files + */ + if(recbin->maxsize > 0 && file_size > recbin->maxsize) { + DEBUG(3, ("File %s exceeds maximum recycle size, purging... \n", file_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; } - if(recycle_get_file_size(conn, fname) == 0) { - DEBUG(3, ("recycle bin: file %s is empty, purging...\n", fname)); - return default_vfs_ops.unlink(conn,fname); + /* FIXME: this is wrong: moving files with rename does not change the disk space + * allocation + * + space_avail = default_vfs_ops.disk_free(conn, ".", True, &bsize, &dfree, &dsize) * 1024L; + DEBUG(5, ("space_avail = %Lu, file_size = %Lu\n", space_avail, file_size)); + if(space_avail < file_size) { + DEBUG(3, ("Not enough diskspace, purging file %s\n", file_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; + } + */ + + /* extract filename and path */ + path_name = (char *)malloc(PATH_MAX); + ALLOC_CHECK(path_name, done); + *path_name = '\0'; + safe_strcpy(path_name, file_name, PATH_MAX); + base = strrchr(path_name, '/'); + if (base == NULL) { + base = file_name; + safe_strcpy(path_name, "/", PATH_MAX); + } + else { + *base = '\0'; + base++; } - base = strrchr(fname, '/'); - pstrcpy(bin, recycle_bin); - pstrcat(bin, "/"); + DEBUG(10, ("recycle.bin: fname = %s\n", file_name)); /* original filename with path */ + DEBUG(10, ("recycle.bin: fpath = %s\n", path_name)); /* original path */ + DEBUG(10, ("recycle.bin: base = %s\n", base)); /* filename without path */ - if(base == NULL) { - ext = strrchr(fname, '.'); - pstrcat(bin, fname); - } else { - ext = strrchr(base, '.'); - pstrcat(bin, base+1); + if (matchparam(recbin->exclude, base)) { + DEBUG(3, ("recycle.bin: file %s is excluded \n", base)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; } - DEBUG(4, ("recycle bin: base %s, ext %s, fname %s, bin %s\n", base, ext, fname, bin)); - if(strcmp(fname,bin) == 0) { - DEBUG(3, ("recycle bin: file %s exists, purging...\n", fname)); - return default_vfs_ops.unlink(conn,fname); + /* FIXME: this check will fail if we have more than one level of directories, + * we shoud check for every level 1, 1/2, 1/2/3, 1/2/3/4 .... + * ---simo + */ + if (checkparam(recbin->exclude_dir, path_name)) { + DEBUG(3, ("recycle.bin: directory %s is excluded \n", path_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; } - len = strlen(bin); - if ( ext != NULL) - len = len - strlen(ext); + temp_name = (char *)malloc(PATH_MAX); + ALLOC_CHECK(temp_name, done); + safe_strcpy(temp_name, recbin->repository, PATH_MAX); - addlen = sizeof(pstring)-len-1; - while(recycle_file_exist(conn,bin)) { - slprintf(bin+len, addlen, " (Copy #%d)", i++); - pstrcat(bin, ext); + /* see if we need to recreate the original directory structure in the recycle bin */ + if (recbin->keep_directories == True) { + safe_strcat(temp_name, "/", PATH_MAX); + safe_strcat(temp_name, path_name, PATH_MAX); } - DEBUG(3, ("recycle bin: moving source=%s to dest=%s\n", fname, bin)); - default_vfs_ops.disk_free(conn,".",True,&bsize,&dfree,&dsize); - if((unsigned int)dfree > 0) { - int ret; - if(!recycle_directory_exist(conn,recycle_bin)) { - DEBUG(3, ("recycle bin: directory %s nonexistant, creating...\n", recycle_bin)); - if (default_vfs_ops.mkdir(conn,recycle_bin,dir_mask) == -1) { - DEBUG(0, ("recycle bin: unable to create directory %s. Error was %s\n", - recycle_bin, strerror(errno) )); - } + exist = recycle_directory_exist(conn, temp_name); + if (exist) { + DEBUG(10, ("recycle.bin: Directory already exists\n")); + } else { + DEBUG(10, ("recycle.bin: Creating directory %s\n", temp_name)); + if (recycle_create_dir(conn, temp_name) == False) { + DEBUG(3, ("Could not create directory, purging %s...\n", file_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; } - DEBUG(3, ("recycle bin: move %s -> %s\n", fname, bin)); + } - ret = default_vfs_ops.rename(conn, fname, bin); - if (ret == -1) { - DEBUG(1, ("recycle bin: move error %d (%s)\n", errno, strerror(errno) )); - DEBUG(0, ("recycle bin: move failed, purging...\n")); - return default_vfs_ops.unlink(conn,fname); + safe_strcat(temp_name, "/", PATH_MAX); + safe_strcat(temp_name, base, PATH_MAX); + DEBUG(10, ("recycle.bin: recycled file name%s\n", temp_name)); /* new filename with path */ + + /* check if we should delete file from recycle bin */ + if (recycle_file_exist(conn, temp_name)) { + if (recbin->versions == False || matchparam(recbin->noversions, base) == True) { + DEBUG(3, ("recycle.bin: Removing old file %s from recycle bin\n", temp_name)); + if (default_vfs_ops.unlink(conn, temp_name) != 0) { + DEBUG(1, ("recycle.bin: Error deleting old file: %s\n", strerror(errno))); + } } - return ret; - } else { - DEBUG(1, ("recycle bin: move failed, purging...\n")); - return default_vfs_ops.unlink(conn,fname); } + + /* rename file we move to recycle bin */ + i = 1; + final_name = (char *)malloc(PATH_MAX); + ALLOC_CHECK(final_name, done); + final_name = safe_strcpy(final_name, temp_name, PATH_MAX); + while (recycle_file_exist(conn, final_name)) { + snprintf(final_name, PATH_MAX, "Copy #%d of ", i++); + safe_strcat(final_name, temp_name, PATH_MAX); + } + + DEBUG(10, ("recycle.bin: Moving %s to %s\n", file_name, final_name)); + rc = default_vfs_ops.rename(conn, file_name, final_name); + if (rc != 0) { + DEBUG(3, ("recycle.bin: Move error %d (%s), purging file %s (%s)\n", errno, strerror(errno), file_name, final_name)); + rc = default_vfs_ops.unlink(conn, file_name); + goto done; + } + + /* touch access date of moved file */ + if (recbin->touch == True ) + recycle_touch(conn, final_name); + +done: + SAFE_FREE(file_name); + SAFE_FREE(path_name); + SAFE_FREE(temp_name); + SAFE_FREE(final_name); + return rc; } -- cgit From ec4f2af04a09a50e87a95c0ad494a581b0364f03 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sat, 7 Sep 2002 04:08:03 +0000 Subject: configure.in: reflect the new example/VFS/ directory organization lib/substitue.c: added helper functions needed by recycle bin (This used to be commit 29b4b9a2b5a0347d227b1a30e3f34bf40afa6de4) --- source3/configure.in | 2 +- source3/lib/substitute.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/source3/configure.in b/source3/configure.in index 32c2fe114b..b1f1c8aec7 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2828,7 +2828,7 @@ AC_SUBST(builddir) # I added make files that are outside /source directory. # I know this is not a good solution, will work out a better # solution soon. --simo -AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) +AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) ################################################# # Print very concise instructions on building/use diff --git a/source3/lib/substitute.c b/source3/lib/substitute.c index 026df0f67f..767ca0c071 100644 --- a/source3/lib/substitute.c +++ b/source3/lib/substitute.c @@ -675,6 +675,19 @@ void standard_sub_conn(connection_struct *conn, char *str, size_t len) conn->gid, current_user_info.smb_name, str, len); } +char *talloc_sub_conn(TALLOC_CTX *mem_ctx, connection_struct *conn, char *str) +{ + return talloc_sub_advanced(mem_ctx, SNUM(conn), conn->user, + conn->connectpath, conn->gid, + current_user_info.smb_name, str); +} + +char *alloc_sub_conn(connection_struct *conn, char *str) +{ + return alloc_sub_advanced(SNUM(conn), conn->user, conn->connectpath, + conn->gid, current_user_info.smb_name, str); +} + /**************************************************************************** Like standard_sub but by snum. ****************************************************************************/ -- cgit From 885f4f9379b48e74de132d6e6c24f11e8b06ce26 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 7 Sep 2002 05:41:23 +0000 Subject: Winbind client-side cleanups. The global winbind file descriptor can cause havoc in some situations - particulary when it becomes 0, 1 or 2. This patch (based on some very nice work by Hannes Schmidt ) starts to recitfy the problem by ensuring that the close-on-exec flag is set, and that we move above 3 in the file descriptor table. I've also decided that the PAM module can close it's pipe handle on every request - this isn't performance-critical code. The next step is to do the same for nss_winbind. (But things like getent() might get in our way there). This also cleans up some function prototypes, puts them in just one place. Andrew Bartlett (This used to be commit 442eb39657b98f67cd229ed3110b63aae8bf4e3c) --- source3/include/includes.h | 2 + source3/include/smb.h | 2 - source3/nsswitch/pam_winbind.c | 21 +++++----- source3/nsswitch/pam_winbind.h | 3 +- source3/nsswitch/wb_common.c | 73 +++++++++++++++++++++++++++++++++-- source3/nsswitch/wbinfo.c | 12 ++---- source3/nsswitch/winbind_nss.c | 14 +------ source3/nsswitch/winbind_nss_config.h | 8 ++++ 8 files changed, 96 insertions(+), 39 deletions(-) diff --git a/source3/include/includes.h b/source3/include/includes.h index dacac356e3..eaa0d25239 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -762,6 +762,8 @@ extern int errno; #include "mangle.h" +#include "nsswitch/winbind_client.h" + /* * Type for wide character dirent structure. * Only d_name is defined by POSIX. diff --git a/source3/include/smb.h b/source3/include/smb.h index 2ee2f0cb72..a1b3faa343 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -1623,8 +1623,6 @@ struct unix_error_map { #define SAFE_NETBIOS_CHARS ". -_" -#include "nsswitch/winbindd_nss.h" - /* generic iconv conversion structure */ typedef struct { size_t (*direct)(void *cd, char **inbuf, size_t *inbytesleft, diff --git a/source3/nsswitch/pam_winbind.c b/source3/nsswitch/pam_winbind.c index 29ceca4e79..f95caefb4c 100644 --- a/source3/nsswitch/pam_winbind.c +++ b/source3/nsswitch/pam_winbind.c @@ -11,11 +11,6 @@ #include "pam_winbind.h" -/* prototypes from common.c */ -void init_request(struct winbindd_request *req,int rq_type); -int write_sock(void *buffer, int count); -int read_reply(struct winbindd_response *response); - /* data tokens */ #define MAX_PASSWD_TRIES 3 @@ -99,24 +94,30 @@ static int _make_remark(pam_handle_t * pamh, int type, const char *text) return retval; } -static int winbind_request(enum winbindd_cmd req_type, - struct winbindd_request *request, - struct winbindd_response *response) +static int pam_winbind_request(enum winbindd_cmd req_type, + struct winbindd_request *request, + struct winbindd_response *response) { + /* Fill in request and send down pipe */ init_request(request, req_type); if (write_sock(request, sizeof(*request)) == -1) { _pam_log(LOG_ERR, "write to socket failed!"); + close_sock(); return PAM_SERVICE_ERR; } /* Wait for reply */ if (read_reply(response) == -1) { _pam_log(LOG_ERR, "read from socket failed!"); + close_sock(); return PAM_SERVICE_ERR; } + /* We are done with the socket - close it and avoid mischeif */ + close_sock(); + /* Copy reply data from socket */ if (response->result != WINBINDD_OK) { if (response->data.auth.pam_error != PAM_SUCCESS) { @@ -148,7 +149,7 @@ static int winbind_auth_request(const char *user, const char *pass, int ctrl) strncpy(request.data.auth.pass, pass, sizeof(request.data.auth.pass)-1); - retval = winbind_request(WINBINDD_PAM_AUTH, &request, &response); + retval = pam_winbind_request(WINBINDD_PAM_AUTH, &request, &response); switch (retval) { case PAM_AUTH_ERR: @@ -217,7 +218,7 @@ static int winbind_chauthtok_request(const char *user, const char *oldpass, request.data.chauthtok.newpass[0] = '\0'; } - return winbind_request(WINBINDD_PAM_CHAUTHTOK, &request, &response); + return pam_winbind_request(WINBINDD_PAM_CHAUTHTOK, &request, &response); } /* diff --git a/source3/nsswitch/pam_winbind.h b/source3/nsswitch/pam_winbind.h index 9897249e16..fae635d806 100644 --- a/source3/nsswitch/pam_winbind.h +++ b/source3/nsswitch/pam_winbind.h @@ -90,5 +90,4 @@ do { \ #define on(x, y) (x & y) #define off(x, y) (!(x & y)) -#include "winbind_nss_config.h" -#include "winbindd_nss.h" +#include "winbind_client.h" diff --git a/source3/nsswitch/wb_common.c b/source3/nsswitch/wb_common.c index 9bc9faafb5..0d1be4d5d1 100644 --- a/source3/nsswitch/wb_common.c +++ b/source3/nsswitch/wb_common.c @@ -5,6 +5,8 @@ Copyright (C) Tim Potter 2000 Copyright (C) Andrew Tridgell 2000 + Copyright (C) Andrew Bartlett 2002 + This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -75,7 +77,7 @@ void init_response(struct winbindd_response *response) /* Close established socket */ -static void close_sock(void) +void close_sock(void) { if (winbindd_fd != -1) { close(winbindd_fd); @@ -83,6 +85,64 @@ static void close_sock(void) } } +/* Make sure socket handle isn't stdin, stdout or stderr */ +#define RECURSION_LIMIT 3 + +static int make_nonstd_fd_internals(int fd, int limit /* Recursion limiter */) +{ + int new_fd; + if (fd >= 0 && fd <= 2) { +#ifdef F_DUPFD + if ((new_fd = fcntl(fd, F_DUPFD, 3)) == -1) { + return -1; + } + /* Parinoia */ + if (new_fd < 3) { + return -1; + } + close(fd); + return new_fd; +#else + if (limit <= 0) + return -1; + + new_fd = dup(fd); + if (new_fd == -1) + return -1; + + /* use the program stack to hold our list of FDs to close */ + new_fd = make_nonstd_fd_internals(new_fd, limit - 1); + close(fd); + return new_fd; +#endif + } + return fd; +} + +static int make_safe_fd(int fd) +{ + int result, flags; + int new_fd = make_nonstd_fd_internals(fd, RECURSION_LIMIT); + if (new_fd == -1) { + close(fd); + return -1; + } + /* Socket should be closed on exec() */ + +#ifdef FD_CLOEXEC + result = flags = fcntl(new_fd, F_GETFD, 0); + if (flags >= 0) { + flags |= FD_CLOEXEC; + result = fcntl( new_fd, F_SETFD, flags ); + } + if (result < 0) { + close(new_fd); + return -1; + } +#endif + return new_fd; +} + /* Connect to winbindd socket */ int winbind_open_pipe_sock(void) @@ -91,6 +151,7 @@ int winbind_open_pipe_sock(void) static pid_t our_pid; struct stat st; pstring path; + int fd; if (our_pid != getpid()) { close_sock(); @@ -144,9 +205,13 @@ int winbind_open_pipe_sock(void) /* Connect to socket */ - if ((winbindd_fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { return -1; } + + if ((winbindd_fd = make_safe_fd( fd)) == -1) { + return winbindd_fd; + } if (connect(winbindd_fd, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) == -1) { @@ -366,8 +431,8 @@ NSS_STATUS winbindd_get_response(struct winbindd_response *response) /* Handle simple types of requests */ NSS_STATUS winbindd_request(int req_type, - struct winbindd_request *request, - struct winbindd_response *response) + struct winbindd_request *request, + struct winbindd_response *response) { NSS_STATUS status; diff --git a/source3/nsswitch/wbinfo.c b/source3/nsswitch/wbinfo.c index d7d70b9e52..a0fdd033d7 100644 --- a/source3/nsswitch/wbinfo.c +++ b/source3/nsswitch/wbinfo.c @@ -28,11 +28,7 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_WINBIND -/* Prototypes from common.h */ - -NSS_STATUS winbindd_request(int req_type, - struct winbindd_request *request, - struct winbindd_response *response); +extern int winbindd_fd; static char winbind_separator(void) { @@ -608,13 +604,13 @@ static BOOL wbinfo_set_auth_user(char *username) static BOOL wbinfo_ping(void) { NSS_STATUS result; - + result = winbindd_request(WINBINDD_PING, NULL, NULL); /* Display response */ - d_printf("'ping' to winbindd %s\n", - (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed"); + d_printf("'ping' to winbindd %s on fd %d\n", + (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed", winbindd_fd); return result == NSS_STATUS_SUCCESS; } diff --git a/source3/nsswitch/winbind_nss.c b/source3/nsswitch/winbind_nss.c index 594b5fbadb..0b4c0ce1d0 100644 --- a/source3/nsswitch/winbind_nss.c +++ b/source3/nsswitch/winbind_nss.c @@ -21,8 +21,7 @@ Boston, MA 02111-1307, USA. */ -#include "winbind_nss_config.h" -#include "winbindd_nss.h" +#include "winbind_client.h" #ifdef HAVE_NS_API_H #undef VOLATILE @@ -37,17 +36,6 @@ extern int winbindd_fd; -void init_request(struct winbindd_request *req,int rq_type); -NSS_STATUS winbindd_send_request(int req_type, - struct winbindd_request *request); -NSS_STATUS winbindd_get_response(struct winbindd_response *response); -NSS_STATUS winbindd_request(int req_type, - struct winbindd_request *request, - struct winbindd_response *response); -int winbind_open_pipe_sock(void); -int write_sock(void *buffer, int count); -int read_reply(struct winbindd_response *response); -void free_response(struct winbindd_response *response); #ifdef HAVE_NS_API_H /* IRIX version */ diff --git a/source3/nsswitch/winbind_nss_config.h b/source3/nsswitch/winbind_nss_config.h index 00cd5c12e4..d9a9b8aaae 100644 --- a/source3/nsswitch/winbind_nss_config.h +++ b/source3/nsswitch/winbind_nss_config.h @@ -62,6 +62,14 @@ #include #endif +#ifdef HAVE_FCNTL_H +#include +#else +#ifdef HAVE_SYS_FCNTL_H +#include +#endif +#endif + #include #include #include -- cgit From 9378cbb019f9b28cf94d877faa0430ee989f8798 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 7 Sep 2002 06:04:28 +0000 Subject: Don't leak file desciptors in this (impossible?) error case. (This used to be commit b440418f13b840860be42690bf475c1ee3cb3647) --- source3/nsswitch/wb_common.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source3/nsswitch/wb_common.c b/source3/nsswitch/wb_common.c index 0d1be4d5d1..88bda4eabe 100644 --- a/source3/nsswitch/wb_common.c +++ b/source3/nsswitch/wb_common.c @@ -98,6 +98,7 @@ static int make_nonstd_fd_internals(int fd, int limit /* Recursion limiter */) } /* Parinoia */ if (new_fd < 3) { + close(new_fd); return -1; } close(fd); -- cgit From 8352336ad03b543522aa10340c18c74a58cdf874 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 7 Sep 2002 09:25:36 +0000 Subject: This is the 'main' inclue for for winbind clients - all clients should include only this file, and not any others. It includes the function prototypes. (Forgot to commit with earlier patch) Andrew Bartlett (This used to be commit 3ec3861445e7da1347c3b5ba180b33441f59640c) --- source3/nsswitch/winbind_client.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 source3/nsswitch/winbind_client.h diff --git a/source3/nsswitch/winbind_client.h b/source3/nsswitch/winbind_client.h new file mode 100644 index 0000000000..4de2d57cc7 --- /dev/null +++ b/source3/nsswitch/winbind_client.h @@ -0,0 +1,16 @@ +#include "winbind_nss_config.h" +#include "winbindd_nss.h" + +void init_request(struct winbindd_request *req,int rq_type); +NSS_STATUS winbindd_send_request(int req_type, + struct winbindd_request *request); +NSS_STATUS winbindd_get_response(struct winbindd_response *response); +NSS_STATUS winbindd_request(int req_type, + struct winbindd_request *request, + struct winbindd_response *response); +int winbind_open_pipe_sock(void); +int write_sock(void *buffer, int count); +int read_reply(struct winbindd_response *response); +void close_sock(void); +void free_response(struct winbindd_response *response); + -- cgit From 2968f8a6be77db036bad42e1a8489ca7e8dfd9bc Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sat, 7 Sep 2002 17:08:59 +0000 Subject: merge of printer change notify fix from APP_HEAD (This used to be commit 6a53a9cb7c56927423dea125c65d66605fae566f) --- source3/rpc_server/srv_spoolss_nt.c | 48 ++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 3a2bde2d05..795a420a23 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -170,6 +170,41 @@ static void free_spool_notify_option(SPOOL_NOTIFY_OPTION **pp) SAFE_FREE(*pp); } +/**************************************************************************** + wrapper function to maintain a reference count to the number of + open change notification handles we have +****************************************************************************/ + +static BOOL spooler_message_flags( BOOL doreg ) +{ + static uint32 ref_count = 0; + BOOL result = True; + + /* + * check for boundary counditions .... + * if ref_count == 0 and we want to register OR + * if ref_count == 1 and we want to deregister, THEN + * OK. + */ + + if ( ((ref_count == 0) && doreg) || ((ref_count == 1) && !doreg) ) + result = register_message_flags( doreg, FLAG_MSG_PRINTING ); + + /* increment/decrement reference count */ + + if ( doreg ) + ref_count++; + else { + /* minimum is always 0 */ + if ( ref_count ) + ref_count--; + } + + DEBUG(10,("spooler_message_flags: ref_count == %d\n", ref_count)); + + return result; +} + /*************************************************************************** Disconnect from the client ****************************************************************************/ @@ -198,6 +233,11 @@ static void srv_spoolss_replycloseprinter(POLICY_HND *handle) message_deregister(MSG_PRINTER_NOTIFY2); } + /* Tell the connections db we're not interested in printer notify messages. */ + /* reference count is handled by spooler_message_flags() */ + + spooler_message_flags( False ); + smb_connections--; } @@ -220,9 +260,6 @@ static void free_printer_entry(void *ptr) Printer->notify.option=NULL; Printer->notify.client_connected=False; - /* Tell the connections db we're not interested in printer notify messages. */ - register_message_flags(False, FLAG_MSG_PRINTING); - /* Remove from the internal list. */ DLIST_REMOVE(printers_list, Printer); @@ -2242,8 +2279,6 @@ WERROR _spoolss_rffpcnex(pipes_struct *p, SPOOL_Q_RFFPCNEX *q_u, SPOOL_R_RFFPCNE &Printer->notify.client_hnd)) return WERR_SERVER_UNAVAILABLE; - /* Tell the connections db we're interested in printer notify messages. */ - register_message_flags(True, FLAG_MSG_PRINTING); Printer->notify.client_connected=True; return WERR_OK; @@ -5599,9 +5634,6 @@ WERROR _spoolss_fcpn(pipes_struct *p, SPOOL_Q_FCPN *q_u, SPOOL_R_FCPN *r_u) free_spool_notify_option(&Printer->notify.option); Printer->notify.client_connected=False; - /* Tell the connections db we're not interested in printer notify messages. */ - register_message_flags(False, FLAG_MSG_PRINTING); - return WERR_OK; } -- cgit From 397ef9004e1e37a4519926db20d64a769dbabc41 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 7 Sep 2002 19:06:37 +0000 Subject: "disable charset" -> "display charset". oops (This used to be commit 67543ea43d6c76f10f6757ae35a29044ce0020c5) --- docs/docbook/manpages/smb.conf.5.sgml | 2 +- docs/htmldocs/smb.conf.5.html | 3699 +++++++++++++++++++++++---------- docs/manpages/smb.conf.5 | 224 +- 3 files changed, 2684 insertions(+), 1241 deletions(-) diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml index da6e996f17..89ffa0934a 100644 --- a/docs/docbook/manpages/smb.conf.5.sgml +++ b/docs/docbook/manpages/smb.conf.5.sgml @@ -628,7 +628,7 @@ dfree command disable netbios disable spoolss - disable charset + display charset dns proxy domain admin group domain guest group diff --git a/docs/htmldocs/smb.conf.5.html b/docs/htmldocs/smb.conf.5.html index 6f0e88c4d3..5d1cc21da7 100644 --- a/docs/htmldocs/smb.conf.5.html +++ b/docs/htmldocs/smb.conf.5.html @@ -1,10 +1,12 @@ + smb.conf
smb.conf

smb.conf

If you decide to use a path =If you decide to use a path = line in your [homes] section then you may find it useful to use the %S macro. For example :

		
 		

An important point is that if guest access is specified in the [homes] section, all home directories will be - visible to all clients without a passwordwithout a password. In the very unlikely event that this is actually desirable, it - would be wise to also specify read only - access.

Note that the browseableNote that the browseable flag for auto home directories will be inherited from the global browseable flag, not the [homes] browseable flag. This is useful as - it means setting browseable = nobrowseable = no in the [homes] section will hide the [homes] share but make any auto home directories visible.

All aliases given for a printer in the printcap file are legitimate printer names as far as the server is concerned. If your printing subsystem doesn't work like that, you will have to set up a pseudo-printcap. This is a file consisting of one or more lines like this:

		
 		

Each alias should be an acceptable printer name for your printing subsystem. In the [global] section, specify @@ -470,24 +461,44 @@ NAME="AEN102" >parameters define the specific attributes of sections.

Some parameters are specific to the [global] section - (e.g., securitysecurity). Some parameters are usable - in all sections (e.g., create modecreate mode). All others are permissible only in normal sections. For the purposes of the following descriptions the [homes] and [printers] - sections will be considered normal. The letter GG in parentheses indicates that a parameter is specific to the - [global] section. The letter SS indicates that a parameter can be specified in a service specific - section. Note that all SS parameters can also be specified in the [global] section - in which case they will define the default behavior for all services.

Note that this paramater is not available when Samba listens +>Note that this parameter is not available when Samba listens on port 445, as clients no longer send this information

the name of your NIS home directory server. This is obtained from your NIS auto.map entry. If you have - not compiled Samba with the --with-automount--with-automount option then this value will be the same as %L.

controls if names that have characters that aren't of the "default" case are mangled. For example, if this is yes then a name like "Mail" would be mangled. - Default nono.

controls whether filenames are case sensitive. If they aren't then Samba must do a filename search and match on passed - names. Default nono.

controls what the default case is for new - filenames. Default lowerlower.

controls if new files are created with the case that the client passes, or if they are forced to be the - "default" case. Default yesyes.

yesyes.

  • add group script

  • add printer commandaddprinter command

  • add user to group script

  • delete group script

  • ads server

  • delete printer commanddeleteprinter command

  • delete user from group script

  • disable netbios

  • display charset

  • dos charset

  • hide unwriteable files

  • hostname lookups

  • name cache timeout

  • ntlm auth

  • paranoid server security

  • realm

  • smb ports

  • unicode

  • unix charset

  • wtmp directory

  • wins partners

  • COMPLETE LIST OF SERVICE PARAMETERS

  • block size

  • mangling method

  • vfs path

  • EXPLANATION OF EACH PARAMETER

    abort shutdown script (G)
  • This parameter only exists in the HEAD cvs branchThis parameter only exists in the HEAD cvs branch This a full path name to a script called by that should stop a shutdown procedure issued by the

    This command will be run as user.

    Default: NoneDefault: None.

    Example: add printer command (G)addprinter command (G)

    With the introduction of MS-RPC based printing @@ -4440,7 +4747,7 @@ CLASS="COMMAND" >The add printer commandaddprinter command is automatically invoked with the following parameter (in @@ -4514,7 +4821,7 @@ CLASS="PARAMETER" >Once the add printer commandaddprinter command has been executed, will return an ACCESS_DENIED error to the client.

    See also delete printer command deleteprinter command, ,

    Default: noneDefault: none

    Example:

    This parameter is only used for add file shares. To add printer shares, see the add printer +>addprinter command

    See also , .

    Default: noneDefault: none

    Example:

    Default: add machine script = <empty string> +>add machine script = <empty string>

    ads server (G)

    If this option is specified, samba does + not try to figure out what ads server to use itself, but + uses the specified ads server. Either one DNS name or IP + address can be used.

    Default: ads server =

    Example: ads server = 192.168.1.2

    add user script (G)

    This is the full pathname to a script that will - be run AS ROOTAS ROOT by smbd to create the required UNIX users - ON DEMANDON DEMAND when a user accesses the Samba server.

    In order to use this option, smbd - must NOTNOT be set to smbd will - call the specified script AS ROOTAS ROOT, expanding any

    See also , ,

    Default: add user script = <empty string> +>add user script = <empty string>

    This is the full pathname to a script that will - be run AS ROOTAS ROOT by smbd(8) when a new group is requested. It will expand any smbd(8) when a new group is requested. It will expand any %g to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. -

    Default: no admin usersDefault: no admin users

    Example: admin users = jason

    add user to group script (G)

    Full path to the script that will be called when + a user is added to a group using the Windows NT domain administration + tools. It will be run by smbd(8) + AS ROOT. Any %g will be + replaced with the group name and any %u will + be replaced with the user name. +

    Default: add user to group script =

    Example: admin users = jasonadd user to group script = /usr/sbin/adduser %u %g

    Synonym for

    This option only takes effect when the

    This is a synonym for the smbd will use when authenticating a user. This option defaults to sensible values based on

    Default: auth methods = <empty string>auth methods = <empty string>

    Example: available = no, then ALL, then ALL attempts to connect to the service will fail. Such failures are logged.

    nmbd to bind to ports 137 and 138 on the interfaces listed in the interfaces parameter. smbd(8) to bind only to the interface list given in the interfaces parameter. This restricts the networks that bind interfaces only is set then - unless the network address 127.0.0.1127.0.0.1 is added to the smbpasswd - by default connects to the localhost - 127.0.0.1localhost - 127.0.0.1 address as an SMB client to issue the password change request. If bind interfaces only is set then unless the - network address 127.0.0.1127.0.0.1 is added to the nmbd at the address - 127.0.0.1127.0.0.1 to determine if they are running. - Not adding 127.0.0.1127.0.0.1 will cause smbd
    block size (S)

    This parameter controls the behavior of + smbd(8) when reporting disk free + sizes. By default, this reports a disk block size of 1024 bytes. +

    Changing this parameter may have some effect on the + efficiency of client writes, this is not yet confirmed. This + parameter was added to allow advanced administrators to change + it (usually to a higher value) and test the effect it has on + client write performance without re-compiling the code. As this + is an experimental option it may be removed in a future release. +

    Changing this option does not change the disk free reporting + size, just the block size unit reported to the client.

    Default: block size = 1024

    Example: block size = 65536

    browsable (S)

    See the

    See the discussion in the section NAME MANGLING.

    Synonym for case sensitive.

    See also , .

    Default: noneDefault: none

    Example:

    If you want to set the string that is displayed next to the machine name then see the parameter.

    Default: No comment stringDefault: No comment string

    Example:

    Default: no valueDefault: no value

    Example:

    A synonym for this parameter is notnot set here will be removed from the modes set on a file when it is created.

    Following this Samba will bit-wise 'OR' the UNIX mode created from this parameter with the value of the

    This parameter does not affect directory modes. See the parameter for details.

    See also the parameter for forcing particular mode bits to be set on created files. See also the parameter for masking mode bits on created directories. See also the Note that this parameter does not apply to permissions set by Windows NT/2000 ACL editors. If the administrator wishes to enforce a mask on access control lists also, they need to set the

    This is a synonym for csc policy (S)

    This stands for This stands for client-side caching - policy, and specifies how clients capable of offline caching will cache the files in the share. The valid values are: manual, documents, programs, disable.

    Note that the parameter

    Note that the parameter

    Samba 2.2 debug log messages are timestamped by default. If you are running at a high

    Note that the parameter

    Synonym for

    A synonym for

    See the section on NAME MANGLING. Also note the

    This parameter is only applicable to printable services. When smbd is serving Printer Drivers to Windows NT/2k/XP clients, each printer on the Samba @@ -6185,8 +6672,12 @@ NAME="DEFAULTSERVICE" >

    This parameter specifies the name of a service which will be connected to if the service actually requested cannot - be found. Note that the square brackets are NOTNOT given in the parameter value (see example below).

    Typically the default service would be a ,

    Example:

    [global]
    @@ -6242,16 +6727,39 @@ CLASS="PROGRAMLISTING"
     [pub]
     	path = /%S
     		

    delete group script (G)

    This is the full pathname to a script that will + be run AS ROOT by smbd(8) when a group is requested to be deleted. It will expand any %g to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. +

    delete printer command (G)
    deleteprinter command (G)

    With the introduction of MS-RPC based printer @@ -6276,7 +6784,7 @@ CLASS="FILENAME" >The delete printer commanddeleteprinter command is automatically called with only one parameter: Once the delete printer commanddeleteprinter command has been executed, will return an ACCESS_DENIED error to the client.

    See also add printer command addprinter command, ,

    Default: noneDefault: none

    Example:

    This parameter is only used to remove file shares. To delete printer shares, see the delete printer +>deleteprinter command

    See also , .

    Default: noneDefault: none

    Example:

    Default: delete user script = <empty string> +>delete user script = <empty string>

    delete user from group script (G)

    Full path to the script that will be called when + a user is removed from a group using the Windows NT domain administration + tools. It will be run by smbd(8) + AS ROOT. Any %g will be + replaced with the group name and any %u will + be replaced with the user name. +

    Default: delete user from group script =

    Example: delete user from group script = /usr/sbin/deluser %u %g

    delete veto files (S)
    This option is used when Samba is attempting to delete a directory that contains one or more vetoed directories (see the

    See also the

    Synonym for

    Note: Your script should NOTNote: Your script should NOT be setuid or setgid and should be owned by (and writeable only by) root!

    Default: Default: By default internal routines for determining the disk capacity and remaining space will be used. -

    Example:

    Where the script dfree (which must be made executable) could be:

     
     		#!/bin/sh
     		df $1 | tail -1 | awk '{print $2" "$4}'
     		

    or perhaps (on Sys V based systems):

     
     		#!/bin/sh
     		/usr/bin/df -k $1 | tail -1 | awk '{print $3" "$5}'
     		

    Note that you may have to replace the command names @@ -6701,7 +7252,7 @@ NAME="DIRECTORY" >

    Synonym for notnot set here will be removed from the modes set on a directory when it is created.

    Following this Samba will bit-wise 'OR' the UNIX mode created from this parameter with the value of the Note that this parameter does not apply to permissions set by Windows NT/2000 ACL editors. If the administrator wishes to enforce a mask on access control lists also, they need to set the .

    See the

    See also the parameter for masking mode bits on created files, and the parameter.

    Also refer to the

    Synonym for

    NoteNote that users who can access the Samba server through other means can easily bypass this restriction, so it is primarily useful for standalone "appliance" systems. @@ -6865,7 +7424,7 @@ CLASS="CONSTANT" >.

    See also the , ,

    disable netbios (G)

    Enabling this parameter will disable netbios support + in Samba. Netbios is the only available form of browsing in + all windows versions except for 2000 and XP.

    Note that clients that only support netbios won't be able to + see your samba server when netbios support is disabled. +

    Default: disable netbios = no

    Example: disable netbios = yes

    disable spoolss (G)

    Enabling this parameter will disables Samba's support +>Enabling this parameter will disable Samba's support for the SPOOLSS set of MS-RPC's and will yield identical behavior as Samba 2.0.x. Windows NT/2000 clients will downgrade to using Lanman style printing commands. Windows 9x/ME will be uneffected by @@ -6918,13 +7502,17 @@ NAME="DISABLESPOOLSS" Wizard or by using the NT printer properties dialog window. It will also disable the capability of Windows NT/2000 clients to download print drivers from the Samba host upon demand. - Be very careful about enabling this parameter.Be very careful about enabling this parameter.

    See also use client driver

    display charset (G)

    Specifies the charset that samba will use + to print messages to stdout and stderr and SWAT will use. + Should generally be the same as the unix charset. +

    Default: display charset = ASCII

    Example: display charset = UTF8

    dns proxy (G)

    See also the parameter

    See also ,

    Default: no domain administratorsDefault: no domain administrators

    Example:

    See also ,

    Default: no domain guestsDefault: no domain guests

    Example: true, the Samba server will serve Windows 95/98 Domain logons for the to claim a special domain specific NetBIOS name that identifies it as a domain master browser for its given

    If domain logons = yes. Experimentation is the best policy :-)

    Default: Default: none (i.e., all directories are OK - to descend)

    Example:

    dos charset (G)

    DOS SMB clients assume the server has + the same charset as they do. This option specifies which + charset Samba should talk to DOS clients. +

    The default depends on which charsets you have instaled. + Samba tries to use charset 850 but falls back to ASCII in + case it is not available. Run testparm(1) + to check the default on your system. +

    dos filemode (S)
    program for information on how to set up and maintain this file), or set the security = [server|domain|ads] parameter which causes

    Default: no enumports commandDefault: no enumports command

    Example:

    This is a synonym for

    It is generally much better to use the real

    This parameter specifies a set of UNIX mode bit - permissions that will alwaysalways be set on a file created by Samba. This is done by bitwise 'OR'ing these bits onto the mode bits of a file that is being created or having its @@ -7653,7 +8308,7 @@ CLASS="PARAMETER" parameter is applied.

    See also the parameter for details on masking mode bits on files.

    See also the

    This parameter specifies a set of UNIX mode bit - permissions that will alwaysalways be set on a directory created by Samba. This is done by bitwise 'OR'ing these bits onto the mode bits of a directory that is being created. The default for this @@ -7712,7 +8371,7 @@ CLASS="PARAMETER" applied.

    See also the parameter

    See also the force directory - security mode (S)force directory security mode (S)

    This parameter controls what UNIX permission bits @@ -7768,8 +8426,12 @@ NAME="FORCEDIRECTORYSECURITYMODE" allows a user to modify all the user/group/world permissions on a directory without restrictions.

    NoteNote that users who can access the Samba server through other means can easily bypass this restriction, so it is primarily useful for standalone "appliance" systems. @@ -7777,7 +8439,7 @@ NAME="FORCEDIRECTORYSECURITYMODE" it set as 0000.

    See also the , ,

    If the .

    See also .

    Default: no forced groupDefault: no forced group

    Example:

    NoteNote that users who can access the Samba server through other means can easily bypass this restriction, so it is primarily useful for standalone "appliance" systems. @@ -7919,7 +8589,7 @@ NAME="FORCESECURITYMODE" this set to 0000.

    See also the , ,

    See also

    Default: no forced userDefault: no forced user

    Example:

    Synonym for

    This is a username which will be used for access to services which are specified as lp(1).

    Default: This paramater does not accept % marcos, becouse + many parts of the system require this value to be + constant for correct operation

    Default: specified at compile time, usually - "nobody"

    Example: for a service, then no password is required to connect to the service. Privileges will be those of the .

    See the section below on for a service, then only guest connections to the service are permitted. This parameter will have no effect if is not set for the service.

    See the section below on

    See also , and .

    Default: no file are hiddenDefault: no file are hidden

    Example: hide unreadable (S)hide unreadable (G)

    This parameter prevents clients from seeing the @@ -8331,13 +9017,30 @@ CLASS="COMMAND" >

    hide unwriteable files (G)

    This parameter prevents clients from seeing + the existance of files that cannot be written to. Defaults to off. + Note that unwriteable directories are shown as usual. +

    Default: hide unwriteable = no

    homedir map (G)

    If

    NOTE :NOTE :A working NIS client is required on the system for this option to work.

    See also ,

    Default: homedir map = <empty string>homedir map = <empty string>

    Example:

    See also the

    hostname lookups (G)

    Specifies whether samba should use (expensive) + hostname lookups or use the ip addresses instead. An example place + where hostname lookups are currently used is when checking + the hosts deny and hosts allow. +

    Default: hostname lookups = yes

    Example: hostname lookups = no

    hosts allow (S)

    Note that the localhost address 127.0.0.1 will always be allowed access unless specifically denied by a

    You can also specify hosts by network/netmask pairs and by netgroup names if your system supports netgroups. The - EXCEPTEXCEPT keyword can also be used to limit a wildcard list. The following examples may provide some help:

    for a way of testing your host access to see if it does what you expect.

    Default: Default: none (i.e., all hosts permitted access) -

    Example: hosts allow - - hosts listed here are NOTNOT permitted access to services unless the specific services have their own lists to override this one. Where the lists conflict, the list takes precedence.

    Default: Default: none (i.e., no hosts specifically excluded) -

    Example:

    This is not be confused with may be useful for NT clients which will not supply passwords to Samba.

    NOTE :NOTE : The use of option be only used if you really know what you are doing, or perhaps on a home network where you trust - your spouse and kids. And only if you reallyreally trust them :-).

    Default: no host equivalencesDefault: no host equivalences

    Example: .

    Default: no file includedDefault: no file included

    Example:

    The permissions on new files and directories are normally governed by , , and New files inherit their read/write bits from the parent directory. Their execute bits continue to be determined by , and as usual.

    Note that the setuid bit is neverNote that the setuid bit is never set via inheritance (the code explicitly prohibits this).

    See also , , and

    See also .

    Default: Default: all active interfaces except 127.0.0.1 - that are broadcast capable

    This is a list of users that should not be allowed - to login to this service. This is really a paranoidparanoid check to absolutely ensure an improper setting does not breach your security.

    +&group+&group means check the UNIX group database, followed by the NIS netgroup database, and @@ -8975,7 +9755,7 @@ CLASS="PARAMETER" This is useful in the [homes] section.

    See also .

    Default: no invalid usersDefault: no invalid users

    Example:

    Keepalives should, in general, not be needed if the socket being used has the SO_KEEPALIVE attribute set on it (see

    For UNIXes that support kernel based has oplocked. This allows complete data consistency between - SMB/CIFS, NFS and local file access (and is a veryvery cool feature :-).

    See also the and

    Default : noneDefault : none

    Default : ldap filter = (&(uid=%u)(objectclass=sambaAccount))ldap filter = (&(uid=%u)(objectclass=sambaAccount))

    This option is used to define whether or not Samba should use SSL when connecting to the ldap server - This is NOTNOT related to Samba's previous SSL support which was enabled by specifying the ldap suffix (G)

    Default : noneDefault : none

    It specifies where users are added to the tree.

    Default : noneDefault : none

    Default : noneDefault : none

    For more discussions on level2 oplocks see the CIFS spec.

    Currently, if yes). Note also, the

    See also the and .

    See also

    If Samba is set to produce Lanman announce broadcasts needed by OS/2 clients (see the

    See also A boolean variable that controls whether all printers in the printcap will be loaded for browsing by default. See the printers section for more details.

    true doesn't - mean that Samba will becomebecome the local master browser on a subnet, just that nmbd will participate will participate in elections for local master browser.

    Setting this value to nmbd - nevernever to become a local master browser.

    Default:

    Synonym for This option specifies the directory where lock files will be placed. The lock files are used to implement the The time in microseconds that smbd should pause before attempting to gain a failed lock. See , real locking will be performed by the server.

    This option mayThis option may be useful for read-only - filesystems which maymay not need locking (such as CDROM drives), although setting this parameter of

    This parameter specifies the local path to which the home directory will be connected (see

    Note that in prior versions of Samba, the Thereafter, the directories and any of the contents can, if required, be made read-only. It is not advisable that the NTuser.dat file be made read-only - rename it to NTuser.man to - achieve the desired effect (a MANMANdatory profile).

    The script must be a relative path to the [netlogon] service. If the [netlogon] service specifies a This option is only useful if Samba is set up as a logon server.

    Default: no logon script definedDefault: no logon script defined

    Example:

    See also the A value of 0 will disable caching completely.

    See also the

    See also the parameter.

    Default: Default: depends on the setting of printing

    Example: This command should be a program or script which takes a printer name and job number to resume the print job. See also the

    See also the

    See also the parameter.

    Default: Default: depends on the setting of printing

    Example 1:

    If a Samba server is a member of a Windows NT Domain (see the security = domain) parameter) then periodically a running , and the security = domain) parameter.

    This parameter specifies the name of a file which will contain output created by a magic script (see the

    Default: magic output = <magic script name>.out +>magic output = <magic script name>.out

    If the script generates output, output will be sent to the file specified by the Note that some shells are unable to interpret scripts containing CR/LF instead of CR as the end-of-line marker. Magic scripts must be executable - as isas is on the host, which for some hosts and some shells will require filtering at the DOS end.

    Magic scripts are EXPERIMENTALMagic scripts are EXPERIMENTAL and - should NOTNOT be relied upon.

    Default: None. Magic scripts disabled.Default: None. Magic scripts disabled.

    Example:

    See the section on NAME MANGLING

    off the ends of filenames on some CDROMs (only visible under some UNIXes). To do this use a map of (*;1 *;).

    Default: no mangled mapDefault: no mangled map

    Example:

    See the section on NAME MANGLING for details on how to control the mangling process.

    Note that the character to use may be specified using the

    mangling method (G)

    controls the algorithm used for the generating + the mangled names. Can take two different values, "hash" and + "hash2". "hash" is the default and is the algorithm that has been + used in Samba for many years. "hash2" is a newer and considered + a better algorithm (generates less collisions) in the names. + However, many Win32 applications store the mangled names and so + changing to the new algorithm must not be done + lightly as these applications may break unless reinstalled. + New installations of Samba may set the default to hash2.

    Default: mangling method = hash

    Example: mangling method = hash2

    mangled stack (G)

    This controls what character is used as - the magicmagic character in name mangling. The default is a '~' but this may interfere with some software. Use this option to set @@ -10842,7 +11737,7 @@ CLASS="PARAMETER" > parameter to be set such that owner execute bit is not masked out (i.e. it must include 100). See the parameter to be set such that the world execute bit is not masked out (i.e. it must include 001). See the parameter to be set such that the group execute bit is not masked out (i.e. it must include 010). See the parameter

    This parameter is only useful in security modes other than - Means user logins with an invalid password are treated as a guest login and mapped into the guest account. Note that this can cause problems as it means that any user incorrectly typing @@ -11003,8 +11898,12 @@ HREF="#GUESTACCOUNT" will not know the reason they cannot access files they think they should - there will have been no message given to them that they got their password wrong. Helpdesk services will - hatehate you if you set the modes other than share. This is because in these modes the name of the resource being - requested is notnot sent to the server until after the server has successfully authenticated the client so the server cannot make authentication decisions at the correct time (connection @@ -11066,7 +11969,7 @@ CLASS="PARAMETER" >

    Record lock files are used to implement this feature. The lock files will be stored in the directory specified by the will remote "Out of Space" to the client. See all LANMAN1: First modern: First modern version of the protocol. Long filename support.

    See also nmbd(8) when acting as a WINS server (

    See also the xedit, then - removes it afterwards. NOTE THAT IT IS VERY IMPORTANT - THAT THIS COMMAND RETURN IMMEDIATELY. That's why I have the '&' on the end. If it doesn't return immediately then your PCs may freeze when sending messages (they should recover @@ -11546,7 +12457,7 @@ CLASS="PARAMETER" >message command = /bin/mail -s 'message from %f on - %m' root < %s; rm %s

    If you don't have a message command then the message @@ -11562,8 +12473,12 @@ CLASS="COMMAND" >message command = rm %s

    Default: no message commandDefault: no message command

    Example:

    Synonym for

    See also , and

    See also the The value of the parameter (a string) is the lowest SMB protocol dialect than Samba will support. Please refer to the

    If you are viewing this parameter as a security measure, you should also refer to the nmbd(8) when acting as a WINS server (.

    See also

    name cache timeout (G)

    Specifies the number of seconds it takes before + entries in samba's hostname resolve cache time out. If + the timeout is set to 0. the caching is disabled. +

    Default: name cache timeout = 660

    Example: name cache timeout = 0

    name resolve order (G)
    wins : Query a name with the IP address listed in the bcast : Do a broadcast on each of the known local interfaces listed in the

    See also .

    Default: empty string (no additional names)Default: empty string (no additional names)

    Example:

    See also .

    Default: machine DNS nameDefault: machine DNS name

    Example:

    Default: non unix account range = <empty string> +>non unix account range = <empty string>

    list and is only really useful in shave level security.

    See also the

    A synonym for

    DO NOT CHANGE THIS PARAMETER UNLESS YOU HAVE READ - AND UNDERSTOOD THE SAMBA OPLOCK CODE.

    Default: oplock contention limit (S)

    This is a veryThis is a very advanced to behave in a similar way to Windows NT.

    DO NOT CHANGE THIS PARAMETER UNLESS YOU HAVE READ - AND UNDERSTOOD THE SAMBA OPLOCK CODE.

    Default:

    Oplocks may be selectively turned off on certain files with a share. See the parameter for details.

    See also the and

    ntlm auth (G)

    This parameter determines whether or not smbd will + attempt to authenticate users using the NTLM password hash. + If disabled, only the lanman password hashes will be used. +

    Please note that at least this option or lanman auth should be enabled in order to be able to log in. +

    Default : ntlm auth = yes

    os level (G)
    in the local broadcast area.

    Note :Note :By default, Samba will win a local master browsing election over all Microsoft operating systems except a Windows NT 4.0/2000 Domain Controller. This @@ -12459,8 +13447,8 @@ NAME="OS2DRIVERMAP" path to a file containing a mapping of Windows NT printer driver names to OS/2 printer driver names. The format is:

    <nt driver name> = <os2 driver - name>.<device name>

    <nt driver name> = <os2 driver + name>.<device name>

    For example, a valid entry using the HP LaserJet 5 printer driver would appear as

    Default: os2 driver map = <empty string> +>os2 driver map = <empty string>

    . It should be possible to enable this without changing your
    paranoid server security (G)

    Some version of NT 4.x allow non-guest + users with a bad passowrd. When this option is enabled, samba will not + use a broken NT 4.x server as password server, but instead complain + to the logs and exit. +

    Default: paranoid server security = yes

    passdb backend (G)

    This paramater is in two parts, the backend's name, and a 'location' +>This parameter is in two parts, the backend's name, and a 'location' string that has meaning only to that particular backed. These are separated by a : character.

    See also - The TDB based password storage backend. Takes a path to the TDB as an optional argument (defaults to passdb.tdb in the - The TDB based password storage backend, with non unix account support. Takes a path to the TDB as an optional argument (defaults to passdb.tdb in the directory.

    See also )

    See also

    nisplussam - The NIS+ based passdb backend. Takes name NIS domain as an optional argument. Only works with sun NIS+ servers.

  • plugin - Allows Samba to load an arbitary passdb backend from the .so specified as a compulsary argument. @@ -12745,8 +13758,12 @@ NAME="PASSWDCHAT" >passwd chat (G)

    This string controls the "chat"This string controls the "chat" conversation that takes places between smbd(8) uses to determine what to send to the

    Note that this parameter only is only used if the yes. This - sequence is then called AS ROOTAS ROOT when the SMB password in the smbpasswd file is being changed, without access to the old password cleartext. This means that root must be able to reset the user's password without knowing the text of the previous password. In the presence of NIS/YP, this means that the passwd program must be executed on the NIS master. @@ -12831,7 +13852,7 @@ CLASS="CONSTANT" if the expect string is a full stop then no string is expected.

    If the

    See also , , and

    This boolean specifies if the passwd chat script - parameter is run in debugdebug mode. In this mode the strings passed to and received from the passwd chat are printed in the smbd(8) log with a and should be turned off after this has been done. This option has no effect if the

    See also , ,

    Also note that many passwd programs insist in Also note that many passwd programs insist in reasonable - passwords, such as a minimum length, or the inclusion of mixed case chars and digits. This can pose a problem as some clients (such as Windows for Workgroups) uppercase the password before sending it.

    NoteNote that if the true then this program is called AS ROOT then this program is called AS ROOT before the SMB password in the unix password sync parameter - is set this parameter MUST USE ABSOLUTE PATHSMUST USE ABSOLUTE PATHS - for ALLALL programs called, and must be examined for security implications. Note that by default .

    See also

    The name of the password server is looked up using the parameter

    NOTE:NOTE: Using a password server means your UNIX box (running Samba) is only as secure as your - password server. DO NOT CHOOSE A PASSWORD SERVER THAT - YOU DON'T COMPLETELY TRUST.

    Never point a Samba server at itself for password @@ -13245,7 +14298,7 @@ CLASS="PARAMETER" Primary or Backup Domain controllers to authenticate against by doing a query for the name WORKGROUP<1C>WORKGROUP<1C> and then contacting each server returned in the list of IP addresses from the name resolution source.

    See also the

    Default: password server = <empty string>password server = <empty string>

    Note that this path will be based on if one was specified.

    Default: noneDefault: none

    Example:

    See also .

    Default: none (no command executed)Default: none (no command executed)

    Example: postexec = echo \"%u disconnected from %S - from %m (%I)\" >> /tmp/log

    Of course, this could get annoying after a while :-)

    See also and .

    Default: none (no command executed)Default: none (no command executed)

    Example: preexec = echo \"%u connected to %S from %m - (%I)\" >> /tmp/log

    This boolean option controls whether a non-zero return code from

    See also

    Synonym for

    Note that if you just want all printers in your printcap file loaded then the option is easier.

    Default: no preloaded servicesDefault: no preloaded services

    Example: This controls if new filenames are created with the case that the client passes, or if they are forced to be the

    See the section on NAME MANGLING for a fuller discussion.

    %z - the size of the spooled print job (in bytes)

    The print command MUSTThe print command MUST contain at least one occurrence of nobody account. If this happens then create an alternative guest account that can print and set the

    print command = echo Printing %s >> +>print command = echo Printing %s >> /tmp/print.log; lpr -P %p %s; rm %s

    You may have to vary this command considerably depending on how you normally print files on your system. The default for the parameter varies depending on the setting of the

    For printing = CUPS : If SAMBA is compiled against libcups, then printcap = cups uses the CUPS API to @@ -13893,7 +14966,7 @@ NAME="PRINTOK" >

    Synonym for Note that a printable service will ALWAYS allow writing to the service path (user privileges permitting) via the spooling of print data. The

    Synonym for /etc/printcap). See the discussion of the [printers] section above for reasons why you might want to do this.

    . This should be supplemented by an addtional setting printing = cups in the [global] section.

    A minimal printcap file would look something like this:

    		print1|My Printer 1
    @@ -14027,17 +15094,18 @@ CLASS="PROGRAMLISTING"
     		print4|My Printer 4
     		print5|My Printer 5
     		

    where the '|' separates aliases of a printer. The fact that the second alias has a space in it gives a hint to Samba that it's a comment.

    NOTENOTE: Under AIX the default printcap name is

    Default: printer admin = <empty string>printer admin = <empty string>

    printer driver (S)

    Note :Note :This is a deprecated parameter and will be removed in the next major release following version 2.2. Please see the instructions in @@ -14116,7 +15188,7 @@ TARGET="_top" sensitive) that describes the appropriate printer driver for your system. If you don't know the exact string to use then you should first try with no

    See also printer driver file (G)

    Note :Note :This is a deprecated parameter and will be removed in the next major release following version 2.2. Please see the instructions in @@ -14195,7 +15271,7 @@ CLASS="FILENAME" >.

    See also .

    Default: None (set in compile).Default: None (set in compile).

    Example: printer driver location (S)

    Note :Note :This is a deprecated parameter and will be removed in the next major release following version 2.2. Please see the instructions in @@ -14257,7 +15341,7 @@ CLASS="FILENAME" >.

    See also

    Default: Default: none (but may be lp - on many systems)

    Example:

    Synonym for This option can be set on a per printer basis

    See also the discussion in the [printers] section.

    Synonym for

    Synonym for

    Default: Default: depends on the setting of printing

    Example:

    Default: Default: depends on the setting of printing

    This is a list of users that are given read-only access to a service. If the connecting user is in this list then they will not be given write access, no matter what the option is set to. The list can include group names using the syntax described in the parameter.

    See also the parameter and the

    Default: read list = <empty string>read list = <empty string>

    Example:

    Note that this is an inverted synonym for

    In general this parameter should be viewed as a system tuning tool and left severely alone. See also

    realm (G)

    This option specifies the kerberos realm to use. The realm is + used as the ADS equivalent of the NT4domain. It + is usually set to the DNS name of the kerberos server. +

    Default: realm =

    Example: realm = mysambabox.mycompany.com

    remote announce (G)

    Default: remote announce = <empty string> +>remote announce = <empty string>

    Default: remote browse sync = <empty string> +>remote browse sync = <empty string>

    Synonym for

    Synonym for root directory - option, includingincluding some files needed for complete operation of the server. To maintain full operability of the server you will need to mirror some system files @@ -15027,7 +16152,7 @@ CLASS="PARAMETER" (such as CDROMs) after a connection is closed.

    See also

    Default: root postexec = <empty string> +>root postexec = <empty string>

    See also and

    Default: root preexec = <empty string> +>root preexec = <empty string>

    parameter except that the command is run as root.

    See also and security = user, see the It is possible to use smbd in a hybrid mode in a hybrid mode where it is offers both user and share level security under different SECURITY = SHARE -

    When clients connect to a share level security server they @@ -15252,8 +16385,12 @@ CLASS="COMMAND" >Note that smbd ALWAYS ALWAYS uses a valid UNIX user to act on behalf of the client, even in

  • If the parameter is set, then all the other stages are missed and only the

    Is a username is sent with the share connection request, then this username (after mapping - see

  • If the client did a previous If the client did a previous logon - request (the SessionSetup SMB call) then the username sent in this SMB will be added as a potential username.

  • Any users on the , then this guest user will be used, otherwise access is denied.

    Note that it can be veryNote that it can be very confusing in share-level security as to which UNIX username will eventually be used in granting access.

    See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION.

    SECURITY = USER -

    This is the default security setting in Samba 2.2. With user-level security a client must first "log-on" with a valid username and password (which can be mapped using the parameter). Encrypted passwords (see the parameter) can also be used in this security mode. Parameters such as and

    NoteNote that the name of the resource being - requested is notnot sent to the server until after the server has successfully authenticated the client. This is why guest shares don't work in user level security without allowing the server to automatically map unknown users into the . See the parameter for details on doing this.

    See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION.

    SECURITY = SERVER -

    In this mode Samba will try to validate the username/password @@ -15492,8 +16653,12 @@ CLASS="FILENAME" > for details on how to set this up.

    NoteNote that from the client's point of view

    NoteNote that the name of the resource being - requested is notnot sent to the server until after the server has successfully authenticated the client. This is why guest shares don't work in user level security without allowing the server to automatically map unknown users into the . See the parameter for details on doing this.

    See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION.

    See also the parameter and the SECURITY = DOMAIN -

    This mode will only work correctly if smbpasswd(8) has been used to add this machine into a Windows NT Domain. It expects the

    NoteNote that a valid UNIX user must still exist as well as the account on the Domain Controller to allow Samba to have a valid UNIX account to map file access to.

    NoteNote that from the client's point of view . It only affects how the server deals with the authentication, it does not in any way affect what the client sees.

    NoteNote that the name of the resource being - requested is notnot sent to the server until after the server has successfully authenticated the client. This is why guest shares don't work in user level security without allowing the server to automatically map unknown users into the . See the parameter for details on doing this.

    BUG:BUG: There is currently a bug in the implementation of

    See also the section NOTE ABOUT USERNAME/PASSWORD VALIDATION.

    See also the parameter and the

    NoteNote that users who can access the Samba server through other means can easily bypass this restriction, so it is primarily useful for standalone @@ -15717,7 +16918,7 @@ CLASS="CONSTANT" >.

    See also the , , This option gives full share compatibility and enabled by default.

    You should NEVERYou should NEVER turn this parameter off as many Windows applications will break if you do so.

    . This option can be use with preserve case = yes

    See the section on NAME MANGLING.

    parameter will always cause the OpenPrinterEx() on the server - to fail. Thus the APW icon will never be displayed. Note : Note :This does not prevent the same user from having administrative privilege on an individual printer.

    See also , , shutdown script (G)

    This parameter only exists in the HEAD cvs branchThis parameter only exists in the HEAD cvs branch This a full path name to a script called by %r will be substituted with the - switch -r-r. It means reboot after shutdown for NT.

    %f will be substituted with the - switch -f-f. It means force the shutdown even if applications do not respond for NT.

    Default: NoneDefault: None.

    Example:

    Shutdown script example: -
    		#!/bin/bash
     		
    @@ -16086,15 +17305,12 @@ CLASS="PROGRAMLISTING"
     
     		/sbin/shutdown $3 $4 +$time $1 &
     		
    Shutdown does not return so we need to launch it in background.

    See also

    smb ports (G)

    Specifies which ports the server should listen on + for SMB traffic. +

    Default: smb ports = 445 139

    socket address (G)
  • Those marked with a '*'Those marked with a '*' take an integer argument. The others can optionally take a 1 or 0 argument to enable or disable the option, by default they will be enabled if you @@ -16305,8 +17541,12 @@ CLASS="COMMAND" >SAMBA_NETBIOS_NAME = myhostname

    Default: No default valueDefault: No default value

    Examples:

    This variable controls controls whether samba will try to use Simple and Protected NEGOciation (as specified by rfc2478) with WindowsXP and Windows2000sp2 clients to agree upon an authentication mechanism. As of samba 3.0alpha it must be set to "no" for these clients to join a samba domain controller. It can be set to "yes" to allow samba to participate in an AD domain controlled by a Windows2000 domain controller.

    Default: use spnego = yesDefault: use spnego = yes

    See also the

    See also the

    Synonym for

    unicode (G)

    Specifies whether Samba should try + to use unicode on the wire by default. +

    Default: unicode = yes

    unix charset (G)

    Specifies the charset the unix machine + Samba runs on uses. Samba needs to know this in order to be able to + convert text to the charsets other SMB clients use. +

    Default: unix charset = ASCII

    unix extensions(G)
    passwd programparameter is called AS ROOTparameter is called AS ROOT - to allow the new UNIX password to be set without access to the old UNIX password (as the SMB password change code has no access to the old password cleartext, only the new).

    See also , .

    In order for this parameter to work correctly the If this parameter is enabled for a printer, then any attempt to open the printer with the PRINTER_ACCESS_ADMINISTER right is mapped to PRINTER_ACCESS_USE instead. Thus allowing the OpenPrinterEx() - call to succeed. This parameter MUST not be able enabled on a print share which has valid print driver installed on the Samba - server.

    See also disable spoolss

    NOTE:NOTE: The use of

    Synonym for

    Synonym for

    To restrict a service to a particular set of users you can use the

    See the section NOTE ABOUT USERNAME/PASSWORD VALIDATION for more information on how @@ -17149,7 +18438,7 @@ HREF="#AEN236" >Default: The guest account if a guest service, - else <empty string>.

    Examples:

    		!sys = mary fred
     		guest = *
     		

    Note that the remapping is applied to all occurrences @@ -17320,7 +18600,7 @@ CLASS="CONSTANT" >fred. The only exception to this is the username passed to the

    Default: no username mapDefault: no username map

    Example:

    See also the . It specifies a directory pathname that is used to store the utmp or utmpx files (depending on the UNIX system) that record user connections to a Samba server. See also the /var/run/utmp on Linux).

    Default: no utmp directoryDefault: no utmp directory

    Example: utmp directory = /var/run/utmp

    wtmp directory(G)

    This parameter is only available if Samba has + been configured and compiled with the option --with-utmp. It specifies a directory pathname that is + used to store the wtmp or wtmpx files (depending on the UNIX system) that + record user connections to a Samba server. The difference with + the utmp directory is the fact that user info is kept after a user + has logged out. + + See also the utmp parameter. By default this is + not set, meaning the system will use whatever utmp file the + native system is set to use (usually + /var/run/wtmp on Linux).

    Default: no wtmp directory

    Example: wtmp directory = /var/log/wtmp

    . This is useful in the [homes] section.

    See also

    Default: Default: No valid users list (anyone can login) -

    Example:

    Each entry must be a unix path, not a DOS path and - must notnot include the unix directory separator '/'.

    failfail unless you also set the

    See also and .

    Default: Default: No files or directories are vetoed. -

    Examples:
    Examples:
    ; Veto any files containing the word Security, 
     ; any ending in .tmp, and any directory containing the
    @@ -17565,9 +18914,6 @@ veto files = /*Security*/*.tmp/*root*/
     ; Veto the Apple specific files that a NetAtalk server
     ; creates.
     veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/

    This parameter is only valid when the parameter.

    Default: Default: No files are vetoed for oplock - grants

    You might want to do this on files that you know will @@ -17624,6 +18974,31 @@ CLASS="COMMAND" >

    vfs path (S)

    This parameter specifies the directory + to look in for vfs modules. The name of every vfs object + will be prepended by this directory +

    Default: vfs path =

    Example: vfs path = /usr/lib/samba/vfs

    vfs object (S)

    Default : no valueDefault : no value

    .

    Default : no valueDefault : no value

    Default: the name of the shareDefault: the name of the share

    system call will not return any data.

    Warning:Warning: Turning off user enumeration may cause some programs to behave oddly. For example, the finger program relies on having access to the @@ -17810,8 +19201,12 @@ CLASS="COMMAND" > system call will not return any data.

    Warning:Warning: Turning off group enumeration may cause some programs to behave oddly.

    Default: winbind gid = <empty string> +>winbind gid = <empty string>

    Default: winbind uid = <empty string> +>winbind uid = <empty string>

    Default: winbind use default domain = <falseg> +>winbind use default domain = <falseg>

    You should point this at your WINS server if you have a multi-subnetted network.

    NOTENOTE. You need to set up Samba to point to a WINS server if you have multiple subnets and wish cross-subnet browsing to work correctly.

    in the docs/ directory of your Samba source distribution.

    Default: not enabledDefault: not enabled

    Example: nmbd to be your WINS server. - Note that you should NEVERNEVER set this to trueThis controls what workgroup your server will appear to be in when queried by clients. Note that this parameter also controls the Domain name used with the security = domain setting.

    Default: set at compile time to WORKGROUPDefault: set at compile time to WORKGROUP

    Example:

    Synonym for

    If this integer parameter is set to non-zero value, Samba will create an in-memory cache for each oplocked file - (it does notnot do this for non-oplocked files). All writes that the client does not request to be flushed directly to disk will be stored in this cache if possible. @@ -18203,7 +19618,7 @@ NAME="WRITELIST" >This is a list of users that are given read-write access to a service. If the connecting user is in this list then they will be given write access, no matter what the

    See also the

    Default: write list = <empty string> +>write list = <empty string>

    wins partners (G)

    A space separated list of partners' IP addresses for + WINS replication. WINS partners are always defined as push/pull + partners as defining only one way WINS replication is unreliable. + WINS replication is currently experimental and unreliable between + samba servers. +

    Default: wins partners =

    Example: wins partners = 192.168.0.1 172.16.1.2

    write ok (S)

    Synonym for

    An inverted synonym is printable = yes) - will ALWAYSALWAYS allow writing to the directory (user privileges permitting), but only via spooling operations.

    WARNINGS

    VERSION

    SEE ALSO

    AUTHOR

    .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "SMB.CONF" "5" "22 augustus 2002" "" "" +.TH "SMB.CONF" "5" "07 September 2002" "" "" .SH NAME smb.conf \- The configuration file for the Samba suite .SH "SYNOPSIS" @@ -13,7 +13,7 @@ file for the Samba suite. \fIsmb.conf\fR contains runtime configuration information for the Samba programs. The \fIsmb.conf\fR file is designed to be configured and administered by the \fBswat(8)\fR -program. The complete description of the file format and + program. The complete description of the file format and possible parameters held within are here for reference purposes. .SH "FILE FORMAT" .PP @@ -376,7 +376,7 @@ machine. Only some are recognized, and those may not be WinNT and Win2k. Anything else will be known as "UNKNOWN". If it gets it wrong then sending a level 3 log to samba@samba.org -should allow it to be fixed. + should allow it to be fixed. .TP \fB%I\fR The IP address of the client machine. @@ -598,7 +598,7 @@ each parameter for details. Note that some are synonyms. \fIdisable spoolss\fR .TP 0.2i \(bu -\fIdisable charset\fR +\fIdisplay charset\fR .TP 0.2i \(bu \fIdns proxy\fR @@ -1433,7 +1433,7 @@ each parameter for details. Note that some are synonyms. \fBabort shutdown script (G)\fR \fBThis parameter only exists in the HEAD cvs branch\fR This a full path name to a script called by -\fBsmbd(8)\fRthat +\fBsmbd(8)\fR that should stop a shutdown procedure issued by the \fIshutdown script\fR. This command will be run as user. @@ -1457,7 +1457,7 @@ will perform the necessary operations for adding the printer to the print system and to add the appropriate service definition to the \fIsmb.conf\fR file in order that it can be shared by \fBsmbd(8)\fR -. + The \fIaddprinter command\fR is automatically invoked with the following parameter (in @@ -1548,7 +1548,7 @@ Example: \fBadd share command = /usr/local/bin/addshare\fR .TP \fBadd machine script (G)\fR This is the full pathname to a script that will -be run by smbd(8)when a machine is added +be run by smbd(8) when a machine is added to it's domain using the administrator username and password method. This option is only required when using sam back-ends tied to the @@ -1574,16 +1574,16 @@ Example: \fBads server = 192.168.1.2\fR \fBadd user script (G)\fR This is the full pathname to a script that will be run \fBAS ROOT\fR by smbd(8) -under special circumstances described below. + under special circumstances described below. Normally, a Samba server requires that UNIX users are created for all users accessing files on this server. For sites that use Windows NT account databases as their primary user database creating these users and keeping the user list in sync with the -Windows NT PDC is an onerous task. This option allows smbdto create the required UNIX users +Windows NT PDC is an onerous task. This option allows smbd to create the required UNIX users \fBON DEMAND\fR when a user accesses the Samba server. -In order to use this option, smbd +In order to use this option, smbd must \fBNOT\fR be set to \fIsecurity = share\fR and \fIadd user script\fR must be set to a full pathname for a script that will create a UNIX @@ -1591,7 +1591,7 @@ user given one argument of \fI%u\fR, which expands into the UNIX user name to create. When the Windows user attempts to access the Samba server, -at login (session setup in the SMB protocol) time, smbdcontacts the \fIpassword server\fR and +at login (session setup in the SMB protocol) time, smbd contacts the \fIpassword server\fR and attempts to authenticate the given user with the given password. If the authentication succeeds then \fBsmbd\fR attempts to find a UNIX user in the UNIX password database to map the @@ -1617,7 +1617,7 @@ Example: \fBadd user script = /usr/local/samba/bin/add_user .TP \fBadd group script (G)\fR This is the full pathname to a script that will -be run \fBAS ROOT\fR by smbd(8)when a new group is requested. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. +be run \fBAS ROOT\fR by smbd(8) when a new group is requested. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. .TP \fBadmin users (S)\fR This is a list of users who will be granted @@ -1635,7 +1635,7 @@ Example: \fBadmin users = jason\fR \fBadd user to group script (G)\fR Full path to the script that will be called when a user is added to a group using the Windows NT domain administration -tools. It will be run by smbd(8) +tools. It will be run by smbd(8) \fBAS ROOT\fR. Any \fI%g\fR will be replaced with the group name and any \fI%u\fR will be replaced with the user name. @@ -1670,7 +1670,7 @@ Example: \fBalgorithmic rid base = 100000\fR This option only takes effect when the \fIsecurity\fR option is set to server or domain. If it is set to no, then attempts to connect to a resource from -a domain or workgroup other than the one which smbdis running +a domain or workgroup other than the one which smbd is running in will fail, even if that domain is trusted by the remote server doing the authentication. @@ -1687,7 +1687,7 @@ Default: \fBallow trusted domains = yes\fR .TP \fBannounce as (G)\fR This specifies what type of server -\fBnmbd\fR +\fBnmbd\fR will announce itself as, to a network neighborhood browse list. By default this is set to Windows NT. The valid options are : "NT Server" (which can also be written as "NT"), @@ -1738,8 +1738,8 @@ Default: \fBavailable = yes\fR \fBbind interfaces only (G)\fR This global parameter allows the Samba admin to limit what interfaces on a machine will serve SMB requests. If -affects file service smbd(8)and -name service nmbd(8)in slightly +affects file service smbd(8) and +name service nmbd(8) in slightly different ways. For name service it causes \fBnmbd\fR to bind @@ -1768,8 +1768,8 @@ interfaces as it will not cope with non-permanent interfaces. If \fIbind interfaces only\fR is set then unless the network address \fB127.0.0.1\fR is added -to the \fIinterfaces\fR parameter list \fBsmbpasswd(8)\fR -and \fBswat(8)\fRmay +to the \fIinterfaces\fR parameter list \fBsmbpasswd(8)\fR +and \fBswat(8)\fR may not work as expected due to the reasons covered below. To change a users SMB password, the \fBsmbpasswd\fR @@ -1780,7 +1780,7 @@ network address \fB127.0.0.1\fR is added to the \fIinterfaces\fR parameter list then \fB smbpasswd\fR will fail to connect in it's default mode. \fBsmbpasswd\fR can be forced to use the primary IP interface of the local host by using its \fI-r remote machine\fR -parameter, with \fIremote machine\fR set + parameter, with \fIremote machine\fR set to the IP name of the primary interface of the local host. The \fBswat\fR status page tries to connect with @@ -1793,7 +1793,7 @@ and \fBnmbd\fR. Default: \fBbind interfaces only = no\fR .TP \fBblocking locks (S)\fR -This parameter controls the behavior of smbd(8)when given a request by a client +This parameter controls the behavior of smbd(8) when given a request by a client to obtain a byte range lock on a region of an open file, and the request has a time limit associated with it. @@ -1811,7 +1811,7 @@ Default: \fBblocking locks = yes\fR .TP \fBblock size (S)\fR This parameter controls the behavior of -smbd(8)when reporting disk free +smbd(8) when reporting disk free sizes. By default, this reports a disk block size of 1024 bytes. Changing this parameter may have some effect on the @@ -1832,7 +1832,7 @@ Example: \fBblock size = 65536\fR See the \fI browseable\fR. .TP \fBbrowse list (G)\fR -This controls whether \fBsmbd(8)\fRwill serve a browse list to +This controls whether \fBsmbd(8)\fR will serve a browse list to a client doing a \fBNetServerEnum\fR call. Normally set to true. You should never need to change this. @@ -1858,7 +1858,7 @@ sensitive. This SMB allows a client to tell a server to "watch" a particular directory for any changes and only reply to the SMB request when a change has occurred. Such constant scanning of -a directory is expensive under UNIX, hence an \fBsmbd(8)\fRdaemon only performs such a scan +a directory is expensive under UNIX, hence an \fBsmbd(8)\fR daemon only performs such a scan on each requested directory once every \fIchange notify timeout\fR seconds. @@ -2051,7 +2051,7 @@ Default: \fBdebug hires timestamp = no\fR .TP \fBdebug pid (G)\fR When using only one log file for more then one -forked smbd-process there may be hard to follow which process +forked smbdprocess there may be hard to follow which process outputs which message. This boolean parameter is adds the process-id to the timestamp message headers in the logfile when turned on. @@ -2114,7 +2114,7 @@ do this all the time, setting \fBdefault devmode = yes\fR will instruct smbd to generate a default one. For more information on Windows NT/2k printing and Device Modes, -see the MSDN documentation. +see the MSDN documentation . Default: \fBdefault devmode = no\fR .TP @@ -2153,7 +2153,7 @@ Example: .TP \fBdelete group script (G)\fR This is the full pathname to a script that will -be run \fBAS ROOT\fR by smbd(8)when a group is requested to be deleted. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. +be run \fBAS ROOT\fR by smbd(8) when a group is requested to be deleted. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. .TP \fBdeleteprinter command (G)\fR With the introduction of MS-RPC based printer @@ -2248,7 +2248,7 @@ Example: \fBdelete user script = /usr/local/samba/bin/del_user \fBdelete user from group script (G)\fR Full path to the script that will be called when a user is removed from a group using the Windows NT domain administration -tools. It will be run by smbd(8) +tools. It will be run by smbd(8) \fBAS ROOT\fR. Any \fI%g\fR will be replaced with the group name and any \fI%u\fR will be replaced with the user name. @@ -2455,7 +2455,7 @@ Default: \fBdisplay charset = ASCII\fR Example: \fBdisplay charset = UTF8\fR .TP \fBdns proxy (G)\fR -Specifies that nmbd(8) +Specifies that nmbd(8) when acting as a WINS server and finding that a NetBIOS name has not been registered, should treat the NetBIOS name word-for-word as a DNS name and do a lookup with the DNS server for that name on behalf of @@ -2518,13 +2518,13 @@ directory shipped with the source code. Default: \fBdomain logons = no\fR .TP \fBdomain master (G)\fR -Tell \fB nmbd(8)\fRto enable WAN-wide browse list +Tell \fB nmbd(8)\fR to enable WAN-wide browse list collation. Setting this option causes \fBnmbd\fR to claim a special domain specific NetBIOS name that identifies it as a domain master browser for its given \fIworkgroup\fR. Local master browsers in the same \fIworkgroup\fR on broadcast-isolated subnets will give this \fBnmbd\fR their local browse lists, -and then ask \fBsmbd(8)\fR +and then ask \fBsmbd(8)\fR for a complete copy of the browse list for the whole wide area network. Browser clients will then contact their local master browser, and will receive the domain-wide browse list, instead of just the list @@ -2572,7 +2572,7 @@ charset Samba should talk to DOS clients. The default depends on which charsets you have instaled. Samba tries to use charset 850 but falls back to ASCII in case it is not available. Run testparm(1) -to check the default on your system. + to check the default on your system. .TP \fBdos filemode (S)\fR The default behavior in Samba is to provide @@ -2594,7 +2594,7 @@ granularity on time resolution is two seconds. Setting this parameter for a share causes Samba to round the reported time down to the nearest two second boundary when a query call that requires one second resolution is made to \fBsmbd(8)\fR -. + This option is mainly used as a compatibility option for Visual C++ when used against Samba shares. If oplocks are enabled on a @@ -2615,7 +2615,7 @@ file they can change the timestamp on it. Under POSIX semantics, only the owner of the file or root may change the timestamp. By default, Samba runs with POSIX semantics and refuses to change the timestamp on a file if the user \fBsmbd\fR is acting -on behalf of is not the file owner. Setting this option to true allows DOS semantics and smbdwill change the file +on behalf of is not the file owner. Setting this option to true allows DOS semantics and smbd will change the file timestamp as DOS requires. Default: \fBdos filetimes = no\fR @@ -2629,9 +2629,9 @@ Samba see the file ENCRYPTION.txt in the Samba documentation directory \fIdocs/\fR shipped with the source code. In order for encrypted passwords to work correctly -\fBsmbd(8)\fRmust either +\fBsmbd(8)\fR must either have access to a local \fIsmbpasswd(5) -\fRprogram for information on how to set up +\fR program for information on how to set up and maintain this file), or set the security = [server|domain|ads] parameter which causes \fBsmbd\fR to authenticate against another server. @@ -2720,7 +2720,7 @@ that it is the only one accessing the file and it will aggressively cache file data. With some oplock types the client may even cache file open/close operations. This can give enormous performance benefits. -When you set \fBfake oplocks = yes\fR, \fBsmbd(8)\fRwill +When you set \fBfake oplocks = yes\fR, \fBsmbd(8)\fR will always grant oplock requests no matter how many clients are using the file. @@ -2739,7 +2739,7 @@ Default: \fBfake oplocks = no\fR .TP \fBfollow symlinks (S)\fR This parameter allows the Samba administrator -to stop \fBsmbd(8)\fR +to stop \fBsmbd(8)\fR from following symbolic links in a particular share. Setting this parameter to no prevents any file or directory that is a symbolic link from being followed (the user will get an @@ -2921,7 +2921,7 @@ Example: \fBforce user = auser\fR This parameter allows the administrator to configure the string that specifies the type of filesystem a share is using that is reported by \fBsmbd(8) -\fRwhen a client queries the filesystem type +\fR when a client queries the filesystem type for a share. The default type is NTFS for compatibility with Windows NT but this can be changed to other strings such as Samba or FAT @@ -3022,7 +3022,7 @@ Example: \fBhide files = The above example is based on files that the Macintosh SMB client (DAVE) available from -Thursbycreates for internal use, and also still hides +Thursby creates for internal use, and also still hides all files beginning with a dot. .TP \fBhide local users(G)\fR @@ -3046,7 +3046,7 @@ Default: \fBhide unwriteable = no\fR .TP \fBhomedir map (G)\fR If\fInis homedir -\fR is true, and \fBsmbd(8)\fRis also acting +\fR is true, and \fBsmbd(8)\fR is also acting as a Win95/98 \fIlogon server\fR then this parameter specifies the NIS (or YP) map from which the server for the user's home directory should be extracted. At present, only the Sun @@ -3078,7 +3078,7 @@ to browse Dfs trees hosted on the server. See also the \fI msdfs root\fR share level parameter. For more information on setting up a Dfs tree on Samba, -refer to msdfs_setup.html. +refer to msdfs_setup.html Default: \fBhost msdfs = no\fR .TP @@ -3141,7 +3141,7 @@ deny access from one particular host Note that access still requires suitable user-level passwords. See \fBtestparm(1)\fR -for a way of testing your host access to see if it does + for a way of testing your host access to see if it does what you expect. Default: \fBnone (i.e., all hosts permitted access) @@ -3345,7 +3345,7 @@ allows the use of them to be turned on or off. Kernel oplocks support allows Samba \fIoplocks \fR to be broken whenever a local UNIX process or NFS operation accesses a file that \fBsmbd(8)\fR -has oplocked. This allows complete data consistency between + has oplocked. This allows complete data consistency between SMB/CIFS, NFS and local file access (and is a \fBvery\fR cool feature :-). @@ -3360,7 +3360,7 @@ and \fIlevel2 oplocks Default: \fBkernel oplocks = yes\fR .TP \fBlanman auth (G)\fR -This parameter determines whether or not smbdwill +This parameter determines whether or not smbd will attempt to authenticate users using the LANMAN password hash. If disabled, only clients which support NT password hashes (e.g. Windows NT/2000 clients, smbclient, etc... but not Windows 95/98 or the MS DOS @@ -3385,7 +3385,7 @@ Name (DN) name used by Samba to contact the ldap server when retreiving user account information. The \fIldap admin dn\fR is used in conjunction with the admin dn password stored in the \fIprivate/secrets.tdb\fR file. See the -\fBsmbpasswd(8)\fRman +\fBsmbpasswd(8)\fR man page for more information on how to accmplish this. Default : \fBnone\fR @@ -3396,7 +3396,7 @@ The default is to match the login name with the uid attribute for all entries matching the sambaAccount objectclass. Note that this filter should only return one entry. -Default : \fBldap filter = (%u)(objectclass=sambaAccount))\fR +Default : \fBldap filter = (&(uid=%u)(objectclass=sambaAccount))\fR .TP \fBldap ssl (G)\fR This option is used to define whether or not Samba should @@ -3467,7 +3467,7 @@ parameters. Default: \fBlevel2 oplocks = yes\fR .TP \fBlm announce (G)\fR -This parameter determines if \fBnmbd(8)\fRwill produce Lanman announce +This parameter determines if \fBnmbd(8)\fR will produce Lanman announce broadcasts that are needed by OS/2 clients in order for them to see the Samba server in their browse list. This parameter can have three values, true, false, or @@ -3512,7 +3512,7 @@ more details. Default: \fBload printers = yes\fR .TP \fBlocal master (G)\fR -This option allows \fB nmbd(8)\fRto try and become a local master browser +This option allows \fB nmbd(8)\fR to try and become a local master browser on a subnet. If set to false then \fB nmbd\fR will not attempt to become a local master browser on a subnet and will also lose in all browsing elections. By default this value is set to true. Setting this value to true doesn't @@ -3898,14 +3898,14 @@ Example 2: \fBlprm command = /usr/bin/cancel %p-%j \fBmachine password timeout (G)\fR If a Samba server is a member of a Windows NT Domain (see the security = domain) -parameter) then periodically a running smbd(8)process will try and change the MACHINE ACCOUNT +parameter) then periodically a running smbd(8) process will try and change the MACHINE ACCOUNT PASSWORD stored in the TDB called \fIprivate/secrets.tdb \fR. This parameter specifies how often this password will be changed, in seconds. The default is one week (expressed in seconds), the same as a Windows NT Domain member server. See also \fBsmbpasswd(8) -\fR, and the security = domain) parameter. +\fR and the security = domain) parameter. Default: \fBmachine password timeout = 604800\fR .TP @@ -4053,7 +4053,7 @@ Example: \fBmangling method = hash2\fR .TP \fBmangled stack (G)\fR This parameter controls the number of mangled names -that should be cached in the Samba server smbd(8). +that should be cached in the Samba server smbd(8) This stack is a list of recently mangled base names (extensions are only maintained if they are longer than 3 characters @@ -4121,7 +4121,7 @@ This parameter is only useful in security modes other than \fIsecurity = share and domain. This parameter can take three different values, which tell -smbd(8)what to do with user +smbd(8) what to do with user login requests that don't match a valid UNIX user in some way. The three settings are : @@ -4225,7 +4225,7 @@ Default: \fBmax mux = 50\fR .TP \fBmax open files (G)\fR This parameter limits the maximum number of -open files that one smbd(8)file +open files that one smbd(8) file serving process may have open for a client at any one time. The default for this parameter is set very high (10,000) as Samba uses only one bit per unopened file. @@ -4239,7 +4239,7 @@ Default: \fBmax open files = 10000\fR \fBmax print jobs (S)\fR This parameter limits the maximum number of jobs allowable in a Samba printer queue at any given moment. -If this number is exceeded, \fB smbd(8)\fRwill remote "Out of Space" to the client. +If this number is exceeded, \fB smbd(8)\fR will remote "Out of Space" to the client. See all \fItotal print jobs\fR. @@ -4292,7 +4292,7 @@ processes concurrently running on a system and is intended as a stopgap to prevent degrading service to clients in the event that the server has insufficient resources to handle more than this number of connections. Remember that under normal operating -conditions, each user will have an smbdassociated with him or her +conditions, each user will have an smbd associated with him or her to handle connections to all shares from a given host. Default: \fBmax smbd processes = 0\fR ## no limit @@ -4310,7 +4310,7 @@ Default: \fBmax ttl = 259200\fR .TP \fBmax wins ttl (G)\fR This option tells nmbd(8) -when acting as a WINS server ( \fIwins support = yes\fR) what the maximum + when acting as a WINS server ( \fIwins support = yes\fR) what the maximum \&'time to live' of NetBIOS names that \fBnmbd\fR will grant will be (in seconds). You should never need to change this parameter. The default is 6 days (518400 seconds). @@ -4457,7 +4457,7 @@ Dfs links are specified in the share directory by symbolic links of the form \fImsdfs:serverA\\shareA,serverB\\shareB \fR and so on. For more information on setting up a Dfs tree on Samba, refer to msdfs_setup.html -. + See also \fIhost msdfs \fR @@ -4486,7 +4486,7 @@ cause names to be resolved as follows : \(bu lmhosts : Lookup an IP address in the Samba lmhosts file. If the line in lmhosts has -no name type attached to the NetBIOS name (see the lmhosts(5)for details) then +no name type attached to the NetBIOS name (see the lmhosts(5) for details) then any name type matches for lookup. .TP 0.2i \(bu @@ -4523,7 +4523,7 @@ first, followed by a broadcast attempt, followed by a normal system hostname lookup. .TP \fBnetbios aliases (G)\fR -This is a list of NetBIOS names that nmbd(8)will advertise as additional +This is a list of NetBIOS names that nmbd(8) will advertise as additional names by which the Samba server is known. This allows one machine to appear in browse lists under multiple names. If a machine is acting as a browse server or logon server none @@ -4605,7 +4605,7 @@ Example: \fBnon unix account range = 10000-20000\fR .TP \fBnt acl support (S)\fR This boolean parameter controls whether -smbd(8)will attempt to map +smbd(8) will attempt to map UNIX permissions into Windows NT access control lists. This parameter was formally a global parameter in releases prior to 2.2.2. @@ -4614,7 +4614,7 @@ Default: \fBnt acl support = yes\fR .TP \fBnt pipe support (G)\fR This boolean parameter controls whether -smbd(8)will allow Windows NT +smbd(8) will allow Windows NT clients to connect to the NT SMB specific IPC$ pipes. This is a developer debugging option and can be left alone. @@ -4622,7 +4622,7 @@ alone. Default: \fBnt pipe support = yes\fR .TP \fBnt status support (G)\fR -This boolean parameter controls whether smbd(8)will negotiate NT specific status +This boolean parameter controls whether smbd(8) will negotiate NT specific status support with Windows NT/2k/XP clients. This is a developer debugging option and should be left alone. If this option is set to no then Samba offers @@ -4637,7 +4637,7 @@ Default: \fBnt status support = yes\fR Allow or disallow client access to accounts that have null passwords. -See also smbpasswd (5). +See also smbpasswd (5) Default: \fBnull passwords = no\fR .TP @@ -4694,11 +4694,11 @@ Default: \fBoplock break wait time = 0\fR .TP \fBoplock contention limit (S)\fR This is a \fBvery\fR advanced -smbd(8)tuning option to +smbd(8) tuning option to improve the efficiency of the granting of oplocks under multiple client contention for the same file. -In brief it specifies a number, which causes smbdnot to +In brief it specifies a number, which causes smbd not to grant an oplock even when requested if the approximate number of clients contending for an oplock on the same file goes over this limit. This causes \fBsmbd\fR to behave in a similar @@ -4733,7 +4733,7 @@ oplocks\fR and \fI level2 oplocks\fR parameters. Default: \fBoplocks = yes\fR .TP \fBntlm auth (G)\fR -This parameter determines whether or not smbdwill +This parameter determines whether or not smbd will attempt to authenticate users using the NTLM password hash. If disabled, only the lanman password hashes will be used. @@ -4744,7 +4744,7 @@ Default : \fBntlm auth = yes\fR \fBos level (G)\fR This integer value controls what level Samba advertises itself as for browse elections. The value of this -parameter determines whether nmbd(8) +parameter determines whether nmbd(8) has a chance of becoming a local master browser for the \fI WORKGROUP\fR in the local broadcast area. \fBNote :\fRBy default, Samba will win @@ -4773,9 +4773,9 @@ LaserJet 5L\fR. The need for the file is due to the printer driver namespace problem described in the Samba -Printing HOWTO. For more details on OS/2 clients, please +Printing HOWTO For more details on OS/2 clients, please refer to the OS2-Client-HOWTO -containing in the Samba documentation. + containing in the Samba documentation. Default: \fBos2 driver map = \fR @@ -4794,7 +4794,7 @@ Default: \fBpam password change = no\fR .TP \fBpanic action (G)\fR This is a Samba developer option that allows a -system command to be called when either smbd(8) +system command to be called when either smbd(8) crashes. This is usually used to draw attention to the fact that a problem occurred. @@ -4808,7 +4808,7 @@ users with a bad passowrd. When this option is enabled, samba will not use a broken NT 4.x server as password server, but instead complain to the logs and exit. -Default: \fBparanoid server security = no\fR +Default: \fBparanoid server security = yes\fR .TP \fBpassdb backend (G)\fR This option allows the administrator to chose which backends to retrieve and store passwords with. This allows (for example) both @@ -4893,9 +4893,9 @@ Example: \fBpassdb backend = plugin:/usr/local/samba/lib/my_passdb.so:my_plugin_ .TP \fBpasswd chat (G)\fR This string controls the \fB"chat"\fR -conversation that takes places between smbdand the local password changing +conversation that takes places between smbd and the local password changing program to change the user's password. The string describes a -sequence of response-receive pairs that smbd(8)uses to determine what to send to the +sequence of response-receive pairs that smbd(8) uses to determine what to send to the \fIpasswd program\fR and what to expect back. If the expected output is not received then the password is not changed. @@ -4944,7 +4944,7 @@ changed*"\fR This boolean specifies if the passwd chat script parameter is run in \fBdebug\fR mode. In this mode the strings passed to and received from the passwd chat are printed -in the smbd(8)log with a +in the smbd(8) log with a \fIdebug level\fR of 100. This is a dangerous option as it will allow plaintext passwords to be seen in the \fBsmbd\fR log. It is available to help @@ -4977,7 +4977,7 @@ it. password sync\fR parameter is set to true then this program is called \fBAS ROOT\fR before the SMB password in the smbpasswd(5) -file is changed. If this UNIX password change fails, then + file is changed. If this UNIX password change fails, then \fBsmbd\fR will fail to change the SMB password also (this is by design). @@ -5221,7 +5221,7 @@ return code from \fIpreexec Default: \fBpreexec close = no\fR .TP \fBpreferred master (G)\fR -This boolean parameter controls if nmbd(8)is a preferred master browser +This boolean parameter controls if nmbd(8) is a preferred master browser for its workgroup. If this is set to true, on startup, \fBnmbd\fR @@ -5432,7 +5432,7 @@ Example: \fBprinter admin = admin, @staff\fR parameter and will be removed in the next major release following version 2.2. Please see the instructions in the Samba 2.2. Printing -HOWTOfor more information +HOWTO for more information on the new method of loading printer drivers onto a Samba server. This option allows you to control the string @@ -5458,7 +5458,7 @@ Example: \fBprinter driver = HP LaserJet 4L\fR parameter and will be removed in the next major release following version 2.2. Please see the instructions in the Samba 2.2. Printing -HOWTOfor more information +HOWTO for more information on the new method of loading printer drivers onto a Samba server. This parameter tells Samba where the printer driver @@ -5486,7 +5486,7 @@ Example: \fBprinter driver file = parameter and will be removed in the next major release following version 2.2. Please see the instructions in the Samba 2.2. Printing -HOWTOfor more information +HOWTO for more information on the new method of loading printer drivers onto a Samba server. This parameter tells clients of a particular printer @@ -5541,7 +5541,7 @@ QNX, SOFTQ, and CUPS. To see what the defaults are for the other print -commands when using the various options use the testparm(1)program. +commands when using the various options use the testparm(1) program. This option can be set on a per printer basis @@ -5613,7 +5613,7 @@ Example: \fBqueuepause command = enable %p \fR .TP \fBread bmpx (G)\fR -This boolean parameter controls whether smbd(8)will support the "Read +This boolean parameter controls whether smbd(8) will support the "Read Block Multiplex" SMB. This is now rarely used and defaults to no. You should never need to set this parameter. @@ -5688,7 +5688,7 @@ Default: \fBrealm = \fR Example: \fBrealm = mysambabox.mycompany.com\fR .TP \fBremote announce (G)\fR -This option allows you to setup nmbd(8)to periodically announce itself +This option allows you to setup nmbd(8) to periodically announce itself to arbitrary IP addresses with an arbitrary workgroup name. This is useful if you want your Samba server to appear @@ -5718,7 +5718,7 @@ Default: \fBremote announce = \fR .TP \fBremote browse sync (G)\fR -This option allows you to setup nmbd(8)to periodically request +This option allows you to setup nmbd(8) to periodically request synchronization of browse lists with the master browser of a Samba server that is on a remote segment. This option will allow you to gain browse lists for multiple workgroups across routed networks. This @@ -5843,7 +5843,7 @@ Samba and is one of the most important settings in the \fI smb.conf\fR file. The option sets the "security mode bit" in replies to protocol negotiations with smbd(8) -to turn share level security on or off. Clients decide + to turn share level security on or off. Clients decide based on this bit whether (and how) to transfer user and password information to the server. @@ -6008,7 +6008,7 @@ parameter. \fBSECURITY = DOMAIN \fR -This mode will only work correctly if smbpasswd(8)has been used to add this +This mode will only work correctly if smbpasswd(8) has been used to add this machine into a Windows NT Domain. It expects the \fIencrypted passwords\fR parameter to be set to true. In this mode Samba will try to validate the username/password by passing @@ -6176,7 +6176,7 @@ Default :\fBshow add printer wizard = yes\fR \fBshutdown script (G)\fR \fBThis parameter only exists in the HEAD cvs branch\fR This a full path name to a script called by -\fBsmbd(8)\fRthat +\fBsmbd(8)\fR that should start a shutdown procedure. This command will be run as the user connected to the @@ -6267,7 +6267,7 @@ You may find that on some systems Samba will say "Unknown socket option" when you supply an option. This means you either incorrectly typed it or you need to add an include file to includes.h for your OS. If the latter is the case please -send the patch to samba@samba.org. +send the patch to samba@samba.org . Any of the supported socket options may be combined in any way you like, as long as your OS allows it. @@ -6365,7 +6365,7 @@ This variable controls controls whether samba will try to use Simple and Protect Default: \fBuse spnego = yes\fR .TP \fBstat cache (G)\fR -This parameter determines if smbd(8)will use a cache in order to +This parameter determines if smbd(8) will use a cache in order to speed up case insensitive name mappings. You should never need to change this parameter. @@ -6431,7 +6431,7 @@ the process to be suspended until the kernel has ensured that all outstanding data in kernel disk buffers has been safely stored onto stable storage. This is very slow and should only be done rarely. Setting this parameter to no (the -default) means that smbdignores the Windows applications requests for +default) means that smbd ignores the Windows applications requests for a sync call. There is only a possibility of losing data if the operating system itself that Samba is running on crashes, so there is little danger in this default setting. In addition, this fixes many @@ -6490,7 +6490,7 @@ Default: \fBsyslog only = no\fR .TP \fBtemplate homedir (G)\fR When filling out the user information for a Windows NT -user, the winbindd(8)daemon +user, the winbindd(8) daemon uses this parameter to fill in the home directory for that user. If the string \fI%D\fR is present it is substituted with the user's Windows NT domain name. If the string \fI%U @@ -6501,7 +6501,7 @@ Default: \fBtemplate homedir = /home/%D/%U\fR .TP \fBtemplate shell (G)\fR When filling out the user information for a Windows NT -user, the winbindd(8)daemon +user, the winbindd(8) daemon uses this parameter to fill in the login shell for that user. Default: \fBtemplate shell = /bin/false\fR @@ -6518,7 +6518,7 @@ Example: \fBtime offset = 60\fR .TP \fBtime server (G)\fR This parameter determines if -nmbd(8)advertises itself as a time server to Windows +nmbd(8) advertises itself as a time server to Windows clients. Default: \fBtime server = no\fR @@ -6530,7 +6530,7 @@ Synonym for \fI debug timestamp\fR. This parameter accepts an integer value which defines a limit on the maximum number of print jobs that will be accepted system wide at any given time. If a print job is submitted -by a client which will exceed this number, then smbdwill return an +by a client which will exceed this number, then smbd will return an error indicating that no space is available on the server. The default value of 0 means that no such limit exists. This parameter can be used to prevent a server from exceeding its capacity and is @@ -7016,7 +7016,7 @@ Default: \fBwide links = yes\fR .TP \fBwinbind cache time (G)\fR This parameter specifies the number of seconds the -winbindd(8)daemon will cache +winbindd(8) daemon will cache user and group information before querying a Windows NT server again. @@ -7024,7 +7024,7 @@ Default: \fBwinbind cache type = 15\fR .TP \fBwinbind enum users (G)\fR On large installations using -winbindd(8)it may be +winbindd(8) it may be necessary to suppress the enumeration of users through the \fB setpwent()\fR, \fBgetpwent()\fR and @@ -7043,7 +7043,7 @@ Default: \fBwinbind enum users = yes \fR .TP \fBwinbind enum groups (G)\fR On large installations using -winbindd(8)it may be +winbindd(8) it may be necessary to suppress the enumeration of groups through the \fB setgrent()\fR, \fBgetgrent()\fR and @@ -7059,7 +7059,7 @@ Default: \fBwinbind enum groups = yes \fR .TP \fBwinbind gid (G)\fR The winbind gid parameter specifies the range of group -ids that are allocated by the winbindd(8)daemon. This range of group ids should have no +ids that are allocated by the winbindd(8) daemon. This range of group ids should have no existing local or NIS groups within it as strange conflicts can occur otherwise. @@ -7085,7 +7085,7 @@ Example: \fBwinbind separator = +\fR .TP \fBwinbind uid (G)\fR The winbind gid parameter specifies the range of group -ids that are allocated by the winbindd(8)daemon. This range of ids should have no +ids that are allocated by the winbindd(8) daemon. This range of ids should have no existing local or NIS users within it as strange conflicts can occur otherwise. @@ -7155,7 +7155,7 @@ program \fBnsupdate\fR is provided in the examples directory of the Samba source code. .TP \fBwins proxy (G)\fR -This is a boolean that controls if nmbd(8)will respond to broadcast name +This is a boolean that controls if nmbd(8) will respond to broadcast name queries on behalf of other hosts. You may need to set this to yes for some older clients. @@ -7163,7 +7163,7 @@ Default: \fBwins proxy = no\fR .TP \fBwins server (G)\fR This specifies the IP address (or DNS name: IP -address for preference) of the WINS server that nmbd(8)should register with. If you have a WINS server on +address for preference) of the WINS server that nmbd(8) should register with. If you have a WINS server on your network then you should set this to the WINS server's IP. You should point this at your WINS server if you have a @@ -7182,7 +7182,7 @@ Example: \fBwins server = 192.9.200.1\fR .TP \fBwins support (G)\fR This boolean controls if the -nmbd(8)process in Samba will act as a WINS server. You should +nmbd(8) process in Samba will act as a WINS server. You should not set this to true unless you have a multi-subnetted network and you wish a particular \fBnmbd\fR to be your WINS server. Note that you should \fBNEVER\fR set this to true @@ -7290,7 +7290,7 @@ problem - but be aware of the possibility. .PP On a similar note, many clients - especially DOS clients - limit service names to eight characters. smbd(8) -has no such limitation, but attempts to connect from such + has no such limitation, but attempts to connect from such clients will fail if they truncate the service names. For this reason you should probably keep your service names down to eight characters in length. @@ -7306,14 +7306,14 @@ This man page is correct for version 2.2 of the Samba suite. .SH "SEE ALSO" .PP -samba(7), -\fBsmbpasswd(8)\fR, -\fBswat(8)\fR, -\fBsmbd(8)\fR, -\fBnmbd(8)\fR, -\fBsmbclient(1)\fR, -\fBnmblookup(1)\fR, -\fBtestparm(1)\fR, +samba(7) +\fBsmbpasswd(8)\fR +\fBswat(8)\fR +\fBsmbd(8)\fR +\fBnmbd(8)\fR +\fBsmbclient(1)\fR +\fBnmblookup(1)\fR +\fBtestparm(1)\fR \fBtestprns(1)\fR .SH "AUTHOR" .PP @@ -7325,6 +7325,6 @@ to the way the Linux kernel is developed. The original Samba man pages were written by Karl Auer. The man page sources were converted to YODL format (another excellent piece of Open Source software, available at -ftp://ftp.icce.rug.nl/pub/unix/) and updated for the Samba 2.0 +ftp://ftp.icce.rug.nl/pub/unix/ ) and updated for the Samba 2.0 release by Jeremy Allison. The conversion to DocBook for Samba 2.2 was done by Gerald Carter -- cgit From 1e7b61514c3fafa90a81df275d155d82f22a03f4 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 8 Sep 2002 00:36:22 +0000 Subject: forgot to commit configure with configure.in (This used to be commit db883ae1e659496696c17f2901634cada5e4aa13) --- source3/configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/configure b/source3/configure index e7ce3ee4df..970d527d72 100755 --- a/source3/configure +++ b/source3/configure @@ -14188,7 +14188,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile ../examples/VFS/netatalk/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then -- cgit From 79f54d28f8dd7aae636c2c2c857c98ad35fc747f Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 8 Sep 2002 03:55:37 +0000 Subject: change parametric option name to vfs_recycle_bin it is more sane and do not pollute standard options namespace too much changed also the mode options to be indipendente boolean values, make it easier to understand how to configure them eg: vfs_recycle_bin:keeptree=yes vfs_recycle_bin:versions=yes (This used to be commit d904d50d3945f5f6a80b59850a82f3e37863c125) --- examples/VFS/recycle.c | 71 +++++++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/examples/VFS/recycle.c b/examples/VFS/recycle.c index bcf5f898cc..a56619af31 100644 --- a/examples/VFS/recycle.c +++ b/examples/VFS/recycle.c @@ -39,7 +39,7 @@ typedef struct recycle_bin_struct { TALLOC_CTX *ctx; char *repository; /* name of the recycle bin directory */ - BOOL keep_directories; /* keep directory structure of deleted file in recycle bin */ + BOOL keep_dir_tree; /* keep directory structure of deleted file in recycle bin */ BOOL versions; /* create versions of deleted files with identical name */ BOOL touch; /* touch access date of deleted file */ char *exclude; /* which files to exclude */ @@ -48,8 +48,6 @@ typedef struct recycle_bin_struct SMB_OFF_T maxsize; /* maximum file size to be saved */ } recycle_bin_struct; -static BOOL checkparam(char *haystack,char *needle); - /* VFS operations */ static struct vfs_ops default_vfs_ops; /* For passthrough operation */ @@ -71,6 +69,16 @@ static vfs_op_tuple recycle_ops[] = { {NULL, SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP} }; +static BOOL check_bool_param(const char *value) +{ + if (strwicmp(value, "yes") == 0 || + strwicmp(value, "true") == 0 || + strwicmp(value, "1") == 0) + return True; + + return False; +} + /** * VFS initialisation function. * @@ -81,7 +89,7 @@ vfs_op_tuple *vfs_init(int *vfs_version, struct vfs_ops *def_vfs_ops) DEBUG(10, ("Initializing VFS module recycle\n")); *vfs_version = SMB_VFS_INTERFACE_VERSION; memcpy(&default_vfs_ops, def_vfs_ops, sizeof(struct vfs_ops)); - vfs_recycle_debug_level = debug_add_class("recycle.bin"); + vfs_recycle_debug_level = debug_add_class("vfs_recycle_bin"); if (vfs_recycle_debug_level == -1) { vfs_recycle_debug_level = DBGC_VFS; DEBUG(0, ("vfs_recycle: Couldn't register custom debugging class!\n")); @@ -125,7 +133,7 @@ static int recycle_connect(struct connection_struct *conn, const char *service, /* Set defaults */ recbin->repository = talloc_strdup(ctx, ".recycle"); ALLOC_CHECK(recbin->repository, error); - recbin->keep_directories = False; + recbin->keep_dir_tree = False; recbin->versions = False; recbin->touch = False; recbin->exclude = ""; @@ -136,22 +144,28 @@ static int recycle_connect(struct connection_struct *conn, const char *service, /* parse configuration options */ servicename = talloc_strdup(recbin->ctx, lp_servicename(SNUM(conn))); DEBUG(10, ("servicename = %s\n",servicename)); - if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "repository")) != NULL) { + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "repository")) != NULL) { recbin->repository = talloc_sub_conn(ctx, conn, tmp_str); ALLOC_CHECK(recbin->repository, error); trim_string(recbin->repository, "/", "/"); DEBUG(5, ("recycle.bin: repository = %s\n", recbin->repository)); } - if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "mode")) != NULL) { - if (checkparam(tmp_str, "KEEP_DIRECTORIES") == True) - recbin->keep_directories = True; - if (checkparam(tmp_str, "VERSIONS") == True) + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "keeptree")) != NULL) { + if (check_bool_param(tmp_str) == True) + recbin->keep_dir_tree = True; + DEBUG(5, ("recycle.bin: keeptree = %s\n", tmp_str)); + } + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "versions")) != NULL) { + if (check_bool_param(tmp_str) == True) recbin->versions = True; - if (checkparam(tmp_str, "TOUCH") == True) + DEBUG(5, ("recycle.bin: versions = %s\n", tmp_str)); + } + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "touch")) != NULL) { + if (check_bool_param(tmp_str) == True) recbin->touch = True; - DEBUG(5, ("recycle.bin: mode = %s\n", tmp_str)); + DEBUG(5, ("recycle.bin: touch = %s\n", tmp_str)); } - if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "maxsize")) != NULL) { + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "maxsize")) != NULL) { recbin->maxsize = strtoul(tmp_str, NULL, 10); if (recbin->maxsize == 0) { recbin->maxsize = -1; @@ -160,17 +174,17 @@ static int recycle_connect(struct connection_struct *conn, const char *service, DEBUG(5, ("recycle.bin: maxsize = %ld\n", (long int)recbin->maxsize)); } } - if ((tmp_str = lp_parm_string(servicename, "recycle.bin", "exclude")) != NULL) { + if ((tmp_str = lp_parm_string(servicename, "vfs_recycle_bin", "exclude")) != NULL) { recbin->exclude = talloc_strdup(ctx, tmp_str); ALLOC_CHECK(recbin->exclude, error); DEBUG(5, ("recycle.bin: exclude = %s\n", recbin->exclude)); } - if ((tmp_str = lp_parm_string(servicename,"recycle.bin", "exclude_dir")) != NULL) { + if ((tmp_str = lp_parm_string(servicename,"vfs_recycle_bin", "exclude_dir")) != NULL) { recbin->exclude_dir = talloc_strdup(ctx, tmp_str); ALLOC_CHECK(recbin->exclude_dir, error); DEBUG(5, ("recycle.bin: exclude_dir = %s\n", recbin->exclude_dir)); } - if ((tmp_str = lp_parm_string(servicename,"recycle.bin", "noversions")) != NULL) { + if ((tmp_str = lp_parm_string(servicename,"vfs_recycle_bin", "noversions")) != NULL) { recbin->noversions = talloc_strdup(ctx, tmp_str); ALLOC_CHECK(recbin->noversions, error); DEBUG(5, ("recycle.bin: noversions = %s\n", recbin->noversions)); @@ -292,7 +306,7 @@ done: * @param needle string to be matched exactly to haystack * @return True if found **/ -static BOOL checkparam(char *haystack, char *needle) +static BOOL checkparam(const char *haystack, const char *needle) { char *token; char *tok_str; @@ -324,7 +338,7 @@ done: * @param needle string to be matched exectly to haystack including pattern matching * @return True if found **/ -static BOOL matchparam(char *haystack, char *needle) +static BOOL matchparam(const char *haystack, const char *needle) { char *token; char *tok_str; @@ -386,7 +400,7 @@ static int recycle_unlink(connection_struct *conn, const char *inname) SMB_BIG_UINT dfree, dsize, bsize; SMB_OFF_T file_size, space_avail; BOOL exist; - int rc; + int rc = -1; file_name = strdup(inname); ALLOC_CHECK(file_name, done); @@ -485,7 +499,7 @@ static int recycle_unlink(connection_struct *conn, const char *inname) safe_strcpy(temp_name, recbin->repository, PATH_MAX); /* see if we need to recreate the original directory structure in the recycle bin */ - if (recbin->keep_directories == True) { + if (recbin->keep_dir_tree == True) { safe_strcat(temp_name, "/", PATH_MAX); safe_strcat(temp_name, path_name, PATH_MAX); } @@ -502,15 +516,16 @@ static int recycle_unlink(connection_struct *conn, const char *inname) } } - safe_strcat(temp_name, "/", PATH_MAX); - safe_strcat(temp_name, base, PATH_MAX); + final_name = (char *)malloc(PATH_MAX); + ALLOC_CHECK(final_name, done); + snprintf(final_name, PATH_MAX, "%s/%s", temp_name, base); DEBUG(10, ("recycle.bin: recycled file name%s\n", temp_name)); /* new filename with path */ /* check if we should delete file from recycle bin */ - if (recycle_file_exist(conn, temp_name)) { + if (recycle_file_exist(conn, final_name)) { if (recbin->versions == False || matchparam(recbin->noversions, base) == True) { - DEBUG(3, ("recycle.bin: Removing old file %s from recycle bin\n", temp_name)); - if (default_vfs_ops.unlink(conn, temp_name) != 0) { + DEBUG(3, ("recycle.bin: Removing old file %s from recycle bin\n", final_name)); + if (default_vfs_ops.unlink(conn, final_name) != 0) { DEBUG(1, ("recycle.bin: Error deleting old file: %s\n", strerror(errno))); } } @@ -518,12 +533,8 @@ static int recycle_unlink(connection_struct *conn, const char *inname) /* rename file we move to recycle bin */ i = 1; - final_name = (char *)malloc(PATH_MAX); - ALLOC_CHECK(final_name, done); - final_name = safe_strcpy(final_name, temp_name, PATH_MAX); while (recycle_file_exist(conn, final_name)) { - snprintf(final_name, PATH_MAX, "Copy #%d of ", i++); - safe_strcat(final_name, temp_name, PATH_MAX); + snprintf(final_name, PATH_MAX, "%s/Copy #%d of %s", temp_name, i++, base); } DEBUG(10, ("recycle.bin: Moving %s to %s\n", file_name, final_name)); -- cgit From 8a5abe4dbee59dd53a9a2b842698ac6cb587a104 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 8 Sep 2002 14:58:23 +0000 Subject: Patch from Stefan (metze) Metzmacher with more updates for the SAM subsystem (This used to be commit 56cb03bfc68727384df46bde6df03950f7cdfcf9) --- source3/Makefile.in | 2 +- source3/sam/interface.c | 557 ++++++++++++++++++++++++++++++++--------------- source3/sam/sam_plugin.c | 20 +- 3 files changed, 398 insertions(+), 181 deletions(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 796d994b13..e22387c4de 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -224,7 +224,7 @@ SAM_STATIC_MODULES = sam/sam_plugin.o SAM_OBJ = sam/account.o sam/get_set_account.o sam/get_set_group.o \ sam/get_set_domain.o sam/interface.o sam/api.o $(SAM_STATIC_MODULES) -SAMTEST_OBJ = torture/samtest.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o +SAMTEST_OBJ = torture/samtest.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o passdb/machine_sid.o passdb/secrets.o GROUPDB_OBJ = groupdb/mapping.o diff --git a/source3/sam/interface.c b/source3/sam/interface.c index cd2f2361f3..a10b34200d 100644 --- a/source3/sam/interface.c +++ b/source3/sam/interface.c @@ -26,6 +26,8 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM +extern DOM_SID global_sid_Builtin; + /** List of various built-in sam modules */ const struct sam_init_function_entry builtin_sam_init_functions[] = { @@ -33,8 +35,6 @@ const struct sam_init_function_entry builtin_sam_init_functions[] = { { NULL, NULL} }; -/* FIXME: wrapper functions : context_* */ - /****************************************************************** context_sam_* functions are used to link the external SAM interface with the internal backends. These functions lookup the appropriate @@ -53,8 +53,7 @@ NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_me tmp_methods = context->methods; - while (tmp_methods) - { + while (tmp_methods) { if (sid_equal(domainsid, &(tmp_methods->domain->private.sid))) { (*sam_method) = tmp_methods; @@ -79,8 +78,7 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m tmp_methods = context->methods; - while (tmp_methods) - { + while (tmp_methods) { if (strcmp(domainname, tmp_methods->domain->private.name)) { (*sam_method) = tmp_methods; @@ -112,7 +110,7 @@ NTSTATUS context_sam_get_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKE } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_sec_desc(tmp_methods, access_token, sid, sd))) { - DEBUG(4,("context_sam_get_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); + DEBUG(4,("sam_get_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); return nt_status; } @@ -125,7 +123,7 @@ NTSTATUS context_sam_set_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKE NTSTATUS nt_status; DEBUG(5,("context_sam_set_sec_desc: %d\n", __LINE__)); - + if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, sid))) { DEBUG(4,("sam_get_methods_by_sid failed\n")); return nt_status; @@ -137,7 +135,7 @@ NTSTATUS context_sam_set_sec_desc(const SAM_CONTEXT *context, const NT_USER_TOKE } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_set_sec_desc(tmp_methods, access_token, sid, sd))) { - DEBUG(4,("context_sam_set_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); + DEBUG(4,("sam_set_sec_desc for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); return nt_status; } @@ -163,7 +161,7 @@ NTSTATUS context_sam_lookup_name(const SAM_CONTEXT *context, const NT_USER_TOKEN } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_name(tmp_methods, access_token, name, sid, type))) { - DEBUG(4,("context_sam_lookup_name for %s\\%s in backend %s failed\n", + DEBUG(4,("sam_lookup_name for %s\\%s in backend %s failed\n", tmp_methods->domain->private.name, name, tmp_methods->backendname)); return nt_status; } @@ -197,7 +195,7 @@ NTSTATUS context_sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_sid(tmp_methods, access_token, sid, name, type))) { - DEBUG(4,("context_sam_lookup_name for %s in backend %s failed\n", + DEBUG(4,("sam_lookup_name for %s in backend %s failed\n", sid_string_static(sid), tmp_methods->backendname)); return nt_status; } @@ -208,13 +206,34 @@ NTSTATUS context_sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN NTSTATUS context_sam_update_domain(const SAM_CONTEXT *context, const SAM_DOMAIN_HANDLE *domain) { - return NT_STATUS_NOT_IMPLEMENTED; + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_update_domain: %d\n", __LINE__)); + + /* invalid domain specified */ + SAM_ASSERT(domain && domain->current_sam_methods); + + tmp_methods = domain->current_sam_methods; + + if (!tmp_methods->sam_update_domain) { + DEBUG(3, ("context_sam_update_domain: sam_methods of the domain did not specify sam_update_domain\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_domain(tmp_methods, domain))){ + DEBUG(4,("sam_update_domain in backend %s failed\n", + tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; } NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, int32 *domain_count, DOM_SID **domains, char ***domain_names) { SAM_METHODS *tmp_methods; - NTSTATUS nt_status; + NTSTATUS nt_status; SEC_DESC *sd; size_t sd_size; @@ -238,8 +257,7 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE tmp_methods= context->methods; - while (tmp_methods) - { + while (tmp_methods) { (*domain_count)++; tmp_methods= tmp_methods->next; } @@ -259,9 +277,7 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE return NT_STATUS_NO_MEMORY; } - while (tmp_methods) - { - + while (tmp_methods) { DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain->private.name, sid_string_static(&tmp_methods->domain->private.sid))); sid_copy(domains[i],&tmp_methods->domain->private.sid); if(asprintf(&(*domain_names[i]),"%s",tmp_methods->domain->private.name) < 0) { @@ -273,7 +289,6 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE i++; tmp_methods= tmp_methods->next; - } return NT_STATUS_OK; @@ -305,8 +320,7 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK tmp_methods= context->methods; - while (tmp_methods) - { + while (tmp_methods) { if (strcmp(domain, tmp_methods->domain->private.name) == 0) { sid_copy((*domainsid), &tmp_methods->domain->private.sid); return NT_STATUS_OK; @@ -336,7 +350,7 @@ NTSTATUS context_sam_get_domain_by_sid(const SAM_CONTEXT *context, const NT_USER } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_domain_handle(tmp_methods, access_token, access_desired, domain))) { - DEBUG(4,("context_sam_get_domain_by_sid for %s in backend %s failed\n", + DEBUG(4,("sam_get_domain_handle for %s in backend %s failed\n", sid_string_static(domainsid), tmp_methods->backendname)); return nt_status; } @@ -362,7 +376,7 @@ NTSTATUS context_sam_create_account(const SAM_CONTEXT *context, const NT_USER_TO } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_account(tmp_methods, access_token, access_desired, account_name, acct_ctrl, account))) { - DEBUG(4,("context_sam_create_account in backend %s failed\n", + DEBUG(4,("sam_create_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -377,6 +391,8 @@ NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_H SAM_METHODS *tmp_methods; uint32 rid; NTSTATUS nt_status; + + DEBUG(5,("context_sam_add_account: %d\n", __LINE__)); if (!NT_STATUS_IS_OK(nt_status = sam_get_account_sid(account, &accountsid))) { DEBUG(0,("Can't get account SID\n")); @@ -400,7 +416,7 @@ NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_H } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_account(tmp_methods, account))){ - DEBUG(4,("context_sam_add_account in backend %s failed\n", + DEBUG(4,("sam_add_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -410,35 +426,23 @@ NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_H NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) { - DOM_SID domainsid; - SAM_METHODS *tmp_methods; - const DOM_SID *accountsid; - uint32 rid; - NTSTATUS nt_status; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_account_sid(account, &accountsid))) { - DEBUG(0,("Can't get account SID\n")); - return nt_status; - } - - sid_copy(&domainsid, accountsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_account_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + DEBUG(5,("context_sam_update_account: %d\n", __LINE__)); + + /* invalid account specified */ + SAM_ASSERT(account && account->current_sam_methods); + + tmp_methods = account->current_sam_methods; + if (!tmp_methods->sam_update_account) { DEBUG(3, ("context_sam_update_account: sam_methods of the domain did not specify sam_update_account\n")); return NT_STATUS_NOT_IMPLEMENTED; } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_account(tmp_methods, account))){ - DEBUG(4,("context_sam_update_account in backend %s failed\n", + DEBUG(4,("sam_update_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -448,27 +452,15 @@ NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUN NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) { - DOM_SID domainsid; - SAM_METHODS *tmp_methods; - const DOM_SID *accountsid; - uint32 rid; - NTSTATUS nt_status; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_account_sid(account, &accountsid))) { - DEBUG(0,("Can't get account SID\n")); - return nt_status; - } - - sid_copy(&domainsid, accountsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_account_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_delete_account: %d\n", __LINE__)); + + /* invalid account specified */ + SAM_ASSERT(account && account->current_sam_methods); + + tmp_methods = account->current_sam_methods; if (!tmp_methods->sam_delete_account) { DEBUG(3, ("context_sam_delete_account: sam_methods of the domain did not specify sam_delete_account\n")); @@ -476,7 +468,7 @@ NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUN } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_account(tmp_methods, account))){ - DEBUG(4,("context_sam_delete_account in backend %s failed\n", + DEBUG(4,("sam_delete_account in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -502,7 +494,7 @@ NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOK } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, acct_ctrl, account_count, accounts))) { - DEBUG(4,("context_sam_enum_accounts for domain %s in backend %s failed\n", + DEBUG(4,("sam_enum_accounts for domain %s in backend %s failed\n", tmp_methods->domain->private.name, tmp_methods->backendname)); return nt_status; } @@ -538,7 +530,7 @@ NTSTATUS context_sam_get_account_by_sid(const SAM_CONTEXT *context, const NT_USE } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_account_by_sid(tmp_methods, access_token, access_desired, accountsid, account))) { - DEBUG(4,("context_sam_get_account_by_sid for %s in backend %s failed\n", + DEBUG(4,("sam_get_account_by_sid for %s in backend %s failed\n", sid_string_static(accountsid), tmp_methods->backendname)); return nt_status; } @@ -564,7 +556,7 @@ NTSTATUS context_sam_get_account_by_name(const SAM_CONTEXT *context, const NT_US } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_account_by_name(tmp_methods, access_token, access_desired, name, account))) { - DEBUG(4,("context_sam_get_account_by_name for %s\\%s in backend %s failed\n", + DEBUG(4,("sam_get_account_by_name for %s\\%s in backend %s failed\n", domain, name, tmp_methods->backendname)); return nt_status; } @@ -590,7 +582,7 @@ NTSTATUS context_sam_create_group(const SAM_CONTEXT *context, const NT_USER_TOKE } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_create_group(tmp_methods, access_token, access_desired, group_name, group_ctrl, group))) { - DEBUG(4,("context_sam_create_group in backend %s failed\n", + DEBUG(4,("sam_create_group in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -605,6 +597,8 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL SAM_METHODS *tmp_methods; uint32 rid; NTSTATUS nt_status; + + DEBUG(5,("context_sam_add_group: %d\n", __LINE__)); if (!NT_STATUS_IS_OK(nt_status = sam_get_group_sid(group, &groupsid))) { DEBUG(0,("Can't get group SID\n")); @@ -628,7 +622,7 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_group(tmp_methods, group))){ - DEBUG(4,("context_sam_add_group in backend %s failed\n", + DEBUG(4,("sam_add_group in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -638,35 +632,23 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { - DOM_SID domainsid; - const DOM_SID *groupsid; - struct sam_methods *tmp_methods; - uint32 rid; - NTSTATUS nt_status; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_group_sid(group, &groupsid))) { - DEBUG(0,("Can't get group SID\n")); - return nt_status; - } - - sid_copy(&domainsid, groupsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } - + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_update_group: %d\n", __LINE__)); + + /* invalid group specified */ + SAM_ASSERT(group && group->current_sam_methods); + + tmp_methods = group->current_sam_methods; + if (!tmp_methods->sam_update_group) { DEBUG(3, ("context_sam_update_group: sam_methods of the domain did not specify sam_update_group\n")); return NT_STATUS_NOT_IMPLEMENTED; } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_update_group(tmp_methods, group))){ - DEBUG(4,("context_sam_update_group in backend %s failed\n", + DEBUG(4,("sam_update_group in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -676,27 +658,15 @@ NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HA NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { - DOM_SID domainsid; - SAM_METHODS *tmp_methods; - const DOM_SID *groupsid; - uint32 rid; - NTSTATUS nt_status; - - if (!NT_STATUS_IS_OK(nt_status = sam_get_group_sid(group, &groupsid))) { - DEBUG(0,("Can't get group SID\n")); - return nt_status; - } - - sid_copy(&domainsid, groupsid); - if (!sid_split_rid(&domainsid, &rid)) { - DEBUG(3,("context_sam_get_group_by_sid: failed to split the sid\n")); - return NT_STATUS_INVALID_SID; - } - - if (!NT_STATUS_IS_OK(nt_status = sam_get_methods_by_sid(context, &tmp_methods, &domainsid))) { - DEBUG(4,("sam_get_methods_by_sid failed\n")); - return nt_status; - } + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + DEBUG(5,("context_sam_delete_group: %d\n", __LINE__)); + + /* invalid group specified */ + SAM_ASSERT(group && group->current_sam_methods); + + tmp_methods = group->current_sam_methods; if (!tmp_methods->sam_delete_group) { DEBUG(3, ("context_sam_delete_group: sam_methods of the domain did not specify sam_delete_group\n")); @@ -704,7 +674,7 @@ NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HA } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_group(tmp_methods, group))){ - DEBUG(4,("context_sam_delete_group in backend %s failed\n", + DEBUG(4,("sam_delete_group in backend %s failed\n", tmp_methods->backendname)); return nt_status; } @@ -730,7 +700,7 @@ NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, group_ctrl, groups_count, groups))) { - DEBUG(4,("context_sam_enum_groups for domain %s in backend %s failed\n", + DEBUG(4,("sam_enum_groups for domain %s in backend %s failed\n", tmp_methods->domain->private.name, tmp_methods->backendname)); return nt_status; } @@ -765,7 +735,7 @@ NTSTATUS context_sam_get_group_by_sid(const SAM_CONTEXT *context, const NT_USER_ } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_group_by_sid(tmp_methods, access_token, access_desired, groupsid, group))) { - DEBUG(4,("context_sam_get_group_by_sid for %s in backend %s failed\n", + DEBUG(4,("sam_get_group_by_sid for %s in backend %s failed\n", sid_string_static(groupsid), tmp_methods->backendname)); return nt_status; } @@ -791,7 +761,7 @@ NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER } if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_group_by_name(tmp_methods, access_token, access_desired, name, group))) { - DEBUG(4,("context_sam_get_group_by_name for %s\\%s in backend %s failed\n", + DEBUG(4,("sam_get_group_by_name for %s\\%s in backend %s failed\n", domain, name, tmp_methods->backendname)); return nt_status; } @@ -801,21 +771,120 @@ NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER NTSTATUS context_sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { - return NT_STATUS_NOT_IMPLEMENTED; + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + + /* invalid group or member specified */ + SAM_ASSERT(group && group->current_sam_methods && member); + + tmp_methods = group->current_sam_methods; + + if (!tmp_methods->sam_add_member_to_group) { + DEBUG(3, ("context_sam_add_member_to_group: sam_methods of the domain did not specify sam_add_member_to_group\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_add_member_to_group(tmp_methods, group, member))) { + DEBUG(4,("sam_add_member_to_group in backend %s failed\n", tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; + } + NTSTATUS context_sam_delete_member_from_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { - return NT_STATUS_NOT_IMPLEMENTED; + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + /* invalid group or member specified */ + SAM_ASSERT(group && group->current_sam_methods &&member); + + tmp_methods = group->current_sam_methods; + + if (!tmp_methods->sam_delete_member_from_group) { + DEBUG(3, ("context_sam_delete_member_from_group: sam_methods of the domain did not specify sam_delete_member_from_group\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_delete_member_from_group(tmp_methods, group, member))) { + DEBUG(4,("sam_delete_member_from_group in backend %s failed\n", tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; } NTSTATUS context_sam_enum_groupmembers(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) { - return NT_STATUS_NOT_IMPLEMENTED; + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + /* invalid group specified */ + SAM_ASSERT(group && group->current_sam_methods); + + tmp_methods = group->current_sam_methods; + + if (!tmp_methods->sam_enum_groupmembers) { + DEBUG(3, ("context_sam_enum_groupmembers: sam_methods of the domain did not specify sam_enum_group_members\n")); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groupmembers(tmp_methods, group, members_count, members))) { + DEBUG(4,("sam_enum_groupmembers in backend %s failed\n", tmp_methods->backendname)); + return nt_status; + } + + return NT_STATUS_OK; } -NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS context_sam_get_groups_of_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { - return NT_STATUS_NOT_IMPLEMENTED; + SAM_METHODS *tmp_methods; + NTSTATUS nt_status; + + uint32 tmp_group_count; + SAM_GROUP_ENUM *tmp_groups; + + DEBUG(5,("context_sam_get_groups_of_sid: %d\n", __LINE__)); + + /* invalid sam_context specified */ + SAM_ASSERT(context && context->methods); + + *group_count = 0; + + *groups = NULL; + + tmp_methods= context->methods; + + while (tmp_methods) { + DEBUG(5,("getting groups from domain \n")); + if (!tmp_methods->sam_get_groups_of_sid) { + DEBUG(3, ("context_sam_get_groups_of_sid: sam_methods of domain did not specify sam_get_groups_of_sid\n")); + SAFE_FREE(*groups); + return NT_STATUS_NOT_IMPLEMENTED; + } + + if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_get_groups_of_sid(tmp_methods, access_token, sids, group_ctrl, &tmp_group_count, &tmp_groups))) { + DEBUG(4,("sam_get_groups_of_sid in backend %s failed\n", tmp_methods->backendname)); + SAFE_FREE(*groups); + return nt_status; + } + + *groups = Realloc(*groups, ((*group_count) + tmp_group_count) * sizeof(SAM_GROUP_ENUM)); + + memcpy(&(*groups)[*group_count], tmp_groups, tmp_group_count); + + SAFE_FREE(tmp_groups); + + *group_count += tmp_group_count; + + tmp_methods = tmp_methods->next; + } + + return NT_STATUS_OK; } @@ -828,7 +897,7 @@ void free_sam_context(SAM_CONTEXT **context) { SAM_METHODS *sam_selected = (*context)->methods; - while (sam_selected){ + while (sam_selected) { if (sam_selected->free_private_data) { sam_selected->free_private_data(&(sam_selected->private_data)); } @@ -842,71 +911,217 @@ void free_sam_context(SAM_CONTEXT **context) /****************************************************************** Make a sam_methods from scratch *******************************************************************/ - -NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **selected) + +static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_backend_string) { - int i = 0; - SAM_METHODS *curmethods, *tmpmethods; - NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + char *tmp = NULL; + char *tmp_string = sam_backend_string; + + DEBUG(5,("make_backend_entry: %d\n", __LINE__)); + + SAM_ASSERT(sam_backend_string && backend_entry); + + backend_entry->module_name = sam_backend_string; + + DEBUG(5,("makeing backend_entry for %s\n", backend_entry->module_name)); + + if ((tmp = strchr(tmp_string, '|')) != NULL) { + DEBUGADD(20,("a domain name has been specified\n")); + *tmp = 0; + backend_entry->domain_name = tmp + 1; + tmp_string = tmp + 1; + } + + if ((tmp = strchr(tmp_string, ':')) != NULL) { + DEBUG(20,("options for the backend have been specified\n")); + *tmp = 0; + backend_entry->module_params = tmp + 1; + tmp_string = tmp + 1; + } + + if (backend_entry->domain_name == NULL) { + DEBUG(10,("make_backend_entry: no domain was specified for sam module %s. Useing default domain %s\n", + backend_entry->module_name, lp_workgroup())); + backend_entry->domain_name = lp_workgroup(); + } + + if ((backend_entry->domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID))) == NULL) { + DEBUG(0,("make_backend_entry: failed to malloc domain_sid\n")); + return NT_STATUS_NO_MEMORY; + } + + DEBUG(10,("looking up sid for domain %s\n", backend_entry->domain_name)); + + if (!secrets_fetch_domain_sid(backend_entry->domain_name, backend_entry->domain_sid)) { + DEBUG(2,("make_backend_entry: There is no SID stored for domain %s. Creating a new one.\n", + backend_entry->domain_name)); + /* FIXME */ + ZERO_STRUCTP(backend_entry->domain_sid); + } + + DEBUG(5,("make_backend_entry: module name: %s, module parameters: %s, domain name: %s, domain sid: %s\n", + backend_entry->module_name, backend_entry->module_params, backend_entry->domain_name, sid_string_static(backend_entry->domain_sid))); + + return NT_STATUS_OK; +} - if (!NT_STATUS_IS_OK(nt_status = make_sam_context(context))) { - return nt_status; - } - while (selected[i]){ - /* Try to initialise sam */ - DEBUG(5,("Trying to load: %s\n", selected[i])); - if (!NT_STATUS_IS_OK(nt_status = make_sam_methods_name(&curmethods, *context, selected[i]))) { - DEBUG(1, ("Loading %s failed!\n", selected[i])); - free_sam_context(context); - return nt_status; +static NTSTATUS check_correct_backend_entries(SAM_BACKEND_ENTRY **backend_entries, int *nBackends) +{ + BOOL has_builtin = False; + BOOL has_workgroup = False; + DOM_SID *global_sam_sid = get_global_sam_sid(); /* lp_workgroup doesn't play nicely with multiple domains */ + int increase_by = 0; + int i, j; + + DEBUG(5,("check_correct_backend_entries: %d\n", __LINE__)); + + for (i = 0; i < *nBackends; i++) { + if (sid_equal((*backend_entries)[i].domain_sid, &global_sid_Builtin)) { + DEBUG(20,("check_correct_backend_entries: smb.conf specified BUILTIN domain\n")); + has_builtin = True; } - curmethods->parent = *context; - DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); - i++; - } - return NT_STATUS_OK; + if (sid_equal((*backend_entries)[i].domain_sid, global_sam_sid)) { + DEBUG(20,("check_correct_backend_entries: smb.conf specified main domain\n")); + has_workgroup = True; + } + for (j = i + 1; j < *nBackends; j++) { + if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { + DEBUG(2,("two backend modules claim the same domain %s", + sid_string_static((*backend_entries)[j].domain_sid))); + return NT_STATUS_INVALID_PARAMETER; + } + } + } + + if (!has_workgroup) increase_by++; + if (!has_builtin) increase_by++; + + if (increase_by > 0) { + *nBackends += increase_by; + + (*backend_entries) = (SAM_BACKEND_ENTRY *)realloc((*backend_entries), sizeof(SAM_BACKEND_ENTRY) * (*nBackends)); + if (!has_workgroup) { + /* should be replaced by the default sam module */ + DEBUG(4,("There was no backend specified for domain %s useing plugin\n", + lp_workgroup())); + (*backend_entries)[i].module_name = "plugin"; + (*backend_entries)[i].module_params = NULL; + (*backend_entries)[i].domain_name = lp_workgroup(); + (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy((*backend_entries)[i].domain_sid, global_sam_sid); + i++; + } + if (!has_builtin) { + /* should be replaced by the default sam module */ + DEBUG(4,("There was no backend specified for domain BUILTIN useing plugin\n")); + (*backend_entries)[i].module_name = "plugin"; + (*backend_entries)[i].module_params = NULL; + (*backend_entries)[i].domain_name = "BUILTIN"; + (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy((*backend_entries)[i].domain_sid, &global_sid_Builtin); + i++; + } + } + + return NT_STATUS_OK; } -NTSTATUS make_sam_methods_name(SAM_METHODS **methods, SAM_CONTEXT *context, const char *selected) +static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods, SAM_BACKEND_ENTRY *backend_entry) { - char *module_name = smb_xstrdup(selected); - char *module_location = NULL, *p; NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; int i; + + DEBUG(5,("make_sam_methods_backend_entry: %d\n", __LINE__)); - p = strchr(module_name, ':'); - - if (p) { - *p = 0; - module_location = p+1; - trim_string(module_location, " ", " "); - } - - trim_string(module_name, " ", " "); - DEBUG(5,("Attempting to find an sam backend to match %s (%s)\n", selected, module_name)); - for (i = 0; builtin_sam_init_functions[i].name; i++) + DEBUG(5,("Attempting to find sam backend %s\n", backend_entry->module_name)); + for (i = 0; builtin_sam_init_functions[i].module_name; i++) { - if (strequal(builtin_sam_init_functions[i].name, module_name)) + if (strequal(builtin_sam_init_functions[i].module_name, backend_entry->module_name)) { - DEBUG(5,("Found sam backend %s (at pos %d)\n", module_name, i)); - nt_status = builtin_sam_init_functions[i].init(context, methods, module_location); + DEBUG(5,("Found sam backend %s (at pos %d)\n", backend_entry->module_name, i)); + DEBUGADD(5,("initialising it with options=%s for domain %s\n", backend_entry->module_params, sid_string_static(backend_entry->domain_sid))); + nt_status = builtin_sam_init_functions[i].init(context, methods, backend_entry->domain_sid, backend_entry->module_params); if (NT_STATUS_IS_OK(nt_status)) { - DEBUG(5,("sam backend %s has a valid init\n", selected)); + DEBUG(5,("sam backend %s has a valid init\n", backend_entry->module_name)); } else { - DEBUG(0,("sam backend %s did not correctly init (error was %s)\n", selected, nt_errstr(nt_status))); + DEBUG(2,("sam backend %s did not correctly init (error was %s)\n", + backend_entry->module_name, nt_errstr(nt_status))); } - SAFE_FREE(module_name); return nt_status; break; /* unreached */ } } + + DEBUG(2,("could not find backend %s\n", backend_entry->module_name)); - /* No such backend found */ - SAFE_FREE(module_name); return NT_STATUS_INVALID_PARAMETER; } + +NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) +{ + int i = 0, j = 0; + SAM_METHODS *curmethods, *tmpmethods; + int nBackends = 0; + SAM_BACKEND_ENTRY *backends = NULL; + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + + DEBUG(5,("make_sam_context_from_conf: %d\n", __LINE__)); + + if (!NT_STATUS_IS_OK(nt_status = make_sam_context(context))) { + DEBUG(4,("make_sam_context failed\n")); + return nt_status; + } + + while (sam_backends_param[nBackends]) + nBackends++; + + DEBUG(6,("There are %d domains listed with there backends\n", nBackends)); + + if ((backends = (SAM_BACKEND_ENTRY *)malloc(sizeof(SAM_BACKEND_ENTRY)*nBackends)) == NULL) { + DEBUG(0,("make_sam_context_list: failed to allocate backends\n")); + return NT_STATUS_NO_MEMORY; + } + ZERO_STRUCTP(backends); + + for (i = 0; i < nBackends; i++) { + DEBUG(8,("processing %s\n",sam_backends_param[i])); + if (!NT_STATUS_IS_OK(nt_status = make_backend_entry(&backends[i], sam_backends_param[i]))) { + DEBUG(4,("make_backend_entry failed\n")); + for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); + SAFE_FREE(backends); + free_sam_context(context); + return nt_status; + } + } + + if (!NT_STATUS_IS_OK(nt_status = check_correct_backend_entries(&backends, &nBackends))) { + DEBUG(4,("check_correct_backend_entries failed\n")); + for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); + SAFE_FREE(backends); + free_sam_context(context); + return nt_status; + } + + for (i = 0; i < nBackends; i++) { + if (!NT_STATUS_IS_OK(nt_status = make_sam_methods_backend_entry(*context, &curmethods, &backends[i]))) { + DEBUG(4,("make_sam_methods_backend_entry failed\n")); + for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); + SAFE_FREE(backends); + free_sam_context(context); + return nt_status; + } + curmethods->parent = *context; + DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); + } + + for (i = 0; i < nBackends; i++) SAFE_FREE(backends[i].domain_sid); + + SAFE_FREE(backends); + return NT_STATUS_OK; +} + /****************************************************************** Make a sam_context from scratch. *******************************************************************/ @@ -952,12 +1167,14 @@ struct sam_context *sam_get_static_context(BOOL reload) if ((sam_context) && (reload)) { sam_context->free_fn(&sam_context); if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { + DEBUG(4,("make_sam_context_list failed\n")); return NULL; } } if (!sam_context) { if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { + DEBUG(4,("make_sam_context_list failed\n")); return NULL; } } @@ -977,7 +1194,7 @@ BOOL initialize_sam(BOOL reload) } -NTSTATUS make_sam_methods(TALLOC_CTX *mem_ctx, SAM_METHODS **methods) +NTSTATUS make_sam_methods(TALLOC_CTX *mem_ctx, SAM_METHODS **methods) { *methods = talloc(mem_ctx, sizeof(SAM_METHODS)); diff --git a/source3/sam/sam_plugin.c b/source3/sam/sam_plugin.c index c32acf3d3c..9d2ee937ef 100644 --- a/source3/sam/sam_plugin.c +++ b/source3/sam/sam_plugin.c @@ -25,25 +25,25 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM -NTSTATUS sam_init_plugin(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const char *location) +NTSTATUS sam_init_plugin(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const DOM_SID *domain, const char *module_params) { - void * dl_handle; - char *plugin_location, *plugin_name, *p; + void *dl_handle; + char *plugin_params, *plugin_name, *p; sam_init_function plugin_init; int (*plugin_version)(void); - if (location == NULL) { + if (module_params == NULL) { DEBUG(0, ("The plugin module needs an argument!\n")); return NT_STATUS_UNSUCCESSFUL; } - plugin_name = smb_xstrdup(location); + plugin_name = smb_xstrdup(module_params); p = strchr(plugin_name, ':'); if (p) { *p = 0; - plugin_location = p+1; - trim_string(plugin_location, " ", " "); - } else plugin_location = NULL; + plugin_params = p+1; + trim_string(plugin_params, " ", " "); + } else plugin_params = NULL; trim_string(plugin_name, " ", " "); DEBUG(5, ("Trying to load sam plugin %s\n", plugin_name)); @@ -74,6 +74,6 @@ NTSTATUS sam_init_plugin(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_metho return NT_STATUS_UNSUCCESSFUL; } - DEBUG(5, ("Starting sam plugin %s with location %s\n", plugin_name, plugin_location)); - return plugin_init(sam_context, sam_method, plugin_location); + DEBUG(5, ("Starting sam plugin %s with parameters %s for domain %s\n", plugin_name, plugin_params, sid_string_static(domain))); + return plugin_init(sam_context, sam_method, domain, plugin_params); } -- cgit From e889fc07ac9ea09fd97035fabef629e4bdf54cd1 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 8 Sep 2002 15:25:22 +0000 Subject: Patch from Kai Krüger for the new SAM system (This used to be commit 771878a2d94009b6eccef5f98d4e782cd85c291e) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source3/include/sam.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source3/include/sam.h b/source3/include/sam.h index afa7e55c65..c8df95676e 100644 --- a/source3/include/sam.h +++ b/source3/include/sam.h @@ -259,13 +259,20 @@ typedef struct sam_methods void (*free_private_data)(void **); } SAM_METHODS; -typedef NTSTATUS (*sam_init_function)(const SAM_CONTEXT *, SAM_METHODS **, const char *); +typedef NTSTATUS (*sam_init_function)(const SAM_CONTEXT *, SAM_METHODS **, const DOM_SID *domain, const char *); struct sam_init_function_entry { - char *name; + char *module_name; /* Function to create a member of the sam_methods list */ sam_init_function init; }; +typedef struct sam_backend_entry { + char *module_name; + char *module_params; + char *domain_name; + DOM_SID *domain_sid; +} SAM_BACKEND_ENTRY; + #endif /* _SAM_H */ -- cgit From e7561581ffe1c2df591b28820e8815d3c6dd2c42 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 8 Sep 2002 23:57:40 +0000 Subject: Update patch. (This used to be commit 31feae9e8f0c9831284cfa85f9b771113549ed2f) --- source3/python/samba-head.patch | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/source3/python/samba-head.patch b/source3/python/samba-head.patch index ced7da551e..c48dd8a30a 100644 --- a/source3/python/samba-head.patch +++ b/source3/python/samba-head.patch @@ -1,11 +1,11 @@ Index: Makefile.in =================================================================== RCS file: /data/cvs/samba/source/Makefile.in,v -retrieving revision 1.502 -diff -u -r1.502 Makefile.in ---- Makefile.in 2002/08/02 07:20:56 1.502 -+++ Makefile.in 2002/08/06 00:51:48 -@@ -839,6 +839,45 @@ +retrieving revision 1.530 +diff -u -r1.530 Makefile.in +--- Makefile.in 8 Sep 2002 14:58:22 -0000 1.530 ++++ Makefile.in 8 Sep 2002 23:56:36 -0000 +@@ -846,6 +846,45 @@ -$(INSTALLCMD) -d ${prefix}/include -$(INSTALLCMD) include/libsmbclient.h ${prefix}/include @@ -54,16 +54,16 @@ diff -u -r1.502 Makefile.in Index: configure.in =================================================================== RCS file: /data/cvs/samba/source/configure.in,v -retrieving revision 1.326 -diff -u -r1.326 configure.in ---- configure.in 2002/07/30 09:59:52 1.326 -+++ configure.in 2002/08/06 00:51:51 -@@ -2797,7 +2797,7 @@ - builddir=`pwd` - AC_SUBST(builddir) - --AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile) -+AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/VFS/block/Makefile python/setup.py) +retrieving revision 1.336 +diff -u -r1.336 configure.in +--- configure.in 7 Sep 2002 04:08:02 -0000 1.336 ++++ configure.in 8 Sep 2002 23:56:37 -0000 +@@ -2828,7 +2828,7 @@ + # I added make files that are outside /source directory. + # I know this is not a good solution, will work out a better + # solution soon. --simo +-AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) ++AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py) ################################################# # Print very concise instructions on building/use -- cgit From bffdffcbb10db9a510c8713158cb3e4044b23c2c Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 01:06:20 +0000 Subject: Check no extra fields are present when parsing credentials. (This used to be commit fff081d3440373071d8859b7a7d71cf6489126a4) --- source3/python/py_common.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/source3/python/py_common.c b/source3/python/py_common.c index 6247bf6371..e21858e072 100644 --- a/source3/python/py_common.c +++ b/source3/python/py_common.c @@ -144,6 +144,8 @@ BOOL py_parse_creds(PyObject *creds, char **username, char **domain, if (creds && PyDict_Size(creds) > 0) { PyObject *username_obj, *password_obj, *domain_obj; + PyObject *key, *value; + int i; /* Check for presence of required fields */ @@ -166,8 +168,6 @@ BOOL py_parse_creds(PyObject *creds, char **username, char **domain, return False; } - /* Look for any other fields */ - /* Check type of required fields */ if (!PyString_Check(username_obj)) { @@ -185,6 +185,21 @@ BOOL py_parse_creds(PyObject *creds, char **username, char **domain, return False; } + /* Look for any extra fields */ + + i = 0; + + while (PyDict_Next(creds, &i, &key, &value)) { + if (strcmp(PyString_AsString(key), "domain") != 0 && + strcmp(PyString_AsString(key), "username") != 0 && + strcmp(PyString_AsString(key), "password") != 0) { + asprintf(errstr, + "creds contain extra field '%s'", + PyString_AsString(key)); + return False; + } + } + /* Assign values */ *username = PyString_AsString(username_obj); -- cgit From 35d9e886fba9e95b7df1abc4f25b22251b95ac82 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 01:09:23 +0000 Subject: Remove todo comment. (This used to be commit 95831c8266119284264f7f42b08fb4d8e21e9deb) --- source3/python/py_spoolss_drivers_conv.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source3/python/py_spoolss_drivers_conv.c b/source3/python/py_spoolss_drivers_conv.c index 5d181f9cd9..41ff38327e 100644 --- a/source3/python/py_spoolss_drivers_conv.c +++ b/source3/python/py_spoolss_drivers_conv.c @@ -59,7 +59,6 @@ struct pyconv py_DRIVER_INFO_6[] = { { "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 */ -- cgit From 1f919364f48a35dfd52d825e394a5a9462b1806e Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 01:13:27 +0000 Subject: Return WERR_UNKNOWN_LEVEL for getprinterdriver level 6 as we don't know how to decode a printer driver into a DRIVER_INFO_6 structure. (This used to be commit 1338f623c2a1e539ee9ee5fedbaf16baf3eb171e) --- source3/rpc_client/cli_spoolss.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index caa2f2901b..448dc7ece5 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -767,6 +767,9 @@ WERROR cli_spoolss_getprinterdriver(struct cli_state *cli, case 3: decode_printer_driver_3(mem_ctx, r.buffer, 1, &ctr->info3); break; + default: + DEBUG(10, ("cli_spoolss_getprinterdriver: unknown info level %d", level)); + return WERR_UNKNOWN_LEVEL; } done: -- cgit From 18c3436f9d22b259aa1ee1ed40265a2d33a660fb Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 03:22:39 +0000 Subject: Return WERR_UNKNOWN_LEVEL for unknown info levels. (This used to be commit d30da51956accfc4ea4662cece00d4df223421cd) --- source3/rpc_client/cli_spoolss.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index 448dc7ece5..ca24d95e33 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -661,7 +661,8 @@ WERROR cli_spoolss_setprinter(struct cli_state *cli, TALLOC_CTX *mem_ctx, prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); - make_spoolss_q_setprinter(mem_ctx, &q, pol, level, ctr, command); + if (!make_spoolss_q_setprinter(mem_ctx, &q, pol, level, ctr, command)) + goto done; /* Marshall data and send request */ @@ -1335,8 +1336,16 @@ WERROR cli_spoolss_getform(struct cli_state *cli, TALLOC_CTX *mem_ctx, if (needed) *needed = r.needed; - if (W_ERROR_IS_OK(result)) - smb_io_form_1("", r.buffer, form, 0); + if (W_ERROR_IS_OK(result)) { + switch(level) { + case 1: + smb_io_form_1("", r.buffer, form, 0); + break; + default: + DEBUG(10, ("cli_spoolss_getform: unknown info level %d", level)); + return WERR_UNKNOWN_LEVEL; + } + } done: prs_mem_free(&qbuf); -- cgit From 317ce5fc06db976e6a7f96e2070e92b65be6349e Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 04:38:12 +0000 Subject: Formatting tidyup. (This used to be commit 4132d9680a0b6ed829663399bba209a49ca41d56) --- source3/python/py_spoolss_drivers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/python/py_spoolss_drivers.c b/source3/python/py_spoolss_drivers.c index 2e8fac4a4e..0c242d9181 100644 --- a/source3/python/py_spoolss_drivers.c +++ b/source3/python/py_spoolss_drivers.c @@ -214,7 +214,7 @@ PyObject *spoolss_hnd_getprinterdriver(PyObject *self, PyObject *args, py_from_DRIVER_INFO_3(&result, ctr.info3); break; case 6: - py_from_DRIVER_INFO_6(&result, ctr.info6); + py_from_DRIVER_INFO_6(&result, ctr.info6); break; default: PyErr_SetString(spoolss_error, "unsupported info level"); -- cgit From b32f4ccf5b2cf74c98f4755856d81e217ab458ef Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 04:42:01 +0000 Subject: Pass level keyword down to cli_spoolss_getform() (This used to be commit 69bb58b92e92113b3ce2c72a3bfa46ed3056c261) --- source3/python/py_spoolss_forms.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/python/py_spoolss_forms.c b/source3/python/py_spoolss_forms.c index c216e00afe..ef9ed94533 100644 --- a/source3/python/py_spoolss_forms.c +++ b/source3/python/py_spoolss_forms.c @@ -102,7 +102,7 @@ PyObject *spoolss_hnd_getform(PyObject *self, PyObject *args, PyObject *kw) /* Call rpc function */ werror = cli_spoolss_getform(hnd->cli, hnd->mem_ctx, 0, &needed, - &hnd->pol, form_name, 1, &form); + &hnd->pol, form_name, level, &form); if (W_ERROR_V(werror) == ERRinsufficientbuffer) werror = cli_spoolss_getform( -- cgit From 8a362924714c53b5a5c02b7969a91b4240db57d2 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 9 Sep 2002 04:43:38 +0000 Subject: Fix crash bugs in getprinter info level code (yay unit tests). Let the cli_spoolss function return invalid info level error rather than checking for it ourselves. (This used to be commit fc5e186821abc429ea8314d0785b76cbe1ec5f74) --- source3/python/py_spoolss_printers.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/source3/python/py_spoolss_printers.c b/source3/python/py_spoolss_printers.c index 2a6d056bbf..a300eada86 100644 --- a/source3/python/py_spoolss_printers.c +++ b/source3/python/py_spoolss_printers.c @@ -135,11 +135,6 @@ PyObject *spoolss_hnd_getprinter(PyObject *self, PyObject *args, PyObject *kw) 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 */ @@ -224,7 +219,7 @@ PyObject *spoolss_hnd_setprinter(PyObject *self, PyObject *args, PyObject *kw) case 1: ctr.printers_1 = &pinfo.printers_1; - if (!py_to_PRINTER_INFO_1(&pinfo.printers_1, info)){ + if (!py_to_PRINTER_INFO_1(ctr.printers_1, info)){ PyErr_SetString(spoolss_error, "error converting printer to info 1"); return NULL; @@ -234,7 +229,7 @@ PyObject *spoolss_hnd_setprinter(PyObject *self, PyObject *args, PyObject *kw) case 2: ctr.printers_2 = &pinfo.printers_2; - if (!py_to_PRINTER_INFO_2(&pinfo.printers_2, info, + if (!py_to_PRINTER_INFO_2(ctr.printers_2, info, hnd->mem_ctx)){ PyErr_SetString(spoolss_error, "error converting printer to info 2"); @@ -245,7 +240,7 @@ PyObject *spoolss_hnd_setprinter(PyObject *self, PyObject *args, PyObject *kw) case 3: ctr.printers_3 = &pinfo.printers_3; - if (!py_to_PRINTER_INFO_3(&pinfo.printers_3, info, + if (!py_to_PRINTER_INFO_3(ctr.printers_3, info, hnd->mem_ctx)) { PyErr_SetString(spoolss_error, "error converting to printer info 3"); -- cgit From 0b819e864a62941f53f5a30dd4060f2935d64a03 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 05:22:13 +0000 Subject: Add little meta note (This used to be commit c651720633e3affb192eef9e676fad37a0ad4fae) --- source3/python/README | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source3/python/README b/source3/python/README index f751046376..6d42897bad 100644 --- a/source3/python/README +++ b/source3/python/README @@ -1,3 +1,9 @@ +This directory contains Python bindings to allow you to access various +aspects of Samba. At the moment their status is "experimental" and +they are not built by default. + + +---- Quick Install Guide -- Lines prepended with a $ indicate shell commands. -- cgit From 4a0c063cacaf99ae5319d75bbf6deeeddd0b48cc Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 05:46:59 +0000 Subject: Merge tpot's patch to add targets to build Python stuff. It's not built by default. (This used to be commit 452769f595c87ba14bde96cebf06e442e79402f3) --- source3/Makefile.in | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/source3/Makefile.in b/source3/Makefile.in index e22387c4de..2038036a92 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -846,6 +846,45 @@ installclientlib: -$(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) -- cgit From b15ffb766a223db7a514705fd056944e0c9098e9 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 05:54:11 +0000 Subject: Merge tpot's Python patch. ./configure now writes to the Python makefile-equivalent (setup.py). Remember to do "cvs update -d" to get the new directory. (This used to be commit 87396c559b60780e6f0613170f78ce863f0b71fd) --- source3/configure | 1395 +++++++++++++++++++++++++------------------------- source3/configure.in | 2 +- 2 files changed, 700 insertions(+), 697 deletions(-) diff --git a/source3/configure b/source3/configure index 970d527d72..fca9474006 100755 --- a/source3/configure +++ b/source3/configure @@ -1118,7 +1118,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in gawk mawk nawk awk +for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -2910,15 +2910,16 @@ else #line 2911 "configure" #include "confdefs.h" #include -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); - return(0); + exit(0); } EOF -if { (eval echo configure:2922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2938,7 +2939,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2942: checking size of long" >&5 +echo "configure:2943: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2946,18 +2947,19 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); - return(0); + exit(0); } EOF -if { (eval echo configure:2961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2977,7 +2979,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2981: checking size of short" >&5 +echo "configure:2983: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2985,18 +2987,19 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); - return(0); + exit(0); } EOF -if { (eval echo configure:3000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3017,12 +3020,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3021: checking for working const" >&5 +echo "configure:3024: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3092,21 +3095,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3096: checking for inline" >&5 +echo "configure:3099: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3113: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3132,14 +3135,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3136: checking whether byte ordering is bigendian" >&5 +echo "configure:3139: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3150,11 +3153,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3154: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3165,7 +3168,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3172: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3185,7 +3188,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3222,14 +3225,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3226: checking whether char is unsigned" >&5 +echo "configure:3229: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3286,12 +3289,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3290: checking return type of signal handlers" >&5 +echo "configure:3293: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3308,7 +3311,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3312: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3315: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3327,12 +3330,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3331: checking for uid_t in sys/types.h" >&5 +echo "configure:3334: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3361,12 +3364,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3365: checking for mode_t" >&5 +echo "configure:3368: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3394,12 +3397,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3398: checking for off_t" >&5 +echo "configure:3401: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3427,12 +3430,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3431: checking for size_t" >&5 +echo "configure:3434: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3460,12 +3463,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3464: checking for pid_t" >&5 +echo "configure:3467: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3493,12 +3496,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3497: checking for st_rdev in struct stat" >&5 +echo "configure:3500: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3506,7 +3509,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3510: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3527,12 +3530,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3531: checking for d_off in dirent" >&5 +echo "configure:3534: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3542,7 +3545,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3549: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3563,12 +3566,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3567: checking for ino_t" >&5 +echo "configure:3570: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3596,12 +3599,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3600: checking for loff_t" >&5 +echo "configure:3603: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3629,12 +3632,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3633: checking for offset_t" >&5 +echo "configure:3636: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3662,12 +3665,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3666: checking for ssize_t" >&5 +echo "configure:3669: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3695,12 +3698,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3699: checking for wchar_t" >&5 +echo "configure:3702: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3742,7 +3745,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3746: checking for $ac_word" >&5 +echo "configure:3749: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3791,12 +3794,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3795: checking for $ac_func" >&5 +echo "configure:3798: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3845,7 +3848,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3849: checking for dlopen in -ldl" >&5 +echo "configure:3852: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3853,7 +3856,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3871: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3894,13 +3897,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3898: checking for immediate structures" >&5 +echo "configure:3901: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3918,7 +3921,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3941,13 +3944,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3945: checking for unix domain sockets" >&5 +echo "configure:3948: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3962,7 +3965,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3966: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3984,13 +3987,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3988: checking for socklen_t type" >&5 +echo "configure:3991: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4003,7 +4006,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4024,13 +4027,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4028: checking for sig_atomic_t type" >&5 +echo "configure:4031: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4043,7 +4046,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4050: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4066,20 +4069,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4070: checking for errno declaration" >&5 +echo "configure:4073: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4101,20 +4104,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4105: checking for setresuid declaration" >&5 +echo "configure:4108: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4121: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4136,20 +4139,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4140: checking for setresgid declaration" >&5 +echo "configure:4143: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4171,20 +4174,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4175: checking for asprintf declaration" >&5 +echo "configure:4178: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4206,20 +4209,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4210: checking for vasprintf declaration" >&5 +echo "configure:4213: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4226: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4241,20 +4244,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4245: checking for vsnprintf declaration" >&5 +echo "configure:4248: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4276,20 +4279,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4280: checking for snprintf declaration" >&5 +echo "configure:4283: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4293: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4296: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4313,7 +4316,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4317: checking for real setresuid" >&5 +echo "configure:4320: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4322,12 +4325,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4352,7 +4355,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4356: checking for real setresgid" >&5 +echo "configure:4359: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4361,13 +4364,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4390,7 +4393,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4394: checking for 8-bit clean memcmp" >&5 +echo "configure:4397: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4398,7 +4401,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4431,12 +4434,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4435: checking for $ac_func" >&5 +echo "configure:4438: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4485,7 +4488,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4489: checking for crypt in -lcrypt" >&5 +echo "configure:4492: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4493,7 +4496,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4537,7 +4540,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4541: checking whether to use readline" >&5 +echo "configure:4544: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4549,17 +4552,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4553: checking for $ac_hdr" >&5 +echo "configure:4556: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4589,17 +4592,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4593: checking for $ac_hdr" >&5 +echo "configure:4596: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4603: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4606: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4630,17 +4633,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4634: checking for $ac_hdr" >&5 +echo "configure:4637: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4644: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4647: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4663,7 +4666,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4667: checking for tgetent in -l${termlib}" >&5 +echo "configure:4670: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4671,7 +4674,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4704,7 +4707,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4708: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4711: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4712,7 +4715,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4774,17 +4777,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4778: checking for $ac_hdr" >&5 +echo "configure:4781: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4788: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4814,17 +4817,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4818: checking for $ac_hdr" >&5 +echo "configure:4821: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4828: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4855,17 +4858,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4859: checking for $ac_hdr" >&5 +echo "configure:4862: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4888,7 +4891,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4892: checking for tgetent in -l${termlib}" >&5 +echo "configure:4895: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4896,7 +4899,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4929,7 +4932,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4933: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4936: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4937,7 +4940,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4998,7 +5001,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5002: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5005: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5006,7 +5009,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5050,12 +5053,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5054: checking for $ac_func" >&5 +echo "configure:5057: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5106,7 +5109,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5110: checking for printf in -lnsl_s" >&5 +echo "configure:5113: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5114,7 +5117,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5156,7 +5159,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5160: checking for printf in -lnsl" >&5 +echo "configure:5163: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5164,7 +5167,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5206,7 +5209,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5210: checking for connect in -lsocket" >&5 +echo "configure:5213: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5214,7 +5217,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5256,7 +5259,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5260: checking for connect in -linet" >&5 +echo "configure:5263: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5264,7 +5267,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5319,12 +5322,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5323: checking for $ac_func" >&5 +echo "configure:5326: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5373,7 +5376,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5377: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5380: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5381,7 +5384,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5422,12 +5425,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5426: checking for $ac_func" >&5 +echo "configure:5429: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5483,12 +5486,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5487: checking for $ac_func" >&5 +echo "configure:5490: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5538,12 +5541,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5542: checking for $ac_func" >&5 +echo "configure:5545: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5593,12 +5596,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5597: checking for $ac_func" >&5 +echo "configure:5600: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5648,12 +5651,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5652: checking for $ac_func" >&5 +echo "configure:5655: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5703,12 +5706,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5707: checking for $ac_func" >&5 +echo "configure:5710: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5758,12 +5761,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5762: checking for $ac_func" >&5 +echo "configure:5765: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5813,12 +5816,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5817: checking for $ac_func" >&5 +echo "configure:5820: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5868,12 +5871,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5872: checking for $ac_func" >&5 +echo "configure:5875: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5923,12 +5926,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5927: checking for $ac_func" >&5 +echo "configure:5930: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5978,12 +5981,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5982: checking for $ac_func" >&5 +echo "configure:5985: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6034,12 +6037,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6038: checking for $ac_func" >&5 +echo "configure:6041: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6091,12 +6094,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6095: checking for $ac_func" >&5 +echo "configure:6098: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6147,12 +6150,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6151: checking for $ac_func" >&5 +echo "configure:6154: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6202,12 +6205,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6206: checking for $ac_func" >&5 +echo "configure:6209: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6257,12 +6260,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6261: checking for $ac_func" >&5 +echo "configure:6264: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6312,12 +6315,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6316: checking for $ac_func" >&5 +echo "configure:6319: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6367,12 +6370,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6371: checking for $ac_func" >&5 +echo "configure:6374: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6422,12 +6425,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6426: checking for $ac_func" >&5 +echo "configure:6429: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6477,12 +6480,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6481: checking for $ac_func" >&5 +echo "configure:6484: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6532,12 +6535,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6536: checking for $ac_func" >&5 +echo "configure:6539: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6587,12 +6590,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6591: checking for $ac_func" >&5 +echo "configure:6594: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6642,12 +6645,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6646: checking for $ac_func" >&5 +echo "configure:6649: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6697,12 +6700,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6701: checking for $ac_func" >&5 +echo "configure:6704: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6752,12 +6755,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6756: checking for $ac_func" >&5 +echo "configure:6759: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6787: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6807,12 +6810,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6811: checking for $ac_func" >&5 +echo "configure:6814: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6842: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6862,12 +6865,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6866: checking for $ac_func" >&5 +echo "configure:6869: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6921,9 +6924,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6925: checking for stat64 in " >&5 +echo "configure:6928: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6954,9 +6957,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6958: checking for lstat64 in " >&5 +echo "configure:6961: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6987,9 +6990,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6991: checking for fstat64 in " >&5 +echo "configure:6994: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7021,7 +7024,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7025: checking for dn_expand in -lresolv" >&5 +echo "configure:7028: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7029,7 +7032,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7078,12 +7081,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7082: checking for $ac_func" >&5 +echo "configure:7085: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7113: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7131,7 +7134,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7135: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7138: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7139,7 +7142,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7180,12 +7183,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7184: checking for $ac_func" >&5 +echo "configure:7187: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7239,12 +7242,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7243: checking for $ac_func" >&5 +echo "configure:7246: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7292,7 +7295,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7296: checking for putprpwnam in -lsec" >&5 +echo "configure:7299: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7300,7 +7303,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7341,12 +7344,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7345: checking for $ac_func" >&5 +echo "configure:7348: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7401,12 +7404,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7405: checking for $ac_func" >&5 +echo "configure:7408: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7454,7 +7457,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7458: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7461: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7462,7 +7465,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7503,12 +7506,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7507: checking for $ac_func" >&5 +echo "configure:7510: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7562,12 +7565,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7566: checking for $ac_func" >&5 +echo "configure:7569: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7615,7 +7618,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7619: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7622: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7623,7 +7626,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7664,12 +7667,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7668: checking for $ac_func" >&5 +echo "configure:7671: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7725,12 +7728,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7729: checking for $ac_func" >&5 +echo "configure:7732: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7778,7 +7781,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7782: checking for getspnam in -lgen" >&5 +echo "configure:7785: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7786,7 +7789,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7827,12 +7830,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7831: checking for $ac_func" >&5 +echo "configure:7834: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7887,12 +7890,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7891: checking for $ac_func" >&5 +echo "configure:7894: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7940,7 +7943,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7944: checking for getspnam in -lsecurity" >&5 +echo "configure:7947: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7948,7 +7951,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7966: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7989,12 +7992,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7993: checking for $ac_func" >&5 +echo "configure:7996: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8048,12 +8051,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8052: checking for $ac_func" >&5 +echo "configure:8055: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8101,7 +8104,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8105: checking for getspnam in -lsec" >&5 +echo "configure:8108: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8109,7 +8112,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8150,12 +8153,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8154: checking for $ac_func" >&5 +echo "configure:8157: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8210,12 +8213,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8214: checking for $ac_func" >&5 +echo "configure:8217: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8263,7 +8266,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8267: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8270: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8271,7 +8274,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8312,12 +8315,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8316: checking for $ac_func" >&5 +echo "configure:8319: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8371,12 +8374,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8375: checking for $ac_func" >&5 +echo "configure:8378: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8424,7 +8427,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8428: checking for bigcrypt in -lsec" >&5 +echo "configure:8431: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8432,7 +8435,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8473,12 +8476,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8477: checking for $ac_func" >&5 +echo "configure:8480: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8533,12 +8536,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8537: checking for $ac_func" >&5 +echo "configure:8540: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8586,7 +8589,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8590: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8593: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8594,7 +8597,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8635,12 +8638,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8639: checking for $ac_func" >&5 +echo "configure:8642: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8694,12 +8697,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8698: checking for $ac_func" >&5 +echo "configure:8701: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8747,7 +8750,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8751: checking for getprpwnam in -lsec" >&5 +echo "configure:8754: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8755,7 +8758,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8796,12 +8799,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8800: checking for $ac_func" >&5 +echo "configure:8803: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8868,7 +8871,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8872: checking ability to build shared libraries" >&5 +echo "configure:8875: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9028,7 +9031,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9032: checking for $ac_word" >&5 +echo "configure:9035: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9085,17 +9088,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9089: checking linker flags for shared libraries" >&5 +echo "configure:9092: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9092: checking compiler flags for position-independent code" >&5 +echo "configure:9095: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9099: checking whether building shared libraries actually works" >&5 +echo "configure:9102: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9126,7 +9129,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9130: checking for long long" >&5 +echo "configure:9133: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9135,12 +9138,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9167,20 +9170,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9171: checking for LL suffix on long long integers" >&5 +echo "configure:9174: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9184: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9202,7 +9205,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9206: checking for 64 bit off_t" >&5 +echo "configure:9209: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9211,13 +9214,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9240,7 +9243,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9244: checking for off64_t" >&5 +echo "configure:9247: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9249,7 +9252,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9282,7 +9285,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9286: checking for 64 bit ino_t" >&5 +echo "configure:9289: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9291,13 +9294,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9320,7 +9323,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9324: checking for ino64_t" >&5 +echo "configure:9327: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9329,7 +9332,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9362,7 +9365,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9366: checking for dev64_t" >&5 +echo "configure:9369: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9371,7 +9374,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9404,13 +9407,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9408: checking for struct dirent64" >&5 +echo "configure:9411: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9429: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9443,7 +9446,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9447: checking for major macro" >&5 +echo "configure:9450: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9452,7 +9455,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9484,7 +9487,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9488: checking for minor macro" >&5 +echo "configure:9491: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9493,7 +9496,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9525,7 +9528,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9529: checking for unsigned char" >&5 +echo "configure:9532: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9534,12 +9537,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9562,13 +9565,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9566: checking for sin_len in sock" >&5 +echo "configure:9569: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9577,7 +9580,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9584: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9598,13 +9601,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9602: checking whether seekdir returns void" >&5 +echo "configure:9605: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9613,7 +9616,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9620: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9634,20 +9637,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9638: checking for __FILE__ macro" >&5 +echo "configure:9641: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9668,20 +9671,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9672: checking for __FUNCTION__ macro" >&5 +echo "configure:9675: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9685: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9702,7 +9705,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9706: checking if gettimeofday takes tz argument" >&5 +echo "configure:9709: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9711,14 +9714,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9741,13 +9744,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9745: checking for __va_copy" >&5 +echo "configure:9748: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9755,7 +9758,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9759: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9776,7 +9779,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9780: checking for C99 vsnprintf" >&5 +echo "configure:9783: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9785,7 +9788,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9812,7 +9815,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9835,7 +9838,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9839: checking for broken readdir" >&5 +echo "configure:9842: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9844,7 +9847,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9852,7 +9855,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9875,13 +9878,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9879: checking for utimbuf" >&5 +echo "configure:9882: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9889,7 +9892,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9913,12 +9916,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9917: checking for $ac_func" >&5 +echo "configure:9920: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9967,13 +9970,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9971: checking for ut_name in utmp" >&5 +echo "configure:9974: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9981,7 +9984,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9985: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9988: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10002,13 +10005,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10006: checking for ut_user in utmp" >&5 +echo "configure:10009: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10016,7 +10019,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10020: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10023: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10037,13 +10040,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10041: checking for ut_id in utmp" >&5 +echo "configure:10044: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10051,7 +10054,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10072,13 +10075,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10076: checking for ut_host in utmp" >&5 +echo "configure:10079: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10086,7 +10089,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10107,13 +10110,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10111: checking for ut_time in utmp" >&5 +echo "configure:10114: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10121,7 +10124,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10128: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10142,13 +10145,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10146: checking for ut_tv in utmp" >&5 +echo "configure:10149: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10156,7 +10159,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10177,13 +10180,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10181: checking for ut_type in utmp" >&5 +echo "configure:10184: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10191,7 +10194,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10212,13 +10215,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10216: checking for ut_pid in utmp" >&5 +echo "configure:10219: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10226,7 +10229,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10247,13 +10250,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10251: checking for ut_exit in utmp" >&5 +echo "configure:10254: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10261,7 +10264,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10268: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10282,13 +10285,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10286: checking for ut_addr in utmp" >&5 +echo "configure:10289: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10296,7 +10299,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10303: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10318,13 +10321,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10322: checking whether pututline returns pointer" >&5 +echo "configure:10325: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10332,7 +10335,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10336: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10354,13 +10357,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10358: checking for ut_syslen in utmpx" >&5 +echo "configure:10361: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10368,7 +10371,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10392,7 +10395,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10396: checking whether to use libiconv" >&5 +echo "configure:10399: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10405,7 +10408,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10409: checking for iconv_open in -liconv" >&5 +echo "configure:10412: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10413,7 +10416,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10467,7 +10470,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10471: checking for working iconv" >&5 +echo "configure:10474: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10476,7 +10479,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10487,7 +10490,7 @@ main() { } EOF -if { (eval echo configure:10491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10511,7 +10514,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10515: checking for Linux kernel oplocks" >&5 +echo "configure:10518: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10520,7 +10523,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10534,7 +10537,7 @@ main() { } EOF -if { (eval echo configure:10538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10557,7 +10560,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10561: checking for kernel change notify support" >&5 +echo "configure:10564: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10566,7 +10569,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10580,7 +10583,7 @@ main() { } EOF -if { (eval echo configure:10584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10603,7 +10606,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10607: checking for kernel share modes" >&5 +echo "configure:10610: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10612,7 +10615,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10628,7 +10631,7 @@ main() { } EOF -if { (eval echo configure:10632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10654,13 +10657,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10658: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10661: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10668,7 +10671,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10672: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10675: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10689,7 +10692,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10693: checking for irix specific capabilities" >&5 +echo "configure:10696: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10698,7 +10701,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10713,7 +10716,7 @@ main() { } EOF -if { (eval echo configure:10717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10741,13 +10744,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10745: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10748: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10757,7 +10760,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10778,13 +10781,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10782: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10785: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10794,7 +10797,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10798: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10801: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10815,13 +10818,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10819: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10822: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10831,7 +10834,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10838: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10852,13 +10855,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10856: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10859: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10868,7 +10871,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10890,13 +10893,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10894: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10897: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10910,7 +10913,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10914: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10917: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10931,16 +10934,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10935: checking for test routines" >&5 +echo "configure:10938: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10954,7 +10957,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10958: checking for ftruncate extend" >&5 +echo "configure:10961: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10963,11 +10966,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10990,7 +10993,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10994: checking for AF_LOCAL socket support" >&5 +echo "configure:10997: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10999,11 +11002,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11027,7 +11030,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11031: checking for broken getgroups" >&5 +echo "configure:11034: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11036,11 +11039,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11063,7 +11066,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11067: checking whether getpass should be replaced" >&5 +echo "configure:11070: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11071,7 +11074,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11091: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11107,7 +11110,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11111: checking for broken inet_ntoa" >&5 +echo "configure:11114: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11116,7 +11119,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11130,7 +11133,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11153,7 +11156,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11157: checking for secure mkstemp" >&5 +echo "configure:11160: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11162,7 +11165,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11179,7 +11182,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11202,7 +11205,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11206: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11209: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11211,12 +11214,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11239,7 +11242,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11243: checking for root" >&5 +echo "configure:11246: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11248,11 +11251,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11280,7 +11283,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11284: checking for iface AIX" >&5 +echo "configure:11287: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11289,7 +11292,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11321,7 +11324,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11325: checking for iface ifconf" >&5 +echo "configure:11328: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11330,7 +11333,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11363,7 +11366,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11367: checking for iface ifreq" >&5 +echo "configure:11370: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11372,7 +11375,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11387: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11409,7 +11412,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11413: checking for setresuid" >&5 +echo "configure:11416: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11418,7 +11421,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11452,7 +11455,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11456: checking for setreuid" >&5 +echo "configure:11459: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11461,7 +11464,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11494,7 +11497,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11498: checking for seteuid" >&5 +echo "configure:11501: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11503,7 +11506,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11536,7 +11539,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11540: checking for setuidx" >&5 +echo "configure:11543: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11545,7 +11548,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11578,7 +11581,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11582: checking for working mmap" >&5 +echo "configure:11585: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11587,11 +11590,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11614,7 +11617,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11618: checking for ftruncate needs root" >&5 +echo "configure:11621: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11623,11 +11626,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11650,7 +11653,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11654: checking for fcntl locking" >&5 +echo "configure:11657: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11659,11 +11662,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11686,7 +11689,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11690: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11693: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11695,11 +11698,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11724,7 +11727,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11728: checking for 64 bit fcntl locking" >&5 +echo "configure:11731: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11733,7 +11736,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11782,13 +11785,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11786: checking for st_blocks in struct stat" >&5 +echo "configure:11789: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11797,7 +11800,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11801: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11804: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11818,13 +11821,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11822: checking for st_blksize in struct stat" >&5 +echo "configure:11825: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11833,7 +11836,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11856,13 +11859,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11860: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11863: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11883: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11899,13 +11902,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11903: checking for broken nisplus include files" >&5 +echo "configure:11906: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11915,7 +11918,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11939,7 +11942,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11943: checking whether to use smbwrapper" >&5 +echo "configure:11946: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11986,7 +11989,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11990: checking whether to use AFS clear-text auth" >&5 +echo "configure:11993: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12012,7 +12015,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12016: checking whether to use DFS clear-text auth" >&5 +echo "configure:12019: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12038,7 +12041,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12042: checking for /usr/kerberos" >&5 +echo "configure:12045: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12051,7 +12054,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12055: checking for kerberos 5 install path" >&5 +echo "configure:12058: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12080,17 +12083,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12084: checking for $ac_hdr" >&5 +echo "configure:12087: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12097: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12123,17 +12126,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12127: checking for $ac_hdr" >&5 +echo "configure:12130: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12140: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12163,7 +12166,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12167: checking for _et_list in -lcom_err" >&5 +echo "configure:12170: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12171,7 +12174,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12203,7 +12206,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12207: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12210: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12211,7 +12214,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12247,7 +12250,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12251: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12254: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12255,7 +12258,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12294,7 +12297,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12298: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12301: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12302,7 +12305,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12342,7 +12345,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12346: checking for ber_scanf in -llber" >&5 +echo "configure:12349: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12350,7 +12353,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12386,7 +12389,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12390: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12393: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12394,7 +12397,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12436,12 +12439,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12440: checking for $ac_func" >&5 +echo "configure:12443: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12489,13 +12492,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12493: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12496: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12504,7 +12507,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12508: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12511: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12526,7 +12529,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12530: checking whether to use AUTOMOUNT" >&5 +echo "configure:12533: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12551,7 +12554,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12555: checking whether to use SMBMOUNT" >&5 +echo "configure:12558: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12588,7 +12591,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12592: checking whether to use PAM" >&5 +echo "configure:12595: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12614,7 +12617,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12618: checking for pam_get_data in -lpam" >&5 +echo "configure:12621: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12622,7 +12625,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12660,7 +12663,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12664: checking whether to use pam_smbpass" >&5 +echo "configure:12667: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12698,12 +12701,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12702: checking for $ac_func" >&5 +echo "configure:12705: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12752,7 +12755,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12756: checking for crypt in -lcrypt" >&5 +echo "configure:12759: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12760,7 +12763,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12806,7 +12809,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12810: checking for a crypt that needs truncated salt" >&5 +echo "configure:12813: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12815,11 +12818,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12845,7 +12848,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12849: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12852: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12877,7 +12880,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12881: checking whether to use TDB SAM database" >&5 +echo "configure:12884: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12902,7 +12905,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12906: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12909: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12933,7 +12936,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12937: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12940: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12958,7 +12961,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12962: checking whether to use syslog logging" >&5 +echo "configure:12965: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12983,7 +12986,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12987: checking whether to use profiling" >&5 +echo "configure:12990: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13011,7 +13014,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13015: checking whether to support disk-quotas" >&5 +echo "configure:13018: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13022,13 +13025,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13026: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13029: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13040,7 +13043,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13044: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13089,7 +13092,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13093: checking whether to support utmp accounting" >&5 +echo "configure:13096: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13114,7 +13117,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13118: checking chosen man pages' language(s)" >&5 +echo "configure:13121: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13145,7 +13148,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13149: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13152: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13173,14 +13176,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13177: checking how to get filesystem space usage" >&5 +echo "configure:13180: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13184: checking statvfs64 function (SVR4)" >&5 +echo "configure:13187: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13188,7 +13191,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13235,12 +13238,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13239: checking statvfs function (SVR4)" >&5 +echo "configure:13242: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13248,7 +13251,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13273,7 +13276,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13277: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13280: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13281,7 +13284,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13294,7 +13297,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13321,7 +13324,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13325: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13328: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13329,7 +13332,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13375,7 +13378,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13379: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13382: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13383,7 +13386,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13393,7 +13396,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13420,7 +13423,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13424: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13427: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13428,7 +13431,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13444,7 +13447,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13471,7 +13474,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13475: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13478: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13479,7 +13482,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13499,7 +13502,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13532,9 +13535,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13536: checking if large file support can be enabled" >&5 +echo "configure:13539: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13554: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13612,7 +13615,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13616: checking whether to support ACLs" >&5 +echo "configure:13619: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13665,7 +13668,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13669: checking for acl_get_file in -lacl" >&5 +echo "configure:13672: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13673,7 +13676,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13712,13 +13715,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13716: checking for ACL support" >&5 +echo "configure:13719: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13726,7 +13729,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13746,13 +13749,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13750: checking for acl_get_perm_np" >&5 +echo "configure:13753: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13760,7 +13763,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13807,7 +13810,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13811: checking whether to build winbind" >&5 +echo "configure:13814: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13903,20 +13906,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13907: checking whether struct passwd has pw_comment" >&5 +echo "configure:13910: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13920: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13941,20 +13944,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13945: checking whether struct passwd has pw_age" >&5 +echo "configure:13948: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13958: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13993,7 +13996,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:13997: checking for poptGetContext in -lpopt" >&5 +echo "configure:14000: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14001,7 +14004,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14036,7 +14039,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14040: checking whether to use included popt" >&5 +echo "configure:14043: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14059,16 +14062,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14063: checking configure summary" >&5 +echo "configure:14066: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -14188,7 +14191,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff --git a/source3/configure.in b/source3/configure.in index b1f1c8aec7..baeebd6654 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2828,7 +2828,7 @@ AC_SUBST(builddir) # I added make files that are outside /source directory. # I know this is not a good solution, will work out a better # solution soon. --simo -AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) +AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py) ################################################# # Print very concise instructions on building/use -- cgit From 01e7afadd6b49b3174623c637ec21d5abf7bc782 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 06:05:39 +0000 Subject: Add --with-python=PYTHONNAME configure option, so that the libraries get linked for the appropriate version. (This used to be commit 2ea647bbfaba5a4ee7cb232ae1a21acbd2a9b5c6) --- source3/Makefile.in | 6 +- source3/configure | 1637 +++++++++++++++++++++++++------------------------- source3/configure.in | 13 + 3 files changed, 844 insertions(+), 812 deletions(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 2038036a92..18df73a6da 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -18,6 +18,7 @@ LDFLAGS=@LDFLAGS@ LDSHFLAGS=@LDSHFLAGS@ @LDFLAGS@ @CFLAGS@ AWK=@AWK@ DYNEXP=@DYNEXP@ +PYTHON=@PYTHON@ TERMLDFLAGS=@TERMLDFLAGS@ TERMLIBS=@TERMLIBS@ @@ -881,9 +882,8 @@ python_common_proto: $(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 + PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ + $(PYTHON) python/setup.py build # revert to the previously installed version revert: diff --git a/source3/configure b/source3/configure index fca9474006..fc2ed311bd 100755 --- a/source3/configure +++ b/source3/configure @@ -84,6 +84,8 @@ ac_help="$ac_help --with-winbind Build winbind (default, if supported by OS)" ac_help="$ac_help --with-included-popt use bundled popt library, not from system" +ac_help="$ac_help + --with-python=PYTHONNAME build Python libraries" # Initialize some variables set by options. # The variables have the same names as the options, with @@ -816,7 +818,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:820: checking for $ac_word" >&5 +echo "configure:822: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -846,7 +848,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:850: checking for $ac_word" >&5 +echo "configure:852: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -897,7 +899,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:901: checking for $ac_word" >&5 +echo "configure:903: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -929,7 +931,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:933: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:935: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -940,12 +942,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 944 "configure" +#line 946 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -971,12 +973,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:975: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:977: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:980: checking whether we are using GNU C" >&5 +echo "configure:982: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -985,7 +987,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:989: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1004,7 +1006,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1008: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1010: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1066,7 +1068,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1070: checking for a BSD compatible install" >&5 +echo "configure:1072: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1123,7 +1125,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1127: checking for $ac_word" >&5 +echo "configure:1129: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1155,7 +1157,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1159: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1161: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1171,7 +1173,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1175: checking for POSIXized ISC" >&5 +echo "configure:1177: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1194,10 +1196,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1198: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1200: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1201: checking whether cc understands -c and -o together" >&5 +echo "configure:1203: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1209,16 +1211,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1213: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1214: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1215: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1252,20 +1254,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1256: checking that the C compiler understands volatile" >&5 +echo "configure:1258: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1314,7 +1316,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1318: checking host system type" >&5 +echo "configure:1320: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1335,7 +1337,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1339: checking target system type" >&5 +echo "configure:1341: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1353,7 +1355,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1357: checking build system type" >&5 +echo "configure:1359: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1387,7 +1389,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1391: checking config.cache system type" >&5 +echo "configure:1393: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1415,7 +1417,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1419: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1421: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1576,14 +1578,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1580: checking for LFS support" >&5 +echo "configure:1582: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1595,7 +1597,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1626,14 +1628,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1630: checking for LFS support" >&5 +echo "configure:1632: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1671,7 +1673,7 @@ main() { } EOF -if { (eval echo configure:1675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1704,14 +1706,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1708: checking for LFS support" >&5 +echo "configure:1710: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1723,7 +1725,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1753,21 +1755,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1757: checking for inline" >&5 +echo "configure:1759: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1773: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1793,7 +1795,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1797: checking how to run the C preprocessor" >&5 +echo "configure:1799: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1808,13 +1810,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1818: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1825,13 +1827,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1842,13 +1844,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1873,12 +1875,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1877: checking for ANSI C header files" >&5 +echo "configure:1879: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1886,7 +1888,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1890: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1892: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1903,7 +1905,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1921,7 +1923,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1942,7 +1944,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1953,7 +1955,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1981,12 +1983,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1985: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1987: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1994,7 +1996,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:1998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2000: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2019,7 +2021,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2023: checking for opendir in -ldir" >&5 +echo "configure:2025: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2027,7 +2029,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2060,7 +2062,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2064: checking for opendir in -lx" >&5 +echo "configure:2066: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2068,7 +2070,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2102,12 +2104,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2106: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2108: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2116,7 +2118,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2137,12 +2139,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2141: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2143: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2158,7 +2160,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2182,17 +2184,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2186: checking for $ac_hdr" >&5 +echo "configure:2188: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2196: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2198: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2222,17 +2224,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2226: checking for $ac_hdr" >&5 +echo "configure:2228: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2236: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2262,17 +2264,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2266: checking for $ac_hdr" >&5 +echo "configure:2268: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2276: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2278: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2302,17 +2304,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2306: checking for $ac_hdr" >&5 +echo "configure:2308: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2316: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2318: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2342,17 +2344,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2346: checking for $ac_hdr" >&5 +echo "configure:2348: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2356: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2358: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2382,17 +2384,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2386: checking for $ac_hdr" >&5 +echo "configure:2388: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2396: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2398: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2422,17 +2424,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2426: checking for $ac_hdr" >&5 +echo "configure:2428: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2436: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2438: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2462,17 +2464,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2466: checking for $ac_hdr" >&5 +echo "configure:2468: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2476: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2478: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2502,17 +2504,17 @@ for ac_hdr in sys/syslog.h syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2506: checking for $ac_hdr" >&5 +echo "configure:2508: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2516: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2518: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2546,14 +2548,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2557: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2559: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2575,17 +2577,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2579: checking for $ac_hdr" >&5 +echo "configure:2581: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2591: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2615,17 +2617,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2619: checking for $ac_hdr" >&5 +echo "configure:2621: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2631: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2655,17 +2657,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2659: checking for $ac_hdr" >&5 +echo "configure:2661: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2671: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2695,17 +2697,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2699: checking for $ac_hdr" >&5 +echo "configure:2701: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2709: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2711: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2735,17 +2737,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2739: checking for $ac_hdr" >&5 +echo "configure:2741: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2749: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2777,17 +2779,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2781: checking for $ac_hdr" >&5 +echo "configure:2783: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2819,17 +2821,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2823: checking for $ac_hdr" >&5 +echo "configure:2825: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2861,17 +2863,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2865: checking for $ac_hdr" >&5 +echo "configure:2867: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2875: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2877: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2899,7 +2901,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2903: checking size of int" >&5 +echo "configure:2905: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2907,7 +2909,7 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < #include @@ -2919,7 +2921,7 @@ main() exit(0); } EOF -if { (eval echo configure:2923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2939,7 +2941,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2943: checking size of long" >&5 +echo "configure:2945: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2947,7 +2949,7 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < #include @@ -2959,7 +2961,7 @@ main() exit(0); } EOF -if { (eval echo configure:2963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2979,7 +2981,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2983: checking size of short" >&5 +echo "configure:2985: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2987,7 +2989,7 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < #include @@ -2999,7 +3001,7 @@ main() exit(0); } EOF -if { (eval echo configure:3003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3020,12 +3022,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3024: checking for working const" >&5 +echo "configure:3026: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3080: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3095,21 +3097,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3099: checking for inline" >&5 +echo "configure:3101: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3115: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3135,14 +3137,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3139: checking whether byte ordering is bigendian" >&5 +echo "configure:3141: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3153,11 +3155,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3159: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3168,7 +3170,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3172: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3174: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3188,7 +3190,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3225,14 +3227,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3229: checking whether char is unsigned" >&5 +echo "configure:3231: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3289,12 +3291,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3293: checking return type of signal handlers" >&5 +echo "configure:3295: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3311,7 +3313,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3315: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3330,12 +3332,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3334: checking for uid_t in sys/types.h" >&5 +echo "configure:3336: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3364,12 +3366,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3368: checking for mode_t" >&5 +echo "configure:3370: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3397,12 +3399,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3401: checking for off_t" >&5 +echo "configure:3403: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3430,12 +3432,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3434: checking for size_t" >&5 +echo "configure:3436: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3463,12 +3465,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3467: checking for pid_t" >&5 +echo "configure:3469: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3496,12 +3498,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3500: checking for st_rdev in struct stat" >&5 +echo "configure:3502: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3509,7 +3511,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3530,12 +3532,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3534: checking for d_off in dirent" >&5 +echo "configure:3536: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3545,7 +3547,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3549: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3551: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3566,12 +3568,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3570: checking for ino_t" >&5 +echo "configure:3572: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3599,12 +3601,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3603: checking for loff_t" >&5 +echo "configure:3605: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3632,12 +3634,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3636: checking for offset_t" >&5 +echo "configure:3638: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3665,12 +3667,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3669: checking for ssize_t" >&5 +echo "configure:3671: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3698,12 +3700,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3702: checking for wchar_t" >&5 +echo "configure:3704: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3745,7 +3747,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3749: checking for $ac_word" >&5 +echo "configure:3751: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3794,12 +3796,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3798: checking for $ac_func" >&5 +echo "configure:3800: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3848,7 +3850,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3852: checking for dlopen in -ldl" >&5 +echo "configure:3854: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3856,7 +3858,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3873: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3897,13 +3899,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3901: checking for immediate structures" >&5 +echo "configure:3903: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3921,7 +3923,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3944,13 +3946,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3948: checking for unix domain sockets" >&5 +echo "configure:3950: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3965,7 +3967,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3987,13 +3989,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3991: checking for socklen_t type" >&5 +echo "configure:3993: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4006,7 +4008,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4012: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4027,13 +4029,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4031: checking for sig_atomic_t type" >&5 +echo "configure:4033: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4046,7 +4048,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4050: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4052: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4069,20 +4071,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4073: checking for errno declaration" >&5 +echo "configure:4075: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4104,20 +4106,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4108: checking for setresuid declaration" >&5 +echo "configure:4110: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4121: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4139,20 +4141,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4143: checking for setresgid declaration" >&5 +echo "configure:4145: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4174,20 +4176,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4178: checking for asprintf declaration" >&5 +echo "configure:4180: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4209,20 +4211,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4213: checking for vasprintf declaration" >&5 +echo "configure:4215: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4226: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4244,20 +4246,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4248: checking for vsnprintf declaration" >&5 +echo "configure:4250: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4279,20 +4281,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4283: checking for snprintf declaration" >&5 +echo "configure:4285: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4296: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4298: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4316,7 +4318,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4320: checking for real setresuid" >&5 +echo "configure:4322: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4325,12 +4327,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4355,7 +4357,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4359: checking for real setresgid" >&5 +echo "configure:4361: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4364,13 +4366,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4393,7 +4395,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4397: checking for 8-bit clean memcmp" >&5 +echo "configure:4399: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4401,7 +4403,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4434,12 +4436,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4438: checking for $ac_func" >&5 +echo "configure:4440: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4488,7 +4490,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4492: checking for crypt in -lcrypt" >&5 +echo "configure:4494: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4496,7 +4498,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4540,7 +4542,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4544: checking whether to use readline" >&5 +echo "configure:4546: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4552,17 +4554,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4556: checking for $ac_hdr" >&5 +echo "configure:4558: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4568: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4592,17 +4594,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4596: checking for $ac_hdr" >&5 +echo "configure:4598: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4606: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4608: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4633,17 +4635,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4637: checking for $ac_hdr" >&5 +echo "configure:4639: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4647: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4649: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4666,7 +4668,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4670: checking for tgetent in -l${termlib}" >&5 +echo "configure:4672: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4674,7 +4676,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4707,7 +4709,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4711: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4713: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4715,7 +4717,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4777,17 +4779,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4781: checking for $ac_hdr" >&5 +echo "configure:4783: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4817,17 +4819,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4821: checking for $ac_hdr" >&5 +echo "configure:4823: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4831: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4858,17 +4860,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4862: checking for $ac_hdr" >&5 +echo "configure:4864: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4891,7 +4893,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4895: checking for tgetent in -l${termlib}" >&5 +echo "configure:4897: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4899,7 +4901,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4932,7 +4934,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4936: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4938: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4940,7 +4942,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5001,7 +5003,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5005: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5007: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5009,7 +5011,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5053,12 +5055,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5057: checking for $ac_func" >&5 +echo "configure:5059: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5109,7 +5111,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5113: checking for printf in -lnsl_s" >&5 +echo "configure:5115: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5117,7 +5119,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5159,7 +5161,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5163: checking for printf in -lnsl" >&5 +echo "configure:5165: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5167,7 +5169,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5209,7 +5211,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5213: checking for connect in -lsocket" >&5 +echo "configure:5215: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5217,7 +5219,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5259,7 +5261,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5263: checking for connect in -linet" >&5 +echo "configure:5265: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5267,7 +5269,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5322,12 +5324,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5326: checking for $ac_func" >&5 +echo "configure:5328: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5376,7 +5378,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5380: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5382: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5384,7 +5386,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5425,12 +5427,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5429: checking for $ac_func" >&5 +echo "configure:5431: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5486,12 +5488,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5490: checking for $ac_func" >&5 +echo "configure:5492: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5541,12 +5543,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5545: checking for $ac_func" >&5 +echo "configure:5547: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5596,12 +5598,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5600: checking for $ac_func" >&5 +echo "configure:5602: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5651,12 +5653,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5655: checking for $ac_func" >&5 +echo "configure:5657: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5706,12 +5708,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5710: checking for $ac_func" >&5 +echo "configure:5712: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5761,12 +5763,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5765: checking for $ac_func" >&5 +echo "configure:5767: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5816,12 +5818,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5820: checking for $ac_func" >&5 +echo "configure:5822: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5871,12 +5873,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5875: checking for $ac_func" >&5 +echo "configure:5877: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5926,12 +5928,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5930: checking for $ac_func" >&5 +echo "configure:5932: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5981,12 +5983,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5985: checking for $ac_func" >&5 +echo "configure:5987: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6037,12 +6039,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6041: checking for $ac_func" >&5 +echo "configure:6043: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6094,12 +6096,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6098: checking for $ac_func" >&5 +echo "configure:6100: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6150,12 +6152,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6154: checking for $ac_func" >&5 +echo "configure:6156: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6205,12 +6207,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6209: checking for $ac_func" >&5 +echo "configure:6211: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6260,12 +6262,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6264: checking for $ac_func" >&5 +echo "configure:6266: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6315,12 +6317,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6319: checking for $ac_func" >&5 +echo "configure:6321: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6370,12 +6372,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6374: checking for $ac_func" >&5 +echo "configure:6376: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6425,12 +6427,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6429: checking for $ac_func" >&5 +echo "configure:6431: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6480,12 +6482,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6484: checking for $ac_func" >&5 +echo "configure:6486: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6535,12 +6537,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6539: checking for $ac_func" >&5 +echo "configure:6541: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6590,12 +6592,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6594: checking for $ac_func" >&5 +echo "configure:6596: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6645,12 +6647,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6649: checking for $ac_func" >&5 +echo "configure:6651: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6700,12 +6702,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6704: checking for $ac_func" >&5 +echo "configure:6706: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6755,12 +6757,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6759: checking for $ac_func" >&5 +echo "configure:6761: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6810,12 +6812,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6814: checking for $ac_func" >&5 +echo "configure:6816: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6865,12 +6867,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6869: checking for $ac_func" >&5 +echo "configure:6871: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6924,9 +6926,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6928: checking for stat64 in " >&5 +echo "configure:6930: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6957,9 +6959,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6961: checking for lstat64 in " >&5 +echo "configure:6963: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6990,9 +6992,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6994: checking for fstat64 in " >&5 +echo "configure:6996: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7024,7 +7026,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7028: checking for dn_expand in -lresolv" >&5 +echo "configure:7030: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7032,7 +7034,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7049: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7081,12 +7083,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7085: checking for $ac_func" >&5 +echo "configure:7087: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7134,7 +7136,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7138: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7140: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7142,7 +7144,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7183,12 +7185,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7187: checking for $ac_func" >&5 +echo "configure:7189: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7242,12 +7244,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7246: checking for $ac_func" >&5 +echo "configure:7248: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7276: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7295,7 +7297,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7299: checking for putprpwnam in -lsec" >&5 +echo "configure:7301: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7303,7 +7305,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7344,12 +7346,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7348: checking for $ac_func" >&5 +echo "configure:7350: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7404,12 +7406,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7408: checking for $ac_func" >&5 +echo "configure:7410: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7457,7 +7459,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7461: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7463: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7465,7 +7467,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7506,12 +7508,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7510: checking for $ac_func" >&5 +echo "configure:7512: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7565,12 +7567,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7569: checking for $ac_func" >&5 +echo "configure:7571: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7618,7 +7620,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7622: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7624: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7626,7 +7628,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7667,12 +7669,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7671: checking for $ac_func" >&5 +echo "configure:7673: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7701: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7728,12 +7730,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7732: checking for $ac_func" >&5 +echo "configure:7734: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7781,7 +7783,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7785: checking for getspnam in -lgen" >&5 +echo "configure:7787: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7789,7 +7791,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7830,12 +7832,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7834: checking for $ac_func" >&5 +echo "configure:7836: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7890,12 +7892,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7894: checking for $ac_func" >&5 +echo "configure:7896: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7943,7 +7945,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7947: checking for getspnam in -lsecurity" >&5 +echo "configure:7949: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7951,7 +7953,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7992,12 +7994,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7996: checking for $ac_func" >&5 +echo "configure:7998: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8051,12 +8053,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8055: checking for $ac_func" >&5 +echo "configure:8057: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8104,7 +8106,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8108: checking for getspnam in -lsec" >&5 +echo "configure:8110: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8112,7 +8114,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8153,12 +8155,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8157: checking for $ac_func" >&5 +echo "configure:8159: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8213,12 +8215,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8217: checking for $ac_func" >&5 +echo "configure:8219: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8266,7 +8268,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8270: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8272: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8274,7 +8276,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8315,12 +8317,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8319: checking for $ac_func" >&5 +echo "configure:8321: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8374,12 +8376,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8378: checking for $ac_func" >&5 +echo "configure:8380: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8427,7 +8429,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8431: checking for bigcrypt in -lsec" >&5 +echo "configure:8433: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8435,7 +8437,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8476,12 +8478,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8480: checking for $ac_func" >&5 +echo "configure:8482: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8536,12 +8538,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8540: checking for $ac_func" >&5 +echo "configure:8542: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8589,7 +8591,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8593: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8595: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8597,7 +8599,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8638,12 +8640,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8642: checking for $ac_func" >&5 +echo "configure:8644: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8697,12 +8699,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8701: checking for $ac_func" >&5 +echo "configure:8703: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8750,7 +8752,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8754: checking for getprpwnam in -lsec" >&5 +echo "configure:8756: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8758,7 +8760,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8799,12 +8801,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8803: checking for $ac_func" >&5 +echo "configure:8805: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8833: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8871,7 +8873,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8875: checking ability to build shared libraries" >&5 +echo "configure:8877: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9031,7 +9033,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9035: checking for $ac_word" >&5 +echo "configure:9037: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9088,17 +9090,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9092: checking linker flags for shared libraries" >&5 +echo "configure:9094: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9095: checking compiler flags for position-independent code" >&5 +echo "configure:9097: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9102: checking whether building shared libraries actually works" >&5 +echo "configure:9104: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9129,7 +9131,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9133: checking for long long" >&5 +echo "configure:9135: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9138,12 +9140,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9170,20 +9172,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9174: checking for LL suffix on long long integers" >&5 +echo "configure:9176: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9205,7 +9207,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9209: checking for 64 bit off_t" >&5 +echo "configure:9211: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9214,13 +9216,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9243,7 +9245,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9247: checking for off64_t" >&5 +echo "configure:9249: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9252,7 +9254,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9285,7 +9287,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9289: checking for 64 bit ino_t" >&5 +echo "configure:9291: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9294,13 +9296,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9323,7 +9325,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9327: checking for ino64_t" >&5 +echo "configure:9329: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9332,7 +9334,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9365,7 +9367,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9369: checking for dev64_t" >&5 +echo "configure:9371: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9374,7 +9376,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9407,13 +9409,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9411: checking for struct dirent64" >&5 +echo "configure:9413: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9431: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9446,7 +9448,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9450: checking for major macro" >&5 +echo "configure:9452: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9455,7 +9457,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9487,7 +9489,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9491: checking for minor macro" >&5 +echo "configure:9493: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9496,7 +9498,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9528,7 +9530,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9532: checking for unsigned char" >&5 +echo "configure:9534: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9537,12 +9539,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9565,13 +9567,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9569: checking for sin_len in sock" >&5 +echo "configure:9571: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9580,7 +9582,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9584: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9586: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9601,13 +9603,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9605: checking whether seekdir returns void" >&5 +echo "configure:9607: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9616,7 +9618,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9620: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9622: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9637,20 +9639,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9641: checking for __FILE__ macro" >&5 +echo "configure:9643: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9656: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9671,20 +9673,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9675: checking for __FUNCTION__ macro" >&5 +echo "configure:9677: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9705,7 +9707,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9709: checking if gettimeofday takes tz argument" >&5 +echo "configure:9711: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9714,14 +9716,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9744,13 +9746,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9748: checking for __va_copy" >&5 +echo "configure:9750: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9758,7 +9760,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9779,7 +9781,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9783: checking for C99 vsnprintf" >&5 +echo "configure:9785: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9788,7 +9790,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9815,7 +9817,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9838,7 +9840,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9842: checking for broken readdir" >&5 +echo "configure:9844: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9847,7 +9849,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9855,7 +9857,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9878,13 +9880,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9882: checking for utimbuf" >&5 +echo "configure:9884: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9892,7 +9894,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9898: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9916,12 +9918,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9920: checking for $ac_func" >&5 +echo "configure:9922: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9970,13 +9972,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9974: checking for ut_name in utmp" >&5 +echo "configure:9976: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9984,7 +9986,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9988: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9990: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10005,13 +10007,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10009: checking for ut_user in utmp" >&5 +echo "configure:10011: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10019,7 +10021,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10023: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10040,13 +10042,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10044: checking for ut_id in utmp" >&5 +echo "configure:10046: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10054,7 +10056,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10075,13 +10077,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10079: checking for ut_host in utmp" >&5 +echo "configure:10081: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10089,7 +10091,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10095: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10110,13 +10112,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10114: checking for ut_time in utmp" >&5 +echo "configure:10116: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10124,7 +10126,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10128: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10145,13 +10147,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10149: checking for ut_tv in utmp" >&5 +echo "configure:10151: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10159,7 +10161,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10165: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10180,13 +10182,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10184: checking for ut_type in utmp" >&5 +echo "configure:10186: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10194,7 +10196,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10215,13 +10217,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10219: checking for ut_pid in utmp" >&5 +echo "configure:10221: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10229,7 +10231,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10235: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10250,13 +10252,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10254: checking for ut_exit in utmp" >&5 +echo "configure:10256: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10264,7 +10266,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10268: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10270: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10285,13 +10287,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10289: checking for ut_addr in utmp" >&5 +echo "configure:10291: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10299,7 +10301,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10303: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10305: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10321,13 +10323,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10325: checking whether pututline returns pointer" >&5 +echo "configure:10327: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10335,7 +10337,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10357,13 +10359,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10361: checking for ut_syslen in utmpx" >&5 +echo "configure:10363: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10371,7 +10373,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10377: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10395,7 +10397,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10399: checking whether to use libiconv" >&5 +echo "configure:10401: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10408,7 +10410,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10412: checking for iconv_open in -liconv" >&5 +echo "configure:10414: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10416,7 +10418,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10470,7 +10472,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10474: checking for working iconv" >&5 +echo "configure:10476: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10479,7 +10481,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10490,7 +10492,7 @@ main() { } EOF -if { (eval echo configure:10494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10514,7 +10516,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10518: checking for Linux kernel oplocks" >&5 +echo "configure:10520: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10523,7 +10525,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10537,7 +10539,7 @@ main() { } EOF -if { (eval echo configure:10541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10560,7 +10562,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10564: checking for kernel change notify support" >&5 +echo "configure:10566: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10569,7 +10571,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10583,7 +10585,7 @@ main() { } EOF -if { (eval echo configure:10587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10606,7 +10608,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10610: checking for kernel share modes" >&5 +echo "configure:10612: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10615,7 +10617,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10631,7 +10633,7 @@ main() { } EOF -if { (eval echo configure:10635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10657,13 +10659,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10661: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10663: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10671,7 +10673,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10675: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10677: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10692,7 +10694,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10696: checking for irix specific capabilities" >&5 +echo "configure:10698: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10701,7 +10703,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10716,7 +10718,7 @@ main() { } EOF -if { (eval echo configure:10720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10744,13 +10746,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10748: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10750: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10760,7 +10762,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10766: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10781,13 +10783,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10785: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10787: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10797,7 +10799,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10801: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10803: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10818,13 +10820,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10822: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10824: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10834,7 +10836,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10838: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10855,13 +10857,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10859: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10861: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10871,7 +10873,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10893,13 +10895,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10897: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10899: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10913,7 +10915,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10917: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10934,16 +10936,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10938: checking for test routines" >&5 +echo "configure:10940: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10957,7 +10959,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10961: checking for ftruncate extend" >&5 +echo "configure:10963: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10966,11 +10968,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10993,7 +10995,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10997: checking for AF_LOCAL socket support" >&5 +echo "configure:10999: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11002,11 +11004,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11030,7 +11032,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11034: checking for broken getgroups" >&5 +echo "configure:11036: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11039,11 +11041,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11049: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11066,7 +11068,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11070: checking whether getpass should be replaced" >&5 +echo "configure:11072: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11074,7 +11076,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11110,7 +11112,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11114: checking for broken inet_ntoa" >&5 +echo "configure:11116: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11119,7 +11121,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11133,7 +11135,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11156,7 +11158,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11160: checking for secure mkstemp" >&5 +echo "configure:11162: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11165,7 +11167,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11182,7 +11184,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11205,7 +11207,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11209: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11211: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11214,12 +11216,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11242,7 +11244,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11246: checking for root" >&5 +echo "configure:11248: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11251,11 +11253,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11283,7 +11285,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11287: checking for iface AIX" >&5 +echo "configure:11289: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11292,7 +11294,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11324,7 +11326,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11328: checking for iface ifconf" >&5 +echo "configure:11330: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11333,7 +11335,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11366,7 +11368,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11370: checking for iface ifreq" >&5 +echo "configure:11372: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11375,7 +11377,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11412,7 +11414,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11416: checking for setresuid" >&5 +echo "configure:11418: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11421,7 +11423,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11455,7 +11457,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11459: checking for setreuid" >&5 +echo "configure:11461: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11464,7 +11466,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11497,7 +11499,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11501: checking for seteuid" >&5 +echo "configure:11503: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11506,7 +11508,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11539,7 +11541,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11543: checking for setuidx" >&5 +echo "configure:11545: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11548,7 +11550,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11581,7 +11583,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11585: checking for working mmap" >&5 +echo "configure:11587: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11590,11 +11592,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11617,7 +11619,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11621: checking for ftruncate needs root" >&5 +echo "configure:11623: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11626,11 +11628,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11653,7 +11655,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11657: checking for fcntl locking" >&5 +echo "configure:11659: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11662,11 +11664,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11689,7 +11691,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11693: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11695: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11698,11 +11700,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11727,7 +11729,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11731: checking for 64 bit fcntl locking" >&5 +echo "configure:11733: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11736,7 +11738,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11785,13 +11787,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11789: checking for st_blocks in struct stat" >&5 +echo "configure:11791: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11800,7 +11802,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11804: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11821,13 +11823,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11825: checking for st_blksize in struct stat" >&5 +echo "configure:11827: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11836,7 +11838,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11859,13 +11861,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11863: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11865: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11902,13 +11904,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11906: checking for broken nisplus include files" >&5 +echo "configure:11908: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11918,7 +11920,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11942,7 +11944,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11946: checking whether to use smbwrapper" >&5 +echo "configure:11948: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11989,7 +11991,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11993: checking whether to use AFS clear-text auth" >&5 +echo "configure:11995: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12015,7 +12017,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12019: checking whether to use DFS clear-text auth" >&5 +echo "configure:12021: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12041,7 +12043,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12045: checking for /usr/kerberos" >&5 +echo "configure:12047: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12054,7 +12056,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12058: checking for kerberos 5 install path" >&5 +echo "configure:12060: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12083,17 +12085,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12087: checking for $ac_hdr" >&5 +echo "configure:12089: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12097: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12099: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12126,17 +12128,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12130: checking for $ac_hdr" >&5 +echo "configure:12132: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12140: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12142: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12166,7 +12168,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12170: checking for _et_list in -lcom_err" >&5 +echo "configure:12172: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12174,7 +12176,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12206,7 +12208,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12210: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12212: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12214,7 +12216,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12250,7 +12252,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12254: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12256: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12258,7 +12260,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12297,7 +12299,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12301: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12303: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12305,7 +12307,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12345,7 +12347,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12349: checking for ber_scanf in -llber" >&5 +echo "configure:12351: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12353,7 +12355,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12389,7 +12391,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12393: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12395: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12397,7 +12399,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12414: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12439,12 +12441,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12443: checking for $ac_func" >&5 +echo "configure:12445: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12492,13 +12494,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12496: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12498: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12507,7 +12509,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12511: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12529,7 +12531,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12533: checking whether to use AUTOMOUNT" >&5 +echo "configure:12535: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12554,7 +12556,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12558: checking whether to use SMBMOUNT" >&5 +echo "configure:12560: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12591,7 +12593,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12595: checking whether to use PAM" >&5 +echo "configure:12597: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12617,7 +12619,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12621: checking for pam_get_data in -lpam" >&5 +echo "configure:12623: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12625,7 +12627,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12642: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12663,7 +12665,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12667: checking whether to use pam_smbpass" >&5 +echo "configure:12669: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12701,12 +12703,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12705: checking for $ac_func" >&5 +echo "configure:12707: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12755,7 +12757,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12759: checking for crypt in -lcrypt" >&5 +echo "configure:12761: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12763,7 +12765,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12809,7 +12811,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12813: checking for a crypt that needs truncated salt" >&5 +echo "configure:12815: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12818,11 +12820,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12848,7 +12850,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12852: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12854: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12880,7 +12882,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12884: checking whether to use TDB SAM database" >&5 +echo "configure:12886: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12905,7 +12907,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12909: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12911: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12936,7 +12938,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12940: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12942: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12961,7 +12963,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12965: checking whether to use syslog logging" >&5 +echo "configure:12967: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12986,7 +12988,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12990: checking whether to use profiling" >&5 +echo "configure:12992: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13014,7 +13016,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13018: checking whether to support disk-quotas" >&5 +echo "configure:13020: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13025,13 +13027,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13029: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13031: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13043,7 +13045,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13049: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13092,7 +13094,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13096: checking whether to support utmp accounting" >&5 +echo "configure:13098: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13117,7 +13119,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13121: checking chosen man pages' language(s)" >&5 +echo "configure:13123: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13148,7 +13150,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13152: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13154: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13176,14 +13178,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13180: checking how to get filesystem space usage" >&5 +echo "configure:13182: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13187: checking statvfs64 function (SVR4)" >&5 +echo "configure:13189: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13191,7 +13193,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13238,12 +13240,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13242: checking statvfs function (SVR4)" >&5 +echo "configure:13244: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13251,7 +13253,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13276,7 +13278,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13280: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13282: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13284,7 +13286,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13297,7 +13299,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13324,7 +13326,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13328: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13330: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13332,7 +13334,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13378,7 +13380,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13382: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13384: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13386,7 +13388,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13396,7 +13398,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13423,7 +13425,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13427: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13429: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13431,7 +13433,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13447,7 +13449,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13474,7 +13476,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13478: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13480: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13482,7 +13484,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13502,7 +13504,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13535,9 +13537,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13539: checking if large file support can be enabled" >&5 +echo "configure:13541: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13556: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13615,7 +13617,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13619: checking whether to support ACLs" >&5 +echo "configure:13621: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13668,7 +13670,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13672: checking for acl_get_file in -lacl" >&5 +echo "configure:13674: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13676,7 +13678,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13715,13 +13717,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13719: checking for ACL support" >&5 +echo "configure:13721: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13729,7 +13731,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13749,13 +13751,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13753: checking for acl_get_perm_np" >&5 +echo "configure:13755: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13763,7 +13765,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13810,7 +13812,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13814: checking whether to build winbind" >&5 +echo "configure:13816: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13906,20 +13908,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13910: checking whether struct passwd has pw_comment" >&5 +echo "configure:13912: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13944,20 +13946,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13948: checking whether struct passwd has pw_age" >&5 +echo "configure:13950: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13963: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13996,7 +13998,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14000: checking for poptGetContext in -lpopt" >&5 +echo "configure:14002: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14004,7 +14006,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14039,7 +14041,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14043: checking whether to use included popt" >&5 +echo "configure:14045: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14051,6 +14053,22 @@ fi +################################################# +# Check if the user wants Python + +# At the moment, you can use this to set which Python binary to link +# against. (Libraries built for Python2.2 can't be used by 2.1, +# though they can coexist in different directories.) In the future +# this might make the Python stuff be built by default. + +# Check whether --with-python or --without-python was given. +if test "${with_python+set}" = set; then + withval="$with_python" + PYTHON=${withval-python} +fi + + + ################################################# # do extra things if we are running insure @@ -14062,16 +14080,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14066: checking configure summary" >&5 +echo "configure:14084: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -14284,6 +14302,7 @@ s%@WINBIND_NSS_EXTRA_OBJS@%$WINBIND_NSS_EXTRA_OBJS%g s%@WINBIND_NSS_EXTRA_LIBS@%$WINBIND_NSS_EXTRA_LIBS%g s%@BUILD_POPT@%$BUILD_POPT%g s%@FLAGS1@%$FLAGS1%g +s%@PYTHON@%$PYTHON%g s%@builddir@%$builddir%g CEOF diff --git a/source3/configure.in b/source3/configure.in index baeebd6654..3a75b32aaf 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2806,6 +2806,19 @@ fi AC_SUBST(BUILD_POPT) AC_SUBST(FLAGS1) +################################################# +# Check if the user wants Python + +# At the moment, you can use this to set which Python binary to link +# against. (Libraries built for Python2.2 can't be used by 2.1, +# though they can coexist in different directories.) In the future +# this might make the Python stuff be built by default. + +AC_ARG_WITH(python, +[ --with-python=PYTHONNAME build Python libraries], +[ PYTHON=${withval-python} ]) +AC_SUBST(PYTHON) + ################################################# # do extra things if we are running insure -- cgit From f099013fcbab03ec2a6a106ac59eff4e6742b2ae Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 06:23:43 +0000 Subject: This patch has now been applied and no longer needs to exist separately (This used to be commit 5b2fa5260e22c0d8bc9fb0973a6247ad99d2ed4b) --- source3/python/samba-head.patch | 69 ----------------------------------------- 1 file changed, 69 deletions(-) delete mode 100644 source3/python/samba-head.patch diff --git a/source3/python/samba-head.patch b/source3/python/samba-head.patch deleted file mode 100644 index c48dd8a30a..0000000000 --- a/source3/python/samba-head.patch +++ /dev/null @@ -1,69 +0,0 @@ -Index: Makefile.in -=================================================================== -RCS file: /data/cvs/samba/source/Makefile.in,v -retrieving revision 1.530 -diff -u -r1.530 Makefile.in ---- Makefile.in 8 Sep 2002 14:58:22 -0000 1.530 -+++ Makefile.in 8 Sep 2002 23:56:36 -0000 -@@ -846,6 +846,45 @@ - -$(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.336 -diff -u -r1.336 configure.in ---- configure.in 7 Sep 2002 04:08:02 -0000 1.336 -+++ configure.in 8 Sep 2002 23:56:37 -0000 -@@ -2828,7 +2828,7 @@ - # I added make files that are outside /source directory. - # I know this is not a good solution, will work out a better - # solution soon. --simo --AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) -+AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py) - - ################################################# - # Print very concise instructions on building/use -- cgit From 3245349610a999a2eb0b4e388ad16775d7b54e83 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 06:26:41 +0000 Subject: Update documentation for newly merged modules (This used to be commit a0e58fd2cef5891e874a08f71d5d7a3f10ec6454) --- source3/python/README | 44 +++++++++----------------------------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/source3/python/README b/source3/python/README index 6d42897bad..04f794215a 100644 --- a/source3/python/README +++ b/source3/python/README @@ -2,44 +2,18 @@ This directory contains Python bindings to allow you to access various aspects of Samba. At the moment their status is "experimental" and they are not built by default. +In order to be able to compile samba-python you need to have python +and the python-dev packages installed. ----- -Quick Install Guide --- -Lines prepended with a $ indicate shell commands. +Python libraries are always built for a particular version of Python +(2.2, 2.1, etc), and libraries built for one version will not be seen +by another. By default Samba's libraries are built for whatever is +installed as "python" on your $PATH, but you can override this using +the --with-python option. For example -1. Requirements + $ ./configure --with-python=python2.2 -In order to be able to compile samba-python you need to have -python and the python-dev packages installed. - -2. Checking out the CVS HEAD branch of Samba and Samba-Python - -In your shell, type: - -$ cvs -d :pserver:cvs@pserver.samba.org:/cvsroot login - -When asked for a password, type 'cvs'. - -Now, type: - -$ cvs -d :pserver:cvs@pserver.samba.org:/cvsroot co samba - -This might probably take a while. When everything is downloaded, -check out the samba-python tree: - -$ cvs -d :pserver:cvs@pserver.samba.org:/cvsroot co samba-python - -Now that you have both cvs modules, move the directory 'samba-python' to -inside the samba source tree, using: - -$ mv samba-python samba/source/python - -Now, go to the samba/source directory and apply the samba-head.patch patch: - -$ cd samba/source && patch -p0 < location/to/samba-python/samba-head.patch - -You can now configure samba as usual and create the python extension: +To build: $ autoconf $ ./configure -- cgit From 63f411a3f90be3d2b1c0d8cf5af394f1163319c5 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 06:30:48 +0000 Subject: Import my code to do reasonably fast tdbpack/unpack from Python (This used to be commit 1f7ed8bb863fdacd0b9f3bc2e1e5d72ec7051feb) --- source3/python/py_tdbpack.c | 662 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 662 insertions(+) create mode 100644 source3/python/py_tdbpack.c diff --git a/source3/python/py_tdbpack.c b/source3/python/py_tdbpack.c new file mode 100644 index 0000000000..e5044943be --- /dev/null +++ b/source3/python/py_tdbpack.c @@ -0,0 +1,662 @@ +/* -*- c-file-style: "python"; indent-tabs-mode: nil; -*- + + Python wrapper for Samba tdb pack/unpack functions + Copyright (C) Martin Pool 2002 + + + NOTE PYTHON STYLE GUIDE + http://www.python.org/peps/pep-0007.html + + + 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.h" + +static int pytdbpack_calc_reqd_len(char *format_str, + PyObject *val_seq); + +static PyObject *pytdbpack_unpack_item(char, + char **pbuf, + int *plen); +static int +pytdbpack_calc_item_len(char format_ch, + PyObject *val_obj); + +static PyObject *pytdbpack_pack_data(const char *format_str, + PyObject *val_seq, + unsigned char *buf); + + + +static const char * pytdbpack_docstring = +"Convert between Python values and Samba binary encodings. + +This module is conceptually similar to the standard 'struct' module, but it +uses both a different binary format and a different description string. + +Samba's encoding is based on that used inside DCE-RPC and SMB: a +little-endian, unpadded, non-self-describing binary format. It is intended +that these functions be as similar as possible to the routines in Samba's +tdb/tdbutil module, with appropriate adjustments for Python datatypes. + +Python strings are used to specify the format of data to be packed or +unpacked. + +Strings in TDBs are typically stored in DOS codepages. The caller of this +module must make appropriate translations if necessary, typically to and from +Unicode objects. + +tdbpack format strings: + + 'f': NULL-terminated string in DOS codepage + + 'P': same as 'f' + + 'd': 4 byte little-endian number + + 'w': 2 byte little-endian number + + 'P': \"Pointer\" value -- in the subset of DCERPC used by Samba, this is + really just an \"exists\" or \"does not exist\" flag. The boolean + value of the Python object is used. + + 'B': 4-byte LE length, followed by that many bytes of binary data. + Corresponds to a Python byte string of the appropriate length. + + '$': Special flag indicating that the preceding format code should be + repeated while data remains. This is only supported for unpacking. + + Every code corresponds to a single Python object, except 'B' which + corresponds to two values (length and contents), and '$', which produces + however many make sense. +"; + + +static char const pytdbpack_pack_doc[] = +"pack(format, values) -> buffer +Pack Python objects into Samba binary format according to format string. + +arguments: + format -- string of tdbpack format characters + values -- sequence of value objects corresponding 1:1 to format characters + +returns: + buffer -- string containing packed data + +raises: + IndexError -- if there are not the same number of format codes as of + values + ValueError -- if any of the format characters is illegal + TypeError -- if the format is not a string, or values is not a sequence, + or any of the values is of the wrong type for the corresponding + format character +"; + + +static char const pytdbpack_unpack_doc[] = +"unpack(format, buffer) -> (values, rest) +Unpack Samba binary data according to format string. + +arguments: + format -- string of tdbpack characters + buffer -- string of packed binary data + +returns: + 2-tuple of: + values -- sequence of values corresponding 1:1 to format characters + rest -- string containing data that was not decoded, or '' if the + whole string was consumed + +raises: + IndexError -- if there is insufficient data in the buffer for the + format (or if the data is corrupt and contains a variable-length + field extending past the end) + ValueError -- if any of the format characters is illegal + +notes: + Because unconsumed data is returned, you can feed it back in to the + unpacker to extract further fields. Alternatively, if you wish to modify + some fields near the start of the data, you may be able to save time by + only unpacking and repacking the necessary part. +"; + + + +/* + Game plan is to first of all walk through the arguments and calculate the + total length that will be required. We allocate a Python string of that + size, then walk through again and fill it in. + + We just borrow references to all the passed arguments, since none of them + need to be permanently stored. We transfer ownership to the returned + object. + */ +static PyObject * +pytdbpack_pack(PyObject *self, + PyObject *args) +{ + char *format_str; + PyObject *val_seq, *fast_seq, *buf_str; + int reqd_len; + char *packed_buf; + + /* TODO: Test passing wrong types or too many arguments */ + if (!PyArg_ParseTuple(args, "sO", &format_str, &val_seq)) + return NULL; + + /* Convert into a list or tuple (if not already one), so that we can + * index more easily. */ + fast_seq = PySequence_Fast(val_seq, + __FUNCTION__ ": argument 2 must be sequence"); + if (!fast_seq) + return NULL; + + reqd_len = pytdbpack_calc_reqd_len(format_str, fast_seq); + if (reqd_len == -1) /* exception was thrown */ + return NULL; + + /* Allocate space. + + This design causes an unnecessary copying of the data when Python + constructs an object, and that might possibly be avoided by using a + Buffer object of some kind instead. I'm not doing that for now + though. */ + packed_buf = malloc(reqd_len); + if (!packed_buf) { + PyErr_Format(PyExc_MemoryError, + "%s: couldn't allocate %d bytes for packed buffer", + __FUNCTION__, reqd_len); + return NULL; + } + + if (!pytdbpack_pack_data(format_str, fast_seq, packed_buf)) { + free(packed_buf); + return NULL; + } + + buf_str = PyString_FromStringAndSize(packed_buf, reqd_len); + free(packed_buf); /* get rid of tmp buf */ + + return buf_str; +} + + + +static PyObject * +pytdbpack_unpack(PyObject *self, + PyObject *args) +{ + char *format_str, *packed_str, *ppacked; + PyObject *val_list = NULL, *ret_tuple = NULL; + PyObject *rest_string = NULL; + int format_len, packed_len; + int i; + char last_format = '#'; + + /* get arguments */ + if (!PyArg_ParseTuple(args, "ss#", &format_str, &packed_str, &packed_len)) + return NULL; + + format_len = strlen(format_str); + + /* allocate list to hold results */ + val_list = PyList_New(format_len); + if (!val_list) + goto failed; + ret_tuple = PyTuple_New(2); + if (!ret_tuple) + goto failed; + + /* For every object, unpack. */ + for (ppacked = packed_str, i = 0; i < format_len; i++) { + PyObject *val_obj; + char format; + + format = format_str[i]; + if (format == '$') { + if (i == 0) { + PyErr_Format(PyExc_ValueError, + "%s: '$' may not be first character in format", + __FUNCTION__); + goto failed; + } + else { + format = last_format; /* repeat */ + } + } + + val_obj = pytdbpack_unpack_item(format, + &ppacked, + &packed_len); + if (!val_obj) + goto failed; + + PyList_SET_ITEM(val_list, i, val_obj); + last_format = format; + } + + /* put leftovers in box for lunch tomorrow */ + rest_string = PyString_FromStringAndSize(ppacked, packed_len); + if (!rest_string) + goto failed; + + /* return (values, rest) tuple; give up references to them */ + PyTuple_SET_ITEM(ret_tuple, 0, val_list); + val_list = NULL; + PyTuple_SET_ITEM(ret_tuple, 1, rest_string); + val_list = NULL; + return ret_tuple; + + failed: + /* handle failure: deallocate anything */ + Py_XDECREF(val_list); + Py_XDECREF(ret_tuple); + Py_XDECREF(rest_string); + return NULL; +} + + +/* + Internal routine that calculates how many bytes will be required to + encode the values in the format. + + Also checks that the value list is the right size for the format list. + + Returns number of bytes (may be 0), or -1 if there's something wrong, in + which case a Python exception has been raised. + + Arguments: + + val_seq: a Fast Sequence (list or tuple), being all the values +*/ +static int +pytdbpack_calc_reqd_len(char *format_str, + PyObject *val_seq) +{ + int len = 0; + char *p; + int val_i; + int val_len; + + val_len = PySequence_Fast_GET_SIZE(val_seq); + + for (p = format_str, val_i = 0; *p; p++, val_i++) { + char ch = *p; + PyObject *val_obj; + int item_len; + + if (val_i >= val_len) { + PyErr_Format(PyExc_IndexError, + "samba.tdbpack.pack: value list is too short for format string"); + return -1; + } + + /* borrow a reference to the item */ + val_obj = PySequence_Fast_GET_ITEM(val_seq, val_i); + if (!val_obj) + return -1; + + item_len = pytdbpack_calc_item_len(ch, val_obj); + if (item_len == -1) + return -1; + else + len += item_len; + } + + if (val_i != val_len) { + PyErr_Format(PyExc_IndexError, + "%s: value list is wrong length for format string", + __FUNCTION__); + return -1; + } + + return len; +} + + +/* + Calculate the number of bytes required to pack a single value. +*/ +static int +pytdbpack_calc_item_len(char ch, + PyObject *val_obj) +{ + if (ch == 'd' || ch == 'w') { + if (!PyInt_Check(val_obj)) { + PyErr_Format(PyExc_TypeError, + "tdbpack: format '%c' requires an Int", + ch); + return -1; + } + if (ch == 'w') + return 2; + else + return 4; + } else if (ch == 'p') { + return 4; + } + else if (ch == 'f' || ch == 'P' || ch == 'B') { + /* nul-terminated 8-bit string */ + if (!PyString_Check(val_obj)) { + PyErr_Format(PyExc_TypeError, + "tdbpack: format '%c' requires a String", + ch); + return -1; + } + + if (ch == 'B') { + /* byte buffer; just use Python string's length, plus + a preceding word */ + return 4 + PyString_GET_SIZE(val_obj); + } + else { + /* one nul character */ + return 1 + PyString_GET_SIZE(val_obj); + } + } + else { + PyErr_Format(PyExc_ValueError, + __FUNCTION__ ": format character '%c' is not supported", + ch); + + return -1; + } +} + + +/* + XXX: glib and Samba have quicker macro for doing the endianness conversions, + but I don't know of one in plain libc, and it's probably not a big deal. I + realize this is kind of dumb because we'll almost always be on x86, but + being safe is important. +*/ +static void pack_int32(unsigned long val_long, unsigned char **pbuf) +{ + (*pbuf)[0] = val_long & 0xff; + (*pbuf)[1] = (val_long >> 8) & 0xff; + (*pbuf)[2] = (val_long >> 16) & 0xff; + (*pbuf)[3] = (val_long >> 24) & 0xff; + (*pbuf) += 4; +} + + +static void pack_bytes(long len, const char *from, + unsigned char **pbuf) +{ + memcpy(*pbuf, from, len); + (*pbuf) += len; +} + + +static void +unpack_err_too_short(void) +{ + PyErr_Format(PyExc_IndexError, + __FUNCTION__ ": data too short for unpack format"); +} + + +static PyObject * +unpack_int32(char **pbuf, int *plen) +{ + long v; + unsigned char *b; + + if (*plen < 4) { + unpack_err_too_short(); + return NULL; + } + + b = *pbuf; + v = b[0] | b[1]<<8 | b[2]<<16 | b[3]<<24; + + (*pbuf) += 4; + (*plen) -= 4; + + return PyInt_FromLong(v); +} + + +static PyObject *unpack_int16(char **pbuf, int *plen) +{ + long v; + unsigned char *b; + + if (*plen < 2) { + unpack_err_too_short(); + return NULL; + } + + b = *pbuf; + v = b[0] | b[1]<<8; + + (*pbuf) += 2; + (*plen) -= 2; + + return PyInt_FromLong(v); +} + + +static PyObject * +unpack_string(char **pbuf, int *plen) +{ + int len; + char *nul_ptr, *start; + + start = *pbuf; + + nul_ptr = memchr(start, '\0', *plen); + if (!nul_ptr) { + unpack_err_too_short(); + return NULL; + } + + len = nul_ptr - start; + + *pbuf += len + 1; /* skip \0 */ + *plen -= len + 1; + + return PyString_FromStringAndSize(start, len); +} + + +static PyObject * +unpack_buffer(char **pbuf, int *plen) +{ + /* first get 32-bit len */ + long slen; + unsigned char *b; + unsigned char *start; + + if (*plen < 4) { + unpack_err_too_short(); + return NULL; + } + + b = *pbuf; + slen = b[0] | b[1]<<8 | b[2]<<16 | b[3]<<24; + + if (slen < 0) { /* surely you jest */ + PyErr_Format(PyExc_ValueError, + __FUNCTION__ ": buffer seems to have negative length"); + return NULL; + } + + (*pbuf) += 4; + (*plen) -= 4; + start = *pbuf; + + if (*plen < slen) { + PyErr_Format(PyExc_IndexError, + __FUNCTION__ ": not enough data to unpack buffer: " + "need %d bytes, have %d", + (int) slen, *plen); + return NULL; + } + + (*pbuf) += slen; + (*plen) -= slen; + + return PyString_FromStringAndSize(start, slen); +} + + +/* Unpack a single field from packed data, according to format character CH. + Remaining data is at *PBUF, of *PLEN. + + *PBUF is advanced, and *PLEN reduced to reflect the amount of data that has + been consumed. + + Returns a reference to the unpacked Python object, or NULL for failure. +*/ +static PyObject *pytdbpack_unpack_item(char ch, + char **pbuf, + int *plen) +{ + if (ch == 'w') { /* 16-bit int */ + return unpack_int16(pbuf, plen); + } + else if (ch == 'd' || ch == 'p') { /* 32-bit int */ + /* pointers can just come through as integers */ + return unpack_int32(pbuf, plen); + } + else if (ch == 'f' || ch == 'P') { /* nul-term string */ + return unpack_string(pbuf, plen); + } + else if (ch == 'B') { /* length, buffer */ + return unpack_buffer(pbuf, plen); + } + else { + PyErr_Format(PyExc_ValueError, + __FUNCTION__ ": format character '%c' is not supported", + ch); + + return NULL; + } +} + + + +/* + Pack a single item VAL_OBJ, encoded using format CH, into a buffer at *PBUF, + and advance the pointer. Buffer length has been pre-calculated so we are + sure that there is enough space. + +*/ +static PyObject * +pytdbpack_pack_item(char ch, + PyObject *val_obj, + unsigned char **pbuf) +{ + if (ch == 'w') { + unsigned long val_long = PyInt_AsLong(val_obj); + (*pbuf)[0] = val_long & 0xff; + (*pbuf)[1] = (val_long >> 8) & 0xff; + (*pbuf) += 2; + } + else if (ch == 'd') { + /* 4-byte LE number */ + pack_int32(PyInt_AsLong(val_obj), pbuf); + } + else if (ch == 'p') { + /* "Pointer" value -- in the subset of DCERPC used by Samba, + this is really just an "exists" or "does not exist" + flag. */ + pack_int32(PyObject_IsTrue(val_obj), pbuf); + } + else if (ch == 'f' || ch == 'P') { + int size; + char *sval; + + size = PyString_GET_SIZE(val_obj); + sval = PyString_AS_STRING(val_obj); + pack_bytes(size+1, sval, pbuf); /* include nul */ + } + else if (ch == 'B') { + int size; + char *sval; + + size = PyString_GET_SIZE(val_obj); + pack_int32(size, pbuf); + sval = PyString_AS_STRING(val_obj); + pack_bytes(size, sval, pbuf); /* do not include nul */ + } + else { + /* this ought to be caught while calculating the length, but + just in case. */ + PyErr_Format(PyExc_ValueError, + "%s: format character '%c' is not supported", + __FUNCTION__, ch); + + return NULL; + } + + return Py_None; +} + + +/* + Pack data according to FORMAT_STR from the elements of VAL_SEQ into + PACKED_BUF. + + The string has already been checked out, so we know that VAL_SEQ is large + enough to hold the packed data, and that there are enough value items. + (However, their types may not have been thoroughly checked yet.) + + In addition, val_seq is a Python Fast sequence. + + Returns NULL for error (with exception set), or None. +*/ +PyObject * +pytdbpack_pack_data(const char *format_str, + PyObject *val_seq, + unsigned char *packed_buf) +{ + int i; + + for (i = 0; format_str[i]; i++) { + char ch = format_str[i]; + PyObject *val_obj; + + /* borrow a reference to the item */ + val_obj = PySequence_Fast_GET_ITEM(val_seq, i); + if (!val_obj) + return NULL; + + if (!pytdbpack_pack_item(ch, val_obj, &packed_buf)) + return NULL; + } + + return Py_None; +} + + + + + +static PyMethodDef pytdbpack_methods[] = { + { "pack", pytdbpack_pack, METH_VARARGS, (char *) pytdbpack_pack_doc }, + { "unpack", pytdbpack_unpack, METH_VARARGS, (char *) pytdbpack_unpack_doc }, +}; + +DL_EXPORT(void) +inittdbpack(void) +{ + Py_InitModule3("tdbpack", pytdbpack_methods, + (char *) pytdbpack_docstring); +} -- cgit From 4c471811a439bd9774835496ee9a418a32ae4519 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 9 Sep 2002 06:44:29 +0000 Subject: Actually, I think Jerrys patch was incorrect as it didn't ever add the printing msg flag, only remove it. Also, we already refcount the printer backchannel connection to add the connection tdb flag just before after we register/deregister the notification message handler. Jerry please check ! Jeremy. (This used to be commit c45364ae82e06364cbb11545d1262032e12a21b1) --- source3/rpc_server/srv_spoolss_nt.c | 48 +++++++------------------------------ 1 file changed, 8 insertions(+), 40 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 795a420a23..a464f073fd 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -4,7 +4,7 @@ * Copyright (C) Andrew Tridgell 1992-2000, * Copyright (C) Luke Kenneth Casson Leighton 1996-2000, * Copyright (C) Jean François Micouleau 1998-2000, - * Copyright (C) Jeremy Allison 2001, + * Copyright (C) Jeremy Allison 2001-2002, * Copyright (C) Gerald Carter 2000-2002, * Copyright (C) Tim Potter 2001-2002. * @@ -170,41 +170,6 @@ static void free_spool_notify_option(SPOOL_NOTIFY_OPTION **pp) SAFE_FREE(*pp); } -/**************************************************************************** - wrapper function to maintain a reference count to the number of - open change notification handles we have -****************************************************************************/ - -static BOOL spooler_message_flags( BOOL doreg ) -{ - static uint32 ref_count = 0; - BOOL result = True; - - /* - * check for boundary counditions .... - * if ref_count == 0 and we want to register OR - * if ref_count == 1 and we want to deregister, THEN - * OK. - */ - - if ( ((ref_count == 0) && doreg) || ((ref_count == 1) && !doreg) ) - result = register_message_flags( doreg, FLAG_MSG_PRINTING ); - - /* increment/decrement reference count */ - - if ( doreg ) - ref_count++; - else { - /* minimum is always 0 */ - if ( ref_count ) - ref_count--; - } - - DEBUG(10,("spooler_message_flags: ref_count == %d\n", ref_count)); - - return result; -} - /*************************************************************************** Disconnect from the client ****************************************************************************/ @@ -231,12 +196,12 @@ static void srv_spoolss_replycloseprinter(POLICY_HND *handle) cli_ulogoff(¬ify_cli); cli_shutdown(¬ify_cli); message_deregister(MSG_PRINTER_NOTIFY2); - } - /* Tell the connections db we're not interested in printer notify messages. */ - /* reference count is handled by spooler_message_flags() */ + /* Tell the connections db we're no longer interested in + * printer notify messages. */ - spooler_message_flags( False ); + register_message_flags( False, FLAG_MSG_PRINTING ); + } smb_connections--; } @@ -2217,6 +2182,9 @@ static BOOL srv_spoolss_replyopenprinter(char *printer, uint32 localprinter, uin return False; message_register(MSG_PRINTER_NOTIFY2, receive_notify2_message_list); + /* Tell the connections db we're now interested in printer + * notify messages. */ + register_message_flags( True, FLAG_MSG_PRINTING ); } smb_connections++; -- cgit From b2536ccfdde333633f1d208a6113182aee260aab Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 07:49:25 +0000 Subject: Python's setup.py does not need to be munged by configure.in -- it is sufficient to just pass the relevant variables to Python from the Makefile. Therefore, remove setup.py.in. (This used to be commit 8bebe9ee2b6bd56c297acc6b01cb0856aad1c4f3) --- source3/Makefile.in | 1 + source3/configure | 4 +- source3/configure.in | 2 +- source3/python/.cvsignore | 1 - source3/python/setup.py | 168 +++++++++++++++++++++++++++++++++++++++++++ source3/python/setup.py.in | 174 --------------------------------------------- 6 files changed, 172 insertions(+), 178 deletions(-) create mode 100755 source3/python/setup.py delete mode 100755 source3/python/setup.py.in diff --git a/source3/Makefile.in b/source3/Makefile.in index 18df73a6da..b8c337f14a 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -883,6 +883,7 @@ python_common_proto: python_ext: $(PYTHON_OBJS) PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ + LIBS="$(LIBS)" \ $(PYTHON) python/setup.py build # revert to the previously installed version diff --git a/source3/configure b/source3/configure index fc2ed311bd..f2b63b75d7 100755 --- a/source3/configure +++ b/source3/configure @@ -14209,7 +14209,7 @@ done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" -trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +trap 'rm -fr `echo "include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile include/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then diff --git a/source3/configure.in b/source3/configure.in index 3a75b32aaf..fd08142bbd 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2841,7 +2841,7 @@ AC_SUBST(builddir) # I added make files that are outside /source directory. # I know this is not a good solution, will work out a better # solution soon. --simo -AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile python/setup.py) +AC_OUTPUT(include/stamp-h Makefile script/findsmb ../examples/VFS/Makefile ../examples/pdb/mysql/Makefile ../examples/pdb/xml/Makefile ../examples/sam/Makefile) ################################################# # Print very concise instructions on building/use diff --git a/source3/python/.cvsignore b/source3/python/.cvsignore index 8ce381cd39..7e99e367f8 100644 --- a/source3/python/.cvsignore +++ b/source3/python/.cvsignore @@ -1,2 +1 @@ -setup.py *.pyc \ No newline at end of file diff --git a/source3/python/setup.py b/source3/python/setup.py new file mode 100755 index 0000000000..b39ef448c1 --- /dev/null +++ b/source3/python/setup.py @@ -0,0 +1,168 @@ +# -*- 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 = os.environ.get("PYTHON_OBJS", "") + +samba_cflags = os.environ.get("PYTHON_CFLAGS", "") + +samba_srcdir = os.environ.get("SRCDIR", "") + +# These variables are filled in by configure + +samba_libs = os.environ.get("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_samr_conv.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), + + # libsmb module + + Extension(name = "smb", + sources = [samba_srcdir + "python/py_smb.c", + samba_srcdir + "python/py_common.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), + + # Moving to merge all individual extensions in to one big + # extension. This is to avoid the fact that each extension is 3MB + # in size due to the lack of proper depedency management in Samba. + + Extension(name = "samba", + sources = [samba_srcdir + "python/py_samba.c", + samba_srcdir + "python/py_common.c"], + libraries = lib_list, + library_dirs = ["/usr/kerberos/lib"], + extra_objects = obj_list), + ], +) diff --git a/source3/python/setup.py.in b/source3/python/setup.py.in deleted file mode 100755 index 5896301245..0000000000 --- a/source3/python/setup.py.in +++ /dev/null @@ -1,174 +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_samr_conv.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), - - # libsmb module - - Extension(name = "smb", - sources = [samba_srcdir + "python/py_smb.c", - samba_srcdir + "python/py_common.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - - # Moving to merge all individual extensions in to one big - # extension. This is to avoid the fact that each extension is 3MB - # in size due to the lack of proper depedency management in Samba. - - Extension(name = "samba", - sources = [samba_srcdir + "python/py_samba.c", - samba_srcdir + "python/py_common.c"], - libraries = lib_list, - library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list), - ], -) -- cgit From 462818caba9e68f092fdedb3cbcf7155161dffeb Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 08:06:17 +0000 Subject: Build py_tdbpack as well. (This used to be commit fc5e8b8f672d461809f113fe14435841608b046f) --- source3/python/setup.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source3/python/setup.py b/source3/python/setup.py index b39ef448c1..38bc841d98 100755 --- a/source3/python/setup.py +++ b/source3/python/setup.py @@ -164,5 +164,10 @@ setup( libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], extra_objects = obj_list), + + # tdbpack/unpack extensions. Does not actually link to any Samba + # code, although it implements a compatible data format. + Extension(name = "tdbpack", + sources = [os.path.join(samba_srcdir, "python", "py_tdbpack.c")]), ], ) -- cgit From 0ad8d0c768b2c961a1b93662d7050216edc2d3c0 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 08:34:35 +0000 Subject: Put all Python modules into the 'samba' subpackage. Now you need to write import samba.tdbutil samba.tdbutil.pack('f', ['hello']) You need 'cvs update -d' to get the new subdirectory for this to build properly. (This used to be commit 0d3276355e0511d6aff110a3943199629b3c00fd) --- source3/python/samba/__init__.py | 7 +++++++ source3/python/setup.py | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 source3/python/samba/__init__.py diff --git a/source3/python/samba/__init__.py b/source3/python/samba/__init__.py new file mode 100644 index 0000000000..c818ca3e04 --- /dev/null +++ b/source3/python/samba/__init__.py @@ -0,0 +1,7 @@ +"""samba + +Various Python modules for interfacing to Samba. + +Try using help() to examine their documentation. +""" + diff --git a/source3/python/setup.py b/source3/python/setup.py index 38bc841d98..a5d7879371 100755 --- a/source3/python/setup.py +++ b/source3/python/setup.py @@ -4,6 +4,7 @@ # Module packaging setup for Samba python extensions # # Copyright (C) Tim Potter, 2002 +# Copyright (C) Martin Pool, 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 @@ -70,9 +71,16 @@ setup( samba_srcdir + "ubiqx", samba_srcdir + "smbwrapper", samba_srcdir + "popt", "/usr/kerberos/include", "/usr/local/include"], + + # Get the "samba" directory of Python source. At the moment this + # just contains the __init__ file that makes it work as a + # subpackage. This is needed even though everything else is an + # extension module. + package_dir = {"samba": os.path.join(samba_srcdir, "python", "samba")}, + packages = ["samba"], # Module list - + ext_package = "samba", ext_modules = [ # SPOOLSS pipe module -- cgit From 2517c20b9efc66b4e6fa81b4d4ea086341c58dfe Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Mon, 9 Sep 2002 08:51:55 +0000 Subject: Add python_install target. Not called by default. Delegates most of the work to setup.py (This used to be commit 29d7ee7e0d6eea53a596973d157d377fbaaab3d1) --- source3/Makefile.in | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source3/Makefile.in b/source3/Makefile.in index b8c337f14a..3578b93020 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -886,6 +886,11 @@ python_ext: $(PYTHON_OBJS) LIBS="$(LIBS)" \ $(PYTHON) python/setup.py build +python_install: $(PYTHON_OBJS) + PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ + LIBS="$(LIBS)" \ + $(PYTHON) python/setup.py install + # revert to the previously installed version revert: @$(SHELL) $(srcdir)/script/revert.sh $(SBINDIR) $(SPROGS) -- cgit From 48c91e8b2a01628d03f1d2bdc49c32966d41c96c Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 9 Sep 2002 19:02:53 +0000 Subject: Merged Volkers (correct) fix from 2.2 for crash on unable to connect. Jeremy. (This used to be commit 05e2aba52f9b027bbab7c65cc02fd5c83d3c61aa) --- source3/libsmb/clientgen.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index facf361a6b..6b6a2acd3b 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -212,9 +212,8 @@ struct cli_state *cli_initialise(struct cli_state *cli) alloced_cli = True; } - if (cli->initialised) { - cli_shutdown(cli); - } + if (cli->initialised) + cli_close_connection(cli); ZERO_STRUCTP(cli); @@ -286,11 +285,14 @@ void cli_close_connection(struct cli_state *cli) data_blob_free(&cli->secblob); - if (cli->mem_ctx) + if (cli->mem_ctx) { talloc_destroy(cli->mem_ctx); + cli->mem_ctx = NULL; + } if (cli->fd != -1) close(cli->fd); + cli->fd = -1; } /**************************************************************************** -- cgit From dc1c14ca22555e55b9d784980d50ac6ad763f188 Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Mon, 9 Sep 2002 21:01:53 +0000 Subject: lowercase global_myname in %L substitution (This used to be commit 43a39e85b67c026a5edd93bcd58b76ae67315975) --- source3/lib/substitute.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source3/lib/substitute.c b/source3/lib/substitute.c index 767ca0c071..2550d00d14 100644 --- a/source3/lib/substitute.c +++ b/source3/lib/substitute.c @@ -297,8 +297,13 @@ void standard_sub_basic(const char *smb_name, char *str,size_t len) case 'L' : if (local_machine_name && *local_machine_name) string_sub(p,"%L", local_machine_name,l); - else - string_sub(p,"%L", global_myname,l); + else { + pstring temp_name; + + pstrcpy(temp_name, global_myname); + strlower(temp_name); + string_sub(p,"%L", temp_name,l); + } break; case 'M' : string_sub(p,"%M", client_name(),l); -- cgit From 9a3542b80e6290f45fcba4a698a2ef0fd3260127 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 9 Sep 2002 21:06:06 +0000 Subject: Patch from Steve French to fix difference in responses to smbclient //server/share ls / on Samba and Windows 2000. Jeremy. (This used to be commit b3fe55838d23001f634f6a75f08330718353d3ad) --- source3/smbd/trans2.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 8def7c0250..d21d6d2cda 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -906,7 +906,11 @@ close_if_end = %d requires_resume_key = %d level = %d, max_data_bytes = %d\n", p = strrchr_m(directory,'/'); if(p == NULL) { - pstrcpy(mask,directory); + /* Windows and OS/2 systems treat search on the root '\' as if it were '\*' */ + if((directory[0] == '.') && (directory[1] == '\0')) + pstrcpy(mask,"*"); + else + pstrcpy(mask,directory); pstrcpy(directory,"./"); } else { pstrcpy(mask,p+1); -- cgit From eaa4ee9bc07b0a2d412c7a73103f404b10d81dda Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 9 Sep 2002 21:38:42 +0000 Subject: Use SAM debug class in skeleton - patch from metze Shouldn't we use dynamic debug classes here? (This used to be commit db0f742e0ea619e69457f15cdb3740ae7c85cebd) --- examples/sam/sam_skel.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/sam/sam_skel.c b/examples/sam/sam_skel.c index 5dae5a5843..a3b8f13391 100644 --- a/examples/sam/sam_skel.c +++ b/examples/sam/sam_skel.c @@ -21,7 +21,7 @@ #include "includes.h" -static int sam_skel_debug_level = DBGC_ALL; +static int sam_skel_debug_level = DBGC_SAM; #undef DBGC_CLASS #define DBGC_CLASS sam_skel_debug_level @@ -189,7 +189,7 @@ NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_method, const NT_USER return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const char *location) +NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const DOM_SID *domain, const char *module_params) { NTSTATUS nt_status; @@ -245,13 +245,14 @@ NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, cons sam_skel_debug_level = debug_add_class("sam_skel"); if (sam_skel_debug_level == -1) { - sam_skel_debug_level = DBGC_ALL; + sam_skel_debug_level = DBGC_SAM; DEBUG(0, ("sam_skel: Couldn't register custom debugging class!\n")); - } else DEBUG(0, ("sam_skel: Debug class number of 'sam_skel': %d\n", sam_skel_debug_level)); + } else DEBUG(2, ("sam_skel: Debug class number of 'sam_skel': %d\n", sam_skel_debug_level)); - DEBUG(0, ("Initializing sam_skel\n")); - if (location) - DEBUG(10, ("Location: %s\n", location)); + if(module_params) + DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params, sid_string_static(domain))); + else + DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sid_string_static(domain))); return NT_STATUS_OK; } -- cgit From 8de41d59482e7d66824c4a69563875d768f1f100 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 9 Sep 2002 21:48:23 +0000 Subject: Merged Steve French's fix for OS/2 EA return error being removed. Jeremy. (This used to be commit af2168c0344d49041b1fe78cd5219ac50308deb3) --- source3/include/trans2.h | 21 ++++++++++++--------- source3/smbd/trans2.c | 4 +++- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/source3/include/trans2.h b/source3/include/trans2.h index fb265fdb1a..3468d3b995 100644 --- a/source3/include/trans2.h +++ b/source3/include/trans2.h @@ -193,16 +193,19 @@ Byte offset Type name description } FSINFO; *************************************************************/ -#define SMB_INFO_STANDARD 1 -#define SMB_INFO_QUERY_EA_SIZE 2 -#define SMB_INFO_QUERY_EAS_FROM_LIST 3 -#define SMB_INFO_QUERY_ALL_EAS 4 +#define SMB_INFO_STANDARD 1 /* FILESTATUS3 struct */ +#define SMB_INFO_SET_EA 2 /* EAOP2 struct, only valid on set not query */ +#define SMB_INFO_QUERY_EA_SIZE 2 /* FILESTATUS4 struct, only valid on query not set */ +#define SMB_INFO_QUERY_EAS_FROM_LIST 3 /* only valid on query not set */ +#define SMB_INFO_QUERY_ALL_EAS 4 /* only valid on query not set */ #define SMB_INFO_IS_NAME_VALID 6 -#define SMB_QUERY_FS_LABEL_INFO 0x101 -#define SMB_QUERY_FS_VOLUME_INFO 0x102 -#define SMB_QUERY_FS_SIZE_INFO 0x103 -#define SMB_QUERY_FS_DEVICE_INFO 0x104 -#define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105 +#define SMB_INFO_STANDARD_LONG 11 /* similar to level 1, ie struct FileStatus3 */ +#define SMB_QUERY_EA_SIZE_LONG 12 /* similar to level 2, ie struct FileStatus4 */ +#define SMB_QUERY_FS_LABEL_INFO 0x101 +#define SMB_QUERY_FS_VOLUME_INFO 0x102 +#define SMB_QUERY_FS_SIZE_INFO 0x103 +#define SMB_QUERY_FS_DEVICE_INFO 0x104 +#define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105 #define l2_vol_fdateCreation 0 diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index d21d6d2cda..de65cda2d0 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -2349,7 +2349,6 @@ static int call_trans2setfilepathinfo(connection_struct *conn, switch (info_level) { case SMB_INFO_STANDARD: - case SMB_INFO_QUERY_EA_SIZE: { if (total_data < l1_cbFile+4) return(ERROR_DOS(ERRDOS,ERRinvalidparam)); @@ -2366,6 +2365,9 @@ static int call_trans2setfilepathinfo(connection_struct *conn, break; } + case SMB_INFO_SET_EA: + return(ERROR_DOS(ERRDOS,ERReasnotsupported)); + /* XXXX um, i don't think this is right. it's also not in the cifs6.txt spec. */ -- cgit From df920a60b5f207149cbc9dcb63d406abb0d0490c Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 10 Sep 2002 01:58:51 +0000 Subject: Added final Steve French patch for "required" attributes with old dir listings. Added regression test in smbtorture (in HEAD) also. Jeremy. (This used to be commit 3c9d24d7c3bad2beb641880a97f0eda5cd3e4ec7) --- source3/libsmb/clilist.c | 48 +++++++++++----------- source3/smbd/dir.c | 21 ++++++++-- source3/smbd/reply.c | 8 +++- source3/torture/torture.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 147 insertions(+), 30 deletions(-) diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c index 17a759f9e3..3eacc25380 100644 --- a/source3/libsmb/clilist.c +++ b/source3/libsmb/clilist.c @@ -22,13 +22,13 @@ #include "includes.h" - /**************************************************************************** -interpret a long filename structure - this is mostly guesses at the moment -The length of the structure is returned -The structure of a long filename depends on the info level. 260 is used -by NT and 2 is used by OS/2 + Interpret a long filename structure - this is mostly guesses at the moment. + The length of the structure is returned + The structure of a long filename depends on the info level. 260 is used + by NT and 2 is used by OS/2 ****************************************************************************/ + static int interpret_long_filename(struct cli_state *cli, int level,char *p,file_info *finfo) { @@ -41,8 +41,7 @@ static int interpret_long_filename(struct cli_state *cli, memcpy(finfo,&def_finfo,sizeof(*finfo)); - switch (level) - { + switch (level) { case 1: /* OS/2 understands this */ /* these dates are converted to GMT by make_unix_date */ @@ -126,16 +125,16 @@ static int interpret_long_filename(struct cli_state *cli, namelen, 0); return SVAL(base, 0); } - } + } DEBUG(1,("Unknown long filename format %d\n",level)); return(SVAL(p,0)); } - /**************************************************************************** - do a directory listing, calling fn on each file found - ****************************************************************************/ + Do a directory listing, calling fn on each file found. +****************************************************************************/ + int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute, void (*fn)(file_info *, const char *, void *), void *state) { @@ -307,12 +306,11 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute, return(total_received); } - - /**************************************************************************** -interpret a short filename structure -The length of the structure is returned + Interpret a short filename structure. + The length of the structure is returned. ****************************************************************************/ + static int interpret_short_filename(struct cli_state *cli, char *p,file_info *finfo) { extern file_info def_finfo; @@ -334,10 +332,11 @@ static int interpret_short_filename(struct cli_state *cli, char *p,file_info *fi /**************************************************************************** - do a directory listing, calling fn on each file found - this uses the old SMBsearch interface. It is needed for testing Samba, - but should otherwise not be used - ****************************************************************************/ + Do a directory listing, calling fn on each file found. + this uses the old SMBsearch interface. It is needed for testing Samba, + but should otherwise not be used. +****************************************************************************/ + int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, void (*fn)(file_info *, const char *, void *), void *state) { @@ -453,16 +452,15 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, return(num_received); } - /**************************************************************************** - do a directory listing, calling fn on each file found - this auto-switches between old and new style - ****************************************************************************/ + Do a directory listing, calling fn on each file found. + This auto-switches between old and new style. +****************************************************************************/ + int cli_list(struct cli_state *cli,const char *Mask,uint16 attribute, void (*fn)(file_info *, const char *, void *), void *state) { - if (cli->protocol <= PROTOCOL_LANMAN1) { + if (cli->protocol <= PROTOCOL_LANMAN1) return cli_list_old(cli, Mask, attribute, fn, state); - } return cli_list_new(cli, Mask, attribute, fn, state); } diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c index bdcb4b0461..396ecd98c4 100644 --- a/source3/smbd/dir.c +++ b/source3/smbd/dir.c @@ -553,9 +553,24 @@ void *dptr_fetch_lanman2(int dptr_num) BOOL dir_check_ftype(connection_struct *conn,int mode,SMB_STRUCT_STAT *st,int dirtype) { - if (((mode & ~dirtype) & (aHIDDEN | aSYSTEM | aDIR)) != 0) - return False; - return True; + int mask; + + /* Check the "may have" search bits. */ + if (((mode & ~dirtype) & (aHIDDEN | aSYSTEM | aDIR)) != 0) + return False; + + /* Check the "must have" bits, which are the may have bits shifted eight */ + /* If must have bit is set, the file/dir can not be returned in search unless the matching + file attribute is set */ + mask = ((dirtype >> 8) & (aDIR|aARCH|aRONLY|aHIDDEN|aSYSTEM)); /* & 0x37 */ + if(mask) { + if((mask & (mode & (aDIR|aARCH|aRONLY|aHIDDEN|aSYSTEM))) == mask) /* check if matching attribute present */ + return True; + else + return False; + } + + return True; } static BOOL mangle_mask_match(connection_struct *conn, char *filename, char *mask) diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 01e7df282c..2b361fd43a 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -673,12 +673,16 @@ int reply_search(connection_struct *conn, char *inbuf,char *outbuf, int dum_size if (strlen(directory) == 0) pstrcpy(directory,"./"); memset((char *)status,'\0',21); - SCVAL(status,0,dirtype); + SCVAL(status,0,(dirtype & 0x1F)); } else { + int status_dirtype; memcpy(status,p,21); - dirtype = CVAL(status,0) & 0x1F; + status_dirtype = CVAL(status,0) & 0x1F; + if (status_dirtype != (dirtype & 0x1F)) + dirtype = status_dirtype; + conn->dirptr = dptr_fetch(status+12,&dptr_num); if (!conn->dirptr) goto SearchEmpty; diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 047b4c7a24..fb62b13657 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -3533,6 +3533,105 @@ static BOOL run_dirtest(int dummy) return correct; } +static void del_fn(file_info *finfo, const char *mask, void *state) +{ + struct cli_state *pcli = (struct cli_state *)state; + fstring fname; + slprintf(fname, sizeof(fname), "\\LISTDIR\\%s", finfo->name); + + if (strcmp(finfo->name, ".") == 0 || strcmp(finfo->name, "..") == 0) + return; + + if (finfo->mode & aDIR) { + if (!cli_rmdir(pcli, fname)) + printf("del_fn: failed to rmdir %s\n,", fname ); + } else { + if (!cli_unlink(pcli, fname)) + printf("del_fn: failed to unlink %s\n,", fname ); + } +} + +static BOOL run_dirtest1(int dummy) +{ + int i; + static struct cli_state cli; + int fnum, num_seen; + BOOL correct = True; + + printf("starting directory test\n"); + + if (!torture_open_connection(&cli)) { + return False; + } + + cli_sockopt(&cli, sockops); + + cli_list(&cli, "\\LISTDIR\\*", 0, del_fn, &cli); + cli_list(&cli, "\\LISTDIR\\*", aDIR, del_fn, &cli); + cli_rmdir(&cli, "\\LISTDIR"); + cli_mkdir(&cli, "\\LISTDIR"); + + /* Create 1000 files and 1000 directories. */ + for (i=0;i<1000;i++) { + fstring fname; + slprintf(fname, sizeof(fname), "\\LISTDIR\\f%d", i); + fnum = cli_nt_create_full(&cli, fname, GENERIC_ALL_ACCESS, FILE_ATTRIBUTE_ARCHIVE, + FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OVERWRITE_IF, 0); + if (fnum == -1) { + fprintf(stderr,"Failed to open %s\n", fname); + return False; + } + cli_close(&cli, fnum); + } + for (i=0;i<1000;i++) { + fstring fname; + slprintf(fname, sizeof(fname), "\\LISTDIR\\d%d", i); + if (!cli_mkdir(&cli, fname)) { + fprintf(stderr,"Failed to open %s\n", fname); + return False; + } + } + + /* Now ensure that doing an old list sees both files and directories. */ + num_seen = cli_list_old(&cli, "\\LISTDIR\\*", aDIR, list_fn, NULL); + printf("num_seen = %d\n", num_seen ); + /* We should see 100 files + 1000 directories + . and .. */ + if (num_seen != 2002) + correct = False; + + /* Ensure if we have the "must have" bits we only see the + * relevent entries. + */ + num_seen = cli_list_old(&cli, "\\LISTDIR\\*", (aDIR<<8)|aDIR, list_fn, NULL); + printf("num_seen = %d\n", num_seen ); + if (num_seen != 1002) + correct = False; + + num_seen = cli_list_old(&cli, "\\LISTDIR\\*", (aARCH<<8)|aDIR, list_fn, NULL); + printf("num_seen = %d\n", num_seen ); + if (num_seen != 1000) + correct = False; + + /* Delete everything. */ + cli_list(&cli, "\\LISTDIR\\*", 0, del_fn, &cli); + cli_list(&cli, "\\LISTDIR\\*", aDIR, del_fn, &cli); + cli_rmdir(&cli, "\\LISTDIR"); + +#if 0 + printf("Matched %d\n", cli_list(&cli, "a*.*", 0, list_fn, NULL)); + printf("Matched %d\n", cli_list(&cli, "b*.*", 0, list_fn, NULL)); + printf("Matched %d\n", cli_list(&cli, "xyzabc", 0, list_fn, NULL)); +#endif + + if (!torture_close_connection(&cli)) { + correct = False; + } + + printf("finished dirtest1\n"); + + return correct; +} + static BOOL run_error_map_extract(int dummy) { static struct cli_state c_dos; @@ -3761,6 +3860,7 @@ static struct { {"OPLOCK2", run_oplock2, 0}, {"OPLOCK3", run_oplock3, 0}, {"DIR", run_dirtest, 0}, + {"DIR1", run_dirtest1, 0}, {"DENY1", torture_denytest1, 0}, {"DENY2", torture_denytest2, 0}, {"TCON", run_tcon_test, 0}, -- cgit From 5793e15a27bf9f3bd00120ab0ff000b3935b19bf Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 10 Sep 2002 02:38:15 +0000 Subject: change notify merge from APP_HEAD (This used to be commit b5227f0a645fdf2358fcb880f22e4662efdfe8e3) --- source3/include/nt_printing.h | 16 +- source3/rpc_client/cli_spoolss_notify.c | 3 + source3/rpc_server/srv_spoolss_nt.c | 340 +++++++++++++++++++++++++------- 3 files changed, 282 insertions(+), 77 deletions(-) diff --git a/source3/include/nt_printing.h b/source3/include/nt_printing.h index 26d6e7e5f2..57767fc3c6 100644 --- a/source3/include/nt_printing.h +++ b/source3/include/nt_printing.h @@ -351,7 +351,7 @@ typedef struct _form #define SPOOLSS_NOTIFY_MSG_UNIX_JOBID 0x0001 /* Job id is unix */ -struct spoolss_notify_msg { +typedef struct spoolss_notify_msg { fstring printer; /* Name of printer notified */ uint32 type; /* Printer or job notify */ uint32 field; /* Notify field changed */ @@ -362,6 +362,18 @@ struct spoolss_notify_msg { uint32 value[2]; char *data; } notify; -}; +} SPOOLSS_NOTIFY_MSG; + +typedef struct { + fstring printername; + uint32 num_msgs; + SPOOLSS_NOTIFY_MSG *msgs; +} SPOOLSS_NOTIFY_MSG_GROUP; + +typedef struct { + TALLOC_CTX *ctx; + uint32 num_groups; + SPOOLSS_NOTIFY_MSG_GROUP *msg_groups; +} SPOOLSS_NOTIFY_MSG_CTR; #endif /* NT_PRINTING_H_ */ diff --git a/source3/rpc_client/cli_spoolss_notify.c b/source3/rpc_client/cli_spoolss_notify.c index f03046558e..d07ace8e0c 100644 --- a/source3/rpc_client/cli_spoolss_notify.c +++ b/source3/rpc_client/cli_spoolss_notify.c @@ -222,6 +222,9 @@ done: return result; } +/********************************************************************* + *********************************************************************/ + WERROR cli_spoolss_rffpcnex(struct cli_state *cli, TALLOC_CTX *mem_ctx, POLICY_HND *pol, uint32 flags, uint32 options, char *localmachine, uint32 printerlocal, diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index a464f073fd..ff9ac2ce50 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -728,25 +728,177 @@ static struct notify2_message_table job_notify_table[] = { /* 0x17 */ { "JOB_NOTIFY_BYTES_PRINTED", NULL }, }; + +/*********************************************************************** + Allocate talloc context for container object + **********************************************************************/ + +static void notify_msg_ctr_init( SPOOLSS_NOTIFY_MSG_CTR *ctr ) +{ + if ( !ctr ) + return; + + ctr->ctx = talloc_init(); + + return; +} + +/*********************************************************************** + release all allocated memory and zero out structure + **********************************************************************/ + +static void notify_msg_ctr_destroy( SPOOLSS_NOTIFY_MSG_CTR *ctr ) +{ + if ( !ctr ) + return; + + if ( ctr->ctx ) + talloc_destroy(ctr->ctx); + + ZERO_STRUCTP(ctr); + + return; +} + +/*********************************************************************** + **********************************************************************/ + +static TALLOC_CTX* notify_ctr_getctx( SPOOLSS_NOTIFY_MSG_CTR *ctr ) +{ + if ( !ctr ) + return NULL; + + return ctr->ctx; +} + +/*********************************************************************** + **********************************************************************/ + +static SPOOLSS_NOTIFY_MSG_GROUP* notify_ctr_getgroup( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 index ) +{ + if ( !ctr || !ctr->msg_groups ) + return NULL; + + if ( index >= ctr->num_groups ) + return NULL; + + return &ctr->msg_groups[index]; + +} + +/*********************************************************************** + How many groups of change messages do we have ? + **********************************************************************/ + +static int notify_msg_ctr_numgroups( SPOOLSS_NOTIFY_MSG_CTR *ctr ) +{ + if ( !ctr ) + return 0; + + return ctr->num_groups; +} + +/*********************************************************************** + Add a SPOOLSS_NOTIFY_MSG_CTR to the correct group + **********************************************************************/ + +static int notify_msg_ctr_addmsg( SPOOLSS_NOTIFY_MSG_CTR *ctr, SPOOLSS_NOTIFY_MSG *msg ) +{ + SPOOLSS_NOTIFY_MSG_GROUP *groups = NULL; + SPOOLSS_NOTIFY_MSG_GROUP *msg_grp = NULL; + SPOOLSS_NOTIFY_MSG *msg_list = NULL; + int i, new_slot; + + if ( !ctr || !msg ) + return 0; + + /* loop over all groups looking for a matching printer name */ + + for ( i=0; inum_groups; i++ ) { + if ( strcmp(ctr->msg_groups[i].printername, msg->printer) == 0 ) + break; + } + + /* add a new group? */ + + if ( i == ctr->num_groups ) + { + ctr->num_groups++; + + if ( !(groups = talloc_realloc( ctr->ctx, ctr->msg_groups, sizeof(SPOOLSS_NOTIFY_MSG_GROUP)*ctr->num_groups)) ) { + DEBUG(0,("notify_msg_ctr_addmsg: talloc_realloc() failed!\n")); + return 0; + } + ctr->msg_groups = groups; + + /* clear the new entry and set the printer name */ + + ZERO_STRUCT( ctr->msg_groups[ctr->num_groups-1] ); + fstrcpy( ctr->msg_groups[ctr->num_groups-1].printername, msg->printer ); + } + + /* add the change messages; 'i' is the correct index now regardless */ + + msg_grp = &ctr->msg_groups[i]; + + msg_grp->num_msgs++; + + if ( !(msg_list = talloc_realloc( ctr->ctx, msg_grp->msgs, sizeof(SPOOLSS_NOTIFY_MSG)*msg_grp->num_msgs )) ) { + DEBUG(0,("notify_msg_ctr_addmsg: talloc_realloc() failed for new message [%d]!\n", msg_grp->num_msgs)); + return 0; + } + msg_grp->msgs = msg_list; + + new_slot = msg_grp->num_msgs-1; + memcpy( &msg_grp->msgs[new_slot], msg, sizeof(SPOOLSS_NOTIFY_MSG) ); + + /* need to allocate own copy of data */ + + if ( msg->len != 0 ) + msg_grp->msgs[new_slot].notify.data = talloc_memdup( ctr->ctx, msg->notify.data, msg->len ); + + return ctr->num_groups; +} + /*********************************************************************** Send a change notication message on all handles which have a call back registered **********************************************************************/ -static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX *mem_ctx) +static void send_notify2_changes( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 index ) { - Printer_entry *p; - - DEBUG(8,("process_notify2_message: Enter...[%s]\n", msg->printer)); + Printer_entry *p; + TALLOC_CTX *mem_ctx = notify_ctr_getctx( ctr ); + SPOOLSS_NOTIFY_MSG_GROUP *msg_group = notify_ctr_getgroup( ctr, index ); + SPOOLSS_NOTIFY_MSG *messages; + + + if ( !msg_group ) { + DEBUG(5,("send_notify2_changes() called with no msg group!\n")); + return; + } + + messages = msg_group->msgs; - for (p = printers_list; p; p = p->next) { + if ( !messages ) { + DEBUG(5,("send_notify2_changes() called with no messages!\n")); + return; + } + + DEBUG(8,("send_notify2_changes: Enter...[%s]\n", msg_group->printername)); + + /* loop over all printers */ + + for (p = printers_list; p; p = p->next) + { SPOOL_NOTIFY_INFO_DATA *data; - uint32 data_len = 1; - uint32 id; + uint32 data_len = 0; + uint32 id; + int i; /* Is there notification on this handle? */ - if (!p->notify.client_connected) + if ( !p->notify.client_connected ) continue; DEBUG(10,("Client connected! [%s]\n", p->dev.handlename)); @@ -755,25 +907,31 @@ static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX * notifications. */ if ( ( p->printer_type == PRINTER_HANDLE_IS_PRINTER ) && - ( !strequal(msg->printer, p->dev.handlename) ) ) + ( !strequal(msg_group->printername, p->dev.handlename) ) ) continue; DEBUG(10,("Our printer\n")); + /* allocate the max entries possible */ + + data = talloc( mem_ctx, msg_group->num_msgs*sizeof(SPOOL_NOTIFY_INFO_DATA) ); + ZERO_STRUCTP(data); + + /* build the array of change notifications */ + + for ( i=0; inum_msgs; i++ ) + { + SPOOLSS_NOTIFY_MSG *msg = &messages[i]; + /* Are we monitoring this event? */ if (!is_monitoring_event(p, msg->type, msg->field)) continue; + DEBUG(10,("process_notify2_message: Sending message type [%x] field [%x] for printer [%s]\n", msg->type, msg->field, p->dev.handlename)); - /* OK - send the event to the client */ - - data = talloc(mem_ctx, sizeof(SPOOL_NOTIFY_INFO_DATA)); - - ZERO_STRUCTP(data); - /* * if the is a printer notification handle and not a job notification * type, then set the id to 0. Other wise just use what was specified @@ -795,8 +953,8 @@ static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX * /* Convert unix jobid to smb jobid */ - if (msg->flags & SPOOLSS_NOTIFY_MSG_UNIX_JOBID) { - + if (msg->flags & SPOOLSS_NOTIFY_MSG_UNIX_JOBID) + { id = sysjob_to_jobid(msg->id); if (id == -1) { @@ -805,22 +963,20 @@ static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX * } } - construct_info_data(data, msg->type, msg->field, id); + construct_info_data( &data[data_len], msg->type, msg->field, id ); switch(msg->type) { case PRINTER_NOTIFY_TYPE: if ( !printer_notify_table[msg->field].fn ) goto done; - - printer_notify_table[msg->field].fn(msg, data, mem_ctx); + printer_notify_table[msg->field].fn(msg, &data[data_len], mem_ctx); break; case JOB_NOTIFY_TYPE: if ( !job_notify_table[msg->field].fn ) goto done; - - job_notify_table[msg->field].fn(msg, data, mem_ctx); + job_notify_table[msg->field].fn(msg, &data[data_len], mem_ctx); break; @@ -829,60 +985,51 @@ static void process_notify2_message(struct spoolss_notify_msg *msg, TALLOC_CTX * goto done; } + data_len++; + } + cli_spoolss_rrpcn( ¬ify_cli, mem_ctx, &p->notify.client_hnd, data_len, data, p->notify.change, 0 ); } + done: - DEBUG(8,("process_notify2_message: Exit...\n")); + DEBUG(8,("send_notify2_changes: Exit...\n")); return; } -/******************************************************************** - Receive a notify2 message - ********************************************************************/ +/*********************************************************************** + **********************************************************************/ -static void receive_notify2_message(void *buf, size_t len) +static BOOL notify2_unpack_msg( SPOOLSS_NOTIFY_MSG *msg, void *buf, size_t len ) { - struct spoolss_notify_msg msg; + int offset = 0; - TALLOC_CTX *mem_ctx = talloc_init(); /* Unpack message */ - ZERO_STRUCT(msg); - offset += tdb_unpack((char *)buf + offset, len - offset, "f", - msg.printer); + msg->printer); offset += tdb_unpack((char *)buf + offset, len - offset, "ddddd", - &msg.type, &msg.field, &msg.id, &msg.len, &msg.flags); + &msg->type, &msg->field, &msg->id, &msg->len, &msg->flags); - if (msg.len == 0) + if (msg->len == 0) tdb_unpack((char *)buf + offset, len - offset, "dd", - &msg.notify.value[0], &msg.notify.value[1]); + &msg->notify.value[0], &msg->notify.value[1]); else tdb_unpack((char *)buf + offset, len - offset, "B", - &msg.len, &msg.notify.data); + &msg->len, &msg->notify.data); - DEBUG(3, ("got NOTIFY2 message, type %d, field 0x%02x, flags 0x%04x\n", - msg.type, msg.field, msg.flags)); + DEBUG(3, ("notify2_unpack_msg: got NOTIFY2 message, type %d, field 0x%02x, flags 0x%04x\n", + msg->type, msg->field, msg->flags)); - if (msg.len == 0) - DEBUG(3, ("value1 = %d, value2 = %d\n", msg.notify.value[0], - msg.notify.value[1])); + if (msg->len == 0) + DEBUG(3, ("notify2_unpack_msg: value1 = %d, value2 = %d\n", msg->notify.value[0], + msg->notify.value[1])); else - dump_data(3, msg.notify.data, msg.len); - - /* Process message */ - - process_notify2_message(&msg, mem_ctx); - - /* Free message */ + dump_data(3, msg->notify.data, msg->len); - if (msg.len > 0) - free(msg.notify.data); - - talloc_destroy(mem_ctx); + return True; } /******************************************************************** @@ -891,43 +1038,86 @@ static void receive_notify2_message(void *buf, size_t len) static void receive_notify2_message_list(int msg_type, pid_t src, void *msg, size_t len) { - size_t msg_count, i; - char *buf = (char *)msg; - char *msg_ptr; - - if (len < 4) - goto bad_msg; + size_t msg_count, i; + char *buf = (char *)msg; + char *msg_ptr; + size_t msg_len; + SPOOLSS_NOTIFY_MSG notify; + SPOOLSS_NOTIFY_MSG_CTR messages; + int num_groups; + if (len < 4) { + DEBUG(0,("receive_notify2_message_list: bad message format (len < 4)!\n")); + return; + } + msg_count = IVAL(buf, 0); msg_ptr = buf + 4; DEBUG(5, ("receive_notify2_message_list: got %d messages in list\n", msg_count)); - if (msg_count == 0) - goto bad_msg; - - for (i = 0; i < msg_count; i++) { - size_t msg_len; + if (msg_count == 0) { + DEBUG(0,("receive_notify2_message_list: bad message format (msg_count == 0) !\n")); + return; + } - if (msg_ptr + 4 - buf > len) - goto bad_msg; + /* initialize the container */ + + ZERO_STRUCT( messages ); + notify_msg_ctr_init( &messages ); + + /* + * build message groups for each printer identified + * in a change_notify msg. Remember that a PCN message + * includes the handle returned for the srv_spoolss_replyopenprinter() + * call. Therefore messages are grouped according to printer handle. + */ + + for ( i=0; i len) { + DEBUG(0,("receive_notify2_message_list: bad message format (len > buf_size) !\n")); + return; + } msg_len = IVAL(msg_ptr,0); msg_ptr += 4; - if (msg_ptr + msg_len - buf > len) - goto bad_msg; - receive_notify2_message(msg_ptr, msg_len); + if (msg_ptr + msg_len - buf > len) { + DEBUG(0,("receive_notify2_message_list: bad message format (bad len) !\n")); + return; + } + + /* unpack messages */ + + ZERO_STRUCT( notify ); + notify2_unpack_msg( ¬ify, msg_ptr, msg_len ); msg_ptr += msg_len; + + /* add to correct list in container */ + + notify_msg_ctr_addmsg( &messages, ¬ify ); + + /* free memory that might have been allocated by notify2_unpack_msg() */ + + if ( notify.len != 0 ) + SAFE_FREE( notify.notify.data ); } - - DEBUG(10,("receive_notify2_message_list: processed %u messages\n", - (unsigned int)msg_count )); + + /* process each group of messages */ + + num_groups = notify_msg_ctr_numgroups( &messages ); + for ( i=0; i Date: Tue, 10 Sep 2002 06:41:27 +0000 Subject: Updated examples for new top level module layout. Fixed some bugs also. (This used to be commit 3e19e3afdb6fd1f63dee9ca52a5d33090670832e) --- source3/python/examples/spoolss/changeid.py | 7 ++++++- source3/python/examples/spoolss/enumprinters.py | 23 +++++++++++++++++------ source3/python/examples/spoolss/psec.py | 3 ++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/source3/python/examples/spoolss/changeid.py b/source3/python/examples/spoolss/changeid.py index b2345094ed..85fe0efe8a 100755 --- a/source3/python/examples/spoolss/changeid.py +++ b/source3/python/examples/spoolss/changeid.py @@ -2,8 +2,13 @@ # # Display the changeid for a list of printers given on the command line # +# Sample usage: +# +# changeid.py '\\win2kdc1\magpie' +# -import sys, spoolss +import sys +from samba import spoolss if len(sys.argv) == 1: print "Usage: changeid.py " diff --git a/source3/python/examples/spoolss/enumprinters.py b/source3/python/examples/spoolss/enumprinters.py index bf08b95bb9..478c46bc24 100755 --- a/source3/python/examples/spoolss/enumprinters.py +++ b/source3/python/examples/spoolss/enumprinters.py @@ -1,20 +1,28 @@ #!/usr/bin/env python # -# Display information on all printers on a print server +# Display information on all printers on a print server. Defaults to +# printer info level 1. +# +# Example: enumprinters.py win2kdc1 # -import sys, spoolss +import sys +from samba import spoolss -if len(sys.argv) != 2: - print "Usage: changeid.py " +if len(sys.argv) < 2 or len(sys.argv) > 3: + print "Usage: enumprinters.py [infolevel]" sys.exit(1) printserver = sys.argv[1] +level = 1 +if len(sys.argv) == 3: + level = int(sys.argv[2]) + # Get list of printers try: - printer_list = spoolss.enumprinters(printserver) + printer_list = spoolss.enumprinters("\\\\%s" % printserver) except: print "error enumerating printers on %s" % printserver sys.exit(1) @@ -22,4 +30,7 @@ except: # Display basic info for printer in printer_list: - print "%s: %s" % (printer["printer_name"], printer["comment"]) + h = spoolss.openprinter("\\\\%s\\%s" % (printserver, printer)) + info = h.getprinter(level = level) + print "Printer info %d for %s: %s" % (level, printer, info) + print diff --git a/source3/python/examples/spoolss/psec.py b/source3/python/examples/spoolss/psec.py index f3fdb7bccd..498a0ef174 100755 --- a/source3/python/examples/spoolss/psec.py +++ b/source3/python/examples/spoolss/psec.py @@ -3,7 +3,8 @@ # Get or set the security descriptor on a printer # -import sys, spoolss, re, string +import sys, re, string +from samba import spoolss if len(sys.argv) != 3: print "Usage: psec.py getsec|setsec printername" -- cgit From 31737ace97c3b614adb66a228157e20a43e31054 Mon Sep 17 00:00:00 2001 From: Martin Pool Date: Tue, 10 Sep 2002 08:36:55 +0000 Subject: Check in examples for tdb packer (This used to be commit e8f9fbd32b73f60db3683d23a979dc09e7204258) --- source3/python/examples/tdbpack/tdbtimetrial.py | 12 ++ source3/python/examples/tdbpack/test_tdbpack.py | 195 ++++++++++++++++++++++++ 2 files changed, 207 insertions(+) create mode 100755 source3/python/examples/tdbpack/tdbtimetrial.py create mode 100755 source3/python/examples/tdbpack/test_tdbpack.py diff --git a/source3/python/examples/tdbpack/tdbtimetrial.py b/source3/python/examples/tdbpack/tdbtimetrial.py new file mode 100755 index 0000000000..be6404899d --- /dev/null +++ b/source3/python/examples/tdbpack/tdbtimetrial.py @@ -0,0 +1,12 @@ +#! /usr/bin/python2.2 + +def run_trial(): + # import tdbutil + from samba.tdbpack import pack + + for i in xrange(500000): + pack("ddffd", (10, 2, "mbp", "martin", 0)) + #s = "\n\0\0\0" + "\x02\0\0\0" + "mbp\0" + "martin\0" + "\0\0\0\0" + +if __name__ == '__main__': + run_trial() diff --git a/source3/python/examples/tdbpack/test_tdbpack.py b/source3/python/examples/tdbpack/test_tdbpack.py new file mode 100755 index 0000000000..36fed881e3 --- /dev/null +++ b/source3/python/examples/tdbpack/test_tdbpack.py @@ -0,0 +1,195 @@ +#! /usr/bin/env python2.2 + +__doc__ = """test case for samba.tdbkpack functions + +tdbpack provides a means of pickling values into binary formats +compatible with that used by the samba tdbpack()/tdbunpack() +functions. + +Numbers are always stored in little-endian format; strings are stored +in either DOS or Unix codepage as appropriate. + +The format for any particular element is encoded as a short ASCII +string, with one character per field.""" + +# Copyright (C) 2002 Hewlett-Packard. + +__author__ = 'Martin Pool ' + +import unittest +# import tdbutil +import samba.tdbpack + +packer = samba.tdbpack.pack +unpacker = samba.tdbpack.unpack + + +class PackTests(unittest.TestCase): + symm_cases = [('B', ['hello' * 51], '\xff\0\0\0' + 'hello' * 51), + ('w', [42], '\x2a\0'), + ('www', [42, 2, 69], '\x2a\0\x02\0\x45\0'), + ('wd', [42, 256], '\x2a\0\0\x01\0\0'), + ('w', [0], '\0\0'), + ('w', [255], '\xff\0'), + ('w', [256], '\0\x01'), + ('w', [0xdead], '\xad\xde'), + ('w', [0xffff], '\xff\xff'), + ('p', [0], '\0\0\0\0'), + ('p', [1], '\x01\0\0\0'), + ('d', [0x01020304], '\x04\x03\x02\x01'), + ('d', [0x7fffffff], '\xff\xff\xff\x7f'), + ('d', [0x80000000], '\x00\x00\x00\x80'), + ('d', [-1], '\xff\xff\xff\xff'), + ('d', [-255], '\x01\xff\xff\xff'), + ('d', [-256], '\x00\xff\xff\xff'), + ('ddd', [1, 10, 50], '\x01\0\0\0\x0a\0\0\0\x32\0\0\0'), + ('ff', ['hello', 'world'], 'hello\0world\0'), + ('fP', ['hello', 'world'], 'hello\0world\0'), + ('PP', ['hello', 'world'], 'hello\0world\0'), + ('B', [''], '\0\0\0\0'), + ('B', ['hello'], '\x05\0\0\0hello'), + ('BB', ['hello\0world', 'now'], + '\x0b\0\0\0hello\0world\x03\0\0\0now'), + ('pd', [1, 10], '\x01\0\0\0\x0a\0\0\0'), + ('BBB', ['hello', '', 'world'], + '\x05\0\0\0hello\0\0\0\0\x05\0\0\0world'), + + # strings are sequences in Python, there's no getting away + # from it + ('ffff', 'evil', 'e\0v\0i\0l\0'), + ('BBBB', 'evil', + '\x01\0\0\0e' + '\x01\0\0\0v' + '\x01\0\0\0i' + '\x01\0\0\0l'), + + ('', [], ''), + + # exercise some long strings + ('PP', ['hello' * 255, 'world' * 255], + 'hello' * 255 + '\0' + 'world' * 255 + '\0'), + ('PP', ['hello' * 40000, 'world' * 50000], + 'hello' * 40000 + '\0' + 'world' * 50000 + '\0'), + ('B', ['hello' * 51], '\xff\0\0\0' + 'hello' * 51), + ('BB', ['hello' * 40000, 'world' * 50000], + '\x40\x0d\x03\0' + 'hello' * 40000 + '\x90\xd0\x03\x00' + 'world' * 50000), + ] + + def test_symmetric(self): + """Cookbook of symmetric pack/unpack tests + """ + for format, values, expected in self.symm_cases: + self.assertEquals(packer(format, values), expected) + out, rest = unpacker(format, expected) + self.assertEquals(rest, '') + self.assertEquals(list(values), list(out)) + + + def test_pack(self): + """Cookbook of expected pack values + + These can't be used for the symmetric test because the unpacked value is + not "canonical". + """ + cases = [('w', (42,), '\x2a\0'), + ('p', [None], '\0\0\0\0'), + ('p', ['true'], '\x01\0\0\0'), + + ('w', {1: 'fruit'}, '\x01\0'), + # passing a dictionary is dodgy, but it gets coerced to keys + # as if you called list() + ] + + for format, values, expected in cases: + self.assertEquals(packer(format, values), expected) + + def test_unpack_extra(self): + # Test leftover data + for format, values, packed in self.symm_cases: + out, rest = unpacker(format, packed + 'hello sailor!') + self.assertEquals(rest, 'hello sailor!') + self.assertEquals(list(values), list(out)) + + + def test_unpack(self): + """Cookbook of tricky unpack tests""" + cases = [ + ] + for format, values, expected in cases: + out, rest = unpacker(format, expected) + self.assertEquals(rest, '') + self.assertEquals(list(values), list(out)) + + + def test_pack_failures(self): + """Expected errors for incorrect packing""" + cases = [('w', [], IndexError), + ('w', (), IndexError), + ('w', {}, IndexError), + ('ww', [2], IndexError), + ('w', 2, TypeError), + ('', [1, 2, 3], IndexError), + ('w', None, TypeError), + ('wwwwwwwwwwww', [], IndexError), + ('w', [2, 3], IndexError), + ('w', [0x60A15EC5L], TypeError), + ('w', [None], TypeError), + ('w', xrange(10000), IndexError), + ('d', [], IndexError), + ('d', [0L], TypeError), + ('p', [], IndexError), + ('f', [2], TypeError), + ('P', [None], TypeError), + ('P', (), IndexError), + ('f', [packer], TypeError), + ('fw', ['hello'], IndexError), + ('f', [u'hello'], TypeError), + ('B', [2], TypeError), + (None, [2, 3, 4], TypeError), + (ord('f'), [20], TypeError), + (['w', 'w'], [2, 2], TypeError), + ('Q', [2], ValueError), + ('fQ', ['2', 3], ValueError), + ('fQ', ['2'], IndexError), + (2, [2], TypeError), + ({}, {}, TypeError)] + for format, values, throwable_class in cases: + def do_pack(): + packer(format, values) + self.assertRaises(throwable_class, do_pack) + + + def test_unpack_failures(self): + """Expected errors for incorrect unpacking""" + cases = [('$', '', ValueError), + ('Q', '', ValueError), + ('Q$', '', ValueError), + ('f', '', IndexError), + ('d', '', IndexError), + ('d', '2', IndexError), + ('d', '22', IndexError), + ('d', '222', IndexError), + ('w', '', IndexError), + ('w', '2', IndexError), + ('f', 'hello', IndexError), + ('f', '', IndexError), + ('p', '\x01\0', IndexError), + ('B', '\xff\0\0\0hello', IndexError), + ('B', '\xff\0', IndexError), + ('B', '\x01\0\0\0', IndexError), + ('B', '\x05\0\0\0hell', IndexError), + ('B', '\xff\xff\xff\xff', ValueError), + ('B', 'foobar', IndexError), + ('BB', '\x01\0\0\0a\x01', IndexError), + ] + + for format, values, throwable_class in cases: + def do_unpack(): + unpacker(format, values) + self.assertRaises(throwable_class, do_unpack) + + + +if __name__ == '__main__': + unittest.main() + -- cgit From 96cf2abf9dfd72d5a2c8565d9894f9072f1ce04e Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 10 Sep 2002 17:24:17 +0000 Subject: Patch from Andy Levine andyl@epicrealm.com who discovered that W2K DMB's return empty NetServerEnum2 on port 445, but not on port 139. Jeremy. (This used to be commit a9112a1e4b24ccd94be4d0d055ddc9d1bdfef1be) --- source3/nmbd/nmbd_synclists.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source3/nmbd/nmbd_synclists.c b/source3/nmbd/nmbd_synclists.c index bf03d4d1cf..24adf4e69f 100644 --- a/source3/nmbd/nmbd_synclists.c +++ b/source3/nmbd/nmbd_synclists.c @@ -70,7 +70,11 @@ static void sync_child(char *name, int nm_type, uint32 local_type = local ? SV_TYPE_LOCAL_LIST_ONLY : 0; struct nmb_name called, calling; - if (!cli_initialise(&cli) || !cli_connect(&cli, name, &ip)) { + /* W2K DMB's return empty browse lists on port 445. Use 139. + * Patch from Andy Levine andyl@epicrealm.com. + */ + + if (!cli_initialise(&cli) || !cli_set_port(&cli, 139) || !cli_connect(&cli, name, &ip)) { return; } -- cgit From 5d390fc5c7b1ac4374ee65b546f9e80b9ee0eee1 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 10 Sep 2002 21:37:53 +0000 Subject: AbortPrinter() fix merged from APP_HEAD. (This used to be commit 97ede49e1271fa00c6ffdf9e6e3c2330ea935461) --- source3/printing/printing.c | 34 +++++++++++++++++++++++++++++++--- source3/rpc_server/srv_spoolss_nt.c | 24 +++++++++++++++++++++--- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/source3/printing/printing.c b/source3/printing/printing.c index df971a78c5..035d4d383a 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -1048,8 +1048,11 @@ static BOOL is_owner(struct current_user *user, int snum, uint32 jobid) BOOL print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR *errcode) { - BOOL owner; + BOOL owner, deleted; + char *fname; + *errcode = WERR_OK; + owner = is_owner(user, snum, jobid); /* Check access against security descriptor or whether the user @@ -1062,15 +1065,40 @@ BOOL print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR return False; } - if (!print_job_delete1(snum, jobid)) + /* + * get the spooled filename of the print job + * if this works, then the file has not been spooled + * to the underlying print system. Just delete the + * spool file & return. + */ + + if ( (fname = print_job_fname( snum, jobid )) != NULL ) + { + /* remove the spool file */ + DEBUG(10,("print_job_delete: Removing spool file [%s]\n", fname )); + if ( unlink( fname ) == -1 ) { + *errcode = map_werror_from_unix(errno); + return False; + } + + return True; + } + + if (!print_job_delete1(snum, jobid)) { + *errcode = WERR_ACCESS_DENIED; return False; + } /* force update the database and say the delete failed if the job still exists */ print_queue_update(snum); + + deleted = !print_job_exists(snum, jobid); + if ( !deleted ) + *errcode = WERR_ACCESS_DENIED; - return !print_job_exists(snum, jobid); + return deleted; } /**************************************************************************** diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index ff9ac2ce50..07c22b063a 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -5417,13 +5417,31 @@ static WERROR control_printer(POLICY_HND *handle, uint32 command, /******************************************************************** * api_spoolss_abortprinter + * From MSDN: "Deletes printer's spool file if printer is configured + * for spooling" ********************************************************************/ WERROR _spoolss_abortprinter(pipes_struct *p, SPOOL_Q_ABORTPRINTER *q_u, SPOOL_R_ABORTPRINTER *r_u) { - POLICY_HND *handle = &q_u->handle; - - return control_printer(handle, PRINTER_CONTROL_PURGE, p); + POLICY_HND *handle = &q_u->handle; + Printer_entry *Printer = find_printer_index_by_hnd(p, handle); + int snum; + struct current_user user; + WERROR errcode = WERR_OK; + + if (!Printer) { + DEBUG(2,("_spoolss_abortprinter: Invalid handle (%s:%u:%u)\n",OUR_HANDLE(handle))); + return WERR_BADFID; + } + + if (!get_printer_snum(p, handle, &snum)) + return WERR_BADFID; + + get_current_user( &user, p ); + + print_job_delete( &user, snum, Printer->jobid, &errcode ); + + return errcode; } /******************************************************************** -- cgit From f1be21f211143b0108fc814c01c10f6d36635929 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 10 Sep 2002 21:41:25 +0000 Subject: removed warning about shadowed globals (This used to be commit 8021bbbd0c5fad6db45a4c862848ea667cad0b79) --- source3/rpc_server/srv_spoolss_nt.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 07c22b063a..8b5dcd3b6c 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -774,15 +774,15 @@ static TALLOC_CTX* notify_ctr_getctx( SPOOLSS_NOTIFY_MSG_CTR *ctr ) /*********************************************************************** **********************************************************************/ -static SPOOLSS_NOTIFY_MSG_GROUP* notify_ctr_getgroup( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 index ) +static SPOOLSS_NOTIFY_MSG_GROUP* notify_ctr_getgroup( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 idx ) { if ( !ctr || !ctr->msg_groups ) return NULL; - if ( index >= ctr->num_groups ) + if ( idx >= ctr->num_groups ) return NULL; - return &ctr->msg_groups[index]; + return &ctr->msg_groups[idx]; } @@ -865,11 +865,11 @@ static int notify_msg_ctr_addmsg( SPOOLSS_NOTIFY_MSG_CTR *ctr, SPOOLSS_NOTIFY_MS back registered **********************************************************************/ -static void send_notify2_changes( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 index ) +static void send_notify2_changes( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 idx ) { Printer_entry *p; TALLOC_CTX *mem_ctx = notify_ctr_getctx( ctr ); - SPOOLSS_NOTIFY_MSG_GROUP *msg_group = notify_ctr_getgroup( ctr, index ); + SPOOLSS_NOTIFY_MSG_GROUP *msg_group = notify_ctr_getgroup( ctr, idx ); SPOOLSS_NOTIFY_MSG *messages; -- cgit From 1bc851e3146627324734fc62e3ce13e680ae48ae Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Tue, 10 Sep 2002 21:48:07 +0000 Subject: removing compiler warnings about shadowed globals (This used to be commit 6f0561acadd139e37f86e30a2bbf10f428178eaf) --- source3/utils/smbpasswd.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/source3/utils/smbpasswd.c b/source3/utils/smbpasswd.c index 98993676c9..75a4319cb9 100644 --- a/source3/utils/smbpasswd.c +++ b/source3/utils/smbpasswd.c @@ -217,23 +217,23 @@ static int process_options(int argc, char **argv, int local_flags) *************************************************************/ static char *stdin_new_passwd(void) { - static fstring new_passwd; + static fstring new_pw; size_t len; - ZERO_ARRAY(new_passwd); + ZERO_ARRAY(new_pw); /* * if no error is reported from fgets() and string at least contains * the newline that ends the password, then replace the newline with * a null terminator. */ - if ( fgets(new_passwd, sizeof(new_passwd), stdin) != NULL) { - if ((len = strlen(new_passwd)) > 0) { - if(new_passwd[len-1] == '\n') - new_passwd[len - 1] = 0; + if ( fgets(new_pw, sizeof(new_pw), stdin) != NULL) { + if ((len = strlen(new_pw)) > 0) { + if(new_pw[len-1] == '\n') + new_pw[len - 1] = 0; } } - return(new_passwd); + return(new_pw); } @@ -259,20 +259,20 @@ static char *get_pass( char *prompt, BOOL stdin_get) static char *prompt_for_new_password(BOOL stdin_get) { char *p; - fstring new_passwd; + fstring new_pw; - ZERO_ARRAY(new_passwd); + ZERO_ARRAY(new_pw); p = get_pass("New SMB password:", stdin_get); - fstrcpy(new_passwd, p); + fstrcpy(new_pw, p); SAFE_FREE(p); p = get_pass("Retype new SMB password:", stdin_get); - if (strcmp(p, new_passwd)) { + if (strcmp(p, new_pw)) { fprintf(stderr, "Mismatch - password unchanged.\n"); - ZERO_ARRAY(new_passwd); + ZERO_ARRAY(new_pw); SAFE_FREE(p); return NULL; } @@ -285,27 +285,27 @@ static char *prompt_for_new_password(BOOL stdin_get) Change a password either locally or remotely. *************************************************************/ -static BOOL password_change(const char *remote_machine, char *user_name, - char *old_passwd, char *new_passwd, int local_flags) +static BOOL password_change(const char *remote_mach, char *username, + char *old_passwd, char *new_pw, int local_flags) { BOOL ret; pstring err_str; pstring msg_str; - if (remote_machine != NULL) { + if (remote_mach != NULL) { if (local_flags & (LOCAL_ADD_USER|LOCAL_DELETE_USER|LOCAL_DISABLE_USER|LOCAL_ENABLE_USER| LOCAL_TRUST_ACCOUNT|LOCAL_SET_NO_PASSWORD)) { /* these things can't be done remotely yet */ return False; } - ret = remote_password_change(remote_machine, user_name, - old_passwd, new_passwd, err_str, sizeof(err_str)); + ret = remote_password_change(remote_mach, username, + old_passwd, new_pw, err_str, sizeof(err_str)); if(*err_str) fprintf(stderr, err_str); return ret; } - ret = local_password_change(user_name, local_flags, new_passwd, + ret = local_password_change(username, local_flags, new_pw, err_str, sizeof(err_str), msg_str, sizeof(msg_str)); if(*msg_str) -- cgit From 6b956c8c1e55723788ede2cf9307456b38165a3b Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 11 Sep 2002 00:50:13 +0000 Subject: Fix missing braces around push lock call. Jeremy. (This used to be commit c93b40f43d5f5027f26c9b6bb906011a9075db2d) --- source3/locking/locking.c | 2 +- source3/smbd/reply.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/source3/locking/locking.c b/source3/locking/locking.c index d42d041b79..3eb7ca4783 100644 --- a/source3/locking/locking.c +++ b/source3/locking/locking.c @@ -142,7 +142,7 @@ static NTSTATUS do_lock(files_struct *fsp,connection_struct *conn, uint16 lock_p } /**************************************************************************** - Utility function called by locking requests. This is *DISGISTING*. It also + Utility function called by locking requests. This is *DISGUSTING*. It also appears to be "What Windows Does" (tm). Andrew, ever wonder why Windows 2000 is so slow on the locking tests...... ? This is the reason. Much though I hate it, we need this. JRA. diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 2b361fd43a..36f7c3a883 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1609,9 +1609,10 @@ int reply_lockread(connection_struct *conn, char *inbuf,char *outbuf, int length * this smb into a queued request and push it * onto the blocking lock queue. */ - if(push_blocking_lock_request(inbuf, length, -1, 0)) + if(push_blocking_lock_request(inbuf, length, -1, 0)) { END_PROFILE(SMBlockread); - return -1; + return -1; + } } END_PROFILE(SMBlockread); return ERROR_NT(status); -- cgit From 99928976ea8994f1e759b652e6f06fdd86ffe853 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 11 Sep 2002 01:05:22 +0000 Subject: Ensure we've failed a lock with a lock denied message before automatically pushing it onto the blocking queue. Jeremy. (This used to be commit 237e36124cedf0485deaff81f34688fa862c3317) --- source3/include/smb_macros.h | 15 +++++++++------ source3/smbd/reply.c | 6 +++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/source3/include/smb_macros.h b/source3/include/smb_macros.h index ccf151fab2..71d4bac795 100644 --- a/source3/include/smb_macros.h +++ b/source3/include/smb_macros.h @@ -80,17 +80,20 @@ #define FNUM_OK(fsp,c) (OPEN_FSP(fsp) && (c)==(fsp)->conn) #define CHECK_FSP(fsp,conn) if (!FNUM_OK(fsp,conn)) \ - return(ERROR_DOS(ERRDOS,ERRbadfid)); \ - else if((fsp)->fd == -1) \ - return(ERROR_DOS(ERRDOS,ERRbadaccess)) + return(ERROR_DOS(ERRDOS,ERRbadfid)); \ + else if((fsp)->fd == -1) \ + return(ERROR_DOS(ERRDOS,ERRbadaccess)) #define CHECK_READ(fsp) if (!(fsp)->can_read) \ - return(ERROR_DOS(ERRDOS,ERRbadaccess)) + return(ERROR_DOS(ERRDOS,ERRbadaccess)) #define CHECK_WRITE(fsp) if (!(fsp)->can_write) \ - return(ERROR_DOS(ERRDOS,ERRbadaccess)) + return(ERROR_DOS(ERRDOS,ERRbadaccess)) #define CHECK_ERROR(fsp) if (HAS_CACHED_ERROR(fsp)) \ - return(CACHED_ERROR(fsp)) + return(CACHED_ERROR(fsp)) + +#define ERROR_WAS_LOCK_DENIED(status) (NT_STATUS_EQUAL((status), NT_STATUS_LOCK_NOT_GRANTED) || \ + NT_STATUS_EQUAL((status), NT_STATUS_FILE_LOCK_CONFLICT) ) /* translates a connection number into a service number */ #define SNUM(conn) ((conn)?(conn)->service:-1) diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 36f7c3a883..3fc9cf21fd 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1603,7 +1603,7 @@ int reply_lockread(connection_struct *conn, char *inbuf,char *outbuf, int length (SMB_BIG_UINT)numtoread, (SMB_BIG_UINT)startpos, WRITE_LOCK); if (NT_STATUS_V(status)) { - if (lp_blocking_locks(SNUM(conn))) { + if (lp_blocking_locks(SNUM(conn)) && ERROR_WAS_LOCK_DENIED(status)) { /* * A blocking lock was requested. Package up * this smb into a queued request and push it @@ -2425,7 +2425,7 @@ int reply_lock(connection_struct *conn, status = do_lock_spin(fsp, conn, SVAL(inbuf,smb_pid), count, offset, WRITE_LOCK); if (NT_STATUS_V(status)) { - if (lp_blocking_locks(SNUM(conn))) { + if (lp_blocking_locks(SNUM(conn)) && ERROR_WAS_LOCK_DENIED(status)) { /* * A blocking lock was requested. Package up * this smb into a queued request and push it @@ -3860,7 +3860,7 @@ no oplock granted on this file (%s).\n", fsp->fnum, fsp->fsp_name)); status = do_lock_spin(fsp,conn,lock_pid, count,offset, ((locktype & 1) ? READ_LOCK : WRITE_LOCK)); if (NT_STATUS_V(status)) { - if ((lock_timeout != 0) && lp_blocking_locks(SNUM(conn))) { + if ((lock_timeout != 0) && lp_blocking_locks(SNUM(conn)) && ERROR_WAS_LOCK_DENIED(status)) { /* * A blocking lock was requested. Package up * this smb into a queued request and push it -- cgit From 324846f08d51ff33b9fae96992e9888392bd2111 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 01:20:49 +0000 Subject: Change 'import spoolss' to 'from samba import spoolss'. (This used to be commit 06f6e7110029d5d60c4f34123f470bfb4c96364a) --- source3/python/gtdbtool | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/python/gtdbtool b/source3/python/gtdbtool index d5c76fa318..129f4fe0e2 100755 --- a/source3/python/gtdbtool +++ b/source3/python/gtdbtool @@ -3,7 +3,7 @@ import sys from gtkdictbrowser import GtkDictBrowser import gtk -import tdb +from samba import tdb import string # Open handle on tdb -- cgit From 36c50870f177f2bef61d31e5b37bd43a1893387a Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 11 Sep 2002 01:44:32 +0000 Subject: Formatting tidyups before I look at implementing the sendfile in READX. Jeremy. (This used to be commit 640f061ab2c0fa772c0b181a5492aaf94b21fd3e) --- source3/smbd/reply.c | 379 +++++++++++++++++++++++++-------------------------- 1 file changed, 185 insertions(+), 194 deletions(-) diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 3fc9cf21fd..c3a4c5a860 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -23,7 +23,6 @@ makes to handle specific protocols */ - #include "includes.h" /* look in server.c for some explanation of these variables */ @@ -40,9 +39,8 @@ unsigned int smb_echo_count = 0; extern BOOL global_encrypted_passwords_negotiated; - /**************************************************************************** - reply to an special message + Reply to an special message. ****************************************************************************/ int reply_special(char *inbuf,char *outbuf) @@ -141,7 +139,6 @@ int reply_special(char *inbuf,char *outbuf) return(outsize); } - /**************************************************************************** Reply to a tcon. ****************************************************************************/ @@ -307,10 +304,10 @@ int reply_tcon_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt return chain_reply(inbuf,outbuf,length,bufsize); } - /**************************************************************************** - reply to an unknown type + Reply to an unknown type. ****************************************************************************/ + int reply_unknown(char *inbuf,char *outbuf) { int type; @@ -322,10 +319,10 @@ int reply_unknown(char *inbuf,char *outbuf) return(ERROR_DOS(ERRSRV,ERRunknownsmb)); } - /**************************************************************************** - reply to an ioctl + Reply to an ioctl. ****************************************************************************/ + int reply_ioctl(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -339,8 +336,7 @@ int reply_ioctl(connection_struct *conn, DEBUG(4, ("Received IOCTL (code 0x%x)\n", ioctl_code)); - switch (ioctl_code) - { + switch (ioctl_code) { case IOCTL_QUERY_JOB_INFO: replysize = 32; break; @@ -355,16 +351,15 @@ int reply_ioctl(connection_struct *conn, SSVAL(outbuf,smb_vwv6,52); /* Offset to data */ p = smb_buf(outbuf) + 1; /* Allow for alignment */ - switch (ioctl_code) - { - case IOCTL_QUERY_JOB_INFO: - { - uint16 rap_jobid = pjobid_to_rap(SNUM(fsp->conn), fsp->print_jobid); - SSVAL(p,0,rap_jobid); /* Job number */ - srvstr_push(outbuf, p+2, global_myname, 15, STR_TERMINATE|STR_ASCII); - srvstr_push(outbuf, p+18, lp_servicename(SNUM(conn)), 13, STR_TERMINATE|STR_ASCII); - break; - } + switch (ioctl_code) { + case IOCTL_QUERY_JOB_INFO: + { + uint16 rap_jobid = pjobid_to_rap(SNUM(fsp->conn), fsp->print_jobid); + SSVAL(p,0,rap_jobid); /* Job number */ + srvstr_push(outbuf, p+2, global_myname, 15, STR_TERMINATE|STR_ASCII); + srvstr_push(outbuf, p+18, lp_servicename(SNUM(conn)), 13, STR_TERMINATE|STR_ASCII); + break; + } } END_PROFILE(SMBioctl); @@ -372,56 +367,56 @@ int reply_ioctl(connection_struct *conn, } /**************************************************************************** - reply to a chkpth + Reply to a chkpth. ****************************************************************************/ + int reply_chkpth(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { - int outsize = 0; - int mode; - pstring name; - BOOL ok = False; - BOOL bad_path = False; - SMB_STRUCT_STAT sbuf; - START_PROFILE(SMBchkpth); + int outsize = 0; + int mode; + pstring name; + BOOL ok = False; + BOOL bad_path = False; + SMB_STRUCT_STAT sbuf; + START_PROFILE(SMBchkpth); - srvstr_pull_buf(inbuf, name, smb_buf(inbuf) + 1, sizeof(name), STR_TERMINATE); + srvstr_pull_buf(inbuf, name, smb_buf(inbuf) + 1, sizeof(name), STR_TERMINATE); - RESOLVE_DFSPATH(name, conn, inbuf, outbuf); + RESOLVE_DFSPATH(name, conn, inbuf, outbuf); - unix_convert(name,conn,0,&bad_path,&sbuf); + unix_convert(name,conn,0,&bad_path,&sbuf); - mode = SVAL(inbuf,smb_vwv0); + mode = SVAL(inbuf,smb_vwv0); - if (check_name(name,conn)) { - if (VALID_STAT(sbuf) || vfs_stat(conn,name,&sbuf) == 0) - ok = S_ISDIR(sbuf.st_mode); - } + if (check_name(name,conn)) { + if (VALID_STAT(sbuf) || vfs_stat(conn,name,&sbuf) == 0) + ok = S_ISDIR(sbuf.st_mode); + } - if (!ok) { - /* We special case this - as when a Windows machine - is parsing a path is steps through the components - one at a time - if a component fails it expects - ERRbadpath, not ERRbadfile. - */ - if(errno == ENOENT) { - return ERROR_NT(NT_STATUS_OBJECT_PATH_NOT_FOUND); - } + if (!ok) { + /* We special case this - as when a Windows machine + is parsing a path is steps through the components + one at a time - if a component fails it expects + ERRbadpath, not ERRbadfile. + */ + if(errno == ENOENT) + return ERROR_NT(NT_STATUS_OBJECT_PATH_NOT_FOUND); - return(UNIXERROR(ERRDOS,ERRbadpath)); - } + return(UNIXERROR(ERRDOS,ERRbadpath)); + } - outsize = set_message(outbuf,0,0,True); + outsize = set_message(outbuf,0,0,True); - DEBUG(3,("chkpth %s mode=%d\n", name, mode)); + DEBUG(3,("chkpth %s mode=%d\n", name, mode)); - END_PROFILE(SMBchkpth); - return(outsize); + END_PROFILE(SMBchkpth); + return(outsize); } - /**************************************************************************** - reply to a getatr + Reply to a getatr. ****************************************************************************/ + int reply_getatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { pstring fname; @@ -494,10 +489,10 @@ int reply_getatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size return(outsize); } - /**************************************************************************** - reply to a setatr + Reply to a setatr. ****************************************************************************/ + int reply_setatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { pstring fname; @@ -543,10 +538,10 @@ int reply_setatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size return(outsize); } - /**************************************************************************** - reply to a dskattr + Reply to a dskattr. ****************************************************************************/ + int reply_dskattr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { int outsize = 0; @@ -591,11 +586,11 @@ int reply_dskattr(connection_struct *conn, char *inbuf,char *outbuf, int dum_siz return(outsize); } - /**************************************************************************** - reply to a search - Can be called from SMBsearch, SMBffirst or SMBfunique. + Reply to a search. + Can be called from SMBsearch, SMBffirst or SMBfunique. ****************************************************************************/ + int reply_search(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { pstring mask; @@ -800,10 +795,10 @@ int reply_search(connection_struct *conn, char *inbuf,char *outbuf, int dum_size return(outsize); } - /**************************************************************************** - reply to a fclose (stop directory search) + Reply to a fclose (stop directory search). ****************************************************************************/ + int reply_fclose(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { int outsize = 0; @@ -842,9 +837,8 @@ int reply_fclose(connection_struct *conn, char *inbuf,char *outbuf, int dum_size return(outsize); } - /**************************************************************************** - reply to an open + Reply to an open. ****************************************************************************/ int reply_open(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) @@ -914,10 +908,10 @@ int reply_open(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, return(outsize); } - /**************************************************************************** - reply to an open and X + Reply to an open and X. ****************************************************************************/ + int reply_open_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize) { pstring fname; @@ -1023,10 +1017,10 @@ int reply_open_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt return chain_reply(inbuf,outbuf,length,bufsize); } - /**************************************************************************** - reply to a SMBulogoffX + Reply to a SMBulogoffX. ****************************************************************************/ + int reply_ulogoffX(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize) { uint16 vuid = SVAL(inbuf,smb_uid); @@ -1053,10 +1047,10 @@ int reply_ulogoffX(connection_struct *conn, char *inbuf,char *outbuf,int length, return chain_reply(inbuf,outbuf,length,bufsize); } - /**************************************************************************** - reply to a mknew or a create + Reply to a mknew or a create. ****************************************************************************/ + int reply_mknew(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { pstring fname; @@ -1126,10 +1120,10 @@ int reply_mknew(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, return(outsize); } - /**************************************************************************** - reply to a create temporary file + Reply to a create temporary file. ****************************************************************************/ + int reply_ctemp(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { pstring fname; @@ -1567,8 +1561,9 @@ int reply_readbraw(connection_struct *conn, char *inbuf, char *outbuf, int dum_s } /**************************************************************************** - reply to a lockread (core+ protocol) + Reply to a lockread (core+ protocol). ****************************************************************************/ + int reply_lockread(connection_struct *conn, char *inbuf,char *outbuf, int length, int dum_buffsiz) { ssize_t nread = -1; @@ -1637,132 +1632,130 @@ int reply_lockread(connection_struct *conn, char *inbuf,char *outbuf, int length return(outsize); } - /**************************************************************************** - reply to a read + Reply to a read. ****************************************************************************/ int reply_read(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) { - size_t numtoread; - ssize_t nread = 0; - char *data; - SMB_OFF_T startpos; - int outsize = 0; - files_struct *fsp = file_fsp(inbuf,smb_vwv0); - START_PROFILE(SMBread); - - CHECK_FSP(fsp,conn); - CHECK_READ(fsp); + size_t numtoread; + ssize_t nread = 0; + char *data; + SMB_OFF_T startpos; + int outsize = 0; + files_struct *fsp = file_fsp(inbuf,smb_vwv0); + START_PROFILE(SMBread); - numtoread = SVAL(inbuf,smb_vwv1); - startpos = IVAL(inbuf,smb_vwv2); + CHECK_FSP(fsp,conn); + CHECK_READ(fsp); + numtoread = SVAL(inbuf,smb_vwv1); + startpos = IVAL(inbuf,smb_vwv2); - outsize = set_message(outbuf,5,3,True); - numtoread = MIN(BUFFER_SIZE-outsize,numtoread); - data = smb_buf(outbuf) + 3; + outsize = set_message(outbuf,5,3,True); + numtoread = MIN(BUFFER_SIZE-outsize,numtoread); + data = smb_buf(outbuf) + 3; - if (is_locked(fsp,conn,(SMB_BIG_UINT)numtoread,(SMB_BIG_UINT)startpos, READ_LOCK,False)) { - END_PROFILE(SMBread); - return ERROR_DOS(ERRDOS,ERRlock); - } + if (is_locked(fsp,conn,(SMB_BIG_UINT)numtoread,(SMB_BIG_UINT)startpos, READ_LOCK,False)) { + END_PROFILE(SMBread); + return ERROR_DOS(ERRDOS,ERRlock); + } - if (numtoread > 0) - nread = read_file(fsp,data,startpos,numtoread); + if (numtoread > 0) + nread = read_file(fsp,data,startpos,numtoread); - if (nread < 0) { - END_PROFILE(SMBread); - return(UNIXERROR(ERRDOS,ERRnoaccess)); - } + if (nread < 0) { + END_PROFILE(SMBread); + return(UNIXERROR(ERRDOS,ERRnoaccess)); + } - outsize += nread; - SSVAL(outbuf,smb_vwv0,nread); - SSVAL(outbuf,smb_vwv5,nread+3); - SCVAL(smb_buf(outbuf),0,1); - SSVAL(smb_buf(outbuf),1,nread); + outsize += nread; + SSVAL(outbuf,smb_vwv0,nread); + SSVAL(outbuf,smb_vwv5,nread+3); + SCVAL(smb_buf(outbuf),0,1); + SSVAL(smb_buf(outbuf),1,nread); - DEBUG( 3, ( "read fnum=%d num=%d nread=%d\n", - fsp->fnum, (int)numtoread, (int)nread ) ); + DEBUG( 3, ( "read fnum=%d num=%d nread=%d\n", + fsp->fnum, (int)numtoread, (int)nread ) ); - END_PROFILE(SMBread); - return(outsize); + END_PROFILE(SMBread); + return(outsize); } - /**************************************************************************** - reply to a read and X + Reply to a read and X. ****************************************************************************/ + int reply_read_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize) { - files_struct *fsp = file_fsp(inbuf,smb_vwv2); - SMB_OFF_T startpos = IVAL(inbuf,smb_vwv3); - size_t smb_maxcnt = SVAL(inbuf,smb_vwv5); - size_t smb_mincnt = SVAL(inbuf,smb_vwv6); - ssize_t nread = -1; - char *data; - START_PROFILE(SMBreadX); + files_struct *fsp = file_fsp(inbuf,smb_vwv2); + SMB_OFF_T startpos = IVAL(inbuf,smb_vwv3); + size_t smb_maxcnt = SVAL(inbuf,smb_vwv5); + size_t smb_mincnt = SVAL(inbuf,smb_vwv6); + ssize_t nread = -1; + char *data; + START_PROFILE(SMBreadX); - /* If it's an IPC, pass off the pipe handler. */ - if (IS_IPC(conn)) { - END_PROFILE(SMBreadX); - return reply_pipe_read_and_X(inbuf,outbuf,length,bufsize); - } + /* If it's an IPC, pass off the pipe handler. */ + if (IS_IPC(conn)) { + END_PROFILE(SMBreadX); + return reply_pipe_read_and_X(inbuf,outbuf,length,bufsize); + } - CHECK_FSP(fsp,conn); - CHECK_READ(fsp); + CHECK_FSP(fsp,conn); + CHECK_READ(fsp); - set_message(outbuf,12,0,True); - data = smb_buf(outbuf); + set_message(outbuf,12,0,True); + data = smb_buf(outbuf); - if(CVAL(inbuf,smb_wct) == 12) { + if(CVAL(inbuf,smb_wct) == 12) { #ifdef LARGE_SMB_OFF_T - /* - * This is a large offset (64 bit) read. - */ - startpos |= (((SMB_OFF_T)IVAL(inbuf,smb_vwv10)) << 32); + /* + * This is a large offset (64 bit) read. + */ + startpos |= (((SMB_OFF_T)IVAL(inbuf,smb_vwv10)) << 32); #else /* !LARGE_SMB_OFF_T */ - /* - * Ensure we haven't been sent a >32 bit offset. - */ + /* + * Ensure we haven't been sent a >32 bit offset. + */ - if(IVAL(inbuf,smb_vwv10) != 0) { - DEBUG(0,("reply_read_and_X - large offset (%x << 32) used and we don't support \ + if(IVAL(inbuf,smb_vwv10) != 0) { + DEBUG(0,("reply_read_and_X - large offset (%x << 32) used and we don't support \ 64 bit offsets.\n", (unsigned int)IVAL(inbuf,smb_vwv10) )); - END_PROFILE(SMBreadX); - return ERROR_DOS(ERRDOS,ERRbadaccess); - } + END_PROFILE(SMBreadX); + return ERROR_DOS(ERRDOS,ERRbadaccess); + } #endif /* LARGE_SMB_OFF_T */ - } + } - if (is_locked(fsp,conn,(SMB_BIG_UINT)smb_maxcnt,(SMB_BIG_UINT)startpos, READ_LOCK,False)) { - END_PROFILE(SMBreadX); - return ERROR_DOS(ERRDOS,ERRlock); - } - nread = read_file(fsp,data,startpos,smb_maxcnt); + if (is_locked(fsp,conn,(SMB_BIG_UINT)smb_maxcnt,(SMB_BIG_UINT)startpos, READ_LOCK,False)) { + END_PROFILE(SMBreadX); + return ERROR_DOS(ERRDOS,ERRlock); + } + nread = read_file(fsp,data,startpos,smb_maxcnt); - if (nread < 0) { - END_PROFILE(SMBreadX); - return(UNIXERROR(ERRDOS,ERRnoaccess)); - } + if (nread < 0) { + END_PROFILE(SMBreadX); + return(UNIXERROR(ERRDOS,ERRnoaccess)); + } - SSVAL(outbuf,smb_vwv5,nread); - SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); - SSVAL(smb_buf(outbuf),-2,nread); + SSVAL(outbuf,smb_vwv5,nread); + SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); + SSVAL(smb_buf(outbuf),-2,nread); - DEBUG( 3, ( "readX fnum=%d min=%d max=%d nread=%d\n", - fsp->fnum, (int)smb_mincnt, (int)smb_maxcnt, (int)nread ) ); + DEBUG( 3, ( "readX fnum=%d min=%d max=%d nread=%d\n", + fsp->fnum, (int)smb_mincnt, (int)smb_maxcnt, (int)nread ) ); - END_PROFILE(SMBreadX); - return chain_reply(inbuf,outbuf,length,bufsize); + END_PROFILE(SMBreadX); + return chain_reply(inbuf,outbuf,length,bufsize); } /**************************************************************************** - reply to a writebraw (core+ or LANMAN1.0 protocol) + Reply to a writebraw (core+ or LANMAN1.0 protocol). ****************************************************************************/ int reply_writebraw(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) @@ -1893,7 +1886,7 @@ int reply_writebraw(connection_struct *conn, char *inbuf,char *outbuf, int size, } /**************************************************************************** - reply to a writeunlock (core+) + Reply to a writeunlock (core+). ****************************************************************************/ int reply_writeunlock(connection_struct *conn, char *inbuf,char *outbuf, @@ -1955,7 +1948,6 @@ int reply_writeunlock(connection_struct *conn, char *inbuf,char *outbuf, return outsize; } - /**************************************************************************** Reply to a write. ****************************************************************************/ @@ -2034,10 +2026,10 @@ int reply_write(connection_struct *conn, char *inbuf,char *outbuf,int size,int d return(outsize); } - /**************************************************************************** - reply to a write and X + Reply to a write and X. ****************************************************************************/ + int reply_write_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize) { files_struct *fsp = file_fsp(inbuf,smb_vwv2); @@ -2134,9 +2126,8 @@ int reply_write_and_X(connection_struct *conn, char *inbuf,char *outbuf,int leng return chain_reply(inbuf,outbuf,length,bufsize); } - /**************************************************************************** - reply to a lseek + Reply to a lseek. ****************************************************************************/ int reply_lseek(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) @@ -2217,7 +2208,7 @@ int reply_lseek(connection_struct *conn, char *inbuf,char *outbuf, int size, int } /**************************************************************************** - reply to a flush + Reply to a flush. ****************************************************************************/ int reply_flush(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) @@ -2239,10 +2230,10 @@ int reply_flush(connection_struct *conn, char *inbuf,char *outbuf, int size, int return(outsize); } - /**************************************************************************** - reply to a exit + Reply to a exit. ****************************************************************************/ + int reply_exit(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -2256,10 +2247,10 @@ int reply_exit(connection_struct *conn, return(outsize); } - /**************************************************************************** Reply to a close - has to deal with closing a directory opened by NT SMB's. ****************************************************************************/ + int reply_close(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) { @@ -2341,9 +2332,8 @@ int reply_close(connection_struct *conn, char *inbuf,char *outbuf, int size, return(outsize); } - /**************************************************************************** - reply to a writeclose (Core+ protocol) + Reply to a writeclose (Core+ protocol). ****************************************************************************/ int reply_writeclose(connection_struct *conn, @@ -2400,10 +2390,10 @@ int reply_writeclose(connection_struct *conn, return(outsize); } - /**************************************************************************** - reply to a lock + Reply to a lock. ****************************************************************************/ + int reply_lock(connection_struct *conn, char *inbuf,char *outbuf, int length, int dum_buffsize) { @@ -2444,10 +2434,10 @@ int reply_lock(connection_struct *conn, return(outsize); } - /**************************************************************************** - reply to a unlock + Reply to a unlock. ****************************************************************************/ + int reply_unlock(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize) { @@ -2475,10 +2465,10 @@ int reply_unlock(connection_struct *conn, char *inbuf,char *outbuf, int size, return(outsize); } - /**************************************************************************** - reply to a tdis + Reply to a tdis. ****************************************************************************/ + int reply_tdis(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -2502,11 +2492,10 @@ int reply_tdis(connection_struct *conn, return outsize; } - - /**************************************************************************** - reply to a echo + Reply to a echo. ****************************************************************************/ + int reply_echo(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -2544,10 +2533,10 @@ int reply_echo(connection_struct *conn, return -1; } - /**************************************************************************** - reply to a printopen + Reply to a printopen. ****************************************************************************/ + int reply_printopen(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -2578,9 +2567,8 @@ int reply_printopen(connection_struct *conn, return(outsize); } - /**************************************************************************** - reply to a printclose + Reply to a printclose. ****************************************************************************/ int reply_printclose(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) @@ -2612,10 +2600,10 @@ int reply_printclose(connection_struct *conn, return(outsize); } - /**************************************************************************** - reply to a printqueue + Reply to a printqueue. ****************************************************************************/ + int reply_printqueue(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { @@ -2683,10 +2671,10 @@ int reply_printqueue(connection_struct *conn, return(outsize); } - /**************************************************************************** - reply to a printwrite + Reply to a printwrite. ****************************************************************************/ + int reply_printwrite(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { int numtowrite; @@ -2717,11 +2705,11 @@ int reply_printwrite(connection_struct *conn, char *inbuf,char *outbuf, int dum_ return(outsize); } - /**************************************************************************** The guts of the mkdir command, split out so it may be called by the NT SMB code. ****************************************************************************/ + NTSTATUS mkdir_internal(connection_struct *conn, pstring directory) { BOOL bad_path = False; @@ -2944,10 +2932,10 @@ int reply_rmdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, return(outsize); } - /******************************************************************* -resolve wildcards in a filename rename + Resolve wildcards in a filename rename. ********************************************************************/ + static BOOL resolve_wildcards(char *name1,char *name2) { fstring root1,root2; @@ -3383,8 +3371,9 @@ static BOOL copy_file(char *src,char *dest1,connection_struct *conn, int ofun, } /**************************************************************************** - reply to a file copy. - ****************************************************************************/ + Reply to a file copy. +****************************************************************************/ + int reply_copy(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { int outsize = 0; @@ -3547,8 +3536,9 @@ int reply_copy(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, } /**************************************************************************** - reply to a setdir + Reply to a setdir. ****************************************************************************/ + int reply_setdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize) { int snum; @@ -3642,6 +3632,7 @@ SMB_BIG_UINT get_lock_count( char *data, int data_offset, BOOL large_file_format /**************************************************************************** Pathetically try and map a 64 bit lock offset into 31 bits. I hate Windows :-). ****************************************************************************/ + static uint32 map_lock_offset(uint32 high, uint32 low) { unsigned int i; @@ -3721,7 +3712,7 @@ SMB_BIG_UINT get_lock_offset( char *data, int data_offset, BOOL large_file_forma } /**************************************************************************** - reply to a lockingX request + Reply to a lockingX request. ****************************************************************************/ int reply_lockingX(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize) -- cgit From 1d3bef09b664a992ffbe2307045757115f3d00c9 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 02:26:47 +0000 Subject: Ignore *.pyc (This used to be commit 9d639cd4156e6b8fcb84e20e0b8adaa3fc5dc5ba) --- source3/python/samba/.cvsignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 source3/python/samba/.cvsignore diff --git a/source3/python/samba/.cvsignore b/source3/python/samba/.cvsignore new file mode 100644 index 0000000000..0d20b6487c --- /dev/null +++ b/source3/python/samba/.cvsignore @@ -0,0 +1 @@ +*.pyc -- cgit From 7c152afe1606b1737a79a4d1f08e046286cb02ee Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 03:53:41 +0000 Subject: Bugfix merge: >Initialise user_rid value in WINBIND_USERINFO structure returned by >the rpc version of query_user(). This fixes a caching bug found by >Gavrie Philipson from disksite. (This used to be commit 77bde1fa33cc387accda8f38bf654377310f5dbe) --- source3/nsswitch/winbindd_rpc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source3/nsswitch/winbindd_rpc.c b/source3/nsswitch/winbindd_rpc.c index 58d9092940..047280e21e 100644 --- a/source3/nsswitch/winbindd_rpc.c +++ b/source3/nsswitch/winbindd_rpc.c @@ -315,6 +315,7 @@ static NTSTATUS query_user(struct winbindd_domain *domain, cli_samr_close(hnd->cli, mem_ctx, &user_pol); got_user_pol = False; + user_info->user_rid = user_rid; user_info->group_rid = ctr->info.id21->group_rid; user_info->acct_name = unistr2_tdup(mem_ctx, &ctr->info.id21->uni_user_name); -- cgit From 6b694ec39c2085fd26176a4bbf0fa4ce38002837 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 03:57:19 +0000 Subject: Put pid number in invalid request size debug. (This used to be commit e63afabf98350353fac79ffc2ae2ddf88d61260f) --- source3/nsswitch/winbindd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c index a3ffd1424b..58b0f5943c 100644 --- a/source3/nsswitch/winbindd.c +++ b/source3/nsswitch/winbindd.c @@ -628,8 +628,8 @@ static void process_loop(int accept_sock) if (state->read_buf_len >= sizeof(uint32) && *(uint32 *) &state->request != sizeof(state->request)) { - DEBUG(0,("process_loop: Invalid request size (%d) sent, should be (%d)\n", - *(uint32 *) &state->request, sizeof(state->request))); + DEBUG(0,("process_loop: Invalid request size from pid %d: %d bytes sent, should be %d\n", + state->request.pid, *(uint32 *) &state->request, sizeof(state->request))); remove_client(state); break; -- cgit From 18e72f5facd1f87193b5295cc4d081d1d04374f5 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 04:50:18 +0000 Subject: Fix imports for printerdata browser. (This used to be commit d36fd6651726ffee059f4b39211da66b5b6d7ec1) --- source3/python/gprinterdata | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/python/gprinterdata b/source3/python/gprinterdata index 59c5f3c315..cd062076c0 100755 --- a/source3/python/gprinterdata +++ b/source3/python/gprinterdata @@ -3,7 +3,7 @@ import sys from gtkdictbrowser import GtkDictBrowser, hex_string import gtk -import spoolss +from samba import spoolss import string import printerdata -- cgit From 3600395b373acb48379d8500eaf2aaa11805ab08 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 04:53:16 +0000 Subject: Fix some dodgy stuff that accidentally was committed. (This used to be commit d6d0f121d95b79d4acc68354b35fb0fb3e42e1c0) --- source3/python/py_samba.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/source3/python/py_samba.c b/source3/python/py_samba.c index 7c94569787..c0ade12f65 100644 --- a/source3/python/py_samba.c +++ b/source3/python/py_samba.c @@ -50,14 +50,6 @@ void initsamba(void) module = Py_InitModule("samba", samba_methods); dict = PyModule_GetDict(module); - new_module = PyModule_N("cheepy"); - - - - PyDict_SetItemString(dict, "cheepy", new_module); - - - /* Do samba initialisation */ py_samba_init(); -- cgit From 735eb8fdd26f23e585f575d3a67787e33117db5a Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 04:54:20 +0000 Subject: Added char *, uid_t and gid_t types to generic conversion routines. (This used to be commit a938863914cbfec247586c92fd06203fec7febde) --- source3/python/py_conv.c | 25 +++++++++++++++++++++++++ source3/python/py_conv.h | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/source3/python/py_conv.c b/source3/python/py_conv.c index 39b20ace86..20302c83e8 100644 --- a/source3/python/py_conv.c +++ b/source3/python/py_conv.c @@ -68,7 +68,32 @@ PyObject *from_struct(void *s, struct pyconv *conv) break; } + case PY_STRING: { + char *str = (char *)s + conv[i].offset; + + item = PyString_FromString(str); + PyDict_SetItemString(obj, conv[i].name, item); + + break; + } + case PY_UID: { + uid_t *uid = (uid_t *)((char *)s + conv[i].offset); + + item = PyInt_FromLong(*uid); + PyDict_SetItemString(obj, conv[i].name, item); + + break; + } + case PY_GID: { + gid_t *gid = (gid_t *)((char *)s + conv[i].offset); + + item = PyInt_FromLong(*gid); + PyDict_SetItemString(obj, conv[i].name, item); + + break; + } default: + break; } } diff --git a/source3/python/py_conv.h b/source3/python/py_conv.h index ed06b9a852..24f5a66287 100644 --- a/source3/python/py_conv.h +++ b/source3/python/py_conv.h @@ -21,7 +21,7 @@ #ifndef _PY_CONV_H #define _PY_CONV_H -enum pyconv_types { PY_UNISTR, PY_UINT32, PY_UINT16 }; +enum pyconv_types { PY_UNISTR, PY_UINT32, PY_UINT16, PY_STRING, PY_UID, PY_GID }; struct pyconv { char *name; /* Name of member */ -- cgit From b3bcdccb1c3670495248469170b7b86c16312f99 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 11 Sep 2002 04:55:45 +0000 Subject: Implemented getpw{nam,uid} functions. (This used to be commit 19adbf1faed3d076207ec55e398f15f87d48c9f7) --- source3/python/py_winbind.c | 65 ++++++++++++++++++++++++++++++++++++++++ source3/python/py_winbind_conv.c | 42 ++++++++++++++++++++++++++ source3/python/setup.py | 2 ++ 3 files changed, 109 insertions(+) create mode 100644 source3/python/py_winbind_conv.c diff --git a/source3/python/py_winbind.c b/source3/python/py_winbind.c index 49c7f8e924..ef6bc06233 100644 --- a/source3/python/py_winbind.c +++ b/source3/python/py_winbind.c @@ -445,12 +445,77 @@ static PyObject *py_auth_crap(PyObject *self, PyObject *args) return PyInt_FromLong(response.data.auth.nt_status); } +/* Get user info from name */ + +static PyObject *py_getpwnam(PyObject *self, PyObject *args) +{ + struct winbindd_request request; + struct winbindd_response response; + char *username; + PyObject *result; + + if (!PyArg_ParseTuple(args, "s", &username)) + return NULL; + + ZERO_STRUCT(request); + ZERO_STRUCT(response); + + fstrcpy(request.data.username, username); + + if (winbindd_request(WINBINDD_GETPWNAM, &request, &response) + != NSS_STATUS_SUCCESS) { + PyErr_SetString(winbind_error, "lookup failed"); + return NULL; + } + + if (!py_from_winbind_passwd(&result, &response)) { + result = Py_None; + Py_INCREF(result); + } + + return result; +} + +/* Get user info from uid */ + +static PyObject *py_getpwuid(PyObject *self, PyObject *args) +{ + struct winbindd_request request; + struct winbindd_response response; + uid_t uid; + PyObject *result; + + if (!PyArg_ParseTuple(args, "i", &uid)) + return NULL; + + ZERO_STRUCT(request); + ZERO_STRUCT(response); + + request.data.uid = uid; + + if (winbindd_request(WINBINDD_GETPWUID, &request, &response) + != NSS_STATUS_SUCCESS) { + PyErr_SetString(winbind_error, "lookup failed"); + return NULL; + } + + if (!py_from_winbind_passwd(&result, &response)) { + result = Py_None; + Py_INCREF(result); + } + + return result; +} + /* * Method dispatch table */ static PyMethodDef winbind_methods[] = { + { "getpwnam", py_getpwnam, METH_VARARGS, "getpwnam(3)" }, + { "getpwuid", py_getpwuid, METH_VARARGS, "getpwuid(3)" }, + /* Name <-> SID conversion */ { "name_to_sid", py_name_to_sid, METH_VARARGS, diff --git a/source3/python/py_winbind_conv.c b/source3/python/py_winbind_conv.c new file mode 100644 index 0000000000..c3e416171e --- /dev/null +++ b/source3/python/py_winbind_conv.c @@ -0,0 +1,42 @@ +/* + 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_conv.h" + +/* Convert a struct passwd to a dictionary */ + +static struct pyconv py_passwd[] = { + { "pw_name", PY_STRING, offsetof(struct winbindd_response, data.pw.pw_name) }, + { "pw_passwd", PY_STRING, offsetof(struct winbindd_response, data.pw.pw_passwd) }, + { "pw_uid", PY_UID, offsetof(struct winbindd_response, data.pw.pw_uid) }, + { "pw_guid", PY_GID, offsetof(struct winbindd_response, data.pw.pw_gid) }, + { "pw_gecos", PY_STRING, offsetof(struct winbindd_response, data.pw.pw_gecos) }, + { "pw_dir", PY_STRING, offsetof(struct winbindd_response, data.pw.pw_dir) }, + { "pw_shell", PY_STRING, offsetof(struct winbindd_response, data.pw.pw_shell) }, + { NULL} +}; + +BOOL py_from_winbind_passwd(PyObject **dict, struct winbindd_response *response) +{ + *dict = from_struct(response, py_passwd); + return True; +} diff --git a/source3/python/setup.py b/source3/python/setup.py index a5d7879371..d3c420834a 100755 --- a/source3/python/setup.py +++ b/source3/python/setup.py @@ -130,6 +130,8 @@ setup( Extension(name = "winbind", sources = [samba_srcdir + "python/py_winbind.c", + samba_srcdir + "python/py_winbind_conv.c", + samba_srcdir + "python/py_conv.c", samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], -- cgit From cdca2ad1c4ca396e130a1091063c3aeedbb06cd8 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 11 Sep 2002 14:07:21 +0000 Subject: added gencache implementation from mimir - thanks! (This used to be commit 05a202c287f5daeb1ccbaf9479aa93e7928e93db) --- source3/Makefile.in | 5 +- source3/lib/gencache.c | 319 ++++++++++++++++++++++++++++++++++++++++++++ source3/utils/net.c | 1 + source3/utils/net_cache.c | 328 ++++++++++++++++++++++++++++++++++++++++++++++ source3/utils/net_help.c | 1 + 5 files changed, 652 insertions(+), 2 deletions(-) create mode 100644 source3/lib/gencache.c create mode 100644 source3/utils/net_cache.c diff --git a/source3/Makefile.in b/source3/Makefile.in index 3578b93020..0a28937fc9 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -140,7 +140,7 @@ LIB_OBJ = lib/charcnv.o lib/debug.o lib/fault.o \ lib/md5.o lib/hmacmd5.o lib/iconv.o lib/smbpasswd.o \ nsswitch/wb_client.o nsswitch/wb_common.o \ lib/pam_errors.o intl/lang_tdb.o lib/account_pol.o \ - lib/adt_tree.o lib/popt_common.o $(TDB_OBJ) + lib/adt_tree.o lib/popt_common.o lib/gencache.o $(TDB_OBJ) LIB_SMBD_OBJ = lib/system_smbd.o lib/util_smbd.o @@ -383,7 +383,8 @@ CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_ads_cldap.o utils/net_help.o \ utils/net_rap.o utils/net_rpc.o utils/net_rpc_samsync.o \ - utils/net_rpc_join.o utils/net_time.o utils/net_lookup.o + utils/net_rpc_join.o utils/net_time.o utils/net_lookup.o \ + utils/net_cache.o NET_OBJ = $(NET_OBJ1) $(SECRETS_OBJ) $(LIBSMB_OBJ) \ $(RPC_PARSE_OBJ) $(PASSDB_GET_SET_OBJ) \ diff --git a/source3/lib/gencache.c b/source3/lib/gencache.c new file mode 100644 index 0000000000..9e2009ad4a --- /dev/null +++ b/source3/lib/gencache.c @@ -0,0 +1,319 @@ +/* + Unix SMB/CIFS implementation. + + Generic, persistent and shared between processes cache mechanism for use + by various parts of the Samba code + + Copyright (C) Rafal Szczesniak 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" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_TDB + +#define TIMEOUT_LEN 12 +#define CACHE_DATA_FMT "%12u/%s" + +static TDB_CONTEXT *cache; + +/** + * @file gencache.c + * @brief Generic, persistent and shared between processes cache mechanism + * for use by various parts of the Samba code + * + **/ + + +/** + * Cache initialisation function. Opens cache tdb file or creates + * it if does not exist. + * + * @return true on successful initialisation of the cache or + * false on failure + **/ + +BOOL gencache_init(void) +{ + char* cache_fname = NULL; + + /* skip file open if it's already opened */ + if (cache) return True; + + asprintf(&cache_fname, "%s/%s", lp_lockdir(), "gencache.tdb"); + if (cache_fname) + DEBUG(5, ("Opening cache file at %s\n", cache_fname)); + else { + DEBUG(0, ("Filename allocation failed.\n")); + return False; + } + + cache = tdb_open_log(cache_fname, 0, TDB_DEFAULT, + O_RDWR|O_CREAT, 0644); + + SAFE_FREE(cache_fname); + if (!cache) { + DEBUG(0, ("Attempt to open the cache file has failed.\n")); + return False; + } + return True; +} + + +/** + * Cache shutdown function. Closes opened cache tdb file. + * + * @return true on successful closing the cache or + * false on failure during cache shutdown + **/ + +BOOL gencache_shutdown(void) +{ + /* tdb_close routine returns 0 on successful close */ + if (!cache) return False; + DEBUG(5, ("Closing cache file\n")); + return tdb_close(cache) ? False : True; +} + + +/** + * Add one entry to the cache file. + * (it part of tridge's proposed API) + * + * @param key string that represents a key of this entry + * @param value text representation value being cached + * @param timeout time when the value is expired + * + * @return true when entry is successfuly stored or + * false on the attempt's failure + **/ + +BOOL gencache_add(const char *keystr, const char *value, time_t timeout) +{ + int ret; + TDB_DATA keybuf, databuf; + char* valstr = NULL; + + /* fail completely if get null pointers passed */ + SMB_ASSERT(keystr && value); + + if (!gencache_init()) return False; + + asprintf(&valstr, CACHE_DATA_FMT, (int)timeout, value); + keybuf.dptr = strdup(keystr); + keybuf.dsize = strlen(keystr); + databuf.dptr = strdup(valstr); + databuf.dsize = strlen(valstr); + DEBUG(10, ("Adding cache entry with key = %s; value = %s and timeout \ + = %s (%d seconds %s)\n", keybuf.dptr, value, ctime(&timeout), + (int)(timeout - time(NULL)), timeout > time(NULL) ? "ahead" : "in the past")); + + ret = tdb_store(cache, keybuf, databuf, TDB_INSERT); + SAFE_FREE(valstr); + SAFE_FREE(keybuf.dptr); + SAFE_FREE(databuf.dptr); + + return ret == 0 ? True : False; +} + + +/** + * Set existing entry to the cache file. + * (it part of tridge's proposed API) + * + * @param key string that represents a key of this entry + * @param value text representation value being cached + * @param timeout time when the value is expired + * + * @return true when entry is successfuly set or + * false on the attempt's failure + **/ + +BOOL gencache_set(const char *keystr, const char *valstr, time_t timeout) +{ + int ret = -1; + TDB_DATA keybuf, databuf; + char *old_valstr, *datastr; + time_t old_timeout; + + /* fail completely if get null pointers passed */ + SMB_ASSERT(keystr && valstr); + + if (!gencache_init()) return False; + + /* + * Check whether entry exists in the cache + * Don't verify gencache_get exit code, since the entry may be expired + */ + gencache_get(keystr, &old_valstr, &old_timeout); + + if (!(old_valstr && old_timeout)) return False; + + DEBUG(10, ("Setting cache entry with key = %s; old value = %s and old timeout \ + = %s\n", keystr, old_valstr, ctime(&old_timeout))); + + asprintf(&datastr, CACHE_DATA_FMT, (int)timeout, valstr); + keybuf.dptr = strdup(keystr); + keybuf.dsize = strlen(keystr); + databuf.dptr = strdup(datastr); + databuf.dsize = strlen(datastr); + DEBUGADD(10, ("New value = %s, new timeout = %s (%d seconds %s)", valstr, + ctime(&timeout), (int)(timeout - time(NULL)), + timeout > time(NULL) ? "ahead" : "in the past")); + + + ret = tdb_store(cache, keybuf, databuf, TDB_REPLACE); + + SAFE_FREE(datastr); + SAFE_FREE(old_valstr); + SAFE_FREE(keybuf.dptr); + SAFE_FREE(databuf.dptr); + + return ret == 0 ? True : False; +} + + +/** + * Delete one entry from the cache file. + * (it part of tridge's proposed API) + * + * @param key string that represents a key of this entry + * + * @return true upon successful deletion or + * false in case of failure + **/ + +BOOL gencache_del(const char *keystr) +{ + int ret; + TDB_DATA keybuf; + + /* fail completely if get null pointers passed */ + SMB_ASSERT(keystr); + + if (!gencache_init()) return False; + + keybuf.dptr = strdup(keystr); + keybuf.dsize = strlen(keystr); + DEBUG(10, ("Deleting cache entry (key = %s)\n", keystr)); + ret = tdb_delete(cache, keybuf); + + SAFE_FREE(keybuf.dptr); + return ret == 0 ? True : False; +} + + +/** + * Get existing entry from the cache file. + * (it part of tridge's proposed API) + * + * @param key string that represents a key of this entry + * @param value buffer that is allocated and filled with the entry value + * buffer's disposing is done outside + * @param timeout pointer to a time_t that is filled with entry's + * timeout + * + * @return true when entry is successfuly fetched or + * false on the failure + **/ + +BOOL gencache_get(const char *keystr, char **valstr, time_t *timeout) +{ + TDB_DATA keybuf, databuf; + + /* fail completely if get null pointers passed */ + SMB_ASSERT(keystr && valstr && timeout); + + if (!gencache_init()) return False; + + keybuf.dptr = strdup(keystr); + keybuf.dsize = strlen(keystr); + databuf = tdb_fetch(cache, keybuf); + + if (databuf.dptr) { + char* entry_buf = strndup(databuf.dptr, databuf.dsize); + *valstr = (char*)malloc(sizeof(char) * (databuf.dsize - TIMEOUT_LEN)); + + sscanf(entry_buf, CACHE_DATA_FMT, (int*)timeout, *valstr); + SAFE_FREE(entry_buf); + + DEBUG(10, ("Returning %s cache entry: key = %s, value = %s, timeout = %s\n", + *timeout > time(NULL) ? "valid" : "expired", keystr, *valstr, + ctime(timeout))); + return *timeout > time(NULL); + } else { + *valstr = NULL; + timeout = NULL; + DEBUG(10, ("Cache entry with key = %s couldn't be found\n", keystr)); + return False; + } +} + + +/** + * Iterate through all entries which key matches to specified pattern + * + * @param fn pointer to the function that will be supplied with each single + * matching cache entry (key, value and timeout) as an arguments + * @param keystr_pattern pattern the existing entries' keys are matched to + * + **/ + +void gencache_iterate(void (*fn)(const char* key, const char *value, time_t timeout), + const char* keystr_pattern) +{ + TDB_LIST_NODE *node, *first_node; + TDB_DATA databuf; + char *keystr = NULL, *valstr = NULL, *entry = NULL; + time_t timeout = 0; + + /* fail completely if get null pointers passed */ + SMB_ASSERT(fn && keystr_pattern); + + if (!gencache_init()) return; + + DEBUG(5, ("Searching cache keys with pattern %s", keystr_pattern)); + node = tdb_search_keys(cache, keystr_pattern); + first_node = node; + + while (node) { + /* ensure null termination of the key string */ + node->node_key.dptr[node->node_key.dsize] = '\0'; + keystr = node->node_key.dptr; + + /* + * We don't use gencache_get function, because we need to iterate through + * all of the entries. Validity verification is up to fn routine. + */ + databuf = tdb_fetch(cache, node->node_key); + entry = strndup(databuf.dptr, databuf.dsize); + valstr = (char*)malloc(sizeof(char) * (databuf.dsize - TIMEOUT_LEN)); + sscanf(entry, CACHE_DATA_FMT, (int*)(&timeout), valstr); + + DEBUG(10, ("Calling function with arguments (key = %s, value = %s, timeout = %s)\n", + keystr, valstr, ctime(&timeout))); + fn(keystr, valstr, timeout); + + SAFE_FREE(valstr); + SAFE_FREE(entry); + node = node->next; + } + + tdb_search_list_free(first_node); +} + + diff --git a/source3/utils/net.c b/source3/utils/net.c index a3aa7adcae..e3cfc24b69 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -352,6 +352,7 @@ static struct functable net_func[] = { {"TIME", net_time}, {"LOOKUP", net_lookup}, {"JOIN", net_join}, + {"CACHE", net_cache}, {"HELP", net_help}, {NULL, NULL} diff --git a/source3/utils/net_cache.c b/source3/utils/net_cache.c new file mode 100644 index 0000000000..359c06d1aa --- /dev/null +++ b/source3/utils/net_cache.c @@ -0,0 +1,328 @@ +/* + Samba Unix/Linux SMB client library + Distributed SMB/CIFS Server Management Utility + Copyright (C) Rafal Szczesniak 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 "net.h" + +/** + * @file net_cache.c + * @brief This is part of the net tool which is basically command + * line wrapper for gencache.c functions (mainly for testing) + * + **/ + + +/* + * These routines are used via gencache_iterate() to display the cache's contents + * (print_cache_entry) and to flush it (delete_cache_entry). + * Both of them are defined by first arg of gencache_iterate() routine. + */ +static void print_cache_entry(const char* keystr, const char* datastr, const time_t timeout) +{ + char* timeout_str = ctime(&timeout); + timeout_str[strlen(timeout_str) - 1] = '\0'; + d_printf("Key: %s\t\t Value: %s\t\t Timeout: %s %s\n", keystr, datastr, + timeout_str, timeout > time(NULL) ? "": "(expired)"); +} + +static void delete_cache_entry(const char* keystr, const char* datastr, const time_t timeout) +{ + if (!gencache_del(keystr)) + d_printf("Couldn't delete entry! key = %s", keystr); +} + + +/** + * Parse text representation of timeout value + * + * @param timeout_str string containing text representation of the timeout + * @return numeric timeout of time_t type + **/ +static time_t parse_timeout(const char* timeout_str) +{ + char sign = '\0', *number = NULL, unit = '\0'; + int len, number_begin, number_end; + time_t timeout; + + /* sign detection */ + if (timeout_str[0] == '!' || timeout_str[0] == '+') { + sign = timeout_str[0]; + number_begin = 1; + } else { + number_begin = 0; + } + + /* unit detection */ + len = strlen(timeout_str); + switch (timeout_str[len - 1]) { + case 's': + case 'm': + case 'h': + case 'd': + case 'w': unit = timeout_str[len - 1]; + } + + /* number detection */ + len = (sign) ? strlen(&timeout_str[number_begin]) : len; + number_end = (unit) ? len - 1 : len; + number = strndup(&timeout_str[number_begin], number_end); + + /* calculate actual timeout value */ + timeout = (time_t)atoi(number); + + switch (unit) { + case 'm': timeout *= 60; break; + case 'h': timeout *= 60*60; break; + case 'd': timeout *= 60*60*24; break; + case 'w': timeout *= 60*60*24*7; break; /* that's fair enough, I think :) */ + } + + switch (sign) { + case '!': timeout = time(NULL) - timeout; break; + case '+': + default: timeout += time(NULL); break; + } + + if (number) SAFE_FREE(number); + return timeout; +} + + +/** + * Add an entry to the cache + * + * @param argv key, value and timeout are passed in command line + * @return 0 on success, otherwise failure + **/ +static int net_cache_add(int argc, const char **argv) +{ + const char *keystr, *datastr, *timeout_str; + time_t timeout; + + if (argc < 3) { + d_printf("\nUsage: net cache add \n"); + return -1; + } + + keystr = argv[0]; + datastr = argv[1]; + timeout_str = argv[2]; + + /* parse timeout given in command line */ + timeout = parse_timeout(timeout_str); + if (!timeout) { + d_printf("Invalid timeout argument.\n"); + return -1; + } + + if (gencache_add(keystr, datastr, timeout)) { + d_printf("New cache entry stored successfully.\n"); + gencache_shutdown(); + return 0; + } + + d_printf("Entry couldn't be added. Perhaps there's already such a key.\n"); + gencache_shutdown(); + return -1; +} + + +/** + * Set new value of an existing entry in the cache + * + * @param argv key being searched and new value and timeout to set in the entry + * @return 0 on success, otherwise failure + **/ +static int net_cache_set(int argc, const char **argv) +{ + const char *keystr, *datastr, *timeout_str; + time_t timeout; + + if (argc < 3) { + d_printf("\nUsage: net cache set \n"); + return -1; + } + + keystr = argv[0]; + datastr = argv[1]; + timeout_str = argv[2]; + + /* parse timeout given in command line */ + timeout = parse_timeout(timeout_str); + if (!timeout) { + d_printf("Invalid timeout argument.\n"); + return -1; + } + + if (gencache_set(keystr, datastr, timeout)) { + d_printf("Cache entry set successfully.\n"); + gencache_shutdown(); + return 0; + } + + d_printf("Entry couldn't be set. Perhaps there's no such a key.\n"); + gencache_shutdown(); + return -1; +} + + +/** + * Delete an entry in the cache + * + * @param argv key to delete an entry of + * @return 0 on success, otherwise failure + **/ +static int net_cache_del(int argc, const char **argv) +{ + const char *keystr = argv[0]; + + if (argc < 1) { + d_printf("\nUsage: net cache add \n"); + return -1; + } + + if(gencache_del(keystr)) { + d_printf("Entry deleted.\n"); + return 0; + } + + d_printf("Couldn't delete specified entry\n"); + return -1; +} + + +/** + * Get and display an entry from the cache + * + * @param argv key to search an entry of + * @return 0 on success, otherwise failure + **/ +static int net_cache_get(int argc, const char **argv) +{ + const char* keystr = argv[0]; + char* valuestr; + time_t timeout; + + if (argc < 1) { + d_printf("\nUsage: net cache get \n"); + return -1; + } + + if (gencache_get(keystr, &valuestr, &timeout)) { + print_cache_entry(keystr, valuestr, timeout); + return 0; + } + + d_printf("Failed to find entry\n"); + return -1; +} + + +/** + * Search an entry/entries in the cache + * + * @param argv key pattern to match the entries to + * @return 0 on success, otherwise failure + **/ +static int net_cache_search(int argc, const char **argv) +{ + const char* pattern; + + if (argc < 1) { + d_printf("Usage: net cache search \n"); + return -1; + } + + pattern = argv[0]; + gencache_iterate(print_cache_entry, pattern); + return 0; +} + + +/** + * List the contents of the cache + * + * @param argv ignored in this functionailty + * @return always returns 0 + **/ +static int net_cache_list(int argc, const char **argv) +{ + const char* pattern = "*"; + gencache_iterate(print_cache_entry, pattern); + gencache_shutdown(); + return 0; +} + + +/** + * Flush the whole cache + * + * @param argv ignored in this functionality + * @return always returns 0 + **/ +static int net_cache_flush(int argc, const char **argv) +{ + const char* pattern = "*"; + gencache_iterate(delete_cache_entry, pattern); + gencache_shutdown(); + return 0; +} + + +/** + * Short help + * + * @param argv ignored in this functionality + * @return always returns -1 + **/ +static int net_cache_usage(int argc, const char **argv) +{ + d_printf(" net cache add \t add add new cache entry\n"); + d_printf(" net cache set \t set new value for existing cache entry\n"); + d_printf(" net cache del \t delete existing cache entry by key\n"); + d_printf(" net cache flush \t delete all entries existing in the cache\n"); + d_printf(" net cache get \t get cache entry by key\n"); + d_printf(" net cache search \t search for entries in the cache, by given pattern\n"); + d_printf(" net cache list \t list all cache entries (just like search for \"*\")\n"); + return -1; +} + + +/** + * Entry point to 'net cache' subfunctionality + * + * @param argv arguments passed to further called functions + * @return whatever further functions return + **/ +int net_cache(int argc, const char **argv) +{ + struct functable func[] = { + {"add", net_cache_add}, + {"set", net_cache_set}, + {"del", net_cache_del}, + {"get", net_cache_get}, + {"search", net_cache_search}, + {"list", net_cache_list}, + {"flush", net_cache_flush}, + {NULL, NULL} + }; + + return net_run_function(argc, argv, func, net_cache_usage); +} diff --git a/source3/utils/net_help.c b/source3/utils/net_help.c index ab3eac4b43..16309c5334 100644 --- a/source3/utils/net_help.c +++ b/source3/utils/net_help.c @@ -135,6 +135,7 @@ static int net_usage(int argc, const char **argv) " net user\t\tto manage users\n"\ " net group\t\tto manage groups\n"\ " net join\t\tto join a domain\n"\ + " net cache\t\tto operate on cache tdb file\n"\ "\n"\ " net ads \tto run ADS commands\n"\ " net rap \tto run RAP (pre-RPC) commands\n"\ -- cgit From 66f90f97bf13d7f1b9aa18cc59ba1d15b2d8d4b8 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 11 Sep 2002 15:18:53 +0000 Subject: Merge the cli_shutdown change from 2_2. All except one call to attempt_netbios_... assumed that cli_shutdown was _not_ called on error anyway... Volker (This used to be commit f0c741594f0dad2da16b1d5692dd56a48b4157f1) --- source3/libsmb/cliconnect.c | 2 -- source3/rpc_server/srv_spoolss_nt.c | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 1f3635d6d7..6c5c5e0b0e 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -1306,7 +1306,6 @@ BOOL attempt_netbios_session_request(struct cli_state *cli, char *srchost, char DEBUG(0,("attempt_netbios_session_request: %s rejected the session for name *SMBSERVER \ with error %s.\n", desthost, cli_errstr(cli) )); - cli_shutdown(cli); return False; } @@ -1323,7 +1322,6 @@ with error %s.\n", desthost, cli_errstr(cli) )); !cli_session_request(cli, &calling, &smbservername)) { DEBUG(0,("attempt_netbios_session_request: %s rejected the session for \ name *SMBSERVER with error %s\n", desthost, cli_errstr(cli) )); - cli_shutdown(cli); return False; } } diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 8b5dcd3b6c..5231e9e681 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -2296,6 +2296,7 @@ static BOOL spoolss_connect_to_client(struct cli_state *the_cli, char *remote_ma if (!attempt_netbios_session_request(the_cli, global_myname, remote_machine, &the_cli->dest_ip)) { DEBUG(0,("connect_to_client: machine %s rejected the NetBIOS session request.\n", remote_machine)); + cli_shutdown(the_cli); return False; } -- cgit From c989eaf48d18ed7547880a57a934690dc2519e90 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 11 Sep 2002 17:35:12 +0000 Subject: DelPrinterDrvEx() fix from APP_HEAD (This used to be commit 7841753a03f7fdbd2f7f22e1b184dc1891118283) --- source3/rpc_server/srv_spoolss_nt.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 5231e9e681..ae5f132508 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1935,20 +1935,21 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV if ( !W_ERROR_IS_OK(status) ) { - /* if the client asked for a specific version, then we've failed */ + /* + * if the client asked for a specific version, + * or this is something other than Windows NT x86, + * then we've failed + */ - if ( flags & DPD_DELETE_SPECIFIC_VERSION ) + if ( (flags&DPD_DELETE_SPECIFIC_VERSION) || (version !=2) ) goto done; /* try for Win2k driver if "Windows NT x86" */ - if ( version == 2 ) - { - version = 3; - if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) { - status = WERR_UNKNOWN_PRINTER_DRIVER; - goto done; - } + version = 3; + if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) { + status = WERR_UNKNOWN_PRINTER_DRIVER; + goto done; } } @@ -1988,6 +1989,7 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV if ( delete_files && printer_driver_files_in_use(info_win2k.info_3) & (flags&DPD_DELETE_ALL_FILES) ) { /* no idea of the correct error here */ + free_a_printer_driver( info_win2k, 3 ); status = WERR_ACCESS_DENIED; goto done; } @@ -1995,7 +1997,7 @@ WERROR _spoolss_deleteprinterdriverex(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIV /* if we get to here, we now have 2 driver info structures to remove */ /* remove the Win2k driver first*/ - status_win2k = delete_printer_driver(info.info_3, &user, 3, delete_files); + status_win2k = delete_printer_driver(info_win2k.info_3, &user, 3, delete_files); free_a_printer_driver( info_win2k, 3 ); /* this should not have failed---if it did, report to client */ -- cgit From 88b1f6810b27717146643de96e56cee60ea11b0a Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 11 Sep 2002 19:29:02 +0000 Subject: merge from APP_HEAD for GetJob() (This used to be commit 3524a4a348686ae5144a744696606123e4a66622) --- source3/rpc_server/srv_spoolss_nt.c | 38 ++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index ae5f132508..bcba89c2cc 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -8027,8 +8027,6 @@ static WERROR getjob_level_1(print_queue_struct *queue, int count, int snum, uin fill_job_info_1(info_1, &(queue[i-1]), i, snum); - SAFE_FREE(queue); - *needed += spoolss_size_job_info_1(info_1); if (!alloc_buffer_size(buffer, *needed)) { @@ -8067,12 +8065,14 @@ static WERROR getjob_level_2(print_queue_struct *queue, int count, int snum, uin goto done; } - for (i=0; ioffered; uint32 *needed = &r_u->needed; + WERROR wstatus = WERR_OK; int snum; int count; - print_queue_struct *queue=NULL; + print_queue_struct *queue = NULL; print_status_struct prt_status; /* that's an [in out] buffer */ @@ -8139,7 +8140,7 @@ WERROR _spoolss_getjob( pipes_struct *p, SPOOL_Q_GETJOB *q_u, SPOOL_R_GETJOB *r_ DEBUG(5,("spoolss_getjob\n")); - *needed=0; + *needed = 0; if (!get_printer_snum(p, handle, &snum)) return WERR_BADFID; @@ -8149,15 +8150,22 @@ WERROR _spoolss_getjob( pipes_struct *p, SPOOL_Q_GETJOB *q_u, SPOOL_R_GETJOB *r_ DEBUGADD(4,("count:[%d], prt_status:[%d], [%s]\n", count, prt_status.status, prt_status.message)); - switch (level) { + switch ( level ) { case 1: - return getjob_level_1(queue, count, snum, jobid, buffer, offered, needed); + wstatus = getjob_level_1(queue, count, snum, jobid, + buffer, offered, needed); + break; case 2: - return getjob_level_2(queue, count, snum, jobid, buffer, offered, needed); + wstatus = getjob_level_2(queue, count, snum, jobid, + buffer, offered, needed); + break; default: - SAFE_FREE(queue); - return WERR_UNKNOWN_LEVEL; + wstatus = WERR_UNKNOWN_LEVEL; + break; } + + SAFE_FREE(queue); + return wstatus; } /******************************************************************** -- cgit From bb6d5bfce25dc22a1a2628ab7479d5014b71da71 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 12 Sep 2002 01:25:50 +0000 Subject: Spelling fix. (This used to be commit d9fa865e5ce8ba0b7539f9a218fc7dd132eb3d38) --- source3/nsswitch/winbindd_pam.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/nsswitch/winbindd_pam.c b/source3/nsswitch/winbindd_pam.c index a8b508a49c..5d754d7ca5 100644 --- a/source3/nsswitch/winbindd_pam.c +++ b/source3/nsswitch/winbindd_pam.c @@ -147,7 +147,7 @@ done: fstrcpy(state->response.data.auth.error_string, nt_errstr(result)); state->response.data.auth.pam_error = nt_status_to_pam(result); - DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, ("Plain-text authenticaion for user %s returned %s (PAM: %d)\n", + DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, ("Plain-text authentication for user %s returned %s (PAM: %d)\n", state->request.data.auth.user, state->response.data.auth.nt_status_string, state->response.data.auth.pam_error)); @@ -292,7 +292,7 @@ done: state->response.data.auth.pam_error = nt_status_to_pam(result); DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, - ("NTLM CRAP authenticaion for user [%s]\\[%s] returned %s (PAM: %d)\n", + ("NTLM CRAP authentication for user [%s]\\[%s] returned %s (PAM: %d)\n", domain, user, state->response.data.auth.nt_status_string, -- cgit From b060593287f6344a147da95e5179170335ad78d1 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 12 Sep 2002 01:44:53 +0000 Subject: Merge of cut&paste fix from appliance. (This used to be commit f75d61b03a3377f3a791b56fc307dc7e56e4707a) --- source3/nsswitch/winbindd_pam.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/nsswitch/winbindd_pam.c b/source3/nsswitch/winbindd_pam.c index 5d754d7ca5..3e7a8ad971 100644 --- a/source3/nsswitch/winbindd_pam.c +++ b/source3/nsswitch/winbindd_pam.c @@ -183,7 +183,7 @@ enum winbindd_result winbindd_pam_auth_crap(struct winbindd_cli_state *state) /* Ensure null termination */ state->request.data.auth_crap.domain[sizeof(state->request.data.auth_crap.domain)-1]='\0'; - if (!(mem_ctx = talloc_init_named("winbind pam auth crap for (utf8) %s", state->request.data.auth.user))) { + if (!(mem_ctx = talloc_init_named("winbind pam auth crap for (utf8) %s", state->request.data.auth_crap.user))) { DEBUG(0, ("winbindd_pam_auth_crap: could not talloc_init()!\n")); result = NT_STATUS_NO_MEMORY; goto done; -- cgit From 4f613ac61e9bc442715141188d915b537e15f4c6 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 12 Sep 2002 02:12:52 +0000 Subject: First cut at portable sendfile code. Only used in readX at the moment and doesn't actually call sendfile. Needs to be vectored through the VFS and tested on all supported platforms (Solaris/HPUX/FreeBSD/Linux). Linux doesn't actually work (2.4.19 kernel) at the moment because it doesn't have a 64-bit clean sendfile. Jeremy. (This used to be commit fd772ca7b16cd86e0d50c7ed8d537c202976a6d2) --- source3/Makefile.in | 2 +- source3/include/smbprofile.h | 3 + source3/lib/sendfile.c | 158 +++++++++++++++++++++++++++++++++++++++++++ source3/smbd/reply.c | 103 +++++++++++++++++++++++----- source3/smbd/vfs-wrap.c | 12 ++++ 5 files changed, 261 insertions(+), 17 deletions(-) create mode 100644 source3/lib/sendfile.c diff --git a/source3/Makefile.in b/source3/Makefile.in index 0a28937fc9..87ee4ef540 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -126,7 +126,7 @@ TDB_OBJ = $(TDBBASE_OBJ) tdb/tdbutil.o LIB_OBJ = lib/charcnv.o lib/debug.o lib/fault.o \ lib/getsmbpass.o lib/interface.o lib/md4.o \ lib/interfaces.o lib/pidfile.o lib/replace.o \ - lib/signal.o lib/system.o lib/time.o \ + lib/signal.o lib/system.o lib/sendfile.o lib/time.o \ lib/ufc.o lib/genrand.o lib/username.o \ lib/util_getent.o lib/util_pw.o lib/access.o lib/smbrun.o \ lib/bitmap.o lib/crc32.o lib/snprintf.o lib/dprintf.o \ diff --git a/source3/include/smbprofile.h b/source3/include/smbprofile.h index 82017cee85..870fef71e3 100644 --- a/source3/include/smbprofile.h +++ b/source3/include/smbprofile.h @@ -65,6 +65,9 @@ struct profile_stats { unsigned syscall_write_bytes; /* bytes written with write syscall */ unsigned syscall_lseek_count; unsigned syscall_lseek_time; + unsigned syscall_sendfile_count; + unsigned syscall_sendfile_time; + unsigned syscall_sendfile_bytes; /* bytes read with sendfile syscall */ unsigned syscall_rename_count; unsigned syscall_rename_time; unsigned syscall_fsync_count; diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c new file mode 100644 index 0000000000..33282e704a --- /dev/null +++ b/source3/lib/sendfile.c @@ -0,0 +1,158 @@ +/* + Unix SMB/Netbios implementation. + Version 2.2.x / 3.0.x + sendfile implementations. + Copyright (C) Jeremy Allison 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. +*/ + +/* + * This file handles the OS dependent sendfile implementations. + * The API is such that it returns -1 on error, else returns the + * number of bytes written. + */ + +#include "includes.h" + +#if defined(LINUX_SENDFILE_API) + +#include + +#ifndef MSG_MORE +#define MSG_MORE 0x8000 +#endif + +ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ + size_t total=0; + ssize_t ret; + + /* + * Send the header first. + * Use MSG_MORE to cork the TCP output until sendfile is called. + */ + + while (total < header->length) { + ret = sys_send(outfd, header->data + total,header->length - total, MSG_MORE); + if (ret == -1) + return -1; + total += ret; + } + + total = count; + while (total) { + ssize_t nwritten; + do { +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) + nwritten = sendfile64(outfd, infd, &offset, total); +#else + nwritten = sendfile(outfd, infd, &offset, total); +#endif + } while (nwritten == -1 && errno == EINTR); + if (nwritten == -1) + return -1; + if (nwritten == 0) + return -1; /* I think we're at EOF here... */ + total -= nwritten; + } + return count + header->length; +} + +#elif defined(SOLARIS_SENDFILE_API) + +ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ +} + +#elif defined(HPUX_SENDFILE_API) + +#include +#include + +ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ + size_t total=0; + struct iovec hdtrl[2]; + + /* Set up the header/trailer iovec. */ + hdtrl[0].iov_base = header->data; + hdtrl[0].iov_len = header->length; + hdtrl[1].iov_base = NULL; + hdtrl[1].iov_base = 0; + + total = count; + while (total) { + ssize_t nwritten; + do { +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) + nwritten = sendfile64(outfd, infd, &offset, total, &hdtrl, 0); +#else + nwritten = sendfile(outfd, infd, &offset, total, &hdtrl, 0); +#endif + } while (nwritten == -1 && errno == EINTR); + if (nwritten == -1) + return -1; + total -= nwritten; + } + return count + header->length; +} + +#elif defined(FREEBSD_SENDFILE_API) + +#include +#include +#include + +ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ + size_t total=0; + struct sf_hdtr hdr; + struct iovec hdtrl; + + hdr->headers = &hdtrl; + hdr->hdr_cnt = 1; + hdr->trailers = NULL; + hdr->trl_cnt = 0; + + /* Set up the header iovec. */ + hdtrl.iov_base = header->data; + hdtrl.iov_len = header->length; + + total = count; + while (total) { + ssize_t nwritten; + do { +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) + nwritten = sendfile64(outfd, infd, &offset, total, &hdr, NULL, 0); +#else + nwritten = sendfile(outfd, infd, &offset, total, &hdr, NULL, 0); +#endif + } while (nwritten == -1 && errno == EINTR); + if (nwritten == -1) + return -1; + total -= nwritten; + } + return count + header->length; +} + +#else /* No sendfile implementation. Return error. */ + +ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ + /* No sendfile syscall. */ + errno = ENOSYS; + return -1; +} +#endif diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index c3a4c5a860..02aa53807c 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1682,6 +1682,85 @@ int reply_read(connection_struct *conn, char *inbuf,char *outbuf, int size, int return(outsize); } +/**************************************************************************** + Reply to a read and X - possibly using sendfile. +****************************************************************************/ + +int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length, + files_struct *fsp, SMB_OFF_T startpos, size_t smb_maxcnt) +{ + ssize_t nread = -1; + char *data = smb_buf(outbuf); + +#if defined(WITH_SENDFILE) && defined(HAVE_SENDFILE) + /* + * We can only use sendfile on a non-chained packet and on a file + * that is exclusively oplocked. + */ + + if ((CVAL(inbuf,smb_vwv0) == 0xFF) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) { + SMB_STRUCT_STAT sbuf; + DATA_BLOB header; + + if(vfs_fstat(fsp,fsp->fd, &sbuf) == -1) + return(UNIXERROR(ERRDOS,ERRnoaccess)); + + if (startpos > sbuf.st_size) + goto normal_read; + + if (smb_maxcnt > (sbuf.st_size - startpos)) + smb_maxcnt = (sbuf.st_size - startpos); + + if (smb_maxcnt == 0) + goto normal_read; + + /* + * Set up the packet header before send. We + * assume here the sendfile will work (get the + * correct amount of data). + */ + + SSVAL(outbuf,smb_vwv5,smb_maxcnt); + SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); + SSVAL(smb_buf(outbuf),-2,smb_maxcnt); + CVAL(outbuf,smb_vwv0) = 0xFF; + set_message(outbuf,12,smb_maxcnt,False); + header.data = outbuf; + header.length = data - outbuf; + header.free = NULL; + + if ( conn->vfs_ops.sendfile( smbd_server_fd(), fsp, fsp->fd, &header, startpos, smb_maxcnt) == -1) { + DEBUG(0,("send_file_readX: sendfile failed for file %s (%s). Terminating\n", + fsp->fsp_name, strerror(errno) )); + exit_server("send_file_readX sendfile failed"); + } + + DEBUG( 3, ( "send_file_readX: sendfile fnum=%d max=%d nread=%d\n", + fsp->fnum, (int)smb_maxcnt, (int)nread ) ); + return -1; + } + + normal_read: + +#endif + + nread = read_file(fsp,data,startpos,smb_maxcnt); + + if (nread < 0) { + END_PROFILE(SMBreadX); + return(UNIXERROR(ERRDOS,ERRnoaccess)); + } + + SSVAL(outbuf,smb_vwv5,nread); + SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); + SSVAL(smb_buf(outbuf),-2,nread); + + DEBUG( 3, ( "send_file_readX fnum=%d max=%d nread=%d\n", + fsp->fnum, (int)smb_maxcnt, (int)nread ) ); + + return nread; +} + /**************************************************************************** Reply to a read and X. ****************************************************************************/ @@ -1690,10 +1769,12 @@ int reply_read_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt { files_struct *fsp = file_fsp(inbuf,smb_vwv2); SMB_OFF_T startpos = IVAL(inbuf,smb_vwv3); + ssize_t nread = -1; size_t smb_maxcnt = SVAL(inbuf,smb_vwv5); +#if 0 size_t smb_mincnt = SVAL(inbuf,smb_vwv6); - ssize_t nread = -1; - char *data; +#endif + START_PROFILE(SMBreadX); /* If it's an IPC, pass off the pipe handler. */ @@ -1706,7 +1787,6 @@ int reply_read_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt CHECK_READ(fsp); set_message(outbuf,12,0,True); - data = smb_buf(outbuf); if(CVAL(inbuf,smb_wct) == 12) { #ifdef LARGE_SMB_OFF_T @@ -1736,22 +1816,13 @@ int reply_read_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt END_PROFILE(SMBreadX); return ERROR_DOS(ERRDOS,ERRlock); } - nread = read_file(fsp,data,startpos,smb_maxcnt); - if (nread < 0) { - END_PROFILE(SMBreadX); - return(UNIXERROR(ERRDOS,ERRnoaccess)); - } - - SSVAL(outbuf,smb_vwv5,nread); - SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); - SSVAL(smb_buf(outbuf),-2,nread); - - DEBUG( 3, ( "readX fnum=%d min=%d max=%d nread=%d\n", - fsp->fnum, (int)smb_mincnt, (int)smb_maxcnt, (int)nread ) ); + nread = send_file_readX(conn, inbuf, outbuf, length, fsp, startpos, smb_maxcnt); + if (nread != -1) + nread = chain_reply(inbuf,outbuf,length,bufsize); END_PROFILE(SMBreadX); - return chain_reply(inbuf,outbuf,length,bufsize); + return nread; } /**************************************************************************** diff --git a/source3/smbd/vfs-wrap.c b/source3/smbd/vfs-wrap.c index 6878a42b48..b44b778e09 100644 --- a/source3/smbd/vfs-wrap.c +++ b/source3/smbd/vfs-wrap.c @@ -192,6 +192,18 @@ SMB_OFF_T vfswrap_lseek(files_struct *fsp, int filedes, SMB_OFF_T offset, int wh return result; } +#if 0 /* JRATEST */ +ssize_t vfswrap_sendfile(int outfd, struct files_struct *fsp, int infd, DATA_BLOB *hdr, SMB_OFF_T offset, size_t n) +{ + ssize_t result; + + START_PROFILE_BYTES(syscall_sendfile, n); + result = sys_sendfile(outfd, fsp, infd, hdr, offset, n); + END_PROFILE(syscall_sendfile); + return result; +} +#endif + int vfswrap_rename(connection_struct *conn, const char *old, const char *new) { int result; -- cgit From a9b450cba82b0788590a0a2a0a56e256ba83144d Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 12 Sep 2002 04:30:23 +0000 Subject: Merge of winbind auth cleanups from appliance. (This used to be commit 26d486aa740e283f546efc1f2ca40af3452a4f52) --- source3/nsswitch/wbinfo.c | 32 +++++++++++++++++++++----------- source3/nsswitch/winbindd_nss.h | 1 + source3/nsswitch/winbindd_pam.c | 31 ++++++++++++------------------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/source3/nsswitch/wbinfo.c b/source3/nsswitch/wbinfo.c index a0fdd033d7..7a1aee44cd 100644 --- a/source3/nsswitch/wbinfo.c +++ b/source3/nsswitch/wbinfo.c @@ -422,6 +422,7 @@ static BOOL wbinfo_auth(char *username) struct winbindd_request request; struct winbindd_response response; NSS_STATUS result; + fstring name_user, name_domain; char *p; /* Send off request */ @@ -433,11 +434,16 @@ static BOOL wbinfo_auth(char *username) if (p) { *p = 0; - fstrcpy(request.data.auth.user, username); fstrcpy(request.data.auth.pass, p + 1); - *p = '%'; - } else - fstrcpy(request.data.auth.user, username); + } + + parse_wbinfo_domain_user(username, name_domain, name_user); + + if (p) + *p = '%'; + + fstrcpy(request.data.auth.user, name_user); + fstrcpy(request.data.auth.domain, name_domain); result = winbindd_request(WINBINDD_PAM_AUTH, &request, &response); @@ -446,9 +452,10 @@ static BOOL wbinfo_auth(char *username) d_printf("plaintext password authentication %s\n", (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed"); - d_printf("error code was %s (0x%x)\n", - response.data.auth.nt_status_string, - response.data.auth.nt_status); + if (response.data.auth.nt_status) + d_printf("error code was %s (0x%x)\n", + response.data.auth.nt_status_string, + response.data.auth.nt_status); return result == NSS_STATUS_SUCCESS; } @@ -479,8 +486,10 @@ static BOOL wbinfo_auth_crap(char *username) parse_wbinfo_domain_user(username, name_domain, name_user); - fstrcpy(request.data.auth_crap.user, name_user); + if (p) + *p = '%'; + fstrcpy(request.data.auth_crap.user, name_user); fstrcpy(request.data.auth_crap.domain, name_domain); generate_random_buffer(request.data.auth_crap.chal, 8, False); @@ -500,9 +509,10 @@ static BOOL wbinfo_auth_crap(char *username) d_printf("challenge/response password authentication %s\n", (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed"); - d_printf("error code was %s (0x%x)\n", - response.data.auth.nt_status_string, - response.data.auth.nt_status); + if (response.data.auth.nt_status) + d_printf("error code was %s (0x%x)\n", + response.data.auth.nt_status_string, + response.data.auth.nt_status); return result == NSS_STATUS_SUCCESS; } diff --git a/source3/nsswitch/winbindd_nss.h b/source3/nsswitch/winbindd_nss.h index 9eea94e7c0..21081cb09c 100644 --- a/source3/nsswitch/winbindd_nss.h +++ b/source3/nsswitch/winbindd_nss.h @@ -128,6 +128,7 @@ struct winbindd_request { gid_t gid; /* getgrgid, gid_to_sid */ struct { fstring user; + fstring domain; fstring pass; } auth; /* pam_winbind auth module */ struct { diff --git a/source3/nsswitch/winbindd_pam.c b/source3/nsswitch/winbindd_pam.c index 3e7a8ad971..c3ab6615f6 100644 --- a/source3/nsswitch/winbindd_pam.c +++ b/source3/nsswitch/winbindd_pam.c @@ -57,7 +57,6 @@ static NTSTATUS append_info3_as_ndr(TALLOC_CTX *mem_ctx, enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) { NTSTATUS result; - fstring name_domain, name_user; unsigned char trust_passwd[16]; time_t last_change_time; uint32 smb_uid_low; @@ -76,8 +75,8 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) /* Ensure null termination */ state->request.data.auth.pass[sizeof(state->request.data.auth.pass)-1]='\0'; - DEBUG(3, ("[%5d]: pam auth %s\n", state->pid, - state->request.data.auth.user)); + DEBUG(3, ("[%5d]: pam auth domain: %s user: %s\n", state->pid, + state->request.data.auth.domain, state->request.data.auth.user)); if (!(mem_ctx = talloc_init_named("winbind pam auth for %s", state->request.data.auth.user))) { DEBUG(0, ("winbindd_pam_auth: could not talloc_init()!\n")); @@ -87,13 +86,6 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) /* Parse domain and username */ - if (!parse_domain_user(state->request.data.auth.user, name_domain, - name_user)) { - DEBUG(5,("no domain separator (%s) in username (%s) - failing auth\n", lp_winbind_separator(), state->request.data.auth.user)); - result = NT_STATUS_INVALID_PARAMETER; - goto done; - } - { unsigned char local_lm_response[24]; unsigned char local_nt_response[24]; @@ -133,11 +125,10 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) goto done; } - result = cli_netlogon_sam_network_logon(cli, mem_ctx, - name_user, name_domain, - global_myname, chal, - lm_resp, nt_resp, - &info3); + result = cli_netlogon_sam_network_logon( + cli, mem_ctx, state->request.data.auth.user, + state->request.data.auth.domain, + global_myname, chal, lm_resp, nt_resp, &info3); uni_group_cache_store_netlogon(mem_ctx, &info3); done: @@ -147,10 +138,12 @@ done: fstrcpy(state->response.data.auth.error_string, nt_errstr(result)); state->response.data.auth.pam_error = nt_status_to_pam(result); - DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, ("Plain-text authentication for user %s returned %s (PAM: %d)\n", - state->request.data.auth.user, - state->response.data.auth.nt_status_string, - state->response.data.auth.pam_error)); + DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, + ("Plain-text authentication for user %s/%s returned %s (PAM: %d)\n", + state->request.data.auth.domain, + state->request.data.auth.user, + state->response.data.auth.nt_status_string, + state->response.data.auth.pam_error)); if (mem_ctx) talloc_destroy(mem_ctx); -- cgit From 21a738b8d08da7581b7ce7d498d89a6c5d651d2b Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 12 Sep 2002 05:39:55 +0000 Subject: Merge undone cleanups. (This used to be commit d87c1f507d38444e627bce59b6c765d9c9479ac6) --- source3/nsswitch/wbinfo.c | 18 +++++------------- source3/nsswitch/winbindd_nss.h | 4 +++- source3/nsswitch/winbindd_pam.c | 31 +++++++++++++++++++------------ 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/source3/nsswitch/wbinfo.c b/source3/nsswitch/wbinfo.c index 7a1aee44cd..875df231dc 100644 --- a/source3/nsswitch/wbinfo.c +++ b/source3/nsswitch/wbinfo.c @@ -422,7 +422,6 @@ static BOOL wbinfo_auth(char *username) struct winbindd_request request; struct winbindd_response response; NSS_STATUS result; - fstring name_user, name_domain; char *p; /* Send off request */ @@ -434,16 +433,11 @@ static BOOL wbinfo_auth(char *username) if (p) { *p = 0; + fstrcpy(request.data.auth.user, username); fstrcpy(request.data.auth.pass, p + 1); - } - - parse_wbinfo_domain_user(username, name_domain, name_user); - - if (p) - *p = '%'; - - fstrcpy(request.data.auth.user, name_user); - fstrcpy(request.data.auth.domain, name_domain); + *p = '%'; + } else + fstrcpy(request.data.auth.user, username); result = winbindd_request(WINBINDD_PAM_AUTH, &request, &response); @@ -486,10 +480,8 @@ static BOOL wbinfo_auth_crap(char *username) parse_wbinfo_domain_user(username, name_domain, name_user); - if (p) - *p = '%'; - fstrcpy(request.data.auth_crap.user, name_user); + fstrcpy(request.data.auth_crap.domain, name_domain); generate_random_buffer(request.data.auth_crap.chal, 8, False); diff --git a/source3/nsswitch/winbindd_nss.h b/source3/nsswitch/winbindd_nss.h index 21081cb09c..368bf10cea 100644 --- a/source3/nsswitch/winbindd_nss.h +++ b/source3/nsswitch/winbindd_nss.h @@ -127,8 +127,10 @@ struct winbindd_request { uid_t uid; /* getpwuid, uid_to_sid */ gid_t gid; /* getgrgid, gid_to_sid */ struct { + /* We deliberatedly don't split into domain/user to + avoid having the client know what the separator + character is. */ fstring user; - fstring domain; fstring pass; } auth; /* pam_winbind auth module */ struct { diff --git a/source3/nsswitch/winbindd_pam.c b/source3/nsswitch/winbindd_pam.c index c3ab6615f6..3e7a8ad971 100644 --- a/source3/nsswitch/winbindd_pam.c +++ b/source3/nsswitch/winbindd_pam.c @@ -57,6 +57,7 @@ static NTSTATUS append_info3_as_ndr(TALLOC_CTX *mem_ctx, enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) { NTSTATUS result; + fstring name_domain, name_user; unsigned char trust_passwd[16]; time_t last_change_time; uint32 smb_uid_low; @@ -75,8 +76,8 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) /* Ensure null termination */ state->request.data.auth.pass[sizeof(state->request.data.auth.pass)-1]='\0'; - DEBUG(3, ("[%5d]: pam auth domain: %s user: %s\n", state->pid, - state->request.data.auth.domain, state->request.data.auth.user)); + DEBUG(3, ("[%5d]: pam auth %s\n", state->pid, + state->request.data.auth.user)); if (!(mem_ctx = talloc_init_named("winbind pam auth for %s", state->request.data.auth.user))) { DEBUG(0, ("winbindd_pam_auth: could not talloc_init()!\n")); @@ -86,6 +87,13 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) /* Parse domain and username */ + if (!parse_domain_user(state->request.data.auth.user, name_domain, + name_user)) { + DEBUG(5,("no domain separator (%s) in username (%s) - failing auth\n", lp_winbind_separator(), state->request.data.auth.user)); + result = NT_STATUS_INVALID_PARAMETER; + goto done; + } + { unsigned char local_lm_response[24]; unsigned char local_nt_response[24]; @@ -125,10 +133,11 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) goto done; } - result = cli_netlogon_sam_network_logon( - cli, mem_ctx, state->request.data.auth.user, - state->request.data.auth.domain, - global_myname, chal, lm_resp, nt_resp, &info3); + result = cli_netlogon_sam_network_logon(cli, mem_ctx, + name_user, name_domain, + global_myname, chal, + lm_resp, nt_resp, + &info3); uni_group_cache_store_netlogon(mem_ctx, &info3); done: @@ -138,12 +147,10 @@ done: fstrcpy(state->response.data.auth.error_string, nt_errstr(result)); state->response.data.auth.pam_error = nt_status_to_pam(result); - DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, - ("Plain-text authentication for user %s/%s returned %s (PAM: %d)\n", - state->request.data.auth.domain, - state->request.data.auth.user, - state->response.data.auth.nt_status_string, - state->response.data.auth.pam_error)); + DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, ("Plain-text authentication for user %s returned %s (PAM: %d)\n", + state->request.data.auth.user, + state->response.data.auth.nt_status_string, + state->response.data.auth.pam_error)); if (mem_ctx) talloc_destroy(mem_ctx); -- cgit From fdb8c4dfe1d367deda6d0183d94f44d5d5e14992 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 12 Sep 2002 06:24:41 +0000 Subject: Fixup sendfile to match HPUX semantics with signal interrups. This was fiddly.... :-(. Jeremy. (This used to be commit 2b33a500a8ad13acdd7e4f593aba65229dc8dd96) --- source3/lib/sendfile.c | 64 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 12 deletions(-) diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c index 33282e704a..11bf38ebee 100644 --- a/source3/lib/sendfile.c +++ b/source3/lib/sendfile.c @@ -38,17 +38,21 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off { size_t total=0; ssize_t ret; + ssize_t hdr_len = 0; /* * Send the header first. * Use MSG_MORE to cork the TCP output until sendfile is called. */ - while (total < header->length) { - ret = sys_send(outfd, header->data + total,header->length - total, MSG_MORE); - if (ret == -1) - return -1; - total += ret; + if (header) { + hdr_len = header->length; + while (total < hd_len) { + ret = sys_send(outfd, header->data + total,hdr_len - total, MSG_MORE); + if (ret == -1) + return -1; + total += ret; + } } total = count; @@ -67,7 +71,7 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off return -1; /* I think we're at EOF here... */ total -= nwritten; } - return count + header->length; + return count + hdr_len; } #elif defined(SOLARIS_SENDFILE_API) @@ -85,16 +89,30 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off { size_t total=0; struct iovec hdtrl[2]; - - /* Set up the header/trailer iovec. */ - hdtrl[0].iov_base = header->data; - hdtrl[0].iov_len = header->length; + size_t hdr_len = 0; + + if (header) { + /* Set up the header/trailer iovec. */ + hdtrl[0].iov_base = header->data; + hdtrl[0].iov_len = hdr_len = header->length; + } else { + hdtrl[0].iov_base = NULL; + hdtrl[0].iov_len = hdr_len = 0; + } hdtrl[1].iov_base = NULL; hdtrl[1].iov_base = 0; total = count; - while (total) { + while (total + hdtrl[0].iov_len) { ssize_t nwritten; + + /* + * HPUX guarantees that if any data was written before + * a signal interrupt then sendfile returns the number of + * bytes written (which may be less than requested) not -1. + * nwritten includes the header data sent. + */ + do { #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) nwritten = sendfile64(outfd, infd, &offset, total, &hdtrl, 0); @@ -104,9 +122,31 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) return -1; + if (nwritten == 0) + return -1; /* I think we're at EOF here... */ + + /* + * If this was a short (signal interrupted) write we may need + * to subtract it from the header data, or null out the header + * data altogether if we wrote more than hdtrl[0].iov_len bytes. + * We change nwritten to be the number of file bytes written. + */ + + if (hdtrl[0].iov_base && hdtrl[0].iov_len) { + if (nwritten >= hdtrl[0].iov_len) { + nwritten -= hdtrl[0].iov_len; + hdtrl[0].iov_base = NULL; + hdtrl[0].iov_len = 0; + } else { + nwritten = 0; + hdtrl[0].iov_base += nwritten; + hdtrl[0].iov_len -= nwritten; + } + } total -= nwritten; + offset += nwritten; } - return count + header->length; + return count + hdr_len; } #elif defined(FREEBSD_SENDFILE_API) -- cgit From 8c5f577c6f40de2f346b4545cbcdfb08e30f629f Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 12 Sep 2002 06:26:06 +0000 Subject: HPUX takes offset, not pointer to offset. Jeremy. (This used to be commit d7024e8cb94a20cba789deb2c5b70221f6cca4fd) --- source3/lib/sendfile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c index 11bf38ebee..23d1154718 100644 --- a/source3/lib/sendfile.c +++ b/source3/lib/sendfile.c @@ -115,9 +115,9 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off do { #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) - nwritten = sendfile64(outfd, infd, &offset, total, &hdtrl, 0); + nwritten = sendfile64(outfd, infd, offset, total, &hdtrl[0], 0); #else - nwritten = sendfile(outfd, infd, &offset, total, &hdtrl, 0); + nwritten = sendfile(outfd, infd, offset, total, &hdtrl[0], 0); #endif } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) -- cgit From f6fdad1315ad4fcd046b3132a7c0b60a31d5a605 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 12 Sep 2002 06:28:13 +0000 Subject: Changed profile version number to 7 - added sendfile statistics. Jeremy. (This used to be commit 2d080d7579c0a59bcb03608600c6b28243bbe353) --- source3/include/smbprofile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/include/smbprofile.h b/source3/include/smbprofile.h index 870fef71e3..e501de8c0e 100644 --- a/source3/include/smbprofile.h +++ b/source3/include/smbprofile.h @@ -34,7 +34,7 @@ enum flush_reason_enum { SEEK_FLUSH, READ_FLUSH, WRITE_FLUSH, READRAW_FLUSH, #define PROF_SHMEM_KEY ((key_t)0x07021999) #define PROF_SHM_MAGIC 0x6349985 -#define PROF_SHM_VERSION 6 +#define PROF_SHM_VERSION 7 /* time values in the following structure are in microseconds */ -- cgit From 6cf499ecff96880acef4e53817dccd7d838edd62 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 12 Sep 2002 18:18:35 +0000 Subject: Fixed up FreeBSD sendfile code - only Solaris left then I can add the configure tests... Jeremy. (This used to be commit 9dad88e1d4d09f61da87dab2633c6e989a9dd77f) --- source3/lib/sendfile.c | 77 +++++++++++++++++++++++++++++++++++-------------- source3/smbd/vfs-wrap.c | 2 +- 2 files changed, 56 insertions(+), 23 deletions(-) diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c index 23d1154718..6e093c31ff 100644 --- a/source3/lib/sendfile.c +++ b/source3/lib/sendfile.c @@ -34,7 +34,7 @@ #define MSG_MORE 0x8000 #endif -ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { size_t total=0; ssize_t ret; @@ -48,7 +48,7 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off if (header) { hdr_len = header->length; while (total < hd_len) { - ret = sys_send(outfd, header->data + total,hdr_len - total, MSG_MORE); + ret = sys_send(tofd, header->data + total,hdr_len - total, MSG_MORE); if (ret == -1) return -1; total += ret; @@ -60,9 +60,9 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off ssize_t nwritten; do { #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) - nwritten = sendfile64(outfd, infd, &offset, total); + nwritten = sendfile64(tofd, fromfd, &offset, total); #else - nwritten = sendfile(outfd, infd, &offset, total); + nwritten = sendfile(tofd, fromfd, &offset, total); #endif } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) @@ -76,7 +76,7 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off #elif defined(SOLARIS_SENDFILE_API) -ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { } @@ -85,7 +85,7 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off #include #include -ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { size_t total=0; struct iovec hdtrl[2]; @@ -115,9 +115,9 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off do { #if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) - nwritten = sendfile64(outfd, infd, offset, total, &hdtrl[0], 0); + nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0); #else - nwritten = sendfile(outfd, infd, offset, total, &hdtrl[0], 0); + nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0); #endif } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) @@ -155,11 +155,12 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off #include #include -ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { size_t total=0; struct sf_hdtr hdr; struct iovec hdtrl; + size_t hdr_len = 0; hdr->headers = &hdtrl; hdr->hdr_cnt = 1; @@ -167,29 +168,61 @@ ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T off hdr->trl_cnt = 0; /* Set up the header iovec. */ - hdtrl.iov_base = header->data; - hdtrl.iov_len = header->length; + if (header) { + hdtrl.iov_base = header->data; + hdtrl.iov_len = hdr_len = header->length; + } else { + hdtrl.iov_base = NULL; + hdtrl.iov_len = 0; + } total = count; - while (total) { - ssize_t nwritten; + while (total + hdtrl.iov_len) { + SMB_OFF_T nwritten; + int ret; + + /* + * FreeBSD sendfile returns 0 on success, -1 on error. + * Remember, the tofd and fromfd are reversed..... :-). + * nwritten includes the header data sent. + */ + do { -#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) - nwritten = sendfile64(outfd, infd, &offset, total, &hdr, NULL, 0); -#else - nwritten = sendfile(outfd, infd, &offset, total, &hdr, NULL, 0); -#endif - } while (nwritten == -1 && errno == EINTR); - if (nwritten == -1) + ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + } while (ret == -1 && errno == EINTR); + if (ret == -1) return -1; + + if (nwritten == 0) + return -1; /* I think we're at EOF here... */ + + /* + * If this was a short (signal interrupted) write we may need + * to subtract it from the header data, or null out the header + * data altogether if we wrote more than hdtrl.iov_len bytes. + * We change nwritten to be the number of file bytes written. + */ + + if (hdtrl[0].iov_base && hdtrl.iov_len) { + if (nwritten >= hdtrl.iov_len) { + nwritten -= hdtrl.iov_len; + hdtrl.iov_base = NULL; + hdtrl.iov_len = 0; + } else { + nwritten = 0; + hdtrl.iov_base += nwritten; + hdtrl.iov_len -= nwritten; + } + } total -= nwritten; + offset += nwritten; } - return count + header->length; + return count + hdr_len; } #else /* No sendfile implementation. Return error. */ -ssize_t sys_sendfile(int outfd, int infd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { /* No sendfile syscall. */ errno = ENOSYS; diff --git a/source3/smbd/vfs-wrap.c b/source3/smbd/vfs-wrap.c index b44b778e09..27bb1f42f3 100644 --- a/source3/smbd/vfs-wrap.c +++ b/source3/smbd/vfs-wrap.c @@ -193,7 +193,7 @@ SMB_OFF_T vfswrap_lseek(files_struct *fsp, int filedes, SMB_OFF_T offset, int wh } #if 0 /* JRATEST */ -ssize_t vfswrap_sendfile(int outfd, struct files_struct *fsp, int infd, DATA_BLOB *hdr, SMB_OFF_T offset, size_t n) +ssize_t vfswrap_sendfile(int tofd, struct files_struct *fsp, int fromfd, DATA_BLOB *hdr, SMB_OFF_T offset, size_t n) { ssize_t result; -- cgit From 081b70cd8d625f0d74b6b84e69d35ad01eecac68 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 13 Sep 2002 08:17:02 +0000 Subject: Updated some comments in the NET_USER_INFO_3 structure for the other_sids field. (This used to be commit d153d692a0f8499e1d6dac791a4d119cd9c15e45) --- source3/include/rpc_netlogon.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source3/include/rpc_netlogon.h b/source3/include/rpc_netlogon.h index 5ee8120c68..500f5fef8a 100644 --- a/source3/include/rpc_netlogon.h +++ b/source3/include/rpc_netlogon.h @@ -164,8 +164,8 @@ typedef struct net_user_info_3 uint32 buffer_dom_id; /* undocumented logon domain id pointer */ uint8 padding[40]; /* unused padding bytes. expansion room */ - uint32 num_other_sids; /* 0 - num_sids */ - uint32 buffer_other_sids; /* NULL - undocumented pointer to SIDs. */ + uint32 num_other_sids; /* number of foreign/trusted domain sids */ + uint32 buffer_other_sids; UNISTR2 uni_user_name; /* username unicode string */ UNISTR2 uni_full_name; /* user's full name unicode string */ @@ -184,7 +184,7 @@ typedef struct net_user_info_3 uint32 num_other_groups; /* other groups */ DOM_GID *other_gids; /* group info */ - DOM_SID2 *other_sids; /* undocumented - domain SIDs */ + DOM_SID2 *other_sids; /* foreign/trusted domain SIDs */ } NET_USER_INFO_3; -- cgit From 10297d8cd3bfdef44ea6fdf4d0520fe6c613108c Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Fri, 13 Sep 2002 08:53:53 +0000 Subject: wrong alignment size calculation spot by Florian Weimer (This used to be commit eda0e7589f2591edc29e6c1eef44aa21628977be) --- source3/rpc_parse/parse_spoolss.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source3/rpc_parse/parse_spoolss.c b/source3/rpc_parse/parse_spoolss.c index 55c387cdc5..36b00ff55d 100644 --- a/source3/rpc_parse/parse_spoolss.c +++ b/source3/rpc_parse/parse_spoolss.c @@ -3366,7 +3366,9 @@ uint32 spoolss_size_printer_info_2(PRINTER_INFO_2 *info) * it is easier to maintain the calculation here and * not place the burden on the caller to remember. --jerry */ - size += size % 4; + if ((size % 4) != 0) { + size += 4 - (size % 4); + } return size; } -- cgit From febd3f929b0f922a4bac69aa131089da4675cb1e Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sat, 14 Sep 2002 00:34:46 +0000 Subject: Added fix for broken Linux (no sendfile64). When offset + count > 2GB then return ENOSYS and let the upper layer handle it. Jeremy (This used to be commit 872dfd87cda585c33c3823b06580cb301567a9b9) --- source3/lib/sendfile.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ source3/smbd/reply.c | 7 +++++++ 2 files changed, 64 insertions(+) diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c index 6e093c31ff..2707495d5b 100644 --- a/source3/lib/sendfile.c +++ b/source3/lib/sendfile.c @@ -74,6 +74,63 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of return count + hdr_len; } +#elif defined(LINUX_BROKEN_SENDFILE_API) + +#include + +#ifndef MSG_MORE +#define MSG_MORE 0x8000 +#endif + +ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) +{ + size_t total=0; + ssize_t ret; + ssize_t hdr_len = 0; + + /* + * Fix for broken Linux 2.4 systems with no working sendfile64(). + * If the offset+count > 2 GB then pretend we don't have the + * system call sendfile at all. The upper later catches this + * and uses a normal read. JRA. + */ + + if ((sizeof(SMB_OFF_T) >= 8) && (offset + count > (SMB_OFF_T)0x7FFFFFFF)) { + errno = ENOSYS; + return -1; + } + + /* + * Send the header first. + * Use MSG_MORE to cork the TCP output until sendfile is called. + */ + + if (header) { + hdr_len = header->length; + while (total < hd_len) { + ret = sys_send(tofd, header->data + total,hdr_len - total, MSG_MORE); + if (ret == -1) + return -1; + total += ret; + } + } + + total = count; + while (total) { + ssize_t nwritten; + do { + nwritten = sendfile(tofd, fromfd, &offset, total); + } while (nwritten == -1 && errno == EINTR); + if (nwritten == -1) + return -1; + if (nwritten == 0) + return -1; /* I think we're at EOF here... */ + total -= nwritten; + } + return count + hdr_len; +} + + #elif defined(SOLARIS_SENDFILE_API) ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 02aa53807c..878e21f4c2 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1730,6 +1730,13 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length header.free = NULL; if ( conn->vfs_ops.sendfile( smbd_server_fd(), fsp, fsp->fd, &header, startpos, smb_maxcnt) == -1) { + /* + * Special hack for broken Linux with no 64 bit clean sendfile. If we + * return ENOSYS then pretend we just got a normal read. + */ + if (errno == ENOSYS) + goto normal_read; + DEBUG(0,("send_file_readX: sendfile failed for file %s (%s). Terminating\n", fsp->fsp_name, strerror(errno) )); exit_server("send_file_readX sendfile failed"); -- cgit From 3f02393bfd49dea3f48fdb759d8f932d5bb3a8f6 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sat, 14 Sep 2002 01:38:55 +0000 Subject: Use HAVE_SENDFILE64, not SENDFILE64. Jeremy. (This used to be commit 7e2f9769c9a7ee5d11267a8a8864371fc0aa8f50) --- source3/lib/sendfile.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c index 2707495d5b..4613cfb864 100644 --- a/source3/lib/sendfile.c +++ b/source3/lib/sendfile.c @@ -59,7 +59,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of while (total) { ssize_t nwritten; do { -#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_SENDFILE64) nwritten = sendfile64(tofd, fromfd, &offset, total); #else nwritten = sendfile(tofd, fromfd, &offset, total); @@ -133,8 +133,11 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of #elif defined(SOLARIS_SENDFILE_API) +/* Hmmm. Can't find Solaris sendfile API docs.... Where is it ? */ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count) { + errno = ENOSYS; + return -1; } #elif defined(HPUX_SENDFILE_API) @@ -171,7 +174,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of */ do { -#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(SENDFILE64) +#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OFF64_T) && defined(HAVE_SENDFILE64) nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0); #else nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0); -- cgit From cda2b27c5778ef43ebe4b905fc83bbf980a91a19 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 15 Sep 2002 13:23:56 +0000 Subject: Add reference to CUPS documentation about how to use unix -> windows clients using samba (This used to be commit 898f30fffb4e613e4a7efa0463c54fbc3b1f3cca) --- docs/docbook/projdoc/UNIX_INSTALL.sgml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/docbook/projdoc/UNIX_INSTALL.sgml b/docs/docbook/projdoc/UNIX_INSTALL.sgml index aab193c451..c307636d5f 100644 --- a/docs/docbook/projdoc/UNIX_INSTALL.sgml +++ b/docs/docbook/projdoc/UNIX_INSTALL.sgml @@ -359,13 +359,16 @@ Printing from UNIX to a Client PC To use a printer that is available via a smb-based - server from a unix host you will need to compile the + server from a unix host with LPR you will need to compile the smbclient program. You then need to install the script "smbprint". Read the instruction in smbprint for more details. There is also a SYSV style script that does much the same thing called smbprint.sysv. It contains instructions. + + See the CUPS manual for information about setting up + printing from a unix host with CUPS to a smb-based server. -- cgit From 1782e2a1566971cb9ff2ef33c5ff32d43fbf35f1 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 15 Sep 2002 13:26:16 +0000 Subject: Add document on tracing system calls (This used to be commit 1e14815f4cd9e8a9ca5c0d41de902f9c0dd6410c) --- docs/docbook/devdoc/Tracing.sgml | 129 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 docs/docbook/devdoc/Tracing.sgml diff --git a/docs/docbook/devdoc/Tracing.sgml b/docs/docbook/devdoc/Tracing.sgml new file mode 100644 index 0000000000..3a0e4ba1a9 --- /dev/null +++ b/docs/docbook/devdoc/Tracing.sgml @@ -0,0 +1,129 @@ + + + + AndrewTridgell + + Samba Team + + + + +Tracing samba system calls + + +This file describes how to do a system call trace on Samba to work out +what its doing wrong. This is not for the faint of heart, but if you +are reading this then you are probably desperate. + + + +Actually its not as bad as the the above makes it sound, just don't +expect the output to be very pretty :-) + + + +Ok, down to business. One of the big advantages of unix systems is +that they nearly all come with a system trace utility that allows you +to monitor all system calls that a program is making. This is +extremely using for debugging and also helps when trying to work out +why something is slower than you expect. You can use system tracing +without any special compilation options. + + + +The system trace utility is called different things on different +systems. On Linux systems its called strace. Under SunOS 4 its called +trace. Under SVR4 style systems (including solaris) its called +truss. Under many BSD systems its called ktrace. + + + +The first thing you should do is read the man page for your native +system call tracer. In the discussion below I'll assume its called +strace as strace is the only portable system tracer (its available for +free for many unix types) and its also got some of the nicest +features. + + + +Next, try using strace on some simple commands. For example, strace +ls or strace echo hello. + + + +You'll notice that it produces a LOT of output. It is showing you the +arguments to every system call that the program makes and the +result. Very little happens in a program without a system call so you +get lots of output. You'll also find that it produces a lot of +"preamble" stuff showing the loading of shared libraries etc. Ignore +this (unless its going wrong!) + + + +For example, the only line that really matters in the strace echo +hello output is: + + + +write(1, "hello\n", 6) = 6 + + +all the rest is just setting up to run the program. + + +Ok, now you're familiar with strace. To use it on Samba you need to +strace the running smbd daemon. The way I tend ot use it is to first +login from my Windows PC to the Samba server, then use smbstatus to +find which process ID that client is attached to, then as root I do +strace -p PID to attach to that process. I normally redirect the +stderr output from this command to a file for later perusal. For +example, if I'm using a csh style shell: + + +strace -f -p 3872 >& strace.out + +or with a sh style shell: + +strace -f -p 3872 > strace.out 2>&1 + + +Note the "-f" option. This is only available on some systems, and +allows you to trace not just the current process, but any children it +forks. This is great for finding printing problems caused by the +"print command" being wrong. + + + +Once you are attached you then can do whatever it is on the client +that is causing problems and you will capture all the system calls +that smbd makes. + + + +So how do you interpret the results? Generally I search through the +output for strings that I know will appear when the problem +happens. For example, if I am having touble with permissions on a file +I would search for that files name in the strace output and look at +the surrounding lines. Another trick is to match up file descriptor +numbers and "follow" what happens to an open file until it is closed. + + + +Beyond this you will have to use your initiative. To give you an idea +of what you are looking for here is a piece of strace output that +shows that /dev/null is not world writeable, which +causes printing to fail with Samba: + + + +[pid 28268] open("/dev/null", O_RDWR) = -1 EACCES (Permission denied) +[pid 28268] open("/dev/null", O_WRONLY) = -1 EACCES (Permission denied) + + + +The process is trying to first open /dev/null read-write +then read-only. Both fail. This means /dev/null has +incorrect permissions. + + + -- cgit From 77f97113d0983bffe353b2a7ca8e99a0c9600572 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 15 Sep 2002 16:35:44 +0000 Subject: Make current_sam_methods a const - Patch by Kai Krüger (This used to be commit bd7245dc6fcff805fcb69f6bd1f4852dadf5aa84) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source3/include/sam.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source3/include/sam.h b/source3/include/sam.h index c8df95676e..875efbe0de 100644 --- a/source3/include/sam.h +++ b/source3/include/sam.h @@ -51,7 +51,7 @@ int sam_version(void)\ typedef struct sam_domain_handle { TALLOC_CTX *mem_ctx; uint32 access_granted; - struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ + const struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ void (*free_fn)(struct sam_domain_handle **); struct domain_data { DOM_SID sid; /*SID of the domain. Should not be changed */ @@ -75,7 +75,7 @@ typedef struct sam_domain_handle { typedef struct sam_account_handle { TALLOC_CTX *mem_ctx; uint32 access_granted; - struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ + const struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ void (*free_fn)(struct sam_account_handle **); struct sam_account_data { uint32 init_flag; @@ -115,7 +115,7 @@ typedef struct sam_account_handle { typedef struct sam_group_handle { TALLOC_CTX *mem_ctx; uint32 access_granted; - struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ + const struct sam_methods *current_sam_methods; /* sam_methods creating this handle */ void (*free_fn)(struct sam_group_handle **); struct sam_group_data { char *group_name; -- cgit From 479e82b8d8413c88989dfb091c21a0ba003ed005 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 15 Sep 2002 17:49:53 +0000 Subject: Put unixsocket calls between #ifdef HAVE_UNIXSOCKET's - required for Stratus VOS (Double checked) (This used to be commit dc3c14fc2b661a62a1876149e96af6de07a2c4a6) --- source3/lib/util_sock.c | 5 +++++ source3/nsswitch/wb_common.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/source3/lib/util_sock.c b/source3/lib/util_sock.c index 56ef4a6ab1..fc2abf976f 100644 --- a/source3/lib/util_sock.c +++ b/source3/lib/util_sock.c @@ -976,6 +976,7 @@ int create_pipe_sock(const char *socket_dir, const char *socket_name, mode_t dir_perms) { +#ifdef HAVE_UNIXSOCKET struct sockaddr_un sunaddr; struct stat st; int sock; @@ -1064,6 +1065,10 @@ int create_pipe_sock(const char *socket_dir, /* Success! */ return sock; +#else + DEBUG(0, ("create_pipe_sock: No Unix sockets on this system\n")); + return -1; +#endif /* HAVE_UNIXSOCKET */ } /******************************************************************* diff --git a/source3/nsswitch/wb_common.c b/source3/nsswitch/wb_common.c index 88bda4eabe..51792f63fe 100644 --- a/source3/nsswitch/wb_common.c +++ b/source3/nsswitch/wb_common.c @@ -148,6 +148,7 @@ static int make_safe_fd(int fd) int winbind_open_pipe_sock(void) { +#ifdef HAVE_UNIXSOCKET struct sockaddr_un sunaddr; static pid_t our_pid; struct stat st; @@ -221,6 +222,9 @@ int winbind_open_pipe_sock(void) } return winbindd_fd; +#else + return -1; +#endif /* HAVE_UNIXSOCKET */ } /* Write data to winbindd socket */ -- cgit From f3008f5463dbb7691ca32d48edaeb078e8846274 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 15 Sep 2002 23:40:55 +0000 Subject: Merge of 'other_sids' patch from appliance. (This used to be commit 7decd4b3a9e6900ab35f7bf5b266361f308aa58d) --- source3/auth/auth_util.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index 78dc0d4ee4..ca90fc6f72 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -983,7 +983,9 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, (*server_info)->n_groups = n_lgroupSIDs; /* Create a 'combined' list of all SIDs we might want in the SD */ - all_group_SIDs = malloc(sizeof(DOM_SID) * (n_lgroupSIDs+info3->num_groups2)); + all_group_SIDs = malloc(sizeof(DOM_SID) * + (n_lgroupSIDs + info3->num_groups2 + + info3->num_other_sids)); if (!all_group_SIDs) { DEBUG(0, ("create_nt_token_info3: malloc() failed for DOM_SID list!\n")); SAFE_FREE(lgroupSIDs); @@ -1006,12 +1008,25 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, } } + /* Copy 'other' sids. We need to do sid filtering here to + prevent possible elevation of privileges. See: + + http://www.microsoft.com/windows2000/techinfo/administration/security/sidfilter.asp + */ + + for (i = 0; i < info3->num_other_sids; i++) + sid_copy(&all_group_SIDs[ + n_lgroupSIDs + info3->num_groups2 + i], + &info3->other_sids[i].sid); + /* Where are the 'global' sids... */ /* can the user be guest? if yes, where is it stored? */ - if (!NT_STATUS_IS_OK(nt_status = create_nt_user_token(&user_sid, &group_sid, - n_lgroupSIDs+info3->num_groups2, all_group_SIDs, - False, &token))) { + if (!NT_STATUS_IS_OK( + nt_status = create_nt_user_token( + &user_sid, &group_sid, + n_lgroupSIDs + info3->num_groups2 + info3->num_other_sids, + all_group_SIDs, False, &token))) { DEBUG(4,("create_nt_user_token failed\n")); SAFE_FREE(all_group_SIDs); return nt_status; -- cgit From 3cc83a87392ebc19c5934ad2a6d0e59583aa8326 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 15 Sep 2002 23:42:59 +0000 Subject: Don't display debugs of the nt user token twice. (This used to be commit 2011a38f3bd1e51aa1ca0219a9e46da12426cbc3) --- source3/auth/auth_util.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index ca90fc6f72..c2d92a985f 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -766,8 +766,6 @@ NTSTATUS make_server_info_sam(auth_serversupplied_info **server_info, (*server_info)->ptok = token; - debug_nt_user_token(DBGC_AUTH, 5, token); - DEBUG(5,("make_server_info_sam: made server info for user %s\n", pdb_get_username((*server_info)->sam_account))); @@ -1036,8 +1034,6 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, SAFE_FREE(all_group_SIDs); - debug_nt_user_token(DBGC_AUTH, 5, token); - return NT_STATUS_OK; } -- cgit From 1dceadfadd267277e71a4451db8bb97e1e3a2f8c Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Mon, 16 Sep 2002 07:48:39 +0000 Subject: Changed Major/Minor version info reported to Server Manager to 4.9. Added new SWAT Flags for Advanced and Developer modes. (This used to be commit 0250e2c52c7d7aa25308b6c20b8e2a51184cb598) --- source3/include/smb.h | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/source3/include/smb.h b/source3/include/smb.h index a1b3faa343..59bfb6b449 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -3,7 +3,7 @@ SMB parameters and setup, plus a whole lot more. Copyright (C) Andrew Tridgell 1992-2000 - Copyright (C) John H Terpstra 1996-2000 + Copyright (C) John H Terpstra 1996-2002 Copyright (C) Luke Kenneth Casson Leighton 1996-2000 Copyright (C) Paul Ashton 1998-2000 Copyright (C) Simo Sorce 2001-2002 @@ -753,12 +753,16 @@ struct bitmap { int n; }; -#define FLAG_BASIC 0x01 /* fundamental options */ -#define FLAG_SHARE 0x02 /* file sharing options */ -#define FLAG_PRINT 0x04 /* printing options */ -#define FLAG_GLOBAL 0x08 /* local options that should be globally settable in SWAT */ -#define FLAG_DEPRECATED 0x10 /* options that should no longer be used */ -#define FLAG_HIDE 0x20 /* options that should be hidden in SWAT */ +#define FLAG_BASIC 0x0001 /* fundamental options */ +#define FLAG_SHARE 0x0002 /* file sharing options */ +#define FLAG_PRINT 0x0004 /* printing options */ +#define FLAG_GLOBAL 0x0008 /* local options that should be globally settable in SWAT */ +#define FLAG_WIZARD 0x0010 /* Parameters that the wizard will operate on */ +#define FLAG_ADVANCED 0x0020 /* Parameters that the wizard will operate on */ +#define FLAG_DEVELOPER 0x0040 /* Parameters that the wizard will operate on */ +#define FLAG_DEPRECATED 0x1000 /* options that should no longer be used */ +#define FLAG_HIDE 0x2000 /* options that should be hidden in SWAT */ +#define FLAG_DOS_STRING 0x4000 /* convert from UNIX to DOS codepage when reading this string. */ #ifndef LOCKING_VERSION #define LOCKING_VERSION 4 @@ -1266,7 +1270,7 @@ char *strdup(char *s); */ #define DEFAULT_MAJOR_VERSION 0x04 -#define DEFAULT_MINOR_VERSION 0x05 +#define DEFAULT_MINOR_VERSION 0x09 /* Browser Election Values */ #define BROWSER_ELECTION_VERSION 0x010f -- cgit From 954c1ca50669bd2c7ab6ad38b5bfea366818c275 Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Mon, 16 Sep 2002 07:49:42 +0000 Subject: Applied new display mode FLAGS for SWAT. (This used to be commit 8a1c136494de47bae74627b07edea6f72eab37cf) --- source3/param/loadparm.c | 348 ++++++++++++++++++++++++----------------------- 1 file changed, 178 insertions(+), 170 deletions(-) diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 3ac6fb70f1..6ec96083f2 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -665,66 +665,75 @@ static struct enum_list enum_map_to_guest[] = { {-1, NULL} }; -/* note that we do not initialise the defaults union - it is not allowed in ANSI C */ +/* Note: We do not initialise the defaults union - it is not allowed in ANSI C + * + * Note: We have a flag called FLAG_DEVELOPER but is not used at this time, it + * is implied in current control logic. This may change at some later time. A + * flag value of 0 means - show as development option only. + * + * The FLAG_HIDE is explicit. Paramters set this way do NOT appear in any edit + * screen in SWAT. This is used to exclude parameters as well as to squash all + * parameters that have been duplicated by pseudonyms. + */ static struct parm_struct parm_table[] = { {"Base Options", P_SEP, P_SEPARATOR}, - {"dos charset", P_STRING, P_GLOBAL, &Globals.dos_charset, NULL, NULL, 0}, - {"unix charset", P_STRING, P_GLOBAL, &Globals.unix_charset, NULL, NULL, 0}, - {"display charset", P_STRING, P_GLOBAL, &Globals.display_charset, NULL, NULL, 0}, - {"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"directory", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, 0}, - {"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkGroup, NULL, NULL, FLAG_BASIC}, - {"realm", P_USTRING, P_GLOBAL, &Globals.szRealm, NULL, NULL, FLAG_BASIC}, - {"ADS server", P_STRING, P_GLOBAL, &Globals.szADSserver, NULL, NULL, FLAG_BASIC}, - {"netbios name", P_UGSTRING, P_GLOBAL, global_myname, handle_netbios_name, NULL, FLAG_BASIC}, - {"netbios aliases", P_LIST, P_GLOBAL, &Globals.szNetbiosAliases, NULL, NULL, 0}, - {"netbios scope", P_UGSTRING, P_GLOBAL, global_scope, NULL, NULL, 0}, - {"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC }, - {"interfaces", P_LIST, P_GLOBAL, &Globals.szInterfaces, NULL, NULL, FLAG_BASIC}, - {"bind interfaces only", P_BOOL, P_GLOBAL, &Globals.bBindInterfacesOnly, NULL, NULL, 0}, + {"dos charset", P_STRING, P_GLOBAL, &Globals.dos_charset, NULL, NULL, FLAG_ADVANCED}, + {"unix charset", P_STRING, P_GLOBAL, &Globals.unix_charset, NULL, NULL, FLAG_ADVANCED}, + {"display charset", P_STRING, P_GLOBAL, &Globals.display_charset, NULL, NULL, FLAG_ADVANCED}, + {"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"directory", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_HIDE}, + {"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkGroup, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"realm", P_USTRING, P_GLOBAL, &Globals.szRealm, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"ADS server", P_STRING, P_GLOBAL, &Globals.szADSserver, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"netbios name", P_UGSTRING, P_GLOBAL, global_myname, handle_netbios_name, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"netbios aliases", P_LIST, P_GLOBAL, &Globals.szNetbiosAliases, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"netbios scope", P_UGSTRING, P_GLOBAL, global_scope, NULL, NULL, FLAG_ADVANCED}, + {"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED }, + {"interfaces", P_LIST, P_GLOBAL, &Globals.szInterfaces, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"bind interfaces only", P_BOOL, P_GLOBAL, &Globals.bBindInterfacesOnly, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, {"Security Options", P_SEP, P_SEPARATOR}, - {"security", P_ENUM, P_GLOBAL, &Globals.security, NULL, enum_security, FLAG_BASIC}, - {"auth methods", P_LIST, P_GLOBAL, &Globals.AuthMethods, NULL, NULL, FLAG_BASIC}, - {"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC}, - {"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_BASIC}, - {"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, 0}, - {"hosts equiv", P_STRING, P_GLOBAL, &Globals.szHostsEquiv, NULL, NULL, 0}, - {"min passwd length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, 0}, - {"min password length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, 0}, - {"map to guest", P_ENUM, P_GLOBAL, &Globals.map_to_guest, NULL, enum_map_to_guest, 0}, - {"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, 0}, - {"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, 0}, - {"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, 0}, - {"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, 0}, - {"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, 0}, - {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, 0}, - {"sam backend", P_LIST, P_GLOBAL, &Globals.szSamBackend, NULL, NULL, 0}, - {"non unix account range", P_STRING, P_GLOBAL, &Globals.szNonUnixAccountRange, handle_non_unix_account_range, NULL, 0}, - {"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.bAlgorithmicRidBase, NULL, NULL, 0}, - {"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, 0}, - {"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, 0}, - {"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, 0}, - {"guest account", P_STRING, P_GLOBAL, &Globals.szGuestaccount, NULL, NULL, FLAG_BASIC}, + {"security", P_ENUM, P_GLOBAL, &Globals.security, NULL, enum_security, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"auth methods", P_LIST, P_GLOBAL, &Globals.AuthMethods, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, + {"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, FLAG_ADVANCED}, + {"hosts equiv", P_STRING, P_GLOBAL, &Globals.szHostsEquiv, NULL, NULL, FLAG_ADVANCED}, + {"min passwd length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED}, + {"min password length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED}, + {"map to guest", P_ENUM, P_GLOBAL, &Globals.map_to_guest, NULL, enum_map_to_guest, FLAG_ADVANCED}, + {"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, FLAG_ADVANCED}, + {"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, FLAG_ADVANCED}, + {"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, FLAG_ADVANCED}, + {"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, FLAG_ADVANCED}, + {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED}, + {"sam backend", P_LIST, P_GLOBAL, &Globals.szSamBackend, NULL, NULL, FLAG_ADVANCED}, + {"non unix account range", P_STRING, P_GLOBAL, &Globals.szNonUnixAccountRange, handle_non_unix_account_range, NULL, FLAG_ADVANCED}, + {"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.bAlgorithmicRidBase, NULL, NULL, FLAG_ADVANCED}, + {"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED}, + {"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED}, + {"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_HIDE}, + {"guest account", P_STRING, P_GLOBAL, &Globals.szGuestaccount, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, - {"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, 0}, - {"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, 0}, - {"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, 0}, - {"passwd chat debug", P_BOOL, P_GLOBAL, &Globals.bPasswdChatDebug, NULL, NULL, 0}, - {"username map", P_STRING, P_GLOBAL, &Globals.szUsernameMap, NULL, NULL, 0}, - {"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL, NULL, 0}, - {"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL, NULL, 0}, - {"unix password sync", P_BOOL, P_GLOBAL, &Globals.bUnixPasswdSync, NULL, NULL, 0}, - {"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, NULL, NULL, 0}, - {"lanman auth", P_BOOL, P_GLOBAL, &Globals.bLanmanAuth, NULL, NULL, 0}, - {"ntlm auth", P_BOOL, P_GLOBAL, &Globals.bNTLMAuth, NULL, NULL, 0}, + {"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, FLAG_ADVANCED}, + {"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, FLAG_ADVANCED}, + {"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, FLAG_ADVANCED}, + {"passwd chat debug", P_BOOL, P_GLOBAL, &Globals.bPasswdChatDebug, NULL, NULL, FLAG_ADVANCED}, + {"username map", P_STRING, P_GLOBAL, &Globals.szUsernameMap, NULL, NULL, FLAG_ADVANCED}, + {"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL, NULL, FLAG_ADVANCED}, + {"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL, NULL, FLAG_ADVANCED}, + {"unix password sync", P_BOOL, P_GLOBAL, &Globals.bUnixPasswdSync, NULL, NULL, FLAG_ADVANCED}, + {"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, NULL, NULL, FLAG_ADVANCED}, + {"lanman auth", P_BOOL, P_GLOBAL, &Globals.bLanmanAuth, NULL, NULL, FLAG_ADVANCED}, + {"ntlm auth", P_BOOL, P_GLOBAL, &Globals.bNTLMAuth, NULL, NULL, FLAG_ADVANCED}, {"username", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE}, - {"user", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, 0}, - {"users", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, 0}, + {"user", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_HIDE}, + {"users", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_HIDE}, {"invalid users", P_LIST, P_LOCAL, &sDefault.szInvalidUsers, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE}, {"valid users", P_LIST, P_LOCAL, &sDefault.szValidUsers, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE}, @@ -734,12 +743,12 @@ static struct parm_struct parm_table[] = { {"printer admin", P_LIST, P_LOCAL, &sDefault.printer_admin, NULL, NULL, FLAG_GLOBAL | FLAG_PRINT}, {"force user", P_STRING, P_LOCAL, &sDefault.force_user, NULL, NULL, FLAG_SHARE}, {"force group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_SHARE}, - {"group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, 0}, + {"group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_ADVANCED}, - {"read only", P_BOOL, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_BASIC | FLAG_SHARE}, - {"write ok", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, 0}, - {"writeable", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, 0}, - {"writable", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, 0}, + {"read only", P_BOOL, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE}, + {"write ok", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, + {"writeable", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, + {"writable", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, {"create mask", P_OCTAL, P_LOCAL, &sDefault.iCreate_mask, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE}, {"create mode", P_OCTAL, P_LOCAL, &sDefault.iCreate_mask, NULL, NULL, FLAG_GLOBAL}, @@ -754,27 +763,27 @@ static struct parm_struct parm_table[] = { {"inherit permissions", P_BOOL, P_LOCAL, &sDefault.bInheritPerms, NULL, NULL, FLAG_SHARE}, {"inherit acls", P_BOOL, P_LOCAL, &sDefault.bInheritACLS, NULL, NULL, FLAG_SHARE}, {"guest only", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_SHARE}, - {"only guest", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, 0}, + {"only guest", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_HIDE}, - {"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"public", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, 0}, + {"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"public", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_HIDE}, {"only user", P_BOOL, P_LOCAL, &sDefault.bOnlyUser, NULL, NULL, FLAG_SHARE}, - {"hosts allow", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"allow hosts", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, 0}, - {"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"deny hosts", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, 0}, + {"hosts allow", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"allow hosts", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_HIDE}, + {"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"deny hosts", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_HIDE}, {"Logging Options", P_SEP, P_SEPARATOR}, - {"log level", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, 0}, - {"debuglevel", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, 0}, - {"syslog", P_INTEGER, P_GLOBAL, &Globals.syslog, NULL, NULL, 0}, - {"syslog only", P_BOOL, P_GLOBAL, &Globals.bSyslogOnly, NULL, NULL, 0}, - {"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL, NULL, 0}, + {"log level", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_ADVANCED}, + {"debuglevel", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_HIDE}, + {"syslog", P_INTEGER, P_GLOBAL, &Globals.syslog, NULL, NULL, FLAG_ADVANCED}, + {"syslog only", P_BOOL, P_GLOBAL, &Globals.bSyslogOnly, NULL, NULL, FLAG_ADVANCED}, + {"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL, NULL, FLAG_ADVANCED}, - {"max log size", P_INTEGER, P_GLOBAL, &Globals.max_log_size, NULL, NULL, 0}, - {"timestamp logs", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, 0}, + {"max log size", P_INTEGER, P_GLOBAL, &Globals.max_log_size, NULL, NULL, FLAG_ADVANCED}, + {"timestamp logs", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, FLAG_ADVANCED}, {"debug timestamp", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, 0}, {"debug hires timestamp", P_BOOL, P_GLOBAL, &Globals.bDebugHiresTimestamp, NULL, NULL, 0}, {"debug pid", P_BOOL, P_GLOBAL, &Globals.bDebugPid, NULL, NULL, 0}, @@ -782,8 +791,8 @@ static struct parm_struct parm_table[] = { {"Protocol Options", P_SEP, P_SEPARATOR}, - {"smb ports", P_STRING, P_GLOBAL, &Globals.smb_ports, NULL, NULL, 0}, - {"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, 0}, + {"smb ports", P_STRING, P_GLOBAL, &Globals.smb_ports, NULL, NULL, FLAG_ADVANCED}, + {"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_ADVANCED}, {"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, 0}, {"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, 0}, {"min protocol", P_ENUM, P_GLOBAL, &Globals.minprotocol, NULL, enum_protocol, 0}, @@ -791,22 +800,22 @@ static struct parm_struct parm_table[] = { {"read bmpx", P_BOOL, P_GLOBAL, &Globals.bReadbmpx, NULL, NULL, 0}, {"read raw", P_BOOL, P_GLOBAL, &Globals.bReadRaw, NULL, NULL, 0}, {"write raw", P_BOOL, P_GLOBAL, &Globals.bWriteRaw, NULL, NULL, 0}, - {"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, 0}, + {"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, FLAG_ADVANCED}, - {"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, 0}, - {"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE }, - {"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, 0}, + {"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, FLAG_ADVANCED}, + {"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE | FLAG_ADVANCED | FLAG_WIZARD}, + {"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, FLAG_ADVANCED}, {"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, 0}, {"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as, 0}, - {"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, 0}, - {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, 0}, + {"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, FLAG_ADVANCED}, + {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, FLAG_ADVANCED}, - {"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, 0}, - {"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, 0}, - {"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, 0}, - {"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, 0}, - {"time server", P_BOOL, P_GLOBAL, &Globals.bTimeServer, NULL, NULL, 0}, - {"unix extensions", P_BOOL, P_GLOBAL, &Globals.bUnixExtensions, NULL, NULL, 0}, + {"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, FLAG_ADVANCED}, + {"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, FLAG_ADVANCED}, + {"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, FLAG_ADVANCED}, + {"time server", P_BOOL, P_GLOBAL, &Globals.bTimeServer, NULL, NULL, FLAG_ADVANCED}, + {"unix extensions", P_BOOL, P_GLOBAL, &Globals.bUnixExtensions, NULL, NULL, FLAG_ADVANCED}, {"use spnego", P_BOOL, P_GLOBAL, &Globals.bUseSpnego, NULL, NULL, 0}, {"Tuning Options", P_SEP, P_SEPARATOR}, @@ -815,14 +824,14 @@ static struct parm_struct parm_table[] = { {"change notify timeout", P_INTEGER, P_GLOBAL, &Globals.change_notify_timeout, NULL, NULL, 0}, {"deadtime", P_INTEGER, P_GLOBAL, &Globals.deadtime, NULL, NULL, 0}, {"getwd cache", P_BOOL, P_GLOBAL, &use_getwd_cache, NULL, NULL, 0}, - {"keepalive", P_INTEGER, P_GLOBAL, &keepalive, NULL, NULL, 0}, + {"keepalive", P_INTEGER, P_GLOBAL, &keepalive, NULL, NULL, FLAG_ADVANCED}, {"lpq cache time", P_INTEGER, P_GLOBAL, &Globals.lpqcachetime, NULL, NULL, 0}, {"max smbd processes", P_INTEGER, P_GLOBAL, &Globals.iMaxSmbdProcesses, NULL, NULL, 0}, {"max connections", P_INTEGER, P_LOCAL, &sDefault.iMaxConnections, NULL, NULL, FLAG_SHARE}, {"paranoid server security", P_BOOL, P_GLOBAL, &Globals.paranoid_server_security, NULL, NULL, 0}, {"max disk size", P_INTEGER, P_GLOBAL, &Globals.maxdisksize, NULL, NULL, 0}, - {"max open files", P_INTEGER, P_GLOBAL, &Globals.max_open_files, NULL, NULL, 0}, + {"max open files", P_INTEGER, P_GLOBAL, &Globals.max_open_files, NULL, NULL, FLAG_ADVANCED}, {"min print space", P_INTEGER, P_LOCAL, &sDefault.iMinPrintSpace, NULL, NULL, FLAG_PRINT}, {"read size", P_INTEGER, P_GLOBAL, &Globals.ReadSize, NULL, NULL, 0}, @@ -832,10 +841,10 @@ static struct parm_struct parm_table[] = { {"strict sync", P_BOOL, P_LOCAL, &sDefault.bStrictSync, NULL, NULL, FLAG_SHARE}, {"sync always", P_BOOL, P_LOCAL, &sDefault.bSyncAlways, NULL, NULL, FLAG_SHARE}, {"use mmap", P_BOOL, P_GLOBAL, &Globals.bUseMmap, NULL, NULL, 0}, - {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, 0}, + {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, FLAG_ADVANCED}, {"write cache size", P_INTEGER, P_LOCAL, &sDefault.iWriteCacheSize, NULL, NULL, FLAG_SHARE}, - {"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, 0}, + {"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, FLAG_ADVANCED}, {"Printing Options", P_SEP, P_SEPARATOR}, @@ -845,7 +854,7 @@ static struct parm_struct parm_table[] = { {"printcap name", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_PRINT}, {"printcap", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, 0}, {"printable", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_PRINT}, - {"print ok", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, 0}, + {"print ok", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_HIDE}, {"postscript", P_BOOL, P_LOCAL, &sDefault.bPostscript, NULL, NULL, FLAG_PRINT | FLAG_DEPRECATED}, {"printing", P_ENUM, P_LOCAL, &sDefault.iPrinting, NULL, enum_printing, FLAG_PRINT | FLAG_GLOBAL}, {"print command", P_STRING, P_LOCAL, &sDefault.szPrintcommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL}, @@ -857,14 +866,14 @@ static struct parm_struct parm_table[] = { {"queuepause command", P_STRING, P_LOCAL, &sDefault.szQueuepausecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL}, {"queueresume command", P_STRING, P_LOCAL, &sDefault.szQueueresumecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL}, - {"enumports command", P_STRING, P_GLOBAL, &Globals.szEnumPortsCommand, NULL, NULL, 0}, - {"addprinter command", P_STRING, P_GLOBAL, &Globals.szAddPrinterCommand, NULL, NULL, 0}, - {"deleteprinter command", P_STRING, P_GLOBAL, &Globals.szDeletePrinterCommand, NULL, NULL, 0}, - {"show add printer wizard", P_BOOL, P_GLOBAL, &Globals.bMsAddPrinterWizard, NULL, NULL, 0}, - {"os2 driver map", P_STRING, P_GLOBAL, &Globals.szOs2DriverMap, NULL, NULL, 0}, + {"enumports command", P_STRING, P_GLOBAL, &Globals.szEnumPortsCommand, NULL, NULL, FLAG_ADVANCED}, + {"addprinter command", P_STRING, P_GLOBAL, &Globals.szAddPrinterCommand, NULL, NULL, FLAG_ADVANCED}, + {"deleteprinter command", P_STRING, P_GLOBAL, &Globals.szDeletePrinterCommand, NULL, NULL, FLAG_ADVANCED}, + {"show add printer wizard", P_BOOL, P_GLOBAL, &Globals.bMsAddPrinterWizard, NULL, NULL, FLAG_ADVANCED}, + {"os2 driver map", P_STRING, P_GLOBAL, &Globals.szOs2DriverMap, NULL, NULL, FLAG_ADVANCED}, {"printer name", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_PRINT}, - {"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, 0}, + {"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_HIDE}, {"use client driver", P_BOOL, P_LOCAL, &sDefault.bUseClientDriver, NULL, NULL, FLAG_PRINT}, {"default devmode", P_BOOL, P_LOCAL, &sDefault.bDefaultDevmode, NULL, NULL, FLAG_PRINT}, {"printer driver", P_STRING, P_LOCAL, &sDefault.szPrinterDriver, NULL, NULL, FLAG_PRINT | FLAG_DEPRECATED}, @@ -872,13 +881,13 @@ static struct parm_struct parm_table[] = { {"printer driver location", P_STRING, P_LOCAL, &sDefault.szPrinterDriverLocation, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL | FLAG_DEPRECATED}, {"Filename Handling", P_SEP, P_SEPARATOR}, - {"strip dot", P_BOOL, P_GLOBAL, &Globals.bStripDot, NULL, NULL, 0}, - {"mangling method", P_STRING, P_GLOBAL, &Globals.szManglingMethod, NULL, NULL, 0}, + {"strip dot", P_BOOL, P_GLOBAL, &Globals.bStripDot, NULL, NULL, FLAG_ADVANCED}, + {"mangling method", P_STRING, P_GLOBAL, &Globals.szManglingMethod, NULL, NULL, FLAG_ADVANCED}, - {"mangled stack", P_INTEGER, P_GLOBAL, &Globals.mangled_stack, NULL, NULL, 0}, + {"mangled stack", P_INTEGER, P_GLOBAL, &Globals.mangled_stack, NULL, NULL, FLAG_ADVANCED}, {"default case", P_ENUM, P_LOCAL, &sDefault.iDefaultCase, NULL, enum_case, FLAG_SHARE}, {"case sensitive", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, - {"casesignames", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, 0}, + {"casesignames", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, FLAG_HIDE}, {"preserve case", P_BOOL, P_LOCAL, &sDefault.bCasePreserve, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"short preserve case", P_BOOL, P_LOCAL, &sDefault.bShortCasePreserve, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"mangle case", P_BOOL, P_LOCAL, &sDefault.bCaseMangle, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, @@ -900,48 +909,48 @@ static struct parm_struct parm_table[] = { {"Domain Options", P_SEP, P_SEPARATOR}, - {"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout, NULL, NULL, 0}, + {"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, {"Logon Options", P_SEP, P_SEPARATOR}, - {"add user script", P_STRING, P_GLOBAL, &Globals.szAddUserScript, NULL, NULL, 0}, - {"delete user script", P_STRING, P_GLOBAL, &Globals.szDelUserScript, NULL, NULL, 0}, - {"add group script", P_STRING, P_GLOBAL, &Globals.szAddGroupScript, NULL, NULL, 0}, - {"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, 0}, - {"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, 0}, - {"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, 0}, - {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, 0}, - {"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, 0}, - {"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, 0}, - - {"logon script", P_STRING, P_GLOBAL, &Globals.szLogonScript, NULL, NULL, 0}, - {"logon path", P_STRING, P_GLOBAL, &Globals.szLogonPath, NULL, NULL, 0}, - {"logon drive", P_STRING, P_GLOBAL, &Globals.szLogonDrive, NULL, NULL, 0}, - {"logon home", P_STRING, P_GLOBAL, &Globals.szLogonHome, NULL, NULL, 0}, - {"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL, NULL, 0}, + {"add user script", P_STRING, P_GLOBAL, &Globals.szAddUserScript, NULL, NULL, FLAG_ADVANCED}, + {"delete user script", P_STRING, P_GLOBAL, &Globals.szDelUserScript, NULL, NULL, FLAG_ADVANCED}, + {"add group script", P_STRING, P_GLOBAL, &Globals.szAddGroupScript, NULL, NULL, FLAG_ADVANCED}, + {"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, FLAG_ADVANCED}, + {"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, FLAG_ADVANCED}, + {"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, FLAG_ADVANCED}, + {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, FLAG_ADVANCED}, + {"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, FLAG_ADVANCED}, + {"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, FLAG_ADVANCED}, + + {"logon script", P_STRING, P_GLOBAL, &Globals.szLogonScript, NULL, NULL, FLAG_ADVANCED}, + {"logon path", P_STRING, P_GLOBAL, &Globals.szLogonPath, NULL, NULL, FLAG_ADVANCED}, + {"logon drive", P_STRING, P_GLOBAL, &Globals.szLogonDrive, NULL, NULL, FLAG_ADVANCED}, + {"logon home", P_STRING, P_GLOBAL, &Globals.szLogonHome, NULL, NULL, FLAG_ADVANCED}, + {"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL, NULL, FLAG_ADVANCED}, {"Browse Options", P_SEP, P_SEPARATOR}, - {"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL, NULL, FLAG_BASIC}, - {"lm announce", P_ENUM, P_GLOBAL, &Globals.lm_announce, NULL, enum_bool_auto, 0}, - {"lm interval", P_INTEGER, P_GLOBAL, &Globals.lm_interval, NULL, NULL, 0}, - {"preferred master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_BASIC}, + {"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, + {"lm announce", P_ENUM, P_GLOBAL, &Globals.lm_announce, NULL, enum_bool_auto, FLAG_ADVANCED}, + {"lm interval", P_INTEGER, P_GLOBAL, &Globals.lm_interval, NULL, NULL, FLAG_ADVANCED}, + {"preferred master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, {"prefered master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_HIDE}, - {"local master", P_BOOL, P_GLOBAL, &Globals.bLocalMaster, NULL, NULL, FLAG_BASIC}, - {"domain master", P_ENUM, P_GLOBAL, &Globals.bDomainMaster, NULL, enum_bool_auto, FLAG_BASIC}, - {"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL, NULL, 0}, - {"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, - {"browsable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, 0}, + {"local master", P_BOOL, P_GLOBAL, &Globals.bLocalMaster, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, + {"domain master", P_ENUM, P_GLOBAL, &Globals.bDomainMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, + {"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL, NULL, FLAG_ADVANCED}, + {"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"browsable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_HIDE}, {"enhanced browsing", P_BOOL, P_GLOBAL, &Globals.enhanced_browsing, NULL, NULL}, {"WINS Options", P_SEP, P_SEPARATOR}, - {"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, 0}, - {"wins proxy", P_BOOL, P_GLOBAL, &Globals.bWINSproxy, NULL, NULL, 0}, + {"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, FLAG_ADVANCED}, + {"wins proxy", P_BOOL, P_GLOBAL, &Globals.bWINSproxy, NULL, NULL, FLAG_ADVANCED}, - {"wins server", P_LIST, P_GLOBAL, &Globals.szWINSservers, NULL, NULL, FLAG_BASIC}, - {"wins support", P_BOOL, P_GLOBAL, &Globals.bWINSsupport, NULL, NULL, FLAG_BASIC}, - {"wins hook", P_STRING, P_GLOBAL, &Globals.szWINSHook, NULL, NULL, 0}, - {"wins partners", P_STRING, P_GLOBAL, &Globals.szWINSPartners, NULL, NULL, 0}, + {"wins server", P_LIST, P_GLOBAL, &Globals.szWINSservers, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"wins support", P_BOOL, P_GLOBAL, &Globals.bWINSsupport, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, + {"wins hook", P_STRING, P_GLOBAL, &Globals.szWINSHook, NULL, NULL, FLAG_ADVANCED}, + {"wins partners", P_STRING, P_GLOBAL, &Globals.szWINSPartners, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, {"Locking Options", P_SEP, P_SEPARATOR}, @@ -963,57 +972,57 @@ static struct parm_struct parm_table[] = { {"Ldap Options", P_SEP, P_SEPARATOR}, - {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, 0}, - {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, 0}, - {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, 0}, - {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, 0}, - {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, 0}, - {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, 0}, + {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED}, + {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED}, + {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED}, + {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, FLAG_ADVANCED}, + {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, FLAG_ADVANCED}, + {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, FLAG_ADVANCED}, {"Miscellaneous Options", P_SEP, P_SEPARATOR}, - {"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, 0}, - {"change share command", P_STRING, P_GLOBAL, &Globals.szChangeShareCommand, NULL, NULL, 0}, - {"delete share command", P_STRING, P_GLOBAL, &Globals.szDeleteShareCommand, NULL, NULL, 0}, + {"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, FLAG_ADVANCED}, + {"change share command", P_STRING, P_GLOBAL, &Globals.szChangeShareCommand, NULL, NULL, FLAG_ADVANCED}, + {"delete share command", P_STRING, P_GLOBAL, &Globals.szDeleteShareCommand, NULL, NULL, FLAG_ADVANCED}, {"config file", P_STRING, P_GLOBAL, &Globals.szConfigFile, NULL, NULL, FLAG_HIDE}, - {"preload", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, 0}, - {"auto services", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, 0}, + {"preload", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED}, + {"auto services", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED}, {"lock dir", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, 0}, - {"lock directory", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, 0}, - {"pid directory", P_STRING, P_GLOBAL, &Globals.szPidDir, NULL, NULL, 0}, + {"lock directory", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, FLAG_ADVANCED}, + {"pid directory", P_STRING, P_GLOBAL, &Globals.szPidDir, NULL, NULL, FLAG_ADVANCED}, #ifdef WITH_UTMP - {"utmp directory", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, 0}, - {"wtmp directory", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, 0}, - {"utmp", P_BOOL, P_GLOBAL, &Globals.bUtmp, NULL, NULL, 0}, + {"utmp directory", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, FLAG_ADVANCED}, + {"wtmp directory", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, FLAG_ADVANCED}, + {"utmp", P_BOOL, P_GLOBAL, &Globals.bUtmp, NULL, NULL, FLAG_ADVANCED}, #endif - {"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, 0}, + {"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_ADVANCED}, {"default", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, 0}, - {"message command", P_STRING, P_GLOBAL, &Globals.szMsgCommand, NULL, NULL, 0}, - {"dfree command", P_STRING, P_GLOBAL, &Globals.szDfree, NULL, NULL, 0}, - {"remote announce", P_STRING, P_GLOBAL, &Globals.szRemoteAnnounce, NULL, NULL, 0}, - {"remote browse sync", P_STRING, P_GLOBAL, &Globals.szRemoteBrowseSync, NULL, NULL, 0}, + {"message command", P_STRING, P_GLOBAL, &Globals.szMsgCommand, NULL, NULL, FLAG_ADVANCED}, + {"dfree command", P_STRING, P_GLOBAL, &Globals.szDfree, NULL, NULL, FLAG_ADVANCED}, + {"remote announce", P_STRING, P_GLOBAL, &Globals.szRemoteAnnounce, NULL, NULL, FLAG_ADVANCED}, + {"remote browse sync", P_STRING, P_GLOBAL, &Globals.szRemoteBrowseSync, NULL, NULL, FLAG_ADVANCED}, {"socket address", P_STRING, P_GLOBAL, &Globals.szSocketAddress, NULL, NULL, 0}, - {"homedir map", P_STRING, P_GLOBAL, &Globals.szNISHomeMapName, NULL, NULL, 0}, - {"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL, NULL, 0}, - {"NIS homedir", P_BOOL, P_GLOBAL, &Globals.bNISHomeMap, NULL, NULL, 0}, + {"homedir map", P_STRING, P_GLOBAL, &Globals.szNISHomeMapName, NULL, NULL, FLAG_ADVANCED}, + {"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL, NULL, FLAG_ADVANCED}, + {"NIS homedir", P_BOOL, P_GLOBAL, &Globals.bNISHomeMap, NULL, NULL, FLAG_ADVANCED}, {"-valid", P_BOOL, P_LOCAL, &sDefault.valid, NULL, NULL, FLAG_HIDE}, {"copy", P_STRING, P_LOCAL, &sDefault.szCopy, handle_copy, NULL, FLAG_HIDE}, {"include", P_STRING, P_LOCAL, &sDefault.szInclude, handle_include, NULL, FLAG_HIDE}, {"exec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, - {"preexec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, 0}, + {"preexec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_ADVANCED}, {"preexec close", P_BOOL, P_LOCAL, &sDefault.bPreexecClose, NULL, NULL, FLAG_SHARE}, {"postexec", P_STRING, P_LOCAL, &sDefault.szPostExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, {"root preexec", P_STRING, P_LOCAL, &sDefault.szRootPreExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, {"root preexec close", P_BOOL, P_LOCAL, &sDefault.bRootpreexecClose, NULL, NULL, FLAG_SHARE}, {"root postexec", P_STRING, P_LOCAL, &sDefault.szRootPostExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, - {"available", P_BOOL, P_LOCAL, &sDefault.bAvailable, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT}, + {"available", P_BOOL, P_LOCAL, &sDefault.bAvailable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, {"volume", P_STRING, P_LOCAL, &sDefault.volume, NULL, NULL, FLAG_SHARE }, {"fstype", P_STRING, P_LOCAL, &sDefault.fstype, NULL, NULL, FLAG_SHARE}, {"set directory", P_BOOLREV, P_LOCAL, &sDefault.bNo_set_dir, NULL, NULL, FLAG_SHARE}, - {"source environment", P_STRING, P_GLOBAL, &Globals.szSourceEnv, handle_source_env, NULL, 0}, + {"source environment", P_STRING, P_GLOBAL, &Globals.szSourceEnv, handle_source_env, NULL, FLAG_ADVANCED}, {"wide links", P_BOOL, P_LOCAL, &sDefault.bWidelinks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"follow symlinks", P_BOOL, P_LOCAL, &sDefault.bSymlinks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"dont descend", P_STRING, P_LOCAL, &sDefault.szDontdescend, NULL, NULL, FLAG_SHARE}, @@ -1025,9 +1034,8 @@ static struct parm_struct parm_table[] = { {"dos filetime resolution", P_BOOL, P_LOCAL, &sDefault.bDosFiletimeResolution, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"fake directory create times", P_BOOL, P_LOCAL, &sDefault.bFakeDirCreateTimes, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, - {"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, 0}, - {"hide local users", P_BOOL, P_GLOBAL, &Globals.bHideLocalUsers, NULL, - NULL, 0}, + {"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, FLAG_ADVANCED}, + {"hide local users", P_BOOL, P_GLOBAL, &Globals.bHideLocalUsers, NULL, NULL, FLAG_ADVANCED}, {"VFS module options", P_SEP, P_SEPARATOR}, @@ -1037,19 +1045,19 @@ static struct parm_struct parm_table[] = { {"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE}, - {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, 0}, + {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED}, {"Winbind options", P_SEP, P_SEPARATOR}, - {"winbind uid", P_STRING, P_GLOBAL, &Globals.szWinbindUID, handle_winbind_uid, NULL, 0}, - {"winbind gid", P_STRING, P_GLOBAL, &Globals.szWinbindGID, handle_winbind_gid, NULL, 0}, - {"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, 0}, - {"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, 0}, - {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, 0}, - {"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, 0}, - {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, 0}, - {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, 0}, - {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, 0}, + {"winbind uid", P_STRING, P_GLOBAL, &Globals.szWinbindUID, handle_winbind_uid, NULL, FLAG_ADVANCED}, + {"winbind gid", P_STRING, P_GLOBAL, &Globals.szWinbindGID, handle_winbind_gid, NULL, FLAG_ADVANCED}, + {"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, FLAG_ADVANCED}, + {"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, FLAG_ADVANCED}, + {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, FLAG_ADVANCED}, + {"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, FLAG_ADVANCED}, + {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, FLAG_ADVANCED}, + {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, FLAG_ADVANCED}, + {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, FLAG_ADVANCED}, {NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0} }; -- cgit From 9521538c9f9effdbf4953e6c91141162ca6fd4e8 Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Mon, 16 Sep 2002 11:50:28 +0000 Subject: Committing changes before I lose them. Work still in progress. (This used to be commit 89842d94bb2b2bb386716c7db96cc0acda80b76e) --- source3/web/swat.c | 343 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 290 insertions(+), 53 deletions(-) diff --git a/source3/web/swat.c b/source3/web/swat.c index 80d3232d2b..af6fa82ffe 100644 --- a/source3/web/swat.c +++ b/source3/web/swat.c @@ -1,7 +1,9 @@ /* Unix SMB/CIFS implementation. Samba Web Administration Tool - Copyright (C) Andrew Tridgell 1997-1998 + Version 3.0.0 + Copyright (C) Andrew Tridgell 1997-2002 + Copyright (C) John H Terpstra 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 @@ -297,7 +299,7 @@ static void show_parameter(int snum, struct parm_struct *parm) /**************************************************************************** display a set of parameters for a service ****************************************************************************/ -static void show_parameters(int snum, int allparameters, int advanced, int printers) +static void show_parameters(int snum, int allparameters, unsigned int parm_filter, int printers) { int i = 0; struct parm_struct *parm; @@ -316,7 +318,7 @@ static void show_parameters(int snum, int allparameters, int advanced, int print if (printers & !(parm->flags & FLAG_PRINT)) continue; if (!printers & !(parm->flags & FLAG_SHARE)) continue; } - if (!advanced) { + if (parm_filter == FLAG_BASIC) { if (!(parm->flags & FLAG_BASIC)) { void *ptr = parm->ptr; @@ -363,6 +365,12 @@ static void show_parameters(int snum, int allparameters, int advanced, int print } if (printers && !(parm->flags & FLAG_PRINT)) continue; } + if (parm_filter == FLAG_WIZARD) { + if (!((parm->flags & FLAG_WIZARD))) continue; + } + if (parm_filter == FLAG_ADVANCED) { + if (!((parm->flags & FLAG_ADVANCED))) continue; + } if (heading && heading != last_heading) { d_printf("%s\n", _(heading)); last_heading = heading; @@ -393,7 +401,7 @@ static void write_config(FILE *f, BOOL show_defaults) } /**************************************************************************** - save and reoad the smb.conf config file + save and reload the smb.conf config file ****************************************************************************/ static int save_reload(int snum) { @@ -497,6 +505,7 @@ static void show_main_buttons(void) image_link(_("Globals"), "globals", "images/globals.gif"); image_link(_("Shares"), "shares", "images/shares.gif"); image_link(_("Printers"), "printers", "images/printers.gif"); + image_link(_("Wizard"), "wizard", "images/wizard.gif"); } if (have_read_access) { image_link(_("Status"), "status", "images/status.gif"); @@ -507,6 +516,18 @@ static void show_main_buttons(void) d_printf("
    \n"); } +/**************************************************************************** + * Handle Display/Edit Mode CGI + ****************************************************************************/ +static void ViewModeBoxes(int mode) +{ + d_printf("

    %s\n", _("Configuration View: ")); + d_printf("Basic\n", (mode == 0) ? "checked" : ""); + d_printf("Advanced\n", (mode == 1) ? "checked" : ""); + d_printf("Developer\n", (mode == 2) ? "checked" : ""); + d_printf("


    \n"); +} + /**************************************************************************** display a welcome page ****************************************************************************/ @@ -541,25 +562,240 @@ static void viewconfig_page(void) d_printf("\n"); } +/**************************************************************************** + second screen of the wizard ... Fetch Configuration Parameters +****************************************************************************/ +static void wizard_params_page(void) +{ + unsigned int parm_filter = FLAG_WIZARD; + + /* Here we first set and commit all the parameters that were selected + in the previous screen. */ + + d_printf("

    Wizard Parameter Edit Page

    \n"); + + if (cgi_variable("Commit")) { + commit_parameters(GLOBALS_SNUM); + save_reload(0); + } + + d_printf("
    \n"); + + if (have_write_access) { + d_printf("\n"); + } + + d_printf("\n"); + d_printf("

    \n"); + + d_printf("\n"); + show_parameters(GLOBALS_SNUM, 1, parm_filter, 0); + d_printf("
    \n"); + d_printf("

    \n"); +} + +/**************************************************************************** + Utility to just rewrite the smb.conf file - effectively just cleans it up +****************************************************************************/ +static void rewritecfg_file(void) +{ + commit_parameters(GLOBALS_SNUM); + save_reload(0); + d_printf("

    Note: smb.conf %s

    \n", _("file has been read and rewritten")); +} + +/**************************************************************************** + wizard to create/modify the smb.conf file +****************************************************************************/ +static void wizard_page(void) +{ + /* Set some variables to collect data from smb.conf */ + int role = 0; + int winstype = 0; + int have_home = -1; + int HomeExpo = 0; + int SerType = 0; + + if (cgi_variable("Rewrite")) { + (void) rewritecfg_file(); + return; + } + + if (cgi_variable("GetWizardParams")){ + (void) wizard_params_page(); + return; + } + + if (cgi_variable("Commit")){ + SerType = atoi(cgi_variable("ServerType")); + winstype = atoi(cgi_variable("WINSType")); + have_home = lp_servicenumber(HOMES_NAME); + HomeExpo = atoi(cgi_variable("HomeExpo")); + + /* Plain text passwords are too badly broken - use encrypted passwords only */ + lp_do_parameter( GLOBALS_SNUM, "encrypt passwords", "Yes"); + + switch ( SerType ){ + case 0: + /* Stand-alone Server */ + lp_do_parameter( GLOBALS_SNUM, "security", "USER" ); + lp_do_parameter( GLOBALS_SNUM, "domain logons", "No" ); + break; + case 1: + /* Domain Member */ + lp_do_parameter( GLOBALS_SNUM, "security", "DOMAIN" ); + lp_do_parameter( GLOBALS_SNUM, "domain logons", "No" ); + break; + case 2: + /* Domain Controller */ + lp_do_parameter( GLOBALS_SNUM, "security", "USER" ); + lp_do_parameter( GLOBALS_SNUM, "domain logons", "Yes" ); + break; + } + switch ( winstype ) { + case 0: + lp_do_parameter( GLOBALS_SNUM, "wins support", "No" ); + lp_do_parameter( GLOBALS_SNUM, "wins server", "" ); + break; + case 1: + lp_do_parameter( GLOBALS_SNUM, "wins support", "Yes" ); + lp_do_parameter( GLOBALS_SNUM, "wins server", "" ); + break; + case 2: + lp_do_parameter( GLOBALS_SNUM, "wins support", "No" ); + lp_do_parameter( GLOBALS_SNUM, "wins server", cgi_variable("WINSAddr")); + break; + } + + /* Have to create Homes share? */ + if ((HomeExpo == 1) && (have_home == -1)) { + pstring unix_share; + + pstrcpy(unix_share,HOMES_NAME); + load_config(False); + lp_copy_service(GLOBALS_SNUM, unix_share); + iNumNonAutoPrintServices = lp_numservices(); + have_home = lp_servicenumber(HOMES_NAME); + lp_do_parameter( have_home, "read only", "No"); + lp_do_parameter( have_home, "valid users", "%S"); + lp_do_parameter( have_home, "browseable", "No"); + commit_parameters(have_home); + } + + /* Need to Delete Homes share? */ + if ((HomeExpo == 0) && (have_home != -1)) { + lp_remove_service(have_home); + have_home = -1; + } + + commit_parameters(GLOBALS_SNUM); + save_reload(0); + } + else + { + /* Now determine smb.conf WINS settings */ + if (lp_wins_support()) + winstype = 1; +/* if (strlen(lp_wins_server_list()) != 0 ) + * winstype = 2; + */ + + /* Do we have a homes share? */ + have_home = lp_servicenumber(HOMES_NAME); + } + if ((winstype == 2) && lp_wins_support()) + winstype = 3; + + role = lp_server_role(); + + /* Here we go ... */ + d_printf("

    Samba Configuration Wizard

    \n"); + d_printf("
    \n"); + + if (have_write_access) { + d_printf(_("The \"Rewrite smb.conf file\" button will clear the smb.conf file of all default values and of comments.\n")); + d_printf(_("The same will happen if you press the commit button.")); + d_printf("

    "); + d_printf("
    "); + d_printf("   ",_("Rewrite smb.conf file")); + d_printf("   ",_("Commit")); + d_printf("", _("Edit Parameter Values")); + d_printf("
    "); + } + + d_printf("
    "); + d_printf("
    "); + d_printf("\n", "Server Type: "); + d_printf("", (role == ROLE_STANDALONE) ? "checked" : ""); + d_printf("", (role == ROLE_DOMAIN_MEMBER) ? "checked" : ""); + d_printf("", (role == ROLE_DOMAIN_PDC) ? "checked" : ""); + d_printf(""); + if (role == ROLE_DOMAIN_BDC) { + d_printf(""); + } + d_printf("\n", "Configure WINS As: "); + d_printf("", (winstype == 0) ? "checked" : ""); + d_printf("", (winstype == 1) ? "checked" : ""); + d_printf("", (winstype == 2) ? "checked" : ""); + d_printf("",lp_wins_server_list()); + if (winstype == 3) { + d_printf(""); + d_printf(""); + } + d_printf(""); + d_printf("\n","Expose Home Directories: "); + d_printf("", (have_home == -1) ? "" : "checked "); + d_printf("", (have_home == -1 ) ? "checked" : ""); + d_printf(""); + + /* Enable this when we are ready .... + * d_printf("\n","Is Print Server: "); + * d_printf(""); + * d_printf(""); + * d_printf(""); + */ + + d_printf("
    %s Stand Alone  Domain Member  Domain Controller 
    Unusual Type in smb.conf - Please Select New Mode
    %s Not Used  Server for client use  Client of another WINS server 
    Remote WINS Server 
    Error: WINS Server Mode and WINS Support both set in smb.conf
    Please Select desired WINS mode above.
    %s Yes No
    %s Yes No
    "); + d_printf("
    "); + + d_printf(_("The above configuration options will set multiple parameters and will generally assist with rapid Samba deployment.\n")); + d_printf("
    \n"); +} + + /**************************************************************************** display a globals editing page ****************************************************************************/ static void globals_page(void) { - int advanced = 0; + unsigned int parm_filter = FLAG_BASIC; + int mode = 0; d_printf("

    %s

    \n", _("Global Variables")); - if (cgi_variable("Advanced") && !cgi_variable("Basic")) - advanced = 1; - if (cgi_variable("Commit")) { commit_parameters(GLOBALS_SNUM); save_reload(0); } - d_printf("
    \n"); - + if ( cgi_variable("ViewMode") ) + mode = atoi(cgi_variable("ViewMode")); + + d_printf("\n"); + + ViewModeBoxes( mode ); + switch ( mode ) { + case 0: + parm_filter = FLAG_BASIC; + break; + case 1: + parm_filter = FLAG_ADVANCED; + break; + case 2: + parm_filter = FLAG_DEVELOPER; + break; + } + d_printf("
    \n"); if (have_write_access) { d_printf("\n", _("Commit Changes")); @@ -567,22 +803,12 @@ static void globals_page(void) d_printf("\n", _("Reset Values")); - if (advanced == 0) { - d_printf("\n", _("Advanced View")); - } else { - d_printf("\n", _("Basic View")); - } + d_printf("

    \n"); - d_printf("\n"); - show_parameters(GLOBALS_SNUM, 1, advanced, 0); + show_parameters(GLOBALS_SNUM, 1, parm_filter, 0); d_printf("
    \n"); - - if (advanced) { - d_printf("\n"); - } - - d_printf("

    \n"); + d_printf("\n"); } /**************************************************************************** @@ -595,16 +821,14 @@ static void shares_page(void) char *s; int snum = -1; int i; - int advanced = 0; + int mode = 0; + unsigned int parm_filter = FLAG_BASIC; if (share) snum = lp_servicenumber(share); d_printf("

    %s

    \n", _("Share Parameters")); - if (cgi_variable("Advanced") && !cgi_variable("Basic")) - advanced = 1; - if (cgi_variable("Commit") && snum >= 0) { commit_parameters(snum); save_reload(0); @@ -628,7 +852,21 @@ static void shares_page(void) d_printf("
    \n"); d_printf("\n"); - d_printf("\n"); + if ( cgi_variable("ViewMode") ) + mode = atoi(cgi_variable("ViewMode")); + ViewModeBoxes( mode ); + switch ( mode ) { + case 0: + parm_filter = FLAG_BASIC; + break; + case 1: + parm_filter = FLAG_ADVANCED; + break; + case 2: + parm_filter = FLAG_DEVELOPER; + break; + } + d_printf("
    \n"); d_printf("\n", _("Choose Share")); d_printf("
    \n", _("Reset Values")); - if (advanced == 0) { - d_printf("\n", _("Advanced View")); - } else { - d_printf("\n", _("Basic View")); - } d_printf("

    \n"); } if (snum >= 0) { d_printf("\n"); - show_parameters(snum, 1, advanced, 0); + show_parameters(snum, 1, parm_filter, 0); d_printf("
    \n"); } - if (advanced) { - d_printf("\n"); - } - d_printf("\n"); } @@ -922,7 +1151,8 @@ static void printers_page(void) char *s; int snum=-1; int i; - int advanced = 0; + int mode = 0; + unsigned int parm_filter = FLAG_BASIC; if (share) snum = lp_servicenumber(share); @@ -935,9 +1165,6 @@ static void printers_page(void) d_printf("%s\n", _("Printcap Name")); d_printf(_("Attempting to delete these printers from SWAT will have no effect.\n")); - if (cgi_variable("Advanced") && !cgi_variable("Basic")) - advanced = 1; - if (cgi_variable("Commit") && snum >= 0) { commit_parameters(snum); if (snum >= iNumNonAutoPrintServices) @@ -965,6 +1192,20 @@ static void printers_page(void) d_printf("

    \n"); + if ( cgi_variable("ViewMode") ) + mode = atoi(cgi_variable("ViewMode")); + ViewModeBoxes( mode ); + switch ( mode ) { + case 0: + parm_filter = FLAG_BASIC; + break; + case 1: + parm_filter = FLAG_ADVANCED; + break; + case 2: + parm_filter = FLAG_DEVELOPER; + break; + } d_printf("\n"); d_printf("\n", _("Choose Printer")); d_printf("
    \n", _("Commit Changes")); } d_printf("\n", _("Reset Values")); - if (advanced == 0) { - d_printf("\n", _("Advanced View")); - } else { - d_printf("\n", _("Basic View")); - } d_printf("

    \n"); } if (snum >= 0) { d_printf("\n"); - show_parameters(snum, 1, advanced, 1); + show_parameters(snum, 1, parm_filter, 1); d_printf("
    \n"); } - - if (advanced) { - d_printf("\n"); - } - d_printf("\n"); } @@ -1109,6 +1340,12 @@ static void printers_page(void) viewconfig_page(); } else if (strcmp(page,"passwd")==0) { passwd_page(); + } else if (have_read_access && strcmp(page,"wizard")==0) { + wizard_page(); + } else if (have_read_access && strcmp(page,"wizard_params")==0) { + wizard_params_page(); + } else if (have_read_access && strcmp(page,"rewritecfg")==0) { + rewritecfg_file(); } else { welcome_page(); } -- cgit From 52e22d7384ef86937938b93c18a2460614e60bc6 Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Mon, 16 Sep 2002 12:53:11 +0000 Subject: Update to add DEVELOPER option to more parameters. (This used to be commit bd9dbf5c79bf2bfecdf008fe93eba87ea9993a3c) --- source3/param/loadparm.c | 364 +++++++++++++++++++++++------------------------ 1 file changed, 182 insertions(+), 182 deletions(-) diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 6ec96083f2..7607760cca 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -678,58 +678,58 @@ static struct enum_list enum_map_to_guest[] = { static struct parm_struct parm_table[] = { {"Base Options", P_SEP, P_SEPARATOR}, - {"dos charset", P_STRING, P_GLOBAL, &Globals.dos_charset, NULL, NULL, FLAG_ADVANCED}, - {"unix charset", P_STRING, P_GLOBAL, &Globals.unix_charset, NULL, NULL, FLAG_ADVANCED}, - {"display charset", P_STRING, P_GLOBAL, &Globals.display_charset, NULL, NULL, FLAG_ADVANCED}, - {"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, - {"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"dos charset", P_STRING, P_GLOBAL, &Globals.dos_charset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"unix charset", P_STRING, P_GLOBAL, &Globals.unix_charset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"display charset", P_STRING, P_GLOBAL, &Globals.display_charset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, + {"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"directory", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_HIDE}, - {"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkGroup, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"realm", P_USTRING, P_GLOBAL, &Globals.szRealm, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"ADS server", P_STRING, P_GLOBAL, &Globals.szADSserver, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"netbios name", P_UGSTRING, P_GLOBAL, global_myname, handle_netbios_name, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"netbios aliases", P_LIST, P_GLOBAL, &Globals.szNetbiosAliases, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, - {"netbios scope", P_UGSTRING, P_GLOBAL, global_scope, NULL, NULL, FLAG_ADVANCED}, - {"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED }, - {"interfaces", P_LIST, P_GLOBAL, &Globals.szInterfaces, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"bind interfaces only", P_BOOL, P_GLOBAL, &Globals.bBindInterfacesOnly, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkGroup, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"realm", P_USTRING, P_GLOBAL, &Globals.szRealm, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"ADS server", P_STRING, P_GLOBAL, &Globals.szADSserver, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"netbios name", P_UGSTRING, P_GLOBAL, global_myname, handle_netbios_name, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"netbios aliases", P_LIST, P_GLOBAL, &Globals.szNetbiosAliases, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"netbios scope", P_UGSTRING, P_GLOBAL, global_scope, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, + {"interfaces", P_LIST, P_GLOBAL, &Globals.szInterfaces, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"bind interfaces only", P_BOOL, P_GLOBAL, &Globals.bBindInterfacesOnly, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, {"Security Options", P_SEP, P_SEPARATOR}, - {"security", P_ENUM, P_GLOBAL, &Globals.security, NULL, enum_security, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"auth methods", P_LIST, P_GLOBAL, &Globals.AuthMethods, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, - {"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, FLAG_ADVANCED}, - {"hosts equiv", P_STRING, P_GLOBAL, &Globals.szHostsEquiv, NULL, NULL, FLAG_ADVANCED}, - {"min passwd length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED}, - {"min password length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED}, - {"map to guest", P_ENUM, P_GLOBAL, &Globals.map_to_guest, NULL, enum_map_to_guest, FLAG_ADVANCED}, - {"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, FLAG_ADVANCED}, - {"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, FLAG_ADVANCED}, - {"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, - {"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, FLAG_ADVANCED}, - {"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, FLAG_ADVANCED}, - {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED}, - {"sam backend", P_LIST, P_GLOBAL, &Globals.szSamBackend, NULL, NULL, FLAG_ADVANCED}, - {"non unix account range", P_STRING, P_GLOBAL, &Globals.szNonUnixAccountRange, handle_non_unix_account_range, NULL, FLAG_ADVANCED}, - {"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.bAlgorithmicRidBase, NULL, NULL, FLAG_ADVANCED}, - {"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED}, - {"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED}, - {"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_HIDE}, - {"guest account", P_STRING, P_GLOBAL, &Globals.szGuestaccount, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, + {"security", P_ENUM, P_GLOBAL, &Globals.security, NULL, enum_security, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"auth methods", P_LIST, P_GLOBAL, &Globals.AuthMethods, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, + {"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"hosts equiv", P_STRING, P_GLOBAL, &Globals.szHostsEquiv, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"min passwd length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"min password length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"map to guest", P_ENUM, P_GLOBAL, &Globals.map_to_guest, NULL, enum_map_to_guest, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"passdb backend", P_LIST, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"sam backend", P_LIST, P_GLOBAL, &Globals.szSamBackend, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"non unix account range", P_STRING, P_GLOBAL, &Globals.szNonUnixAccountRange, handle_non_unix_account_range, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.bAlgorithmicRidBase, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_HIDE | FLAG_DEVELOPER}, + {"guest account", P_STRING, P_GLOBAL, &Globals.szGuestaccount, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, - {"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, FLAG_ADVANCED}, - {"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, FLAG_ADVANCED}, - {"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, FLAG_ADVANCED}, - {"passwd chat debug", P_BOOL, P_GLOBAL, &Globals.bPasswdChatDebug, NULL, NULL, FLAG_ADVANCED}, - {"username map", P_STRING, P_GLOBAL, &Globals.szUsernameMap, NULL, NULL, FLAG_ADVANCED}, - {"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL, NULL, FLAG_ADVANCED}, - {"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL, NULL, FLAG_ADVANCED}, - {"unix password sync", P_BOOL, P_GLOBAL, &Globals.bUnixPasswdSync, NULL, NULL, FLAG_ADVANCED}, - {"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, NULL, NULL, FLAG_ADVANCED}, - {"lanman auth", P_BOOL, P_GLOBAL, &Globals.bLanmanAuth, NULL, NULL, FLAG_ADVANCED}, - {"ntlm auth", P_BOOL, P_GLOBAL, &Globals.bNTLMAuth, NULL, NULL, FLAG_ADVANCED}, + {"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"passwd chat debug", P_BOOL, P_GLOBAL, &Globals.bPasswdChatDebug, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"username map", P_STRING, P_GLOBAL, &Globals.szUsernameMap, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER | FLAG_DEVELOPER}, + {"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"unix password sync", P_BOOL, P_GLOBAL, &Globals.bUnixPasswdSync, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"lanman auth", P_BOOL, P_GLOBAL, &Globals.bLanmanAuth, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ntlm auth", P_BOOL, P_GLOBAL, &Globals.bNTLMAuth, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"username", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE}, {"user", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_HIDE}, @@ -743,7 +743,7 @@ static struct parm_struct parm_table[] = { {"printer admin", P_LIST, P_LOCAL, &sDefault.printer_admin, NULL, NULL, FLAG_GLOBAL | FLAG_PRINT}, {"force user", P_STRING, P_LOCAL, &sDefault.force_user, NULL, NULL, FLAG_SHARE}, {"force group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_SHARE}, - {"group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_ADVANCED}, + {"group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"read only", P_BOOL, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE}, {"write ok", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, @@ -765,94 +765,94 @@ static struct parm_struct parm_table[] = { {"guest only", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_SHARE}, {"only guest", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_HIDE}, - {"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"public", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_HIDE}, {"only user", P_BOOL, P_LOCAL, &sDefault.bOnlyUser, NULL, NULL, FLAG_SHARE}, - {"hosts allow", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"hosts allow", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"allow hosts", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_HIDE}, - {"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"deny hosts", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_HIDE}, {"Logging Options", P_SEP, P_SEPARATOR}, - {"log level", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_ADVANCED}, + {"log level", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"debuglevel", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_HIDE}, - {"syslog", P_INTEGER, P_GLOBAL, &Globals.syslog, NULL, NULL, FLAG_ADVANCED}, - {"syslog only", P_BOOL, P_GLOBAL, &Globals.bSyslogOnly, NULL, NULL, FLAG_ADVANCED}, - {"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL, NULL, FLAG_ADVANCED}, + {"syslog", P_INTEGER, P_GLOBAL, &Globals.syslog, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"syslog only", P_BOOL, P_GLOBAL, &Globals.bSyslogOnly, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"max log size", P_INTEGER, P_GLOBAL, &Globals.max_log_size, NULL, NULL, FLAG_ADVANCED}, - {"timestamp logs", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, FLAG_ADVANCED}, - {"debug timestamp", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, 0}, - {"debug hires timestamp", P_BOOL, P_GLOBAL, &Globals.bDebugHiresTimestamp, NULL, NULL, 0}, - {"debug pid", P_BOOL, P_GLOBAL, &Globals.bDebugPid, NULL, NULL, 0}, - {"debug uid", P_BOOL, P_GLOBAL, &Globals.bDebugUid, NULL, NULL, 0}, + {"max log size", P_INTEGER, P_GLOBAL, &Globals.max_log_size, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"timestamp logs", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"debug timestamp", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, FLAG_DEVELOPER}, + {"debug hires timestamp", P_BOOL, P_GLOBAL, &Globals.bDebugHiresTimestamp, NULL, NULL, FLAG_DEVELOPER}, + {"debug pid", P_BOOL, P_GLOBAL, &Globals.bDebugPid, NULL, NULL, FLAG_DEVELOPER}, + {"debug uid", P_BOOL, P_GLOBAL, &Globals.bDebugUid, NULL, NULL, FLAG_DEVELOPER}, {"Protocol Options", P_SEP, P_SEPARATOR}, - {"smb ports", P_STRING, P_GLOBAL, &Globals.smb_ports, NULL, NULL, FLAG_ADVANCED}, - {"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_ADVANCED}, - {"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, 0}, - {"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, 0}, - {"min protocol", P_ENUM, P_GLOBAL, &Globals.minprotocol, NULL, enum_protocol, 0}, - {"unicode", P_BOOL, P_GLOBAL, &Globals.bUnicode, NULL, NULL, 0}, - {"read bmpx", P_BOOL, P_GLOBAL, &Globals.bReadbmpx, NULL, NULL, 0}, - {"read raw", P_BOOL, P_GLOBAL, &Globals.bReadRaw, NULL, NULL, 0}, - {"write raw", P_BOOL, P_GLOBAL, &Globals.bWriteRaw, NULL, NULL, 0}, - {"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, FLAG_ADVANCED}, + {"smb ports", P_STRING, P_GLOBAL, &Globals.smb_ports, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, FLAG_DEVELOPER}, + {"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_DEVELOPER}, + {"min protocol", P_ENUM, P_GLOBAL, &Globals.minprotocol, NULL, enum_protocol, FLAG_DEVELOPER}, + {"unicode", P_BOOL, P_GLOBAL, &Globals.bUnicode, NULL, NULL, FLAG_DEVELOPER}, + {"read bmpx", P_BOOL, P_GLOBAL, &Globals.bReadbmpx, NULL, NULL, FLAG_DEVELOPER}, + {"read raw", P_BOOL, P_GLOBAL, &Globals.bReadRaw, NULL, NULL, FLAG_DEVELOPER}, + {"write raw", P_BOOL, P_GLOBAL, &Globals.bWriteRaw, NULL, NULL, FLAG_DEVELOPER}, + {"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, FLAG_ADVANCED}, + {"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE | FLAG_ADVANCED | FLAG_WIZARD}, - {"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, FLAG_ADVANCED}, - {"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, 0}, - {"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as, 0}, - {"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, FLAG_ADVANCED}, - {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, FLAG_ADVANCED}, + {"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, FLAG_DEVELOPER}, + {"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as, FLAG_DEVELOPER}, + {"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, - {"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, FLAG_ADVANCED}, - {"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, FLAG_ADVANCED}, - {"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, FLAG_ADVANCED}, - {"time server", P_BOOL, P_GLOBAL, &Globals.bTimeServer, NULL, NULL, FLAG_ADVANCED}, - {"unix extensions", P_BOOL, P_GLOBAL, &Globals.bUnixExtensions, NULL, NULL, FLAG_ADVANCED}, - {"use spnego", P_BOOL, P_GLOBAL, &Globals.bUseSpnego, NULL, NULL, 0}, + {"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"time server", P_BOOL, P_GLOBAL, &Globals.bTimeServer, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"unix extensions", P_BOOL, P_GLOBAL, &Globals.bUnixExtensions, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"use spnego", P_BOOL, P_GLOBAL, &Globals.bUseSpnego, NULL, NULL, FLAG_DEVELOPER}, {"Tuning Options", P_SEP, P_SEPARATOR}, {"block size", P_INTEGER, P_LOCAL, &sDefault.iBlock_size, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, - {"change notify timeout", P_INTEGER, P_GLOBAL, &Globals.change_notify_timeout, NULL, NULL, 0}, - {"deadtime", P_INTEGER, P_GLOBAL, &Globals.deadtime, NULL, NULL, 0}, - {"getwd cache", P_BOOL, P_GLOBAL, &use_getwd_cache, NULL, NULL, 0}, - {"keepalive", P_INTEGER, P_GLOBAL, &keepalive, NULL, NULL, FLAG_ADVANCED}, + {"change notify timeout", P_INTEGER, P_GLOBAL, &Globals.change_notify_timeout, NULL, NULL, FLAG_DEVELOPER}, + {"deadtime", P_INTEGER, P_GLOBAL, &Globals.deadtime, NULL, NULL, FLAG_DEVELOPER}, + {"getwd cache", P_BOOL, P_GLOBAL, &use_getwd_cache, NULL, NULL, FLAG_DEVELOPER}, + {"keepalive", P_INTEGER, P_GLOBAL, &keepalive, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"lpq cache time", P_INTEGER, P_GLOBAL, &Globals.lpqcachetime, NULL, NULL, 0}, - {"max smbd processes", P_INTEGER, P_GLOBAL, &Globals.iMaxSmbdProcesses, NULL, NULL, 0}, + {"lpq cache time", P_INTEGER, P_GLOBAL, &Globals.lpqcachetime, NULL, NULL, FLAG_DEVELOPER}, + {"max smbd processes", P_INTEGER, P_GLOBAL, &Globals.iMaxSmbdProcesses, NULL, NULL, FLAG_DEVELOPER}, {"max connections", P_INTEGER, P_LOCAL, &sDefault.iMaxConnections, NULL, NULL, FLAG_SHARE}, - {"paranoid server security", P_BOOL, P_GLOBAL, &Globals.paranoid_server_security, NULL, NULL, 0}, - {"max disk size", P_INTEGER, P_GLOBAL, &Globals.maxdisksize, NULL, NULL, 0}, - {"max open files", P_INTEGER, P_GLOBAL, &Globals.max_open_files, NULL, NULL, FLAG_ADVANCED}, + {"paranoid server security", P_BOOL, P_GLOBAL, &Globals.paranoid_server_security, NULL, NULL, FLAG_DEVELOPER}, + {"max disk size", P_INTEGER, P_GLOBAL, &Globals.maxdisksize, NULL, NULL, FLAG_DEVELOPER}, + {"max open files", P_INTEGER, P_GLOBAL, &Globals.max_open_files, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"min print space", P_INTEGER, P_LOCAL, &sDefault.iMinPrintSpace, NULL, NULL, FLAG_PRINT}, - {"read size", P_INTEGER, P_GLOBAL, &Globals.ReadSize, NULL, NULL, 0}, + {"read size", P_INTEGER, P_GLOBAL, &Globals.ReadSize, NULL, NULL, FLAG_DEVELOPER}, - {"socket options", P_GSTRING, P_GLOBAL, user_socket_options, NULL, NULL, 0}, - {"stat cache size", P_INTEGER, P_GLOBAL, &Globals.stat_cache_size, NULL, NULL, 0}, + {"socket options", P_GSTRING, P_GLOBAL, user_socket_options, NULL, NULL, FLAG_DEVELOPER}, + {"stat cache size", P_INTEGER, P_GLOBAL, &Globals.stat_cache_size, NULL, NULL, FLAG_DEVELOPER}, {"strict allocate", P_BOOL, P_LOCAL, &sDefault.bStrictAllocate, NULL, NULL, FLAG_SHARE}, {"strict sync", P_BOOL, P_LOCAL, &sDefault.bStrictSync, NULL, NULL, FLAG_SHARE}, {"sync always", P_BOOL, P_LOCAL, &sDefault.bSyncAlways, NULL, NULL, FLAG_SHARE}, - {"use mmap", P_BOOL, P_GLOBAL, &Globals.bUseMmap, NULL, NULL, 0}, - {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, FLAG_ADVANCED}, + {"use mmap", P_BOOL, P_GLOBAL, &Globals.bUseMmap, NULL, NULL, FLAG_DEVELOPER}, + {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"write cache size", P_INTEGER, P_LOCAL, &sDefault.iWriteCacheSize, NULL, NULL, FLAG_SHARE}, - {"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, FLAG_ADVANCED}, + {"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Printing Options", P_SEP, P_SEPARATOR}, {"total print jobs", P_INTEGER, P_GLOBAL, &Globals.iTotalPrintJobs, NULL, NULL, FLAG_PRINT}, {"max print jobs", P_INTEGER, P_LOCAL, &sDefault.iMaxPrintJobs, NULL, NULL, FLAG_PRINT}, {"load printers", P_BOOL, P_GLOBAL, &Globals.bLoadPrinters, NULL, NULL, FLAG_PRINT}, - {"printcap name", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_PRINT}, - {"printcap", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, 0}, + {"printcap name", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_PRINT | FLAG_DEVELOPER}, + {"printcap", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_HIDE}, {"printable", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_PRINT}, {"print ok", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_HIDE}, {"postscript", P_BOOL, P_LOCAL, &sDefault.bPostscript, NULL, NULL, FLAG_PRINT | FLAG_DEPRECATED}, @@ -866,11 +866,11 @@ static struct parm_struct parm_table[] = { {"queuepause command", P_STRING, P_LOCAL, &sDefault.szQueuepausecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL}, {"queueresume command", P_STRING, P_LOCAL, &sDefault.szQueueresumecommand, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL}, - {"enumports command", P_STRING, P_GLOBAL, &Globals.szEnumPortsCommand, NULL, NULL, FLAG_ADVANCED}, - {"addprinter command", P_STRING, P_GLOBAL, &Globals.szAddPrinterCommand, NULL, NULL, FLAG_ADVANCED}, - {"deleteprinter command", P_STRING, P_GLOBAL, &Globals.szDeletePrinterCommand, NULL, NULL, FLAG_ADVANCED}, - {"show add printer wizard", P_BOOL, P_GLOBAL, &Globals.bMsAddPrinterWizard, NULL, NULL, FLAG_ADVANCED}, - {"os2 driver map", P_STRING, P_GLOBAL, &Globals.szOs2DriverMap, NULL, NULL, FLAG_ADVANCED}, + {"enumports command", P_STRING, P_GLOBAL, &Globals.szEnumPortsCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"addprinter command", P_STRING, P_GLOBAL, &Globals.szAddPrinterCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"deleteprinter command", P_STRING, P_GLOBAL, &Globals.szDeletePrinterCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"show add printer wizard", P_BOOL, P_GLOBAL, &Globals.bMsAddPrinterWizard, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"os2 driver map", P_STRING, P_GLOBAL, &Globals.szOs2DriverMap, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"printer name", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_PRINT}, {"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_HIDE}, @@ -881,10 +881,10 @@ static struct parm_struct parm_table[] = { {"printer driver location", P_STRING, P_LOCAL, &sDefault.szPrinterDriverLocation, NULL, NULL, FLAG_PRINT | FLAG_GLOBAL | FLAG_DEPRECATED}, {"Filename Handling", P_SEP, P_SEPARATOR}, - {"strip dot", P_BOOL, P_GLOBAL, &Globals.bStripDot, NULL, NULL, FLAG_ADVANCED}, - {"mangling method", P_STRING, P_GLOBAL, &Globals.szManglingMethod, NULL, NULL, FLAG_ADVANCED}, + {"strip dot", P_BOOL, P_GLOBAL, &Globals.bStripDot, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"mangling method", P_STRING, P_GLOBAL, &Globals.szManglingMethod, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"mangled stack", P_INTEGER, P_GLOBAL, &Globals.mangled_stack, NULL, NULL, FLAG_ADVANCED}, + {"mangled stack", P_INTEGER, P_GLOBAL, &Globals.mangled_stack, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"default case", P_ENUM, P_LOCAL, &sDefault.iDefaultCase, NULL, enum_case, FLAG_SHARE}, {"case sensitive", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"casesignames", P_BOOL, P_LOCAL, &sDefault.bCaseSensitive, NULL, NULL, FLAG_HIDE}, @@ -905,52 +905,52 @@ static struct parm_struct parm_table[] = { {"map archive", P_BOOL, P_LOCAL, &sDefault.bMap_archive, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"mangled names", P_BOOL, P_LOCAL, &sDefault.bMangledNames, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"mangled map", P_STRING, P_LOCAL, &sDefault.szMangledMap, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, - {"stat cache", P_BOOL, P_GLOBAL, &Globals.bStatCache, NULL, NULL, 0}, + {"stat cache", P_BOOL, P_GLOBAL, &Globals.bStatCache, NULL, NULL, FLAG_DEVELOPER}, {"Domain Options", P_SEP, P_SEPARATOR}, - {"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, {"Logon Options", P_SEP, P_SEPARATOR}, - {"add user script", P_STRING, P_GLOBAL, &Globals.szAddUserScript, NULL, NULL, FLAG_ADVANCED}, - {"delete user script", P_STRING, P_GLOBAL, &Globals.szDelUserScript, NULL, NULL, FLAG_ADVANCED}, - {"add group script", P_STRING, P_GLOBAL, &Globals.szAddGroupScript, NULL, NULL, FLAG_ADVANCED}, - {"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, FLAG_ADVANCED}, - {"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, FLAG_ADVANCED}, - {"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, FLAG_ADVANCED}, - {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, FLAG_ADVANCED}, - {"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, FLAG_ADVANCED}, - {"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, FLAG_ADVANCED}, - - {"logon script", P_STRING, P_GLOBAL, &Globals.szLogonScript, NULL, NULL, FLAG_ADVANCED}, - {"logon path", P_STRING, P_GLOBAL, &Globals.szLogonPath, NULL, NULL, FLAG_ADVANCED}, - {"logon drive", P_STRING, P_GLOBAL, &Globals.szLogonDrive, NULL, NULL, FLAG_ADVANCED}, - {"logon home", P_STRING, P_GLOBAL, &Globals.szLogonHome, NULL, NULL, FLAG_ADVANCED}, - {"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL, NULL, FLAG_ADVANCED}, + {"add user script", P_STRING, P_GLOBAL, &Globals.szAddUserScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"delete user script", P_STRING, P_GLOBAL, &Globals.szDelUserScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"add group script", P_STRING, P_GLOBAL, &Globals.szAddGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + + {"logon script", P_STRING, P_GLOBAL, &Globals.szLogonScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"logon path", P_STRING, P_GLOBAL, &Globals.szLogonPath, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"logon drive", P_STRING, P_GLOBAL, &Globals.szLogonDrive, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"logon home", P_STRING, P_GLOBAL, &Globals.szLogonHome, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Browse Options", P_SEP, P_SEPARATOR}, - {"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, - {"lm announce", P_ENUM, P_GLOBAL, &Globals.lm_announce, NULL, enum_bool_auto, FLAG_ADVANCED}, - {"lm interval", P_INTEGER, P_GLOBAL, &Globals.lm_interval, NULL, NULL, FLAG_ADVANCED}, - {"preferred master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, + {"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, + {"lm announce", P_ENUM, P_GLOBAL, &Globals.lm_announce, NULL, enum_bool_auto, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"lm interval", P_INTEGER, P_GLOBAL, &Globals.lm_interval, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"preferred master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, {"prefered master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_HIDE}, - {"local master", P_BOOL, P_GLOBAL, &Globals.bLocalMaster, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, - {"domain master", P_ENUM, P_GLOBAL, &Globals.bDomainMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, - {"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL, NULL, FLAG_ADVANCED}, - {"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, + {"local master", P_BOOL, P_GLOBAL, &Globals.bLocalMaster, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, + {"domain master", P_ENUM, P_GLOBAL, &Globals.bDomainMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED | FLAG_DEVELOPER}, + {"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER}, {"browsable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_HIDE}, - {"enhanced browsing", P_BOOL, P_GLOBAL, &Globals.enhanced_browsing, NULL, NULL}, + {"enhanced browsing", P_BOOL, P_GLOBAL, &Globals.enhanced_browsing, NULL, NULL, FLAG_DEVELOPER | FLAG_ADVANCED}, {"WINS Options", P_SEP, P_SEPARATOR}, - {"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, FLAG_ADVANCED}, - {"wins proxy", P_BOOL, P_GLOBAL, &Globals.bWINSproxy, NULL, NULL, FLAG_ADVANCED}, + {"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"wins proxy", P_BOOL, P_GLOBAL, &Globals.bWINSproxy, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"wins server", P_LIST, P_GLOBAL, &Globals.szWINSservers, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"wins support", P_BOOL, P_GLOBAL, &Globals.bWINSsupport, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, - {"wins hook", P_STRING, P_GLOBAL, &Globals.szWINSHook, NULL, NULL, FLAG_ADVANCED}, - {"wins partners", P_STRING, P_GLOBAL, &Globals.szWINSPartners, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, + {"wins server", P_LIST, P_GLOBAL, &Globals.szWINSservers, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"wins support", P_BOOL, P_GLOBAL, &Globals.bWINSsupport, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, + {"wins hook", P_STRING, P_GLOBAL, &Globals.szWINSHook, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"wins partners", P_STRING, P_GLOBAL, &Globals.szWINSPartners, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD | FLAG_DEVELOPER}, {"Locking Options", P_SEP, P_SEPARATOR}, @@ -972,46 +972,46 @@ static struct parm_struct parm_table[] = { {"Ldap Options", P_SEP, P_SEPARATOR}, - {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED}, - {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED}, - {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED}, - {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, FLAG_ADVANCED}, - {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, FLAG_ADVANCED}, - {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, FLAG_ADVANCED}, + {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Miscellaneous Options", P_SEP, P_SEPARATOR}, - {"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, FLAG_ADVANCED}, - {"change share command", P_STRING, P_GLOBAL, &Globals.szChangeShareCommand, NULL, NULL, FLAG_ADVANCED}, - {"delete share command", P_STRING, P_GLOBAL, &Globals.szDeleteShareCommand, NULL, NULL, FLAG_ADVANCED}, + {"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"change share command", P_STRING, P_GLOBAL, &Globals.szChangeShareCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"delete share command", P_STRING, P_GLOBAL, &Globals.szDeleteShareCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"config file", P_STRING, P_GLOBAL, &Globals.szConfigFile, NULL, NULL, FLAG_HIDE}, - {"preload", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED}, - {"auto services", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED}, - {"lock dir", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, 0}, - {"lock directory", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, FLAG_ADVANCED}, - {"pid directory", P_STRING, P_GLOBAL, &Globals.szPidDir, NULL, NULL, FLAG_ADVANCED}, + {"preload", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"auto services", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"lock dir", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, FLAG_HIDE}, + {"lock directory", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"pid directory", P_STRING, P_GLOBAL, &Globals.szPidDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, #ifdef WITH_UTMP - {"utmp directory", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, FLAG_ADVANCED}, - {"wtmp directory", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, FLAG_ADVANCED}, - {"utmp", P_BOOL, P_GLOBAL, &Globals.bUtmp, NULL, NULL, FLAG_ADVANCED}, + {"utmp directory", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"wtmp directory", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"utmp", P_BOOL, P_GLOBAL, &Globals.bUtmp, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, #endif - {"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_ADVANCED}, - {"default", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, 0}, - {"message command", P_STRING, P_GLOBAL, &Globals.szMsgCommand, NULL, NULL, FLAG_ADVANCED}, - {"dfree command", P_STRING, P_GLOBAL, &Globals.szDfree, NULL, NULL, FLAG_ADVANCED}, - {"remote announce", P_STRING, P_GLOBAL, &Globals.szRemoteAnnounce, NULL, NULL, FLAG_ADVANCED}, - {"remote browse sync", P_STRING, P_GLOBAL, &Globals.szRemoteBrowseSync, NULL, NULL, FLAG_ADVANCED}, - {"socket address", P_STRING, P_GLOBAL, &Globals.szSocketAddress, NULL, NULL, 0}, - {"homedir map", P_STRING, P_GLOBAL, &Globals.szNISHomeMapName, NULL, NULL, FLAG_ADVANCED}, - {"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL, NULL, FLAG_ADVANCED}, - {"NIS homedir", P_BOOL, P_GLOBAL, &Globals.bNISHomeMap, NULL, NULL, FLAG_ADVANCED}, + {"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"default", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_DEVELOPER}, + {"message command", P_STRING, P_GLOBAL, &Globals.szMsgCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"dfree command", P_STRING, P_GLOBAL, &Globals.szDfree, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"remote announce", P_STRING, P_GLOBAL, &Globals.szRemoteAnnounce, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"remote browse sync", P_STRING, P_GLOBAL, &Globals.szRemoteBrowseSync, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"socket address", P_STRING, P_GLOBAL, &Globals.szSocketAddress, NULL, NULL, FLAG_DEVELOPER}, + {"homedir map", P_STRING, P_GLOBAL, &Globals.szNISHomeMapName, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"NIS homedir", P_BOOL, P_GLOBAL, &Globals.bNISHomeMap, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"-valid", P_BOOL, P_LOCAL, &sDefault.valid, NULL, NULL, FLAG_HIDE}, {"copy", P_STRING, P_LOCAL, &sDefault.szCopy, handle_copy, NULL, FLAG_HIDE}, {"include", P_STRING, P_LOCAL, &sDefault.szInclude, handle_include, NULL, FLAG_HIDE}, {"exec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, - {"preexec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_ADVANCED}, + {"preexec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"preexec close", P_BOOL, P_LOCAL, &sDefault.bPreexecClose, NULL, NULL, FLAG_SHARE}, {"postexec", P_STRING, P_LOCAL, &sDefault.szPostExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT}, @@ -1022,7 +1022,7 @@ static struct parm_struct parm_table[] = { {"volume", P_STRING, P_LOCAL, &sDefault.volume, NULL, NULL, FLAG_SHARE }, {"fstype", P_STRING, P_LOCAL, &sDefault.fstype, NULL, NULL, FLAG_SHARE}, {"set directory", P_BOOLREV, P_LOCAL, &sDefault.bNo_set_dir, NULL, NULL, FLAG_SHARE}, - {"source environment", P_STRING, P_GLOBAL, &Globals.szSourceEnv, handle_source_env, NULL, FLAG_ADVANCED}, + {"source environment", P_STRING, P_GLOBAL, &Globals.szSourceEnv, handle_source_env, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"wide links", P_BOOL, P_LOCAL, &sDefault.bWidelinks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"follow symlinks", P_BOOL, P_LOCAL, &sDefault.bSymlinks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"dont descend", P_STRING, P_LOCAL, &sDefault.szDontdescend, NULL, NULL, FLAG_SHARE}, @@ -1034,8 +1034,8 @@ static struct parm_struct parm_table[] = { {"dos filetime resolution", P_BOOL, P_LOCAL, &sDefault.bDosFiletimeResolution, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, {"fake directory create times", P_BOOL, P_LOCAL, &sDefault.bFakeDirCreateTimes, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL}, - {"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, FLAG_ADVANCED}, - {"hide local users", P_BOOL, P_GLOBAL, &Globals.bHideLocalUsers, NULL, NULL, FLAG_ADVANCED}, + {"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"hide local users", P_BOOL, P_GLOBAL, &Globals.bHideLocalUsers, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"VFS module options", P_SEP, P_SEPARATOR}, @@ -1045,19 +1045,19 @@ static struct parm_struct parm_table[] = { {"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE}, - {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED}, + {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Winbind options", P_SEP, P_SEPARATOR}, - {"winbind uid", P_STRING, P_GLOBAL, &Globals.szWinbindUID, handle_winbind_uid, NULL, FLAG_ADVANCED}, - {"winbind gid", P_STRING, P_GLOBAL, &Globals.szWinbindGID, handle_winbind_gid, NULL, FLAG_ADVANCED}, - {"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, FLAG_ADVANCED}, - {"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, FLAG_ADVANCED}, - {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, FLAG_ADVANCED}, - {"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, FLAG_ADVANCED}, - {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, FLAG_ADVANCED}, - {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, FLAG_ADVANCED}, - {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, FLAG_ADVANCED}, + {"winbind uid", P_STRING, P_GLOBAL, &Globals.szWinbindUID, handle_winbind_uid, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind gid", P_STRING, P_GLOBAL, &Globals.szWinbindGID, handle_winbind_gid, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0} }; -- cgit From ad5ab5f5832844dc6eff3f2c72d24eba5e8b4d29 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 00:45:39 +0000 Subject: Added autoconf detection for sendfile for Linux. lib/sendfile.c code still needs more work. Don't add --with-sendfile-support yet... Jeremy. (This used to be commit c6ece53ac2a7a6115ca1160cf02247d7cc0bbb95) --- source3/acconfig.h | 4 + source3/configure | 1801 +++++++++++++++++++++++-------------------- source3/configure.in | 72 ++ source3/include/config.h.in | 4 + 4 files changed, 1062 insertions(+), 819 deletions(-) diff --git a/source3/acconfig.h b/source3/acconfig.h index 11db920e26..141c59bfed 100644 --- a/source3/acconfig.h +++ b/source3/acconfig.h @@ -222,3 +222,7 @@ #endif #undef LDAP_SET_REBIND_PROC_ARGS +#undef HAVE_SENDFILE +#undef HAVE_SENDFILE64 +#undef LINUX_SENDFILE_API +#undef LINUX_BROKEN_SENDFILE_API diff --git a/source3/configure b/source3/configure index f2b63b75d7..8e4b1d2961 100755 --- a/source3/configure +++ b/source3/configure @@ -80,6 +80,8 @@ ac_help="$ac_help --with-spinlocks Use spin locks instead of fcntl locks (default=no) " ac_help="$ac_help --with-acl-support Include ACL support (default=no)" +ac_help="$ac_help + --with-sendfile-support Include sendfile support (default=no)" ac_help="$ac_help --with-winbind Build winbind (default, if supported by OS)" ac_help="$ac_help @@ -818,7 +820,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:822: checking for $ac_word" >&5 +echo "configure:824: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -848,7 +850,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:852: checking for $ac_word" >&5 +echo "configure:854: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -899,7 +901,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:903: checking for $ac_word" >&5 +echo "configure:905: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -931,7 +933,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:935: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:937: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -942,12 +944,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 946 "configure" +#line 948 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -973,12 +975,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:977: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:979: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:982: checking whether we are using GNU C" >&5 +echo "configure:984: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -987,7 +989,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:993: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1006,7 +1008,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1010: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1012: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1068,7 +1070,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1072: checking for a BSD compatible install" >&5 +echo "configure:1074: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1120,12 +1122,12 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in mawk gawk nawk awk +for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1129: checking for $ac_word" >&5 +echo "configure:1131: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1157,7 +1159,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1161: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1163: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1173,7 +1175,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1177: checking for POSIXized ISC" >&5 +echo "configure:1179: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1196,10 +1198,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1200: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1202: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1203: checking whether cc understands -c and -o together" >&5 +echo "configure:1205: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1211,16 +1213,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1215: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1218: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1226: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1254,20 +1256,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1258: checking that the C compiler understands volatile" >&5 +echo "configure:1260: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1316,7 +1318,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1320: checking host system type" >&5 +echo "configure:1322: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1337,7 +1339,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1341: checking target system type" >&5 +echo "configure:1343: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1355,7 +1357,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1359: checking build system type" >&5 +echo "configure:1361: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1389,7 +1391,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1393: checking config.cache system type" >&5 +echo "configure:1395: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1417,7 +1419,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1421: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1423: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1578,14 +1580,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1582: checking for LFS support" >&5 +echo "configure:1584: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1597,7 +1599,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1628,14 +1630,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1632: checking for LFS support" >&5 +echo "configure:1634: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1673,7 +1675,7 @@ main() { } EOF -if { (eval echo configure:1677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1706,14 +1708,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1710: checking for LFS support" >&5 +echo "configure:1712: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1725,7 +1727,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1755,21 +1757,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1759: checking for inline" >&5 +echo "configure:1761: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1775: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1795,7 +1797,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1799: checking how to run the C preprocessor" >&5 +echo "configure:1801: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1810,13 +1812,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1827,13 +1829,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1844,13 +1846,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1856: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1875,12 +1877,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1879: checking for ANSI C header files" >&5 +echo "configure:1881: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1888,7 +1890,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1892: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1894: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1905,7 +1907,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1923,7 +1925,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1944,7 +1946,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1955,7 +1957,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1983,12 +1985,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1987: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1989: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1996,7 +1998,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:2000: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2002: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2021,7 +2023,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2025: checking for opendir in -ldir" >&5 +echo "configure:2027: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2029,7 +2031,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2046: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2062,7 +2064,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2066: checking for opendir in -lx" >&5 +echo "configure:2068: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2070,7 +2072,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2104,12 +2106,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2108: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2110: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2118,7 +2120,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2139,12 +2141,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2143: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2145: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2160,7 +2162,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2166: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2184,17 +2186,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2188: checking for $ac_hdr" >&5 +echo "configure:2190: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2198: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2224,17 +2226,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2228: checking for $ac_hdr" >&5 +echo "configure:2230: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2264,17 +2266,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2268: checking for $ac_hdr" >&5 +echo "configure:2270: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2278: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2280: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2304,17 +2306,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2308: checking for $ac_hdr" >&5 +echo "configure:2310: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2318: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2344,17 +2346,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2348: checking for $ac_hdr" >&5 +echo "configure:2350: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2358: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2360: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2384,17 +2386,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2388: checking for $ac_hdr" >&5 +echo "configure:2390: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2398: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2400: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2424,17 +2426,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2428: checking for $ac_hdr" >&5 +echo "configure:2430: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2438: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2464,17 +2466,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2468: checking for $ac_hdr" >&5 +echo "configure:2470: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2478: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2480: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2504,17 +2506,17 @@ for ac_hdr in sys/syslog.h syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2508: checking for $ac_hdr" >&5 +echo "configure:2510: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2518: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2548,14 +2550,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2559: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2577,17 +2579,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2581: checking for $ac_hdr" >&5 +echo "configure:2583: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2591: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2593: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2617,17 +2619,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2621: checking for $ac_hdr" >&5 +echo "configure:2623: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2631: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2633: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2657,17 +2659,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2661: checking for $ac_hdr" >&5 +echo "configure:2663: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2671: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2673: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2697,17 +2699,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2701: checking for $ac_hdr" >&5 +echo "configure:2703: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2711: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2713: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2737,17 +2739,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2741: checking for $ac_hdr" >&5 +echo "configure:2743: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2753: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2779,17 +2781,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2783: checking for $ac_hdr" >&5 +echo "configure:2785: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2821,17 +2823,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2825: checking for $ac_hdr" >&5 +echo "configure:2827: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2863,17 +2865,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2867: checking for $ac_hdr" >&5 +echo "configure:2869: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2877: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2879: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2901,7 +2903,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2905: checking size of int" >&5 +echo "configure:2907: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2909,19 +2911,18 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(int)); - exit(0); + return(0); } EOF -if { (eval echo configure:2925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2941,7 +2942,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2945: checking size of long" >&5 +echo "configure:2946: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2949,16 +2950,15 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(long)); - exit(0); + return(0); } EOF if { (eval echo configure:2965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2992,16 +2992,15 @@ else #line 2993 "configure" #include "confdefs.h" #include -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(short)); - exit(0); + return(0); } EOF -if { (eval echo configure:3005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3022,12 +3021,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3026: checking for working const" >&5 +echo "configure:3025: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3079: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3097,21 +3096,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3101: checking for inline" >&5 +echo "configure:3100: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3114: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3137,14 +3136,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3141: checking whether byte ordering is bigendian" >&5 +echo "configure:3140: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3155,11 +3154,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3159: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3170,7 +3169,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3174: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3173: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3190,7 +3189,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3227,14 +3226,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3231: checking whether char is unsigned" >&5 +echo "configure:3230: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3291,12 +3290,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3295: checking return type of signal handlers" >&5 +echo "configure:3294: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3313,7 +3312,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3316: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3332,12 +3331,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3336: checking for uid_t in sys/types.h" >&5 +echo "configure:3335: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3366,12 +3365,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3370: checking for mode_t" >&5 +echo "configure:3369: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3399,12 +3398,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3403: checking for off_t" >&5 +echo "configure:3402: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3432,12 +3431,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3436: checking for size_t" >&5 +echo "configure:3435: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3465,12 +3464,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3469: checking for pid_t" >&5 +echo "configure:3468: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3498,12 +3497,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3502: checking for st_rdev in struct stat" >&5 +echo "configure:3501: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3511,7 +3510,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3532,12 +3531,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3536: checking for d_off in dirent" >&5 +echo "configure:3535: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3547,7 +3546,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3551: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3550: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3568,12 +3567,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3572: checking for ino_t" >&5 +echo "configure:3571: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3601,12 +3600,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3605: checking for loff_t" >&5 +echo "configure:3604: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3634,12 +3633,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3638: checking for offset_t" >&5 +echo "configure:3637: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3667,12 +3666,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3671: checking for ssize_t" >&5 +echo "configure:3670: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3700,12 +3699,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3704: checking for wchar_t" >&5 +echo "configure:3703: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3747,7 +3746,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3751: checking for $ac_word" >&5 +echo "configure:3750: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3796,12 +3795,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3800: checking for $ac_func" >&5 +echo "configure:3799: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3827: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3850,7 +3849,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3854: checking for dlopen in -ldl" >&5 +echo "configure:3853: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3858,7 +3857,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3899,13 +3898,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3903: checking for immediate structures" >&5 +echo "configure:3902: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3923,7 +3922,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3946,13 +3945,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3950: checking for unix domain sockets" >&5 +echo "configure:3949: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3967,7 +3966,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3989,13 +3988,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3993: checking for socklen_t type" >&5 +echo "configure:3992: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4008,7 +4007,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4012: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4029,13 +4028,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4033: checking for sig_atomic_t type" >&5 +echo "configure:4032: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4048,7 +4047,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4052: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4071,20 +4070,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4075: checking for errno declaration" >&5 +echo "configure:4074: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4087: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4106,20 +4105,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4110: checking for setresuid declaration" >&5 +echo "configure:4109: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4123: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4141,20 +4140,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4145: checking for setresgid declaration" >&5 +echo "configure:4144: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4176,20 +4175,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4180: checking for asprintf declaration" >&5 +echo "configure:4179: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4211,20 +4210,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4215: checking for vasprintf declaration" >&5 +echo "configure:4214: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4227: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4246,20 +4245,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4250: checking for vsnprintf declaration" >&5 +echo "configure:4249: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4281,20 +4280,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4285: checking for snprintf declaration" >&5 +echo "configure:4284: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4298: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4297: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4318,7 +4317,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4322: checking for real setresuid" >&5 +echo "configure:4321: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4327,12 +4326,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4357,7 +4356,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4361: checking for real setresgid" >&5 +echo "configure:4360: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4366,13 +4365,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4395,7 +4394,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4399: checking for 8-bit clean memcmp" >&5 +echo "configure:4398: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4403,7 +4402,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4436,12 +4435,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4440: checking for $ac_func" >&5 +echo "configure:4439: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4490,7 +4489,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4494: checking for crypt in -lcrypt" >&5 +echo "configure:4493: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4498,7 +4497,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4542,7 +4541,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4546: checking whether to use readline" >&5 +echo "configure:4545: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4554,17 +4553,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4558: checking for $ac_hdr" >&5 +echo "configure:4557: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4568: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4567: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4594,17 +4593,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4598: checking for $ac_hdr" >&5 +echo "configure:4597: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4608: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4635,17 +4634,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4639: checking for $ac_hdr" >&5 +echo "configure:4638: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4649: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4648: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4668,7 +4667,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4672: checking for tgetent in -l${termlib}" >&5 +echo "configure:4671: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4676,7 +4675,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4709,7 +4708,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4713: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4712: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4717,7 +4716,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4779,17 +4778,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4783: checking for $ac_hdr" >&5 +echo "configure:4782: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4793: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4792: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4819,17 +4818,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4823: checking for $ac_hdr" >&5 +echo "configure:4822: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4860,17 +4859,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4864: checking for $ac_hdr" >&5 +echo "configure:4863: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4873: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4893,7 +4892,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4897: checking for tgetent in -l${termlib}" >&5 +echo "configure:4896: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4901,7 +4900,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4934,7 +4933,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4938: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4937: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4942,7 +4941,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5003,7 +5002,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5007: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5006: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5011,7 +5010,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5055,12 +5054,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5059: checking for $ac_func" >&5 +echo "configure:5058: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5111,7 +5110,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5115: checking for printf in -lnsl_s" >&5 +echo "configure:5114: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5119,7 +5118,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5161,7 +5160,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5165: checking for printf in -lnsl" >&5 +echo "configure:5164: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5169,7 +5168,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5211,7 +5210,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5215: checking for connect in -lsocket" >&5 +echo "configure:5214: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5219,7 +5218,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5261,7 +5260,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5265: checking for connect in -linet" >&5 +echo "configure:5264: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5269,7 +5268,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5324,12 +5323,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5328: checking for $ac_func" >&5 +echo "configure:5327: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5378,7 +5377,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5382: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5381: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5386,7 +5385,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5427,12 +5426,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5431: checking for $ac_func" >&5 +echo "configure:5430: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5488,12 +5487,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5492: checking for $ac_func" >&5 +echo "configure:5491: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5543,12 +5542,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5547: checking for $ac_func" >&5 +echo "configure:5546: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5598,12 +5597,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5602: checking for $ac_func" >&5 +echo "configure:5601: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5653,12 +5652,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5657: checking for $ac_func" >&5 +echo "configure:5656: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5708,12 +5707,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5712: checking for $ac_func" >&5 +echo "configure:5711: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5763,12 +5762,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5767: checking for $ac_func" >&5 +echo "configure:5766: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5794: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5818,12 +5817,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5822: checking for $ac_func" >&5 +echo "configure:5821: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5873,12 +5872,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5877: checking for $ac_func" >&5 +echo "configure:5876: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5904: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5928,12 +5927,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5932: checking for $ac_func" >&5 +echo "configure:5931: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5983,12 +5982,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5987: checking for $ac_func" >&5 +echo "configure:5986: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6039,12 +6038,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6043: checking for $ac_func" >&5 +echo "configure:6042: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6096,12 +6095,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6100: checking for $ac_func" >&5 +echo "configure:6099: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6152,12 +6151,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6156: checking for $ac_func" >&5 +echo "configure:6155: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6207,12 +6206,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6211: checking for $ac_func" >&5 +echo "configure:6210: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6262,12 +6261,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6266: checking for $ac_func" >&5 +echo "configure:6265: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6317,12 +6316,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6321: checking for $ac_func" >&5 +echo "configure:6320: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6372,12 +6371,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6376: checking for $ac_func" >&5 +echo "configure:6375: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6427,12 +6426,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6431: checking for $ac_func" >&5 +echo "configure:6430: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6482,12 +6481,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6486: checking for $ac_func" >&5 +echo "configure:6485: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6537,12 +6536,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6541: checking for $ac_func" >&5 +echo "configure:6540: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6592,12 +6591,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6596: checking for $ac_func" >&5 +echo "configure:6595: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6647,12 +6646,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6651: checking for $ac_func" >&5 +echo "configure:6650: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6702,12 +6701,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6706: checking for $ac_func" >&5 +echo "configure:6705: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6757,12 +6756,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6761: checking for $ac_func" >&5 +echo "configure:6760: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6812,12 +6811,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6816: checking for $ac_func" >&5 +echo "configure:6815: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6867,12 +6866,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6871: checking for $ac_func" >&5 +echo "configure:6870: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6926,9 +6925,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6930: checking for stat64 in " >&5 +echo "configure:6929: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6959,9 +6958,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6963: checking for lstat64 in " >&5 +echo "configure:6962: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6992,9 +6991,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6996: checking for fstat64 in " >&5 +echo "configure:6995: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7026,7 +7025,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7030: checking for dn_expand in -lresolv" >&5 +echo "configure:7029: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7034,7 +7033,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7083,12 +7082,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7087: checking for $ac_func" >&5 +echo "configure:7086: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7136,7 +7135,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7140: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7139: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7144,7 +7143,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7185,12 +7184,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7189: checking for $ac_func" >&5 +echo "configure:7188: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7244,12 +7243,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7248: checking for $ac_func" >&5 +echo "configure:7247: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7297,7 +7296,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7301: checking for putprpwnam in -lsec" >&5 +echo "configure:7300: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7305,7 +7304,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7346,12 +7345,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7350: checking for $ac_func" >&5 +echo "configure:7349: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7406,12 +7405,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7410: checking for $ac_func" >&5 +echo "configure:7409: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7459,7 +7458,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7463: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7462: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7467,7 +7466,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7508,12 +7507,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7512: checking for $ac_func" >&5 +echo "configure:7511: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7567,12 +7566,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7571: checking for $ac_func" >&5 +echo "configure:7570: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7620,7 +7619,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7624: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7623: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7628,7 +7627,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7642: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7669,12 +7668,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7673: checking for $ac_func" >&5 +echo "configure:7672: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7700: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7730,12 +7729,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7734: checking for $ac_func" >&5 +echo "configure:7733: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7783,7 +7782,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7787: checking for getspnam in -lgen" >&5 +echo "configure:7786: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7791,7 +7790,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7832,12 +7831,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7836: checking for $ac_func" >&5 +echo "configure:7835: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7892,12 +7891,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7896: checking for $ac_func" >&5 +echo "configure:7895: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7945,7 +7944,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7949: checking for getspnam in -lsecurity" >&5 +echo "configure:7948: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7953,7 +7952,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7994,12 +7993,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7998: checking for $ac_func" >&5 +echo "configure:7997: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8053,12 +8052,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8057: checking for $ac_func" >&5 +echo "configure:8056: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8106,7 +8105,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8110: checking for getspnam in -lsec" >&5 +echo "configure:8109: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8114,7 +8113,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8155,12 +8154,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8159: checking for $ac_func" >&5 +echo "configure:8158: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8215,12 +8214,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8219: checking for $ac_func" >&5 +echo "configure:8218: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8268,7 +8267,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8272: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8271: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8276,7 +8275,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8317,12 +8316,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8321: checking for $ac_func" >&5 +echo "configure:8320: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8376,12 +8375,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8380: checking for $ac_func" >&5 +echo "configure:8379: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8429,7 +8428,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8433: checking for bigcrypt in -lsec" >&5 +echo "configure:8432: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8437,7 +8436,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8478,12 +8477,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8482: checking for $ac_func" >&5 +echo "configure:8481: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8538,12 +8537,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8542: checking for $ac_func" >&5 +echo "configure:8541: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8591,7 +8590,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8595: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8594: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8599,7 +8598,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8640,12 +8639,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8644: checking for $ac_func" >&5 +echo "configure:8643: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8699,12 +8698,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8703: checking for $ac_func" >&5 +echo "configure:8702: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8752,7 +8751,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8756: checking for getprpwnam in -lsec" >&5 +echo "configure:8755: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8760,7 +8759,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8801,12 +8800,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8805: checking for $ac_func" >&5 +echo "configure:8804: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8873,7 +8872,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8877: checking ability to build shared libraries" >&5 +echo "configure:8876: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9033,7 +9032,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9037: checking for $ac_word" >&5 +echo "configure:9036: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9090,17 +9089,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9094: checking linker flags for shared libraries" >&5 +echo "configure:9093: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9097: checking compiler flags for position-independent code" >&5 +echo "configure:9096: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9104: checking whether building shared libraries actually works" >&5 +echo "configure:9103: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9131,7 +9130,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9135: checking for long long" >&5 +echo "configure:9134: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9140,12 +9139,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9172,20 +9171,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9176: checking for LL suffix on long long integers" >&5 +echo "configure:9175: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9207,7 +9206,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9211: checking for 64 bit off_t" >&5 +echo "configure:9210: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9216,13 +9215,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9245,7 +9244,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9249: checking for off64_t" >&5 +echo "configure:9248: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9254,7 +9253,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9287,7 +9286,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9291: checking for 64 bit ino_t" >&5 +echo "configure:9290: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9296,13 +9295,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9325,7 +9324,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9329: checking for ino64_t" >&5 +echo "configure:9328: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9334,7 +9333,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9367,7 +9366,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9371: checking for dev64_t" >&5 +echo "configure:9370: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9376,7 +9375,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9409,13 +9408,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9413: checking for struct dirent64" >&5 +echo "configure:9412: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9430: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9448,7 +9447,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9452: checking for major macro" >&5 +echo "configure:9451: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9457,7 +9456,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9489,7 +9488,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9493: checking for minor macro" >&5 +echo "configure:9492: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9498,7 +9497,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9530,7 +9529,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9534: checking for unsigned char" >&5 +echo "configure:9533: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9539,12 +9538,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9567,13 +9566,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9571: checking for sin_len in sock" >&5 +echo "configure:9570: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9582,7 +9581,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9586: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9603,13 +9602,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9607: checking whether seekdir returns void" >&5 +echo "configure:9606: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9618,7 +9617,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9622: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9639,20 +9638,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9643: checking for __FILE__ macro" >&5 +echo "configure:9642: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9656: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9655: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9673,20 +9672,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9677: checking for __FUNCTION__ macro" >&5 +echo "configure:9676: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9689: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9707,7 +9706,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9711: checking if gettimeofday takes tz argument" >&5 +echo "configure:9710: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9716,14 +9715,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9746,13 +9745,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9750: checking for __va_copy" >&5 +echo "configure:9749: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9760,7 +9759,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9781,7 +9780,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9785: checking for C99 vsnprintf" >&5 +echo "configure:9784: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9790,7 +9789,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9817,7 +9816,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9840,7 +9839,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9844: checking for broken readdir" >&5 +echo "configure:9843: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9849,7 +9848,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9857,7 +9856,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9880,13 +9879,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9884: checking for utimbuf" >&5 +echo "configure:9883: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9894,7 +9893,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9898: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9897: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9918,12 +9917,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9922: checking for $ac_func" >&5 +echo "configure:9921: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9972,13 +9971,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9976: checking for ut_name in utmp" >&5 +echo "configure:9975: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9986,7 +9985,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9990: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9989: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10007,13 +10006,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10011: checking for ut_user in utmp" >&5 +echo "configure:10010: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10021,7 +10020,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10024: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10042,13 +10041,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10046: checking for ut_id in utmp" >&5 +echo "configure:10045: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10056,7 +10055,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10059: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10077,13 +10076,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10081: checking for ut_host in utmp" >&5 +echo "configure:10080: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10091,7 +10090,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10095: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10094: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10112,13 +10111,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10116: checking for ut_time in utmp" >&5 +echo "configure:10115: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10126,7 +10125,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10129: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10147,13 +10146,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10151: checking for ut_tv in utmp" >&5 +echo "configure:10150: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10161,7 +10160,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10165: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10182,13 +10181,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10186: checking for ut_type in utmp" >&5 +echo "configure:10185: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10196,7 +10195,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10199: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10217,13 +10216,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10221: checking for ut_pid in utmp" >&5 +echo "configure:10220: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10231,7 +10230,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10235: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10234: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10252,13 +10251,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10256: checking for ut_exit in utmp" >&5 +echo "configure:10255: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10266,7 +10265,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10270: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10287,13 +10286,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10291: checking for ut_addr in utmp" >&5 +echo "configure:10290: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10301,7 +10300,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10305: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10323,13 +10322,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10327: checking whether pututline returns pointer" >&5 +echo "configure:10326: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10337,7 +10336,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10359,13 +10358,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10363: checking for ut_syslen in utmpx" >&5 +echo "configure:10362: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10373,7 +10372,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10377: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10397,7 +10396,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10401: checking whether to use libiconv" >&5 +echo "configure:10400: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10410,7 +10409,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10414: checking for iconv_open in -liconv" >&5 +echo "configure:10413: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10418,7 +10417,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10472,7 +10471,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10476: checking for working iconv" >&5 +echo "configure:10475: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10481,7 +10480,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10492,7 +10491,7 @@ main() { } EOF -if { (eval echo configure:10496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10516,7 +10515,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10520: checking for Linux kernel oplocks" >&5 +echo "configure:10519: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10525,7 +10524,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10539,7 +10538,7 @@ main() { } EOF -if { (eval echo configure:10543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10562,7 +10561,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10566: checking for kernel change notify support" >&5 +echo "configure:10565: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10571,7 +10570,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10585,7 +10584,7 @@ main() { } EOF -if { (eval echo configure:10589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10608,7 +10607,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10612: checking for kernel share modes" >&5 +echo "configure:10611: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10617,7 +10616,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10633,7 +10632,7 @@ main() { } EOF -if { (eval echo configure:10637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10659,13 +10658,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10663: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10662: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10673,7 +10672,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10677: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10676: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10694,7 +10693,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10698: checking for irix specific capabilities" >&5 +echo "configure:10697: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10703,7 +10702,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10718,7 +10717,7 @@ main() { } EOF -if { (eval echo configure:10722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10746,13 +10745,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10750: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10749: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10762,7 +10761,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10766: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10765: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10783,13 +10782,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10787: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10786: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10799,7 +10798,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10803: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10820,13 +10819,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10824: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10823: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10836,7 +10835,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10839: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10857,13 +10856,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10861: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10860: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10873,7 +10872,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10876: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10895,13 +10894,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10899: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10898: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10915,7 +10914,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10918: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10936,16 +10935,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10940: checking for test routines" >&5 +echo "configure:10939: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10959,7 +10958,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10963: checking for ftruncate extend" >&5 +echo "configure:10962: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10968,11 +10967,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10995,7 +10994,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10999: checking for AF_LOCAL socket support" >&5 +echo "configure:10998: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11004,11 +11003,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11032,7 +11031,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11036: checking for broken getgroups" >&5 +echo "configure:11035: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11041,11 +11040,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11068,7 +11067,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11072: checking whether getpass should be replaced" >&5 +echo "configure:11071: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11076,7 +11075,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11112,7 +11111,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11116: checking for broken inet_ntoa" >&5 +echo "configure:11115: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11121,7 +11120,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11135,7 +11134,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11158,7 +11157,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11162: checking for secure mkstemp" >&5 +echo "configure:11161: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11167,7 +11166,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11184,7 +11183,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11207,7 +11206,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11211: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11210: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11216,12 +11215,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11244,7 +11243,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11248: checking for root" >&5 +echo "configure:11247: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11253,11 +11252,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11260: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11285,7 +11284,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11289: checking for iface AIX" >&5 +echo "configure:11288: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11294,7 +11293,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11326,7 +11325,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11330: checking for iface ifconf" >&5 +echo "configure:11329: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11335,7 +11334,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11368,7 +11367,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11372: checking for iface ifreq" >&5 +echo "configure:11371: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11377,7 +11376,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11414,7 +11413,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11418: checking for setresuid" >&5 +echo "configure:11417: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11423,7 +11422,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11457,7 +11456,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11461: checking for setreuid" >&5 +echo "configure:11460: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11466,7 +11465,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11499,7 +11498,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11503: checking for seteuid" >&5 +echo "configure:11502: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11508,7 +11507,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11541,7 +11540,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11545: checking for setuidx" >&5 +echo "configure:11544: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11550,7 +11549,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11583,7 +11582,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11587: checking for working mmap" >&5 +echo "configure:11586: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11592,11 +11591,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11619,7 +11618,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11623: checking for ftruncate needs root" >&5 +echo "configure:11622: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11628,11 +11627,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11655,7 +11654,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11659: checking for fcntl locking" >&5 +echo "configure:11658: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11664,11 +11663,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11691,7 +11690,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11695: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11694: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11700,11 +11699,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11729,7 +11728,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11733: checking for 64 bit fcntl locking" >&5 +echo "configure:11732: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11738,7 +11737,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11787,13 +11786,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11791: checking for st_blocks in struct stat" >&5 +echo "configure:11790: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11802,7 +11801,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11823,13 +11822,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11827: checking for st_blksize in struct stat" >&5 +echo "configure:11826: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11838,7 +11837,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11861,13 +11860,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11865: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11864: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11884: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11904,13 +11903,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11908: checking for broken nisplus include files" >&5 +echo "configure:11907: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11920,7 +11919,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11944,7 +11943,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11948: checking whether to use smbwrapper" >&5 +echo "configure:11947: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11991,7 +11990,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11995: checking whether to use AFS clear-text auth" >&5 +echo "configure:11994: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12017,7 +12016,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12021: checking whether to use DFS clear-text auth" >&5 +echo "configure:12020: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12043,7 +12042,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12047: checking for /usr/kerberos" >&5 +echo "configure:12046: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12056,7 +12055,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12060: checking for kerberos 5 install path" >&5 +echo "configure:12059: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12085,17 +12084,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12089: checking for $ac_hdr" >&5 +echo "configure:12088: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12099: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12098: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12128,17 +12127,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12132: checking for $ac_hdr" >&5 +echo "configure:12131: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12142: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12168,7 +12167,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12172: checking for _et_list in -lcom_err" >&5 +echo "configure:12171: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12176,7 +12175,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12208,7 +12207,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12212: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12211: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12216,7 +12215,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12252,7 +12251,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12256: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12255: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12260,7 +12259,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12299,7 +12298,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12303: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12302: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12307,7 +12306,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12347,7 +12346,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12351: checking for ber_scanf in -llber" >&5 +echo "configure:12350: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12355,7 +12354,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12391,7 +12390,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12395: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12394: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12399,7 +12398,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12441,12 +12440,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12445: checking for $ac_func" >&5 +echo "configure:12444: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12494,13 +12493,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12498: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12497: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12509,7 +12508,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12512: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12531,7 +12530,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12535: checking whether to use AUTOMOUNT" >&5 +echo "configure:12534: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12556,7 +12555,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12560: checking whether to use SMBMOUNT" >&5 +echo "configure:12559: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12593,7 +12592,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12597: checking whether to use PAM" >&5 +echo "configure:12596: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12619,7 +12618,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12623: checking for pam_get_data in -lpam" >&5 +echo "configure:12622: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12627,7 +12626,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12665,7 +12664,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12669: checking whether to use pam_smbpass" >&5 +echo "configure:12668: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12703,12 +12702,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12707: checking for $ac_func" >&5 +echo "configure:12706: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12757,7 +12756,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12761: checking for crypt in -lcrypt" >&5 +echo "configure:12760: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12765,7 +12764,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12811,7 +12810,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12815: checking for a crypt that needs truncated salt" >&5 +echo "configure:12814: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12820,11 +12819,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12827: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12850,7 +12849,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12854: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12853: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12882,7 +12881,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12886: checking whether to use TDB SAM database" >&5 +echo "configure:12885: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12907,7 +12906,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12911: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12910: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12938,7 +12937,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12942: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12941: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12963,7 +12962,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12967: checking whether to use syslog logging" >&5 +echo "configure:12966: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12988,7 +12987,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12992: checking whether to use profiling" >&5 +echo "configure:12991: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13016,7 +13015,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13020: checking whether to support disk-quotas" >&5 +echo "configure:13019: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13027,13 +13026,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13031: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13030: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13045,7 +13044,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13049: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13094,7 +13093,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13098: checking whether to support utmp accounting" >&5 +echo "configure:13097: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13119,7 +13118,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13123: checking chosen man pages' language(s)" >&5 +echo "configure:13122: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13150,7 +13149,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13154: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13153: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13178,14 +13177,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13182: checking how to get filesystem space usage" >&5 +echo "configure:13181: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13189: checking statvfs64 function (SVR4)" >&5 +echo "configure:13188: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13193,7 +13192,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13210: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13240,12 +13239,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13244: checking statvfs function (SVR4)" >&5 +echo "configure:13243: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13253,7 +13252,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13278,7 +13277,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13282: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13281: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13286,7 +13285,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13299,7 +13298,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13326,7 +13325,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13330: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13329: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13334,7 +13333,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13380,7 +13379,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13384: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13383: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13388,7 +13387,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13398,7 +13397,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13425,7 +13424,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13429: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13428: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13433,7 +13432,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13449,7 +13448,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13476,7 +13475,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13480: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13479: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13484,7 +13483,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13504,7 +13503,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13537,9 +13536,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13541: checking if large file support can be enabled" >&5 +echo "configure:13540: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13617,7 +13616,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13621: checking whether to support ACLs" >&5 +echo "configure:13620: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13670,7 +13669,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13674: checking for acl_get_file in -lacl" >&5 +echo "configure:13673: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13678,7 +13677,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13717,13 +13716,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13721: checking for ACL support" >&5 +echo "configure:13720: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13731,7 +13730,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13751,13 +13750,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13755: checking for acl_get_perm_np" >&5 +echo "configure:13754: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13765,7 +13764,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13806,13 +13805,177 @@ EOF fi +################################################# +# check for sendfile support + +echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 +echo "configure:13813: checking whether to support sendfile" >&5 +# Check whether --with-sendfile-support or --without-sendfile-support was given. +if test "${with_sendfile_support+set}" = set; then + withval="$with_sendfile_support" + case "$withval" in + yes) + + case "$host_os" in + *linux*) + echo $ac_n "checking for sendfile64 support""... $ac_c" 1>&6 +echo "configure:13823: checking for sendfile64 support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +int main() { +\ +int tofd, fromfd; +off64_t offset; +size_t total; +ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); + +; return 0; } +EOF +if { (eval echo configure:13841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_SENDFILE64=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_SENDFILE64=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 + + echo $ac_n "checking for sendfile support""... $ac_c" 1>&6 +echo "configure:13856: checking for sendfile support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +int main() { +\ +int tofd, fromfd; +off_t offset; +size_t total; +ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); + +; return 0; } +EOF +if { (eval echo configure:13874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_SENDFILE=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_SENDFILE=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 + +# Try and cope with broken Linux sendfile.... + echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 +echo "configure:13890: checking for broken linux sendfile support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +int main() { +\ +int tofd, fromfd; +off_t offset; +size_t total; +ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); + +; return 0; } +EOF +if { (eval echo configure:13912: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" 1>&6 + + if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE64 1 +EOF + + cat >> confdefs.h <<\EOF +#define LINUX_SENDFILE_API 1 +EOF + + elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE 1 +EOF + + cat >> confdefs.h <<\EOF +#define LINUX_SENDFILE_API 1 +EOF + + elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE 1 +EOF + + cat >> confdefs.h <<\EOF +#define LINUX_BROKEN_SENDFILE_API 1 +EOF + + else + echo "$ac_t""no" 1>&6; + fi + + ;; + *) + ;; + esac + ;; + *) + echo "$ac_t""no" 1>&6 + ;; + esac +else + echo "$ac_t""no" 1>&6 + +fi + + + ################################################# # Check whether winbind is supported on this platform. If so we need to # build and install client programs (WINBIND_TARGETS), sbin programs # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13816: checking whether to build winbind" >&5 +echo "configure:13979: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -13908,20 +14071,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:13912: checking whether struct passwd has pw_comment" >&5 +echo "configure:14075: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:13925: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -13946,20 +14109,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:13950: checking whether struct passwd has pw_age" >&5 +echo "configure:14113: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:13963: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -13998,7 +14161,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14002: checking for poptGetContext in -lpopt" >&5 +echo "configure:14165: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14006,7 +14169,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14041,7 +14204,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14045: checking whether to use included popt" >&5 +echo "configure:14208: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14080,16 +14243,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14084: checking configure summary" >&5 +echo "configure:14247: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source3/configure.in b/source3/configure.in index fd08142bbd..76dc380c13 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2661,6 +2661,78 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)]) AC_MSG_RESULT(no) ) +################################################# +# check for sendfile support + +AC_MSG_CHECKING(whether to support sendfile) +AC_ARG_WITH(sendfile-support, +[ --with-sendfile-support Include sendfile support (default=no)], +[ case "$withval" in + yes) + + case "$host_os" in + *linux*) + AC_CACHE_CHECK([for sendfile64 support],samba_cv_HAVE_SENDFILE64,[ + AC_TRY_LINK([#include ], +[\ +int tofd, fromfd; +off64_t offset; +size_t total; +ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); +], +samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)]) + + AC_CACHE_CHECK([for sendfile support],samba_cv_HAVE_SENDFILE,[ + AC_TRY_LINK([#include ], +[\ +int tofd, fromfd; +off_t offset; +size_t total; +ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); +], +samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) + +# Try and cope with broken Linux sendfile.... + AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[ + AC_TRY_LINK([\ +#if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64) +#undef _FILE_OFFSET_BITS +#endif +#include ], +[\ +int tofd, fromfd; +off_t offset; +size_t total; +ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); +], +samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)]) + + if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE64) + AC_DEFINE(LINUX_SENDFILE_API) + elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE) + AC_DEFINE(LINUX_SENDFILE_API) + elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE) + AC_DEFINE(LINUX_BROKEN_SENDFILE_API) + else + AC_MSG_RESULT(no); + fi + + ;; + *) + ;; + esac + ;; + *) + AC_MSG_RESULT(no) + ;; + esac ], + AC_MSG_RESULT(no) +) + + ################################################# # Check whether winbind is supported on this platform. If so we need to # build and install client programs (WINBIND_TARGETS), sbin programs diff --git a/source3/include/config.h.in b/source3/include/config.h.in index 7945e49c79..3c56845174 100644 --- a/source3/include/config.h.in +++ b/source3/include/config.h.in @@ -288,6 +288,10 @@ #endif #undef LDAP_SET_REBIND_PROC_ARGS +#undef HAVE_SENDFILE +#undef HAVE_SENDFILE64 +#undef LINUX_SENDFILE_API +#undef LINUX_BROKEN_SENDFILE_API /* The number of bytes in a int. */ #undef SIZEOF_INT -- cgit From f74086ccf09e8157419f7c51490dc31effb6ba20 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 01:00:03 +0000 Subject: Attempt to make broken Linux sendfile work.... Still in progress. Jeremy. (This used to be commit f956a4d29d0d88cd92fac0f0c9f636fc152afe0a) --- source3/acconfig.h | 1 + source3/configure | 42 +++++++++++++++++++++++++----------------- source3/configure.in | 4 +++- source3/include/config.h.in | 1 + source3/lib/sendfile.c | 24 +++++++++++++++++------- source3/smbd/reply.c | 2 +- 6 files changed, 48 insertions(+), 26 deletions(-) diff --git a/source3/acconfig.h b/source3/acconfig.h index 141c59bfed..8ca44f7aba 100644 --- a/source3/acconfig.h +++ b/source3/acconfig.h @@ -226,3 +226,4 @@ #undef HAVE_SENDFILE64 #undef LINUX_SENDFILE_API #undef LINUX_BROKEN_SENDFILE_API +#undef WITH_SENDFILE diff --git a/source3/configure b/source3/configure index 8e4b1d2961..56ac8ef274 100755 --- a/source3/configure +++ b/source3/configure @@ -13929,6 +13929,10 @@ EOF cat >> confdefs.h <<\EOF #define LINUX_SENDFILE_API 1 +EOF + + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 EOF elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then @@ -13940,13 +13944,17 @@ EOF #define LINUX_SENDFILE_API 1 EOF - elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then - cat >> confdefs.h <<\EOF -#define HAVE_SENDFILE 1 + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 EOF + elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then cat >> confdefs.h <<\EOF #define LINUX_BROKEN_SENDFILE_API 1 +EOF + + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 EOF else @@ -13975,7 +13983,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13979: checking whether to build winbind" >&5 +echo "configure:13987: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14071,20 +14079,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14075: checking whether struct passwd has pw_comment" >&5 +echo "configure:14083: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14109,20 +14117,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14113: checking whether struct passwd has pw_age" >&5 +echo "configure:14121: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14161,7 +14169,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14165: checking for poptGetContext in -lpopt" >&5 +echo "configure:14173: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14169,7 +14177,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14204,7 +14212,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14208: checking whether to use included popt" >&5 +echo "configure:14216: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14243,16 +14251,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14247: checking configure summary" >&5 +echo "configure:14255: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source3/configure.in b/source3/configure.in index 76dc380c13..8f3a06b0cd 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2710,12 +2710,14 @@ samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)] if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then AC_DEFINE(HAVE_SENDFILE64) AC_DEFINE(LINUX_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then AC_DEFINE(HAVE_SENDFILE) AC_DEFINE(LINUX_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then - AC_DEFINE(HAVE_SENDFILE) AC_DEFINE(LINUX_BROKEN_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) else AC_MSG_RESULT(no); fi diff --git a/source3/include/config.h.in b/source3/include/config.h.in index 3c56845174..119df4dd5b 100644 --- a/source3/include/config.h.in +++ b/source3/include/config.h.in @@ -292,6 +292,7 @@ #undef HAVE_SENDFILE64 #undef LINUX_SENDFILE_API #undef LINUX_BROKEN_SENDFILE_API +#undef WITH_SENDFILE /* The number of bytes in a int. */ #undef SIZEOF_INT diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c index 4613cfb864..8bcb9dbd02 100644 --- a/source3/lib/sendfile.c +++ b/source3/lib/sendfile.c @@ -76,7 +76,13 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of #elif defined(LINUX_BROKEN_SENDFILE_API) -#include +/* + * We must use explicit 32 bit types here. This code path means Linux + * won't do proper 64-bit sendfile. JRA. + */ + +extern int32 sendfile (int out_fd, int in_fd, int32 *offset, uint32 count); + #ifndef MSG_MORE #define MSG_MORE 0x8000 @@ -87,11 +93,13 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of size_t total=0; ssize_t ret; ssize_t hdr_len = 0; + uint32 small_total = 0; + int32 small_offset; /* * Fix for broken Linux 2.4 systems with no working sendfile64(). * If the offset+count > 2 GB then pretend we don't have the - * system call sendfile at all. The upper later catches this + * system call sendfile at all. The upper layer catches this * and uses a normal read. JRA. */ @@ -115,17 +123,19 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of } } - total = count; - while (total) { - ssize_t nwritten; + small_total = (uint32)count; + small_offset = (int32)offset; + + while (small_total) { + int32 nwritten; do { - nwritten = sendfile(tofd, fromfd, &offset, total); + nwritten = sendfile(tofd, fromfd, &small_offset, small_total); } while (nwritten == -1 && errno == EINTR); if (nwritten == -1) return -1; if (nwritten == 0) return -1; /* I think we're at EOF here... */ - total -= nwritten; + small_total -= nwritten; } return count + hdr_len; } diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 878e21f4c2..45704b9264 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1692,7 +1692,7 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length ssize_t nread = -1; char *data = smb_buf(outbuf); -#if defined(WITH_SENDFILE) && defined(HAVE_SENDFILE) +#if defined(WITH_SENDFILE) /* * We can only use sendfile on a non-chained packet and on a file * that is exclusively oplocked. -- cgit From e8ea0aadbb01d824851dfbf2e9122170791b7226 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 01:10:47 +0000 Subject: Added FreeBSD sendfile configure tests. Richard please test... Jeremy. (This used to be commit 6425f169779ce65509b77cf6d5634de24894a965) --- source3/acconfig.h | 1 + source3/configure | 97 ++++++++++++++++++++++++++++++++++++--------- source3/configure.in | 33 ++++++++++++++- source3/include/config.h.in | 1 + 4 files changed, 112 insertions(+), 20 deletions(-) diff --git a/source3/acconfig.h b/source3/acconfig.h index 8ca44f7aba..40a3a7cee1 100644 --- a/source3/acconfig.h +++ b/source3/acconfig.h @@ -227,3 +227,4 @@ #undef LINUX_SENDFILE_API #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE +#undef FREEBSD_SENDFILE_API diff --git a/source3/configure b/source3/configure index 56ac8ef274..eb8d091dbc 100755 --- a/source3/configure +++ b/source3/configure @@ -13818,8 +13818,8 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) - echo $ac_n "checking for sendfile64 support""... $ac_c" 1>&6 -echo "configure:13823: checking for sendfile64 support" >&5 + echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 +echo "configure:13823: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13851,8 +13851,8 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 - echo $ac_n "checking for sendfile support""... $ac_c" 1>&6 -echo "configure:13856: checking for sendfile support" >&5 + echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 +echo "configure:13856: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13961,6 +13961,67 @@ EOF echo "$ac_t""no" 1>&6; fi + ;; + *freebsd*) + echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 +echo "configure:13968: checking for freebsd sendfile support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +#include +#include +int main() { +\ + int fromfd, tofd; + off_t offset, nwritten; + struct sf_hdtr hdr; + struct iovec hdtrl; + hdr->headers = &hdtrl; + hdr->hdr_cnt = 1; + hdr->trailers = NULL; + hdr->trl_cnt = 0; + hdtrl.iov_base = NULL; + hdtrl.iov_len = 0; + int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + +; return 0; } +EOF +if { (eval echo configure:13996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_SENDFILE=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_SENDFILE=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 + + if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE 1 +EOF + + cat >> confdefs.h <<\EOF +#define FREEBSD_SENDFILE_API 1 +EOF + + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 +EOF + + else + echo "$ac_t""no" 1>&6; + fi ;; *) ;; @@ -13983,7 +14044,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:13987: checking whether to build winbind" >&5 +echo "configure:14048: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14079,20 +14140,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14083: checking whether struct passwd has pw_comment" >&5 +echo "configure:14144: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14117,20 +14178,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14121: checking whether struct passwd has pw_age" >&5 +echo "configure:14182: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14169,7 +14230,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14173: checking for poptGetContext in -lpopt" >&5 +echo "configure:14234: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14177,7 +14238,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14212,7 +14273,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14216: checking whether to use included popt" >&5 +echo "configure:14277: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14251,16 +14312,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14255: checking configure summary" >&5 +echo "configure:14316: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source3/configure.in b/source3/configure.in index 8f3a06b0cd..5e742f9498 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2672,7 +2672,7 @@ AC_ARG_WITH(sendfile-support, case "$host_os" in *linux*) - AC_CACHE_CHECK([for sendfile64 support],samba_cv_HAVE_SENDFILE64,[ + AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[ AC_TRY_LINK([#include ], [\ int tofd, fromfd; @@ -2682,7 +2682,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ], samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)]) - AC_CACHE_CHECK([for sendfile support],samba_cv_HAVE_SENDFILE,[ + AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[ AC_TRY_LINK([#include ], [\ int tofd, fromfd; @@ -2722,6 +2722,35 @@ samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)] AC_MSG_RESULT(no); fi + ;; + *freebsd*) + AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[ + AC_TRY_LINK([\ +#include +#include +#include ], +[\ + int fromfd, tofd; + off_t offset, nwritten; + struct sf_hdtr hdr; + struct iovec hdtrl; + hdr->headers = &hdtrl; + hdr->hdr_cnt = 1; + hdr->trailers = NULL; + hdr->trl_cnt = 0; + hdtrl.iov_base = NULL; + hdtrl.iov_len = 0; + int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); +], +samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) + + if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE) + AC_DEFINE(FREEBSD_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) + else + AC_MSG_RESULT(no); + fi ;; *) ;; diff --git a/source3/include/config.h.in b/source3/include/config.h.in index 119df4dd5b..9fbde2bf37 100644 --- a/source3/include/config.h.in +++ b/source3/include/config.h.in @@ -293,6 +293,7 @@ #undef LINUX_SENDFILE_API #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE +#undef FREEBSD_SENDFILE_API /* The number of bytes in a int. */ #undef SIZEOF_INT -- cgit From 91ba6aa8a84cf13710d7e4783169bc7128142379 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 17 Sep 2002 01:14:54 +0000 Subject: Default to "python" for --with-python option. This saves having to run --with-python=python which looks a bit silly. (This used to be commit 130e05de073268cbabed0e2f80f0011e5f72dc02) --- source3/configure.in | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source3/configure.in b/source3/configure.in index 5e742f9498..0e4e910f0c 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2919,7 +2919,14 @@ AC_SUBST(FLAGS1) AC_ARG_WITH(python, [ --with-python=PYTHONNAME build Python libraries], -[ PYTHON=${withval-python} ]) +[ case "${withval-python}" in + yes) + PYTHON=python + ;; + *) + PYTHON=${withval-python} + ;; + esac ]) AC_SUBST(PYTHON) ################################################# -- cgit From 83b997118e4cbf8cc794b612a4ac9b8e852f488c Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 17 Sep 2002 01:19:04 +0000 Subject: Rerun autoconf. (This used to be commit 041f47230b865294e657f47e6aba2fa83a15bf31) --- source3/configure | 1426 +++++++++++++++++++++++++++-------------------------- 1 file changed, 718 insertions(+), 708 deletions(-) diff --git a/source3/configure b/source3/configure index eb8d091dbc..8caba2b6c4 100755 --- a/source3/configure +++ b/source3/configure @@ -1122,7 +1122,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in gawk mawk nawk awk +for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -2914,15 +2914,16 @@ else #line 2915 "configure" #include "confdefs.h" #include -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); - return(0); + exit(0); } EOF -if { (eval echo configure:2926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2942,7 +2943,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2946: checking size of long" >&5 +echo "configure:2947: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2950,18 +2951,19 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); - return(0); + exit(0); } EOF -if { (eval echo configure:2965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2981,7 +2983,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2985: checking size of short" >&5 +echo "configure:2987: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2989,18 +2991,19 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < -int main() +#include +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); - return(0); + exit(0); } EOF -if { (eval echo configure:3004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3021,12 +3024,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3025: checking for working const" >&5 +echo "configure:3028: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3096,21 +3099,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3100: checking for inline" >&5 +echo "configure:3103: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3136,14 +3139,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3140: checking whether byte ordering is bigendian" >&5 +echo "configure:3143: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3154,11 +3157,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3158: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3161: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3169,7 +3172,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3173: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3189,7 +3192,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3226,14 +3229,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3230: checking whether char is unsigned" >&5 +echo "configure:3233: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3290,12 +3293,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3294: checking return type of signal handlers" >&5 +echo "configure:3297: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3312,7 +3315,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3316: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3331,12 +3334,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3335: checking for uid_t in sys/types.h" >&5 +echo "configure:3338: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3365,12 +3368,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3369: checking for mode_t" >&5 +echo "configure:3372: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3398,12 +3401,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3402: checking for off_t" >&5 +echo "configure:3405: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3431,12 +3434,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3435: checking for size_t" >&5 +echo "configure:3438: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3464,12 +3467,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3468: checking for pid_t" >&5 +echo "configure:3471: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3497,12 +3500,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3501: checking for st_rdev in struct stat" >&5 +echo "configure:3504: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3510,7 +3513,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3531,12 +3534,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3535: checking for d_off in dirent" >&5 +echo "configure:3538: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3546,7 +3549,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3550: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3553: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3567,12 +3570,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3571: checking for ino_t" >&5 +echo "configure:3574: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3600,12 +3603,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3604: checking for loff_t" >&5 +echo "configure:3607: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3633,12 +3636,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3637: checking for offset_t" >&5 +echo "configure:3640: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3666,12 +3669,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3670: checking for ssize_t" >&5 +echo "configure:3673: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3699,12 +3702,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3703: checking for wchar_t" >&5 +echo "configure:3706: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3746,7 +3749,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3750: checking for $ac_word" >&5 +echo "configure:3753: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3795,12 +3798,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3799: checking for $ac_func" >&5 +echo "configure:3802: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3849,7 +3852,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3853: checking for dlopen in -ldl" >&5 +echo "configure:3856: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3857,7 +3860,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3898,13 +3901,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3902: checking for immediate structures" >&5 +echo "configure:3905: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3922,7 +3925,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3945,13 +3948,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3949: checking for unix domain sockets" >&5 +echo "configure:3952: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3966,7 +3969,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3973: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3988,13 +3991,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3992: checking for socklen_t type" >&5 +echo "configure:3995: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4007,7 +4010,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4028,13 +4031,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4032: checking for sig_atomic_t type" >&5 +echo "configure:4035: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4047,7 +4050,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4054: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4070,20 +4073,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4074: checking for errno declaration" >&5 +echo "configure:4077: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4087: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4105,20 +4108,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4109: checking for setresuid declaration" >&5 +echo "configure:4112: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4140,20 +4143,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4144: checking for setresgid declaration" >&5 +echo "configure:4147: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4175,20 +4178,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4179: checking for asprintf declaration" >&5 +echo "configure:4182: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4210,20 +4213,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4214: checking for vasprintf declaration" >&5 +echo "configure:4217: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4227: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4245,20 +4248,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4249: checking for vsnprintf declaration" >&5 +echo "configure:4252: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4280,20 +4283,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4284: checking for snprintf declaration" >&5 +echo "configure:4287: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4297: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4317,7 +4320,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4321: checking for real setresuid" >&5 +echo "configure:4324: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4326,12 +4329,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4356,7 +4359,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4360: checking for real setresgid" >&5 +echo "configure:4363: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4365,13 +4368,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4394,7 +4397,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4398: checking for 8-bit clean memcmp" >&5 +echo "configure:4401: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4402,7 +4405,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4435,12 +4438,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4439: checking for $ac_func" >&5 +echo "configure:4442: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4489,7 +4492,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4493: checking for crypt in -lcrypt" >&5 +echo "configure:4496: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4497,7 +4500,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4541,7 +4544,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4545: checking whether to use readline" >&5 +echo "configure:4548: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4553,17 +4556,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4557: checking for $ac_hdr" >&5 +echo "configure:4560: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4567: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4570: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4593,17 +4596,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4597: checking for $ac_hdr" >&5 +echo "configure:4600: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4607: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4610: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4634,17 +4637,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4638: checking for $ac_hdr" >&5 +echo "configure:4641: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4648: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4667,7 +4670,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4671: checking for tgetent in -l${termlib}" >&5 +echo "configure:4674: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4675,7 +4678,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4708,7 +4711,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4712: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4715: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4716,7 +4719,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4778,17 +4781,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4782: checking for $ac_hdr" >&5 +echo "configure:4785: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4792: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4818,17 +4821,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4822: checking for $ac_hdr" >&5 +echo "configure:4825: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4859,17 +4862,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4863: checking for $ac_hdr" >&5 +echo "configure:4866: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4873: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4876: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4892,7 +4895,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4896: checking for tgetent in -l${termlib}" >&5 +echo "configure:4899: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4900,7 +4903,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4933,7 +4936,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4937: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4940: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4941,7 +4944,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5002,7 +5005,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5006: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5009: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5010,7 +5013,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5054,12 +5057,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5058: checking for $ac_func" >&5 +echo "configure:5061: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5110,7 +5113,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5114: checking for printf in -lnsl_s" >&5 +echo "configure:5117: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5118,7 +5121,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5160,7 +5163,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5164: checking for printf in -lnsl" >&5 +echo "configure:5167: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5168,7 +5171,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5210,7 +5213,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5214: checking for connect in -lsocket" >&5 +echo "configure:5217: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5218,7 +5221,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5260,7 +5263,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5264: checking for connect in -linet" >&5 +echo "configure:5267: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5268,7 +5271,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5323,12 +5326,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5327: checking for $ac_func" >&5 +echo "configure:5330: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5377,7 +5380,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5381: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5384: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5385,7 +5388,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5426,12 +5429,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5430: checking for $ac_func" >&5 +echo "configure:5433: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5487,12 +5490,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5491: checking for $ac_func" >&5 +echo "configure:5494: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5542,12 +5545,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5546: checking for $ac_func" >&5 +echo "configure:5549: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5597,12 +5600,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5601: checking for $ac_func" >&5 +echo "configure:5604: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5652,12 +5655,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5656: checking for $ac_func" >&5 +echo "configure:5659: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5687: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5707,12 +5710,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5711: checking for $ac_func" >&5 +echo "configure:5714: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5742: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5762,12 +5765,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5766: checking for $ac_func" >&5 +echo "configure:5769: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5817,12 +5820,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5821: checking for $ac_func" >&5 +echo "configure:5824: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5872,12 +5875,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5876: checking for $ac_func" >&5 +echo "configure:5879: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5927,12 +5930,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5931: checking for $ac_func" >&5 +echo "configure:5934: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5982,12 +5985,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5986: checking for $ac_func" >&5 +echo "configure:5989: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6038,12 +6041,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6042: checking for $ac_func" >&5 +echo "configure:6045: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6095,12 +6098,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6099: checking for $ac_func" >&5 +echo "configure:6102: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6151,12 +6154,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6155: checking for $ac_func" >&5 +echo "configure:6158: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6206,12 +6209,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6210: checking for $ac_func" >&5 +echo "configure:6213: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6261,12 +6264,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6265: checking for $ac_func" >&5 +echo "configure:6268: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6296: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6316,12 +6319,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6320: checking for $ac_func" >&5 +echo "configure:6323: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6371,12 +6374,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6375: checking for $ac_func" >&5 +echo "configure:6378: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6426,12 +6429,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6430: checking for $ac_func" >&5 +echo "configure:6433: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6481,12 +6484,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6485: checking for $ac_func" >&5 +echo "configure:6488: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6536,12 +6539,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6540: checking for $ac_func" >&5 +echo "configure:6543: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6571: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6591,12 +6594,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6595: checking for $ac_func" >&5 +echo "configure:6598: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6646,12 +6649,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6650: checking for $ac_func" >&5 +echo "configure:6653: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6701,12 +6704,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6705: checking for $ac_func" >&5 +echo "configure:6708: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6756,12 +6759,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6760: checking for $ac_func" >&5 +echo "configure:6763: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6811,12 +6814,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6815: checking for $ac_func" >&5 +echo "configure:6818: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6866,12 +6869,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6870: checking for $ac_func" >&5 +echo "configure:6873: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6925,9 +6928,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6929: checking for stat64 in " >&5 +echo "configure:6932: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6958,9 +6961,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6962: checking for lstat64 in " >&5 +echo "configure:6965: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6991,9 +6994,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6995: checking for fstat64 in " >&5 +echo "configure:6998: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7025,7 +7028,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7029: checking for dn_expand in -lresolv" >&5 +echo "configure:7032: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7033,7 +7036,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7082,12 +7085,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7086: checking for $ac_func" >&5 +echo "configure:7089: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7135,7 +7138,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7139: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7142: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7143,7 +7146,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7184,12 +7187,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7188: checking for $ac_func" >&5 +echo "configure:7191: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7243,12 +7246,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7247: checking for $ac_func" >&5 +echo "configure:7250: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7296,7 +7299,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7300: checking for putprpwnam in -lsec" >&5 +echo "configure:7303: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7304,7 +7307,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7345,12 +7348,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7349: checking for $ac_func" >&5 +echo "configure:7352: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7405,12 +7408,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7409: checking for $ac_func" >&5 +echo "configure:7412: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7458,7 +7461,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7462: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7465: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7466,7 +7469,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7507,12 +7510,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7511: checking for $ac_func" >&5 +echo "configure:7514: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7566,12 +7569,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7570: checking for $ac_func" >&5 +echo "configure:7573: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7601: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7619,7 +7622,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7623: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7626: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7627,7 +7630,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7668,12 +7671,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7672: checking for $ac_func" >&5 +echo "configure:7675: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7729,12 +7732,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7733: checking for $ac_func" >&5 +echo "configure:7736: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7782,7 +7785,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7786: checking for getspnam in -lgen" >&5 +echo "configure:7789: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7790,7 +7793,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7831,12 +7834,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7835: checking for $ac_func" >&5 +echo "configure:7838: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7891,12 +7894,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7895: checking for $ac_func" >&5 +echo "configure:7898: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7944,7 +7947,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7948: checking for getspnam in -lsecurity" >&5 +echo "configure:7951: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7952,7 +7955,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7993,12 +7996,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7997: checking for $ac_func" >&5 +echo "configure:8000: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8052,12 +8055,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8056: checking for $ac_func" >&5 +echo "configure:8059: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8105,7 +8108,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8109: checking for getspnam in -lsec" >&5 +echo "configure:8112: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8113,7 +8116,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8154,12 +8157,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8158: checking for $ac_func" >&5 +echo "configure:8161: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8214,12 +8217,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8218: checking for $ac_func" >&5 +echo "configure:8221: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8267,7 +8270,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8271: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8274: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8275,7 +8278,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8316,12 +8319,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8320: checking for $ac_func" >&5 +echo "configure:8323: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8375,12 +8378,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8379: checking for $ac_func" >&5 +echo "configure:8382: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8428,7 +8431,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8432: checking for bigcrypt in -lsec" >&5 +echo "configure:8435: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8436,7 +8439,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8477,12 +8480,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8481: checking for $ac_func" >&5 +echo "configure:8484: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8537,12 +8540,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8541: checking for $ac_func" >&5 +echo "configure:8544: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8590,7 +8593,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8594: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8597: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8598,7 +8601,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8639,12 +8642,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8643: checking for $ac_func" >&5 +echo "configure:8646: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8698,12 +8701,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8702: checking for $ac_func" >&5 +echo "configure:8705: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8751,7 +8754,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8755: checking for getprpwnam in -lsec" >&5 +echo "configure:8758: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8759,7 +8762,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8800,12 +8803,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8804: checking for $ac_func" >&5 +echo "configure:8807: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8872,7 +8875,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8876: checking ability to build shared libraries" >&5 +echo "configure:8879: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9032,7 +9035,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9036: checking for $ac_word" >&5 +echo "configure:9039: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9089,17 +9092,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9093: checking linker flags for shared libraries" >&5 +echo "configure:9096: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9096: checking compiler flags for position-independent code" >&5 +echo "configure:9099: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9103: checking whether building shared libraries actually works" >&5 +echo "configure:9106: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9130,7 +9133,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9134: checking for long long" >&5 +echo "configure:9137: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9139,12 +9142,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9171,20 +9174,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9175: checking for LL suffix on long long integers" >&5 +echo "configure:9178: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9206,7 +9209,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9210: checking for 64 bit off_t" >&5 +echo "configure:9213: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9215,13 +9218,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9244,7 +9247,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9248: checking for off64_t" >&5 +echo "configure:9251: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9253,7 +9256,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9286,7 +9289,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9290: checking for 64 bit ino_t" >&5 +echo "configure:9293: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9295,13 +9298,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9324,7 +9327,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9328: checking for ino64_t" >&5 +echo "configure:9331: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9333,7 +9336,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9366,7 +9369,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9370: checking for dev64_t" >&5 +echo "configure:9373: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9375,7 +9378,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9408,13 +9411,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9412: checking for struct dirent64" >&5 +echo "configure:9415: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9433: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9447,7 +9450,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9451: checking for major macro" >&5 +echo "configure:9454: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9456,7 +9459,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9488,7 +9491,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9492: checking for minor macro" >&5 +echo "configure:9495: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9497,7 +9500,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9529,7 +9532,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9533: checking for unsigned char" >&5 +echo "configure:9536: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9538,12 +9541,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9566,13 +9569,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9570: checking for sin_len in sock" >&5 +echo "configure:9573: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9581,7 +9584,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9588: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9602,13 +9605,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9606: checking whether seekdir returns void" >&5 +echo "configure:9609: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9617,7 +9620,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9624: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9638,20 +9641,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9642: checking for __FILE__ macro" >&5 +echo "configure:9645: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9655: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9658: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9672,20 +9675,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9676: checking for __FUNCTION__ macro" >&5 +echo "configure:9679: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9689: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9706,7 +9709,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9710: checking if gettimeofday takes tz argument" >&5 +echo "configure:9713: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9715,14 +9718,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9745,13 +9748,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9749: checking for __va_copy" >&5 +echo "configure:9752: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9759,7 +9762,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9780,7 +9783,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9784: checking for C99 vsnprintf" >&5 +echo "configure:9787: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9789,7 +9792,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9816,7 +9819,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9839,7 +9842,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9843: checking for broken readdir" >&5 +echo "configure:9846: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9848,7 +9851,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9856,7 +9859,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9879,13 +9882,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9883: checking for utimbuf" >&5 +echo "configure:9886: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9893,7 +9896,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9897: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9900: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9917,12 +9920,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9921: checking for $ac_func" >&5 +echo "configure:9924: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9971,13 +9974,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9975: checking for ut_name in utmp" >&5 +echo "configure:9978: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9985,7 +9988,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9989: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10006,13 +10009,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10010: checking for ut_user in utmp" >&5 +echo "configure:10013: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10020,7 +10023,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10024: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10027: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10041,13 +10044,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10045: checking for ut_id in utmp" >&5 +echo "configure:10048: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10055,7 +10058,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10059: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10062: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10076,13 +10079,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10080: checking for ut_host in utmp" >&5 +echo "configure:10083: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10090,7 +10093,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10094: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10097: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10111,13 +10114,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10115: checking for ut_time in utmp" >&5 +echo "configure:10118: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10125,7 +10128,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10129: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10146,13 +10149,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10150: checking for ut_tv in utmp" >&5 +echo "configure:10153: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10160,7 +10163,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10167: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10181,13 +10184,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10185: checking for ut_type in utmp" >&5 +echo "configure:10188: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10195,7 +10198,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10199: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10216,13 +10219,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10220: checking for ut_pid in utmp" >&5 +echo "configure:10223: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10230,7 +10233,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10234: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10237: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10251,13 +10254,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10255: checking for ut_exit in utmp" >&5 +echo "configure:10258: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10265,7 +10268,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10286,13 +10289,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10290: checking for ut_addr in utmp" >&5 +echo "configure:10293: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10300,7 +10303,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10322,13 +10325,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10326: checking whether pututline returns pointer" >&5 +echo "configure:10329: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10336,7 +10339,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10358,13 +10361,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10362: checking for ut_syslen in utmpx" >&5 +echo "configure:10365: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10372,7 +10375,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10379: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10396,7 +10399,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10400: checking whether to use libiconv" >&5 +echo "configure:10403: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10409,7 +10412,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10413: checking for iconv_open in -liconv" >&5 +echo "configure:10416: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10417,7 +10420,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10471,7 +10474,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10475: checking for working iconv" >&5 +echo "configure:10478: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10480,7 +10483,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10491,7 +10494,7 @@ main() { } EOF -if { (eval echo configure:10495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10515,7 +10518,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10519: checking for Linux kernel oplocks" >&5 +echo "configure:10522: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10524,7 +10527,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10538,7 +10541,7 @@ main() { } EOF -if { (eval echo configure:10542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10561,7 +10564,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10565: checking for kernel change notify support" >&5 +echo "configure:10568: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10570,7 +10573,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10584,7 +10587,7 @@ main() { } EOF -if { (eval echo configure:10588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10607,7 +10610,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10611: checking for kernel share modes" >&5 +echo "configure:10614: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10616,7 +10619,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10632,7 +10635,7 @@ main() { } EOF -if { (eval echo configure:10636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10658,13 +10661,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10662: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10665: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10672,7 +10675,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10676: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10679: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10693,7 +10696,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10697: checking for irix specific capabilities" >&5 +echo "configure:10700: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10702,7 +10705,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10717,7 +10720,7 @@ main() { } EOF -if { (eval echo configure:10721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10745,13 +10748,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10749: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10752: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10761,7 +10764,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10765: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10782,13 +10785,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10786: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10789: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10798,7 +10801,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10819,13 +10822,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10823: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10826: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10835,7 +10838,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10839: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10856,13 +10859,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10860: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10863: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10872,7 +10875,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10876: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10894,13 +10897,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10898: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10901: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10914,7 +10917,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10918: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10935,16 +10938,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10939: checking for test routines" >&5 +echo "configure:10942: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10958,7 +10961,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10962: checking for ftruncate extend" >&5 +echo "configure:10965: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10967,11 +10970,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10994,7 +10997,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:10998: checking for AF_LOCAL socket support" >&5 +echo "configure:11001: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11003,11 +11006,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11031,7 +11034,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11035: checking for broken getgroups" >&5 +echo "configure:11038: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11040,11 +11043,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11067,7 +11070,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11071: checking whether getpass should be replaced" >&5 +echo "configure:11074: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11075,7 +11078,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11095: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11111,7 +11114,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11115: checking for broken inet_ntoa" >&5 +echo "configure:11118: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11120,7 +11123,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11134,7 +11137,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11157,7 +11160,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11161: checking for secure mkstemp" >&5 +echo "configure:11164: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11166,7 +11169,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11183,7 +11186,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11206,7 +11209,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11210: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11213: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11215,12 +11218,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11243,7 +11246,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11247: checking for root" >&5 +echo "configure:11250: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11252,11 +11255,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11284,7 +11287,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11288: checking for iface AIX" >&5 +echo "configure:11291: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11293,7 +11296,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11325,7 +11328,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11329: checking for iface ifconf" >&5 +echo "configure:11332: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11334,7 +11337,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11367,7 +11370,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11371: checking for iface ifreq" >&5 +echo "configure:11374: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11376,7 +11379,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11413,7 +11416,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11417: checking for setresuid" >&5 +echo "configure:11420: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11422,7 +11425,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11456,7 +11459,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11460: checking for setreuid" >&5 +echo "configure:11463: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11465,7 +11468,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11498,7 +11501,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11502: checking for seteuid" >&5 +echo "configure:11505: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11507,7 +11510,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11540,7 +11543,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11544: checking for setuidx" >&5 +echo "configure:11547: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11549,7 +11552,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11582,7 +11585,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11586: checking for working mmap" >&5 +echo "configure:11589: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11591,11 +11594,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11618,7 +11621,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11622: checking for ftruncate needs root" >&5 +echo "configure:11625: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11627,11 +11630,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11654,7 +11657,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11658: checking for fcntl locking" >&5 +echo "configure:11661: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11663,11 +11666,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11690,7 +11693,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11694: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11697: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11699,11 +11702,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11728,7 +11731,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11732: checking for 64 bit fcntl locking" >&5 +echo "configure:11735: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11737,7 +11740,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11786,13 +11789,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11790: checking for st_blocks in struct stat" >&5 +echo "configure:11793: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11801,7 +11804,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11808: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11822,13 +11825,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11826: checking for st_blksize in struct stat" >&5 +echo "configure:11829: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11837,7 +11840,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11844: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11860,13 +11863,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11864: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11867: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11887: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11903,13 +11906,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11907: checking for broken nisplus include files" >&5 +echo "configure:11910: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11919,7 +11922,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11943,7 +11946,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11947: checking whether to use smbwrapper" >&5 +echo "configure:11950: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11990,7 +11993,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11994: checking whether to use AFS clear-text auth" >&5 +echo "configure:11997: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12016,7 +12019,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12020: checking whether to use DFS clear-text auth" >&5 +echo "configure:12023: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12042,7 +12045,7 @@ fi ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12046: checking for /usr/kerberos" >&5 +echo "configure:12049: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12055,7 +12058,7 @@ fi ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12059: checking for kerberos 5 install path" >&5 +echo "configure:12062: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12084,17 +12087,17 @@ for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12088: checking for $ac_hdr" >&5 +echo "configure:12091: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12098: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12101: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12127,17 +12130,17 @@ for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12131: checking for $ac_hdr" >&5 +echo "configure:12134: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12167,7 +12170,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12171: checking for _et_list in -lcom_err" >&5 +echo "configure:12174: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12175,7 +12178,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12207,7 +12210,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12211: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12214: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12215,7 +12218,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12251,7 +12254,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12255: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12258: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12259,7 +12262,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12298,7 +12301,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12302: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12305: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12306,7 +12309,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12346,7 +12349,7 @@ fi # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12350: checking for ber_scanf in -llber" >&5 +echo "configure:12353: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12354,7 +12357,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12390,7 +12393,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12394: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12397: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12398,7 +12401,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12440,12 +12443,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12444: checking for $ac_func" >&5 +echo "configure:12447: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12493,13 +12496,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12497: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12500: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12508,7 +12511,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12512: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12530,7 +12533,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12534: checking whether to use AUTOMOUNT" >&5 +echo "configure:12537: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12555,7 +12558,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12559: checking whether to use SMBMOUNT" >&5 +echo "configure:12562: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12592,7 +12595,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12596: checking whether to use PAM" >&5 +echo "configure:12599: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12618,7 +12621,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12622: checking for pam_get_data in -lpam" >&5 +echo "configure:12625: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12626,7 +12629,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12664,7 +12667,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12668: checking whether to use pam_smbpass" >&5 +echo "configure:12671: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12702,12 +12705,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12706: checking for $ac_func" >&5 +echo "configure:12709: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12756,7 +12759,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12760: checking for crypt in -lcrypt" >&5 +echo "configure:12763: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12764,7 +12767,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12810,7 +12813,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12814: checking for a crypt that needs truncated salt" >&5 +echo "configure:12817: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12819,11 +12822,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12849,7 +12852,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12853: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12856: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12881,7 +12884,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12885: checking whether to use TDB SAM database" >&5 +echo "configure:12888: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12906,7 +12909,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12910: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12913: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12937,7 +12940,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12941: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12944: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12962,7 +12965,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12966: checking whether to use syslog logging" >&5 +echo "configure:12969: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12987,7 +12990,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12991: checking whether to use profiling" >&5 +echo "configure:12994: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13015,7 +13018,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13019: checking whether to support disk-quotas" >&5 +echo "configure:13022: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13026,13 +13029,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13030: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13033: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13044,7 +13047,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13048: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13093,7 +13096,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13097: checking whether to support utmp accounting" >&5 +echo "configure:13100: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13118,7 +13121,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13122: checking chosen man pages' language(s)" >&5 +echo "configure:13125: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13149,7 +13152,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13153: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13156: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13177,14 +13180,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13181: checking how to get filesystem space usage" >&5 +echo "configure:13184: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13188: checking statvfs64 function (SVR4)" >&5 +echo "configure:13191: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13192,7 +13195,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13239,12 +13242,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13243: checking statvfs function (SVR4)" >&5 +echo "configure:13246: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13252,7 +13255,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13277,7 +13280,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13281: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13284: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13285,7 +13288,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13298,7 +13301,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13325,7 +13328,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13329: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13332: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13333,7 +13336,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13379,7 +13382,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13383: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13386: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13387,7 +13390,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13397,7 +13400,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13424,7 +13427,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13428: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13431: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13432,7 +13435,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13448,7 +13451,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13475,7 +13478,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13479: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13482: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13483,7 +13486,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13503,7 +13506,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13536,9 +13539,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13540: checking if large file support can be enabled" >&5 +echo "configure:13543: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13616,7 +13619,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13620: checking whether to support ACLs" >&5 +echo "configure:13623: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13669,7 +13672,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13673: checking for acl_get_file in -lacl" >&5 +echo "configure:13676: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13677,7 +13680,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13716,13 +13719,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13720: checking for ACL support" >&5 +echo "configure:13723: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13730,7 +13733,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13750,13 +13753,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13754: checking for acl_get_perm_np" >&5 +echo "configure:13757: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13764,7 +13767,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13809,7 +13812,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13813: checking whether to support sendfile" >&5 +echo "configure:13816: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13819,13 +13822,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13823: checking for linux sendfile64 support" >&5 +echo "configure:13826: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13837,7 +13840,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13852,13 +13855,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13856: checking for linux sendfile support" >&5 +echo "configure:13859: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13870,7 +13873,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13886,13 +13889,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13890: checking for broken linux sendfile support" >&5 +echo "configure:13893: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -13964,13 +13967,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:13968: checking for freebsd sendfile support" >&5 +echo "configure:13971: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -13992,7 +13995,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:13996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14044,7 +14047,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14048: checking whether to build winbind" >&5 +echo "configure:14051: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14140,20 +14143,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14144: checking whether struct passwd has pw_comment" >&5 +echo "configure:14147: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14157: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14178,20 +14181,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14182: checking whether struct passwd has pw_age" >&5 +echo "configure:14185: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14230,7 +14233,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14234: checking for poptGetContext in -lpopt" >&5 +echo "configure:14237: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14238,7 +14241,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14273,7 +14276,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14277: checking whether to use included popt" >&5 +echo "configure:14280: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14296,7 +14299,14 @@ fi # Check whether --with-python or --without-python was given. if test "${with_python+set}" = set; then withval="$with_python" - PYTHON=${withval-python} + case "${withval-python}" in + yes) + PYTHON=python + ;; + *) + PYTHON=${withval-python} + ;; + esac fi @@ -14312,16 +14322,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14316: checking configure summary" >&5 +echo "configure:14326: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else -- cgit From ccfe2b848583d4036fb1a11a25e8c87c80e59520 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 17 Sep 2002 05:38:12 +0000 Subject: Added --with-ads option, defaults to yes. If you run ./configure --with-ads=no or ./configure --without-ads Samba will build without linking to the various kerberos libraries. (This used to be commit edb6172abf0f07fead8ed3aaaebe0411d757aa64) --- source3/acconfig.h | 2 + source3/configure.in | 114 ++++++++++++++++++++++++++------------------ source3/include/config.h.in | 3 +- source3/include/includes.h | 4 +- 4 files changed, 74 insertions(+), 49 deletions(-) diff --git a/source3/acconfig.h b/source3/acconfig.h index 40a3a7cee1..21c6e33076 100644 --- a/source3/acconfig.h +++ b/source3/acconfig.h @@ -228,3 +228,5 @@ #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE #undef FREEBSD_SENDFILE_API +#undef WITH_ADS + diff --git a/source3/configure.in b/source3/configure.in index 0e4e910f0c..fe697e4209 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -1936,63 +1936,85 @@ AC_ARG_WITH(dfs, AC_MSG_RESULT(no) ) - ################################################# -# see if this box has the RedHat location for kerberos -AC_MSG_CHECKING(for /usr/kerberos) -if test -d /usr/kerberos; then +# active directory support + +with_ads_support=yes +AC_MSG_CHECKING([whether to use Active Directory]) + +AC_ARG_WITH(ads, +[ --with-ads Active Directory support (default yes)], +[ case "$withval" in + no) + with_ads_support=no + ;; + esac ]) + +if test x"$with_ads_support" = x"yes"; then + AC_DEFINE(WITH_ADS) +fi + +AC_MSG_RESULT($with_ads_support) + +if test x"$with_ads_support" = x"yes"; then + + ################################################# + # see if this box has the RedHat location for kerberos + AC_MSG_CHECKING(for /usr/kerberos) + if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" AC_MSG_RESULT(yes) -else + else AC_MSG_RESULT(no) -fi + fi -################################################# -# check for location of Kerberos 5 install -AC_MSG_CHECKING(for kerberos 5 install path) -AC_ARG_WITH(krb5, -[ --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)], -[ case "$withval" in - no) + ################################################# + # check for location of Kerberos 5 install + AC_MSG_CHECKING(for kerberos 5 install path) + AC_ARG_WITH(krb5, + [ --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)], + [ case "$withval" in + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + LIBS="$LIBS -lkrb5" + CFLAGS="$CFLAGS -I$withval/include" + CPPFLAGS="$CPPFLAGS -I$withval/include" + LDFLAGS="$LDFLAGS -L$withval/lib" + ;; + esac ], AC_MSG_RESULT(no) - ;; - *) - AC_MSG_RESULT(yes) - LIBS="$LIBS -lkrb5" - CFLAGS="$CFLAGS -I$withval/include" - CPPFLAGS="$CPPFLAGS -I$withval/include" - LDFLAGS="$LDFLAGS -L$withval/lib" - ;; - esac ], - AC_MSG_RESULT(no) -) - -# now check for krb5.h. Some systems have the libraries without the headers! -# note that this check is done here to allow for different kerberos -# include paths -AC_CHECK_HEADERS(krb5.h) - -# now check for gssapi headers. This is also done here to allow for -# different kerberos include paths -AC_CHECK_HEADERS(gssapi/gssapi_generic.h gssapi/gssapi.h) - -################################################################## -# we might need the k5crypto and com_err libraries on some systems -AC_CHECK_LIB(com_err, _et_list, [LIBS="$LIBS -lcom_err"]) -AC_CHECK_LIB(k5crypto, krb5_encrypt_data, [LIBS="$LIBS -lk5crypto"]) - -######################################################## -# now see if we can find the krb5 libs in standard paths -# or as specified above -AC_CHECK_LIB(krb5, krb5_mk_req_extended, [LIBS="$LIBS -lkrb5"; + ) + + # now check for krb5.h. Some systems have the libraries without the headers! + # note that this check is done here to allow for different kerberos + # include paths + AC_CHECK_HEADERS(krb5.h) + + # now check for gssapi headers. This is also done here to allow for + # different kerberos include paths + AC_CHECK_HEADERS(gssapi/gssapi_generic.h gssapi/gssapi.h) + + ################################################################## + # we might need the k5crypto and com_err libraries on some systems + AC_CHECK_LIB(com_err, _et_list, [LIBS="$LIBS -lcom_err"]) + AC_CHECK_LIB(k5crypto, krb5_encrypt_data, [LIBS="$LIBS -lk5crypto"]) + + ######################################################## + # now see if we can find the krb5 libs in standard paths + # or as specified above + AC_CHECK_LIB(krb5, krb5_mk_req_extended, [LIBS="$LIBS -lkrb5"; AC_DEFINE(HAVE_KRB5)]) -######################################################## -# now see if we can find the gssapi libs in standard paths -AC_CHECK_LIB(gssapi_krb5, gss_display_status, [LIBS="$LIBS -lgssapi_krb5"; + ######################################################## + # now see if we can find the gssapi libs in standard paths + AC_CHECK_LIB(gssapi_krb5, gss_display_status, [LIBS="$LIBS -lgssapi_krb5"; AC_DEFINE(HAVE_GSSAPI)]) +fi ################################################################## # we might need the lber lib on some systems. To avoid link errors diff --git a/source3/include/config.h.in b/source3/include/config.h.in index 9fbde2bf37..8e744e43f7 100644 --- a/source3/include/config.h.in +++ b/source3/include/config.h.in @@ -1,4 +1,4 @@ -/* include/config.h.in. Generated automatically from configure.in by autoheader. */ +/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */ /* Define if on AIX 3. System headers sometimes define this. @@ -294,6 +294,7 @@ #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE #undef FREEBSD_SENDFILE_API +#undef WITH_ADS /* The number of bytes in a int. */ #undef SIZEOF_INT diff --git a/source3/include/includes.h b/source3/include/includes.h index eaa0d25239..bdf5bbcef3 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -420,8 +420,8 @@ #include #endif -/* we support ADS if we have krb5 and ldap libs */ -#if defined(HAVE_KRB5) && defined(HAVE_LDAP) +/* we support ADS if we want it and have krb5 and ldap libs */ +#if defined(WITH_ADS) && defined(HAVE_KRB5) && defined(HAVE_LDAP) #define HAVE_ADS #endif -- cgit From 1d641866aaa36b6ecb797a248e6fb70c0241e4a9 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 17 Sep 2002 05:38:44 +0000 Subject: Rerun configure. (This used to be commit c7d4bfde737c5aeda14b72e48197bb2a9a02bbd8) --- source3/configure | 1755 +++++++++++++++++++++++++++-------------------------- 1 file changed, 893 insertions(+), 862 deletions(-) diff --git a/source3/configure b/source3/configure index 8caba2b6c4..ced279d410 100755 --- a/source3/configure +++ b/source3/configure @@ -46,6 +46,8 @@ ac_help="$ac_help --with-afs Include AFS clear-text auth support (default=no) " ac_help="$ac_help --with-dce-dfs Include DCE/DFS clear-text auth support (default=no)" +ac_help="$ac_help + --with-ads Active Directory support (default yes)" ac_help="$ac_help --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)" ac_help="$ac_help @@ -820,7 +822,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:824: checking for $ac_word" >&5 +echo "configure:826: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -850,7 +852,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:854: checking for $ac_word" >&5 +echo "configure:856: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -901,7 +903,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:905: checking for $ac_word" >&5 +echo "configure:907: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -933,7 +935,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:937: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:939: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -944,12 +946,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 948 "configure" +#line 950 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -975,12 +977,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:979: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:981: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:984: checking whether we are using GNU C" >&5 +echo "configure:986: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -989,7 +991,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:993: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:995: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1008,7 +1010,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1012: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1014: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1070,7 +1072,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1074: checking for a BSD compatible install" >&5 +echo "configure:1076: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1127,7 +1129,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1131: checking for $ac_word" >&5 +echo "configure:1133: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1159,7 +1161,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1163: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1165: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1175,7 +1177,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1179: checking for POSIXized ISC" >&5 +echo "configure:1181: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1198,10 +1200,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1202: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1204: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1205: checking whether cc understands -c and -o together" >&5 +echo "configure:1207: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1213,16 +1215,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1218: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1226: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1227: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1228: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1256,20 +1258,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1260: checking that the C compiler understands volatile" >&5 +echo "configure:1262: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1318,7 +1320,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1322: checking host system type" >&5 +echo "configure:1324: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1339,7 +1341,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1343: checking target system type" >&5 +echo "configure:1345: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1357,7 +1359,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1361: checking build system type" >&5 +echo "configure:1363: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1391,7 +1393,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1395: checking config.cache system type" >&5 +echo "configure:1397: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1419,7 +1421,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1423: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1425: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1580,14 +1582,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1584: checking for LFS support" >&5 +echo "configure:1586: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1599,7 +1601,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1630,14 +1632,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1634: checking for LFS support" >&5 +echo "configure:1636: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1675,7 +1677,7 @@ main() { } EOF -if { (eval echo configure:1679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1708,14 +1710,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1712: checking for LFS support" >&5 +echo "configure:1714: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1727,7 +1729,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1757,21 +1759,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1761: checking for inline" >&5 +echo "configure:1763: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1797,7 +1799,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1801: checking how to run the C preprocessor" >&5 +echo "configure:1803: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1812,13 +1814,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1829,13 +1831,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1841: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1846,13 +1848,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1856: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1858: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1877,12 +1879,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1881: checking for ANSI C header files" >&5 +echo "configure:1883: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1890,7 +1892,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1894: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1896: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1907,7 +1909,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1925,7 +1927,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1946,7 +1948,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1957,7 +1959,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1985,12 +1987,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1989: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1991: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1998,7 +2000,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:2002: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2004: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2023,7 +2025,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2027: checking for opendir in -ldir" >&5 +echo "configure:2029: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2031,7 +2033,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2064,7 +2066,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2068: checking for opendir in -lx" >&5 +echo "configure:2070: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2072,7 +2074,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2106,12 +2108,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2110: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2112: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2120,7 +2122,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2141,12 +2143,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2145: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2147: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2162,7 +2164,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2166: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2186,17 +2188,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2190: checking for $ac_hdr" >&5 +echo "configure:2192: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2202: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2226,17 +2228,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2230: checking for $ac_hdr" >&5 +echo "configure:2232: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2266,17 +2268,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2270: checking for $ac_hdr" >&5 +echo "configure:2272: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2280: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2282: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2306,17 +2308,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2310: checking for $ac_hdr" >&5 +echo "configure:2312: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2346,17 +2348,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2350: checking for $ac_hdr" >&5 +echo "configure:2352: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2360: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2386,17 +2388,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2390: checking for $ac_hdr" >&5 +echo "configure:2392: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2400: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2402: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2426,17 +2428,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2430: checking for $ac_hdr" >&5 +echo "configure:2432: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2442: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2466,17 +2468,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2470: checking for $ac_hdr" >&5 +echo "configure:2472: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2480: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2482: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2506,17 +2508,17 @@ for ac_hdr in sys/syslog.h syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2510: checking for $ac_hdr" >&5 +echo "configure:2512: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2550,14 +2552,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2563: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2579,17 +2581,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2583: checking for $ac_hdr" >&5 +echo "configure:2585: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2593: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2595: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2619,17 +2621,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2623: checking for $ac_hdr" >&5 +echo "configure:2625: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2633: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2635: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2659,17 +2661,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2663: checking for $ac_hdr" >&5 +echo "configure:2665: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2673: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2675: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2699,17 +2701,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2703: checking for $ac_hdr" >&5 +echo "configure:2705: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2713: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2739,17 +2741,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2743: checking for $ac_hdr" >&5 +echo "configure:2745: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2753: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2755: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2781,17 +2783,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2785: checking for $ac_hdr" >&5 +echo "configure:2787: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2823,17 +2825,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2827: checking for $ac_hdr" >&5 +echo "configure:2829: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2865,17 +2867,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2869: checking for $ac_hdr" >&5 +echo "configure:2871: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2879: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2881: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2903,7 +2905,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2907: checking size of int" >&5 +echo "configure:2909: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2911,7 +2913,7 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < #include @@ -2923,7 +2925,7 @@ main() exit(0); } EOF -if { (eval echo configure:2927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2943,7 +2945,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2947: checking size of long" >&5 +echo "configure:2949: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2951,7 +2953,7 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < #include @@ -2963,7 +2965,7 @@ main() exit(0); } EOF -if { (eval echo configure:2967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2983,7 +2985,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2987: checking size of short" >&5 +echo "configure:2989: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2991,7 +2993,7 @@ else ac_cv_sizeof_short=cross else cat > conftest.$ac_ext < #include @@ -3003,7 +3005,7 @@ main() exit(0); } EOF -if { (eval echo configure:3007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3024,12 +3026,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3028: checking for working const" >&5 +echo "configure:3030: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3099,21 +3101,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3103: checking for inline" >&5 +echo "configure:3105: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3119: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3139,14 +3141,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3143: checking whether byte ordering is bigendian" >&5 +echo "configure:3145: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3157,11 +3159,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3161: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3172,7 +3174,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3192,7 +3194,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3229,14 +3231,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3233: checking whether char is unsigned" >&5 +echo "configure:3235: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3293,12 +3295,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3297: checking return type of signal handlers" >&5 +echo "configure:3299: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3315,7 +3317,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3321: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3334,12 +3336,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3338: checking for uid_t in sys/types.h" >&5 +echo "configure:3340: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3368,12 +3370,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3372: checking for mode_t" >&5 +echo "configure:3374: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3401,12 +3403,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3405: checking for off_t" >&5 +echo "configure:3407: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3434,12 +3436,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3438: checking for size_t" >&5 +echo "configure:3440: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3467,12 +3469,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3471: checking for pid_t" >&5 +echo "configure:3473: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3500,12 +3502,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3504: checking for st_rdev in struct stat" >&5 +echo "configure:3506: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3513,7 +3515,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3519: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3534,12 +3536,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3538: checking for d_off in dirent" >&5 +echo "configure:3540: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3549,7 +3551,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3553: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3570,12 +3572,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3574: checking for ino_t" >&5 +echo "configure:3576: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3603,12 +3605,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3607: checking for loff_t" >&5 +echo "configure:3609: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3636,12 +3638,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3640: checking for offset_t" >&5 +echo "configure:3642: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3669,12 +3671,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3673: checking for ssize_t" >&5 +echo "configure:3675: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3702,12 +3704,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3706: checking for wchar_t" >&5 +echo "configure:3708: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3749,7 +3751,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3753: checking for $ac_word" >&5 +echo "configure:3755: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3798,12 +3800,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3802: checking for $ac_func" >&5 +echo "configure:3804: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3852,7 +3854,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3856: checking for dlopen in -ldl" >&5 +echo "configure:3858: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3860,7 +3862,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3901,13 +3903,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3905: checking for immediate structures" >&5 +echo "configure:3907: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3925,7 +3927,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3931: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3948,13 +3950,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3952: checking for unix domain sockets" >&5 +echo "configure:3954: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3969,7 +3971,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3973: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3975: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3991,13 +3993,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3995: checking for socklen_t type" >&5 +echo "configure:3997: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4010,7 +4012,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4031,13 +4033,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4035: checking for sig_atomic_t type" >&5 +echo "configure:4037: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4050,7 +4052,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4054: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4056: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4073,20 +4075,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4077: checking for errno declaration" >&5 +echo "configure:4079: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4108,20 +4110,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4112: checking for setresuid declaration" >&5 +echo "configure:4114: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4127: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4143,20 +4145,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4147: checking for setresgid declaration" >&5 +echo "configure:4149: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4178,20 +4180,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4182: checking for asprintf declaration" >&5 +echo "configure:4184: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4197: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4213,20 +4215,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4217: checking for vasprintf declaration" >&5 +echo "configure:4219: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4230: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4248,20 +4250,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4252: checking for vsnprintf declaration" >&5 +echo "configure:4254: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4267: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4283,20 +4285,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4287: checking for snprintf declaration" >&5 +echo "configure:4289: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4320,7 +4322,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4324: checking for real setresuid" >&5 +echo "configure:4326: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4329,12 +4331,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4359,7 +4361,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4363: checking for real setresgid" >&5 +echo "configure:4365: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4368,13 +4370,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4397,7 +4399,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4401: checking for 8-bit clean memcmp" >&5 +echo "configure:4403: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4405,7 +4407,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4438,12 +4440,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4442: checking for $ac_func" >&5 +echo "configure:4444: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4492,7 +4494,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4496: checking for crypt in -lcrypt" >&5 +echo "configure:4498: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4500,7 +4502,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4544,7 +4546,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4548: checking whether to use readline" >&5 +echo "configure:4550: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4556,17 +4558,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4560: checking for $ac_hdr" >&5 +echo "configure:4562: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4570: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4572: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4596,17 +4598,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4600: checking for $ac_hdr" >&5 +echo "configure:4602: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4610: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4637,17 +4639,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4641: checking for $ac_hdr" >&5 +echo "configure:4643: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4653: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4670,7 +4672,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4674: checking for tgetent in -l${termlib}" >&5 +echo "configure:4676: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4678,7 +4680,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4711,7 +4713,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4715: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4717: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4719,7 +4721,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4781,17 +4783,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4785: checking for $ac_hdr" >&5 +echo "configure:4787: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4821,17 +4823,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4825: checking for $ac_hdr" >&5 +echo "configure:4827: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4835: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4862,17 +4864,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4866: checking for $ac_hdr" >&5 +echo "configure:4868: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4876: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4895,7 +4897,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4899: checking for tgetent in -l${termlib}" >&5 +echo "configure:4901: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4903,7 +4905,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4936,7 +4938,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4940: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4942: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4944,7 +4946,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5005,7 +5007,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5009: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5011: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5013,7 +5015,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5057,12 +5059,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5061: checking for $ac_func" >&5 +echo "configure:5063: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5113,7 +5115,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5117: checking for printf in -lnsl_s" >&5 +echo "configure:5119: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5121,7 +5123,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5163,7 +5165,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5167: checking for printf in -lnsl" >&5 +echo "configure:5169: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5171,7 +5173,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5213,7 +5215,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5217: checking for connect in -lsocket" >&5 +echo "configure:5219: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5221,7 +5223,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5263,7 +5265,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5267: checking for connect in -linet" >&5 +echo "configure:5269: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5271,7 +5273,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5326,12 +5328,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5330: checking for $ac_func" >&5 +echo "configure:5332: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5380,7 +5382,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5384: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5386: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5388,7 +5390,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5429,12 +5431,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5433: checking for $ac_func" >&5 +echo "configure:5435: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5490,12 +5492,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5494: checking for $ac_func" >&5 +echo "configure:5496: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5545,12 +5547,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5549: checking for $ac_func" >&5 +echo "configure:5551: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5600,12 +5602,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5604: checking for $ac_func" >&5 +echo "configure:5606: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5655,12 +5657,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5659: checking for $ac_func" >&5 +echo "configure:5661: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5710,12 +5712,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5714: checking for $ac_func" >&5 +echo "configure:5716: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5765,12 +5767,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5769: checking for $ac_func" >&5 +echo "configure:5771: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5820,12 +5822,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5824: checking for $ac_func" >&5 +echo "configure:5826: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5875,12 +5877,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5879: checking for $ac_func" >&5 +echo "configure:5881: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5909: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5930,12 +5932,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5934: checking for $ac_func" >&5 +echo "configure:5936: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5964: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5985,12 +5987,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5989: checking for $ac_func" >&5 +echo "configure:5991: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6041,12 +6043,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6045: checking for $ac_func" >&5 +echo "configure:6047: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6098,12 +6100,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6102: checking for $ac_func" >&5 +echo "configure:6104: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6154,12 +6156,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6158: checking for $ac_func" >&5 +echo "configure:6160: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6209,12 +6211,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6213: checking for $ac_func" >&5 +echo "configure:6215: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6264,12 +6266,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6268: checking for $ac_func" >&5 +echo "configure:6270: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6319,12 +6321,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6323: checking for $ac_func" >&5 +echo "configure:6325: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6374,12 +6376,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6378: checking for $ac_func" >&5 +echo "configure:6380: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6429,12 +6431,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6433: checking for $ac_func" >&5 +echo "configure:6435: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6484,12 +6486,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6488: checking for $ac_func" >&5 +echo "configure:6490: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6539,12 +6541,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6543: checking for $ac_func" >&5 +echo "configure:6545: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6594,12 +6596,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6598: checking for $ac_func" >&5 +echo "configure:6600: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6649,12 +6651,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6653: checking for $ac_func" >&5 +echo "configure:6655: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6704,12 +6706,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6708: checking for $ac_func" >&5 +echo "configure:6710: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6759,12 +6761,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6763: checking for $ac_func" >&5 +echo "configure:6765: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6814,12 +6816,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6818: checking for $ac_func" >&5 +echo "configure:6820: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6869,12 +6871,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6873: checking for $ac_func" >&5 +echo "configure:6875: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6928,9 +6930,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6932: checking for stat64 in " >&5 +echo "configure:6934: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6961,9 +6963,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6965: checking for lstat64 in " >&5 +echo "configure:6967: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6994,9 +6996,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:6998: checking for fstat64 in " >&5 +echo "configure:7000: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7028,7 +7030,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7032: checking for dn_expand in -lresolv" >&5 +echo "configure:7034: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7036,7 +7038,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7085,12 +7087,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7089: checking for $ac_func" >&5 +echo "configure:7091: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7138,7 +7140,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7142: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7144: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7146,7 +7148,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7187,12 +7189,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7191: checking for $ac_func" >&5 +echo "configure:7193: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7246,12 +7248,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7250: checking for $ac_func" >&5 +echo "configure:7252: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7299,7 +7301,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7303: checking for putprpwnam in -lsec" >&5 +echo "configure:7305: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7307,7 +7309,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7348,12 +7350,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7352: checking for $ac_func" >&5 +echo "configure:7354: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7408,12 +7410,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7412: checking for $ac_func" >&5 +echo "configure:7414: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7461,7 +7463,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7465: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7467: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7469,7 +7471,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7510,12 +7512,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7514: checking for $ac_func" >&5 +echo "configure:7516: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7569,12 +7571,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7573: checking for $ac_func" >&5 +echo "configure:7575: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7622,7 +7624,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7626: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7628: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7630,7 +7632,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7671,12 +7673,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7675: checking for $ac_func" >&5 +echo "configure:7677: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7732,12 +7734,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7736: checking for $ac_func" >&5 +echo "configure:7738: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7785,7 +7787,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7789: checking for getspnam in -lgen" >&5 +echo "configure:7791: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7793,7 +7795,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7834,12 +7836,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7838: checking for $ac_func" >&5 +echo "configure:7840: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7894,12 +7896,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7898: checking for $ac_func" >&5 +echo "configure:7900: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7947,7 +7949,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7951: checking for getspnam in -lsecurity" >&5 +echo "configure:7953: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7955,7 +7957,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7996,12 +7998,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8000: checking for $ac_func" >&5 +echo "configure:8002: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8055,12 +8057,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8059: checking for $ac_func" >&5 +echo "configure:8061: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8108,7 +8110,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8112: checking for getspnam in -lsec" >&5 +echo "configure:8114: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8116,7 +8118,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8157,12 +8159,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8161: checking for $ac_func" >&5 +echo "configure:8163: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8217,12 +8219,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8221: checking for $ac_func" >&5 +echo "configure:8223: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8270,7 +8272,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8274: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8276: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8278,7 +8280,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8319,12 +8321,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8323: checking for $ac_func" >&5 +echo "configure:8325: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8378,12 +8380,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8382: checking for $ac_func" >&5 +echo "configure:8384: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8431,7 +8433,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8435: checking for bigcrypt in -lsec" >&5 +echo "configure:8437: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8439,7 +8441,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8480,12 +8482,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8484: checking for $ac_func" >&5 +echo "configure:8486: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8540,12 +8542,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8544: checking for $ac_func" >&5 +echo "configure:8546: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8593,7 +8595,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8597: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8599: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8601,7 +8603,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8642,12 +8644,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8646: checking for $ac_func" >&5 +echo "configure:8648: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8701,12 +8703,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8705: checking for $ac_func" >&5 +echo "configure:8707: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8754,7 +8756,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8758: checking for getprpwnam in -lsec" >&5 +echo "configure:8760: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8762,7 +8764,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8803,12 +8805,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8807: checking for $ac_func" >&5 +echo "configure:8809: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8875,7 +8877,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8879: checking ability to build shared libraries" >&5 +echo "configure:8881: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9035,7 +9037,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9039: checking for $ac_word" >&5 +echo "configure:9041: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9092,17 +9094,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9096: checking linker flags for shared libraries" >&5 +echo "configure:9098: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9099: checking compiler flags for position-independent code" >&5 +echo "configure:9101: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9106: checking whether building shared libraries actually works" >&5 +echo "configure:9108: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9133,7 +9135,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9137: checking for long long" >&5 +echo "configure:9139: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9142,12 +9144,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9174,20 +9176,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9178: checking for LL suffix on long long integers" >&5 +echo "configure:9180: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9209,7 +9211,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9213: checking for 64 bit off_t" >&5 +echo "configure:9215: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9218,13 +9220,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9247,7 +9249,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9251: checking for off64_t" >&5 +echo "configure:9253: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9256,7 +9258,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9289,7 +9291,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9293: checking for 64 bit ino_t" >&5 +echo "configure:9295: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9298,13 +9300,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9327,7 +9329,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9331: checking for ino64_t" >&5 +echo "configure:9333: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9336,7 +9338,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9369,7 +9371,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9373: checking for dev64_t" >&5 +echo "configure:9375: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9378,7 +9380,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9411,13 +9413,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9415: checking for struct dirent64" >&5 +echo "configure:9417: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9450,7 +9452,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9454: checking for major macro" >&5 +echo "configure:9456: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9459,7 +9461,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9491,7 +9493,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9495: checking for minor macro" >&5 +echo "configure:9497: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9500,7 +9502,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9532,7 +9534,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9536: checking for unsigned char" >&5 +echo "configure:9538: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9541,12 +9543,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9550: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9569,13 +9571,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9573: checking for sin_len in sock" >&5 +echo "configure:9575: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9584,7 +9586,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9588: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9590: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9605,13 +9607,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9609: checking whether seekdir returns void" >&5 +echo "configure:9611: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9620,7 +9622,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9624: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9626: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9641,20 +9643,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9645: checking for __FILE__ macro" >&5 +echo "configure:9647: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9658: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9675,20 +9677,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9679: checking for __FUNCTION__ macro" >&5 +echo "configure:9681: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9694: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9709,7 +9711,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9713: checking if gettimeofday takes tz argument" >&5 +echo "configure:9715: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9718,14 +9720,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9748,13 +9750,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9752: checking for __va_copy" >&5 +echo "configure:9754: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9762,7 +9764,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9783,7 +9785,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9787: checking for C99 vsnprintf" >&5 +echo "configure:9789: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9792,7 +9794,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9819,7 +9821,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9823: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9842,7 +9844,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9846: checking for broken readdir" >&5 +echo "configure:9848: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9851,7 +9853,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9859,7 +9861,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9882,13 +9884,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9886: checking for utimbuf" >&5 +echo "configure:9888: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9896,7 +9898,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9900: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9902: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9920,12 +9922,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9924: checking for $ac_func" >&5 +echo "configure:9926: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9974,13 +9976,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9978: checking for ut_name in utmp" >&5 +echo "configure:9980: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9988,7 +9990,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9994: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10009,13 +10011,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10013: checking for ut_user in utmp" >&5 +echo "configure:10015: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10023,7 +10025,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10027: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10029: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10044,13 +10046,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10048: checking for ut_id in utmp" >&5 +echo "configure:10050: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10058,7 +10060,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10062: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10064: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10079,13 +10081,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10083: checking for ut_host in utmp" >&5 +echo "configure:10085: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10093,7 +10095,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10097: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10099: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10114,13 +10116,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10118: checking for ut_time in utmp" >&5 +echo "configure:10120: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10128,7 +10130,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10149,13 +10151,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10153: checking for ut_tv in utmp" >&5 +echo "configure:10155: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10163,7 +10165,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10167: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10184,13 +10186,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10188: checking for ut_type in utmp" >&5 +echo "configure:10190: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10198,7 +10200,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10204: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10219,13 +10221,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10223: checking for ut_pid in utmp" >&5 +echo "configure:10225: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10233,7 +10235,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10237: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10239: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10254,13 +10256,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10258: checking for ut_exit in utmp" >&5 +echo "configure:10260: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10268,7 +10270,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10274: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10289,13 +10291,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10293: checking for ut_addr in utmp" >&5 +echo "configure:10295: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10303,7 +10305,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10309: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10325,13 +10327,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10329: checking whether pututline returns pointer" >&5 +echo "configure:10331: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10339,7 +10341,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10361,13 +10363,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10365: checking for ut_syslen in utmpx" >&5 +echo "configure:10367: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10375,7 +10377,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10379: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10399,7 +10401,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10403: checking whether to use libiconv" >&5 +echo "configure:10405: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10412,7 +10414,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10416: checking for iconv_open in -liconv" >&5 +echo "configure:10418: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10420,7 +10422,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10474,7 +10476,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10478: checking for working iconv" >&5 +echo "configure:10480: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10483,7 +10485,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10494,7 +10496,7 @@ main() { } EOF -if { (eval echo configure:10498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10518,7 +10520,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10522: checking for Linux kernel oplocks" >&5 +echo "configure:10524: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10527,7 +10529,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10541,7 +10543,7 @@ main() { } EOF -if { (eval echo configure:10545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10564,7 +10566,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10568: checking for kernel change notify support" >&5 +echo "configure:10570: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10573,7 +10575,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10587,7 +10589,7 @@ main() { } EOF -if { (eval echo configure:10591: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10610,7 +10612,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10614: checking for kernel share modes" >&5 +echo "configure:10616: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10619,7 +10621,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10635,7 +10637,7 @@ main() { } EOF -if { (eval echo configure:10639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10661,13 +10663,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10665: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10667: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10675,7 +10677,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10679: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10681: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10696,7 +10698,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10700: checking for irix specific capabilities" >&5 +echo "configure:10702: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10705,7 +10707,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10720,7 +10722,7 @@ main() { } EOF -if { (eval echo configure:10724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10748,13 +10750,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10752: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10754: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10764,7 +10766,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10770: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10785,13 +10787,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10789: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10791: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10801,7 +10803,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10805: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10807: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10822,13 +10824,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10826: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10828: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10838,7 +10840,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10844: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10859,13 +10861,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10863: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10865: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10875,7 +10877,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10881: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10897,13 +10899,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10901: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10903: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10917,7 +10919,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10938,16 +10940,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10942: checking for test routines" >&5 +echo "configure:10944: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10961,7 +10963,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10965: checking for ftruncate extend" >&5 +echo "configure:10967: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10970,11 +10972,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10997,7 +10999,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11001: checking for AF_LOCAL socket support" >&5 +echo "configure:11003: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11006,11 +11008,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11034,7 +11036,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11038: checking for broken getgroups" >&5 +echo "configure:11040: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11043,11 +11045,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11070,7 +11072,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11074: checking whether getpass should be replaced" >&5 +echo "configure:11076: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11078,7 +11080,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11097: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11114,7 +11116,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11118: checking for broken inet_ntoa" >&5 +echo "configure:11120: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11123,7 +11125,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11137,7 +11139,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11160,7 +11162,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11164: checking for secure mkstemp" >&5 +echo "configure:11166: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11169,7 +11171,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11186,7 +11188,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11209,7 +11211,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11213: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11215: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11218,12 +11220,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11246,7 +11248,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11250: checking for root" >&5 +echo "configure:11252: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11255,11 +11257,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11265: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11287,7 +11289,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11291: checking for iface AIX" >&5 +echo "configure:11293: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11296,7 +11298,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11328,7 +11330,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11332: checking for iface ifconf" >&5 +echo "configure:11334: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11337,7 +11339,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11370,7 +11372,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11374: checking for iface ifreq" >&5 +echo "configure:11376: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11379,7 +11381,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11416,7 +11418,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11420: checking for setresuid" >&5 +echo "configure:11422: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11425,7 +11427,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11459,7 +11461,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11463: checking for setreuid" >&5 +echo "configure:11465: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11468,7 +11470,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11501,7 +11503,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11505: checking for seteuid" >&5 +echo "configure:11507: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11510,7 +11512,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11543,7 +11545,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11547: checking for setuidx" >&5 +echo "configure:11549: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11552,7 +11554,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11585,7 +11587,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11589: checking for working mmap" >&5 +echo "configure:11591: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11594,11 +11596,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11621,7 +11623,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11625: checking for ftruncate needs root" >&5 +echo "configure:11627: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11630,11 +11632,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11657,7 +11659,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11661: checking for fcntl locking" >&5 +echo "configure:11663: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11666,11 +11668,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11693,7 +11695,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11697: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11699: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11702,11 +11704,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11731,7 +11733,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11735: checking for 64 bit fcntl locking" >&5 +echo "configure:11737: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11740,7 +11742,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11789,13 +11791,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11793: checking for st_blocks in struct stat" >&5 +echo "configure:11795: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11804,7 +11806,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11808: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11825,13 +11827,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11829: checking for st_blksize in struct stat" >&5 +echo "configure:11831: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11840,7 +11842,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11844: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11846: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11863,13 +11865,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11867: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11869: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11889: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11906,13 +11908,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11910: checking for broken nisplus include files" >&5 +echo "configure:11912: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11922,7 +11924,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11928: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11946,7 +11948,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11950: checking whether to use smbwrapper" >&5 +echo "configure:11952: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11993,7 +11995,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11997: checking whether to use AFS clear-text auth" >&5 +echo "configure:11999: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12019,7 +12021,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12023: checking whether to use DFS clear-text auth" >&5 +echo "configure:12025: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12041,63 +12043,91 @@ else fi - ################################################# -# see if this box has the RedHat location for kerberos -echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12049: checking for /usr/kerberos" >&5 -if test -d /usr/kerberos; then +# active directory support + +with_ads_support=yes +echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 +echo "configure:12052: checking whether to use Active Directory" >&5 + +# Check whether --with-ads or --without-ads was given. +if test "${with_ads+set}" = set; then + withval="$with_ads" + case "$withval" in + no) + with_ads_support=no + ;; + esac +fi + + +if test x"$with_ads_support" = x"yes"; then + cat >> confdefs.h <<\EOF +#define WITH_ADS 1 +EOF + +fi + +echo "$ac_t""$with_ads_support" 1>&6 + +if test x"$with_ads_support" = x"yes"; then + + ################################################# + # see if this box has the RedHat location for kerberos + echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 +echo "configure:12079: checking for /usr/kerberos" >&5 + if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" echo "$ac_t""yes" 1>&6 -else + else echo "$ac_t""no" 1>&6 -fi + fi -################################################# -# check for location of Kerberos 5 install -echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12062: checking for kerberos 5 install path" >&5 -# Check whether --with-krb5 or --without-krb5 was given. + ################################################# + # check for location of Kerberos 5 install + echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 +echo "configure:12092: checking for kerberos 5 install path" >&5 + # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" case "$withval" in - no) - echo "$ac_t""no" 1>&6 - ;; - *) - echo "$ac_t""yes" 1>&6 - LIBS="$LIBS -lkrb5" - CFLAGS="$CFLAGS -I$withval/include" - CPPFLAGS="$CPPFLAGS -I$withval/include" - LDFLAGS="$LDFLAGS -L$withval/lib" - ;; - esac + no) + echo "$ac_t""no" 1>&6 + ;; + *) + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -lkrb5" + CFLAGS="$CFLAGS -I$withval/include" + CPPFLAGS="$CPPFLAGS -I$withval/include" + LDFLAGS="$LDFLAGS -L$withval/lib" + ;; + esac else echo "$ac_t""no" 1>&6 - + fi -# now check for krb5.h. Some systems have the libraries without the headers! -# note that this check is done here to allow for different kerberos -# include paths -for ac_hdr in krb5.h + # now check for krb5.h. Some systems have the libraries without the headers! + # note that this check is done here to allow for different kerberos + # include paths + for ac_hdr in krb5.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12091: checking for $ac_hdr" >&5 +echo "configure:12121: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12101: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12131: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12124,23 +12154,23 @@ fi done -# now check for gssapi headers. This is also done here to allow for -# different kerberos include paths -for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h + # now check for gssapi headers. This is also done here to allow for + # different kerberos include paths + for ac_hdr in gssapi/gssapi_generic.h gssapi/gssapi.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12134: checking for $ac_hdr" >&5 +echo "configure:12164: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12174: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12167,10 +12197,10 @@ fi done -################################################################## -# we might need the k5crypto and com_err libraries on some systems -echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12174: checking for _et_list in -lcom_err" >&5 + ################################################################## + # we might need the k5crypto and com_err libraries on some systems + echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 +echo "configure:12204: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12178,7 +12208,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12209,8 +12239,8 @@ else echo "$ac_t""no" 1>&6 fi -echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12214: checking for krb5_encrypt_data in -lk5crypto" >&5 + echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 +echo "configure:12244: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12218,7 +12248,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12250,11 +12280,11 @@ else fi -######################################################## -# now see if we can find the krb5 libs in standard paths -# or as specified above -echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12258: checking for krb5_mk_req_extended in -lkrb5" >&5 + ######################################################## + # now see if we can find the krb5 libs in standard paths + # or as specified above + echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 +echo "configure:12288: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12262,7 +12292,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12298,10 +12328,10 @@ else fi -######################################################## -# now see if we can find the gssapi libs in standard paths -echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12305: checking for gss_display_status in -lgssapi_krb5" >&5 + ######################################################## + # now see if we can find the gssapi libs in standard paths + echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 +echo "configure:12335: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12309,7 +12339,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12344,12 +12374,13 @@ else echo "$ac_t""no" 1>&6 fi +fi ################################################################## # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12353: checking for ber_scanf in -llber" >&5 +echo "configure:12384: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12357,7 +12388,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12393,7 +12424,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12397: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12428: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12401,7 +12432,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12443,12 +12474,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12447: checking for $ac_func" >&5 +echo "configure:12478: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12496,13 +12527,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12500: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12531: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12511,7 +12542,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12533,7 +12564,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12537: checking whether to use AUTOMOUNT" >&5 +echo "configure:12568: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12558,7 +12589,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12562: checking whether to use SMBMOUNT" >&5 +echo "configure:12593: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12595,7 +12626,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12599: checking whether to use PAM" >&5 +echo "configure:12630: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12621,7 +12652,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12625: checking for pam_get_data in -lpam" >&5 +echo "configure:12656: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12629,7 +12660,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12667,7 +12698,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12671: checking whether to use pam_smbpass" >&5 +echo "configure:12702: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12705,12 +12736,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12709: checking for $ac_func" >&5 +echo "configure:12740: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12759,7 +12790,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12763: checking for crypt in -lcrypt" >&5 +echo "configure:12794: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12767,7 +12798,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12813,7 +12844,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12817: checking for a crypt that needs truncated salt" >&5 +echo "configure:12848: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12822,11 +12853,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12852,7 +12883,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12856: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12887: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12884,7 +12915,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12888: checking whether to use TDB SAM database" >&5 +echo "configure:12919: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12909,7 +12940,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12913: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12944: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12940,7 +12971,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12944: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12975: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12965,7 +12996,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:12969: checking whether to use syslog logging" >&5 +echo "configure:13000: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -12990,7 +13021,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:12994: checking whether to use profiling" >&5 +echo "configure:13025: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13018,7 +13049,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13022: checking whether to support disk-quotas" >&5 +echo "configure:13053: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13029,13 +13060,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13033: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13064: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13047,7 +13078,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13096,7 +13127,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13100: checking whether to support utmp accounting" >&5 +echo "configure:13131: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13121,7 +13152,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13125: checking chosen man pages' language(s)" >&5 +echo "configure:13156: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13152,7 +13183,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13156: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13187: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13180,14 +13211,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13184: checking how to get filesystem space usage" >&5 +echo "configure:13215: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13191: checking statvfs64 function (SVR4)" >&5 +echo "configure:13222: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13195,7 +13226,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13242,12 +13273,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13246: checking statvfs function (SVR4)" >&5 +echo "configure:13277: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13255,7 +13286,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13280,7 +13311,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13284: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13315: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13288,7 +13319,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13301,7 +13332,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13328,7 +13359,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13332: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13363: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13336,7 +13367,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13382,7 +13413,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13386: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13417: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13390,7 +13421,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13400,7 +13431,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13427,7 +13458,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13431: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13462: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13435,7 +13466,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13451,7 +13482,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13478,7 +13509,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13482: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13513: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13486,7 +13517,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13506,7 +13537,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13539,9 +13570,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13543: checking if large file support can be enabled" >&5 +echo "configure:13574: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13619,7 +13650,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13623: checking whether to support ACLs" >&5 +echo "configure:13654: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13672,7 +13703,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13676: checking for acl_get_file in -lacl" >&5 +echo "configure:13707: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13680,7 +13711,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13719,13 +13750,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13723: checking for ACL support" >&5 +echo "configure:13754: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13733,7 +13764,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13753,13 +13784,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13757: checking for acl_get_perm_np" >&5 +echo "configure:13788: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13767,7 +13798,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13812,7 +13843,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13816: checking whether to support sendfile" >&5 +echo "configure:13847: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13822,13 +13853,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13826: checking for linux sendfile64 support" >&5 +echo "configure:13857: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13840,7 +13871,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13855,13 +13886,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13859: checking for linux sendfile support" >&5 +echo "configure:13890: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13873,7 +13904,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13889,13 +13920,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13893: checking for broken linux sendfile support" >&5 +echo "configure:13924: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -13967,13 +13998,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:13971: checking for freebsd sendfile support" >&5 +echo "configure:14002: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -13995,7 +14026,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:13999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14047,7 +14078,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14051: checking whether to build winbind" >&5 +echo "configure:14082: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14143,20 +14174,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14147: checking whether struct passwd has pw_comment" >&5 +echo "configure:14178: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14181,20 +14212,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14185: checking whether struct passwd has pw_age" >&5 +echo "configure:14216: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14233,7 +14264,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14237: checking for poptGetContext in -lpopt" >&5 +echo "configure:14268: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14241,7 +14272,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14276,7 +14307,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14280: checking whether to use included popt" >&5 +echo "configure:14311: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14322,16 +14353,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14326: checking configure summary" >&5 +echo "configure:14357: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else -- cgit From bd875704bff09cf0d90785575b74ae240cac0e48 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 17 Sep 2002 06:11:51 +0000 Subject: Added --with-ldap (default=yes) option. We should now be able to compile a non-ADS, non-LDAP version of Samba on a machine with Kerberos and LDAP libraries installed. This shouldn't break anything - let's keep an eye on the build farm just in case. (This used to be commit b9460e79a13ab74a5fc05a9db1b5cf4d402fb197) --- source3/configure.in | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/source3/configure.in b/source3/configure.in index fe697e4209..ef25ba4fed 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2016,15 +2016,33 @@ if test x"$with_ads_support" = x"yes"; then AC_DEFINE(HAVE_GSSAPI)]) fi -################################################################## -# we might need the lber lib on some systems. To avoid link errors -# this test must be before the libldap test -AC_CHECK_LIB(lber, ber_scanf, [LIBS="$LIBS -llber"]) - ######################################################## -# now see if we can find the ldap libs in standard paths -if test x$have_ldap != xyes; then -AC_CHECK_LIB(ldap, ldap_domain2hostlist, [LIBS="$LIBS -lldap"; +# Compile with LDAP support? + +with_ldap_support=yes +AC_MSG_CHECKING([whether to use LDAP]) + +AC_ARG_WITH(ldap, +[ --with-ldap LDAP support (default yes)], +[ case "$withval" in + no) + with_ldap_support=no + ;; + esac ]) + +AC_MSG_RESULT($with_ldap_support) + +if test x"$with_ldap_support" = x"yes"; then + + ################################################################## + # we might need the lber lib on some systems. To avoid link errors + # this test must be before the libldap test + AC_CHECK_LIB(lber, ber_scanf, [LIBS="$LIBS -llber"]) + + ######################################################## + # now see if we can find the ldap libs in standard paths + if test x$have_ldap != xyes; then + AC_CHECK_LIB(ldap, ldap_domain2hostlist, [LIBS="$LIBS -lldap"; AC_DEFINE(HAVE_LDAP)]) ######################################################## @@ -2036,6 +2054,7 @@ AC_CHECK_LIB(ldap, ldap_domain2hostlist, [LIBS="$LIBS -lldap"; #include #include ], [ldap_set_rebind_proc(0, 0, 0);], [pam_ldap_cv_ldap_set_rebind_proc=3], [pam_ldap_cv_ldap_set_rebind_proc=2]) ]) AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $pam_ldap_cv_ldap_set_rebind_proc) + fi fi ################################################# -- cgit From fffd0eb1428d9505391f8a3d2410ca0389ba113e Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 17 Sep 2002 12:07:47 +0000 Subject: another const cleanup (This used to be commit 443d5ebafad46a9a62527642628aff8e5d9dc10c) --- source3/libads/ldap_printer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/libads/ldap_printer.c b/source3/libads/ldap_printer.c index 64ae8252c8..66984477b8 100644 --- a/source3/libads/ldap_printer.c +++ b/source3/libads/ldap_printer.c @@ -28,7 +28,7 @@ results can be used. It should be freed using ads_msgfree. */ ADS_STATUS ads_find_printer_on_server(ADS_STRUCT *ads, void **res, - char *printer, char *servername) + const char *printer, char *servername) { ADS_STATUS status; char *srv_dn, **srv_cn, *exp; -- cgit From 9faf941652119cd5f754d34bfc7d34967bfbf688 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 17 Sep 2002 12:08:55 +0000 Subject: more const cleanups (This used to be commit dfa85f9c48aa3c8d93775df6b6ad2dec9a1692d7) --- source3/passdb/secrets.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source3/passdb/secrets.c b/source3/passdb/secrets.c index ec67b74390..307dc132fc 100644 --- a/source3/passdb/secrets.c +++ b/source3/passdb/secrets.c @@ -68,7 +68,7 @@ void *secrets_fetch(const char *key, size_t *size) /* store a secrets entry */ -BOOL secrets_store(const char *key, void *data, size_t size) +BOOL secrets_store(const char *key, const void *data, size_t size) { TDB_DATA kbuf, dbuf; secrets_init(); @@ -95,7 +95,7 @@ BOOL secrets_delete(const char *key) return tdb_delete(tdb, kbuf) == 0; } -BOOL secrets_store_domain_sid(char *domain, DOM_SID *sid) +BOOL secrets_store_domain_sid(char *domain, const DOM_SID *sid) { fstring key; @@ -148,7 +148,7 @@ BOOL secrets_fetch_domain_guid(char *domain, GUID *guid) strupper(key); dyn_guid = (GUID *)secrets_fetch(key, &size); - DEBUG(6,("key is %s, guid is at %x, size is %d\n", key, dyn_guid, size)); + DEBUG(6,("key is %s, size is %d\n", key, (int)size)); if ((NULL == dyn_guid) && (ROLE_DOMAIN_PDC == lp_server_role())) { uuid_generate_random(&new_guid); -- cgit From 3fefef7a7238e63716a8003aa27a08627a61b927 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 17 Sep 2002 12:09:46 +0000 Subject: disable stat cache when case sensitive (This used to be commit 3401c3616b3dcb99053f89d88f8e351c986c9096) --- source3/smbd/filename.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index ce98af4ace..d343db26f6 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -168,7 +168,7 @@ BOOL unix_convert(pstring name,connection_struct *conn,char *saved_last_componen pstrcpy(orig_path, name); - if(stat_cache_lookup(conn, name, dirpath, &start, &st)) { + if(!case_sensitive && stat_cache_lookup(conn, name, dirpath, &start, &st)) { *pst = st; return True; } -- cgit From b33681fc0b8ef7b9fa91c154f7c3117afafa349e Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 17 Sep 2002 12:12:50 +0000 Subject: Add clock skew handling to our kerberos code. This allows us to cope with the DC being out of sync with the local machine. (This used to be commit 0d28d769472ea3b98ae4c8757093dfd4499f6dd1) --- source3/auth/auth_domain.c | 2 +- source3/include/ads.h | 9 +++++- source3/libads/kerberos.c | 8 +++-- source3/libads/krb5_setpw.c | 14 ++++++--- source3/libads/ldap.c | 66 ++++++++++++++++++++++++++++++++++-------- source3/libads/sasl.c | 7 +++-- source3/libads/util.c | 2 +- source3/libsmb/cliconnect.c | 2 +- source3/libsmb/clikrb5.c | 14 ++++++++- source3/libsmb/clispnego.c | 4 +-- source3/nsswitch/winbindd_cm.c | 2 +- source3/utils/net_ads.c | 26 ++++++++--------- 12 files changed, 113 insertions(+), 43 deletions(-) diff --git a/source3/auth/auth_domain.c b/source3/auth/auth_domain.c index e8f11bb3d5..2e51a85281 100644 --- a/source3/auth/auth_domain.c +++ b/source3/auth/auth_domain.c @@ -48,7 +48,7 @@ static NTSTATUS ads_resolve_dc(fstring remote_machine, DEBUG(4,("ads_resolve_dc: realm=%s\n", ads->config.realm)); - ads->auth.no_bind = 1; + ads->auth.flags |= ADS_AUTH_NO_BIND; #ifdef HAVE_ADS /* a full ads_connect() is actually overkill, as we don't srictly need diff --git a/source3/include/ads.h b/source3/include/ads.h index 6106eb6b40..875b895e49 100644 --- a/source3/include/ads.h +++ b/source3/include/ads.h @@ -24,7 +24,8 @@ typedef struct { char *password; char *user_name; char *kdc_server; - int no_bind; + unsigned flags; + int time_offset; } auth; /* info derived from the servers config */ @@ -32,6 +33,7 @@ typedef struct { char *realm; char *bind_path; char *ldap_server_name; + time_t current_time; } config; } ADS_STRUCT; @@ -249,3 +251,8 @@ typedef void **ADS_MODLIST; /* DomainCntrollerAddressType */ #define ADS_INET_ADDRESS 0x00000001 #define ADS_NETBIOS_ADDRESS 0x00000002 + + +/* ads auth control flags */ +#define ADS_AUTH_DISABLE_KERBEROS 1 +#define ADS_AUTH_NO_BIND 2 diff --git a/source3/libads/kerberos.c b/source3/libads/kerberos.c index 9a486237c9..a80837cf4d 100644 --- a/source3/libads/kerberos.c +++ b/source3/libads/kerberos.c @@ -50,7 +50,7 @@ kerb_prompter(krb5_context ctx, void *data, simulate a kinit, putting the tgt in the default cache location remus@snapserver.com */ -int kerberos_kinit_password(const char *principal, const char *password) +int kerberos_kinit_password(const char *principal, const char *password, int time_offset) { krb5_context ctx; krb5_error_code code = 0; @@ -60,6 +60,10 @@ int kerberos_kinit_password(const char *principal, const char *password) if ((code = krb5_init_context(&ctx))) return code; + + if (time_offset != 0) { + krb5_set_real_time(ctx, time(NULL) + time_offset, 0); + } if ((code = krb5_cc_default(ctx, &cc))) { krb5_free_context(ctx); @@ -111,7 +115,7 @@ int ads_kinit_password(ADS_STRUCT *ads) int ret; asprintf(&s, "%s@%s", ads->auth.user_name, ads->auth.realm); - ret = kerberos_kinit_password(s, ads->auth.password); + ret = kerberos_kinit_password(s, ads->auth.password, ads->auth.time_offset); if (ret) { DEBUG(0,("kerberos_kinit_password %s failed: %s\n", diff --git a/source3/libads/krb5_setpw.c b/source3/libads/krb5_setpw.c index ec79a8658f..a49b6cbe3b 100644 --- a/source3/libads/krb5_setpw.c +++ b/source3/libads/krb5_setpw.c @@ -248,7 +248,8 @@ static krb5_error_code parse_setpw_reply(krb5_context context, return 0; } -ADS_STATUS krb5_set_password(const char *kdc_host, const char *princ, const char *newpw) +ADS_STATUS krb5_set_password(const char *kdc_host, const char *princ, const char *newpw, + int time_offset) { krb5_context context; krb5_auth_context auth_context = NULL; @@ -268,6 +269,10 @@ ADS_STATUS krb5_set_password(const char *kdc_host, const char *princ, const char return ADS_ERROR_KRB5(ret); } + if (time_offset != 0) { + krb5_set_real_time(context, time(NULL) + time_offset, 0); + } + ret = krb5_cc_default(context, &ccache); if (ret) { krb5_free_context(context); @@ -452,16 +457,17 @@ ADS_STATUS krb5_set_password(const char *kdc_host, const char *princ, const char ADS_STATUS kerberos_set_password(const char *kpasswd_server, const char *auth_principal, const char *auth_password, - const char *target_principal, const char *new_password) + const char *target_principal, const char *new_password, + int time_offset) { int ret; - if ((ret = kerberos_kinit_password(auth_principal, auth_password))) { + if ((ret = kerberos_kinit_password(auth_principal, auth_password, time_offset))) { DEBUG(1,("Failed kinit for principal %s (%s)\n", auth_principal, error_message(ret))); return ADS_ERROR_KRB5(ret); } - return krb5_set_password(kpasswd_server, target_principal, new_password); + return krb5_set_password(kpasswd_server, target_principal, new_password, time_offset); } diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index 2f70d3a285..385a9bd93f 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -63,6 +63,7 @@ static BOOL ads_try_connect(ADS_STRUCT *ads, const char *server, unsigned port) ads->ldap_port = port; ads->ldap_ip = *interpret_addr2(srv); free(srv); + return True; } @@ -204,7 +205,6 @@ static BOOL ads_try_netbios(ADS_STRUCT *ads) ADS_STATUS ads_connect(ADS_STRUCT *ads) { int version = LDAP_VERSION3; - int code; ADS_STATUS status; ads->last_attempt = time(NULL); @@ -274,7 +274,7 @@ got_connection: } #endif - if (ads->auth.no_bind) { + if (ads->auth.flags & ADS_AUTH_NO_BIND) { return ADS_SUCCESS; } @@ -1416,7 +1416,7 @@ ADS_STATUS ads_set_machine_password(ADS_STRUCT *ads, */ asprintf(&principal, "%s$@%s", host, ads->auth.realm); - status = krb5_set_password(ads->auth.kdc_server, principal, password); + status = krb5_set_password(ads->auth.kdc_server, principal, password, ads->auth.time_offset); free(host); free(principal); @@ -1622,6 +1622,26 @@ ADS_STATUS ads_USN(ADS_STRUCT *ads, uint32 *usn) return ADS_SUCCESS; } +/* parse a ADS timestring - typical string is + '20020917091222.0Z0' which means 09:12.22 17th September + 2002, timezone 0 */ +static time_t ads_parse_time(const char *str) +{ + struct tm tm; + + ZERO_STRUCT(tm); + + if (sscanf(str, "%4d%2d%2d%2d%2d%2d", + &tm.tm_year, &tm.tm_mon, &tm.tm_mday, + &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) { + return 0; + } + tm.tm_year -= 1900; + tm.tm_mon -= 1; + + return timegm(&tm); +} + /** * Find the servers name and realm - this can be done before authentication @@ -1632,22 +1652,36 @@ ADS_STATUS ads_USN(ADS_STRUCT *ads, uint32 *usn) **/ ADS_STATUS ads_server_info(ADS_STRUCT *ads) { - const char *attrs[] = {"ldapServiceName", NULL}; + const char *attrs[] = {"ldapServiceName", "currentTime", NULL}; ADS_STATUS status; void *res; - char **values; + char *value; char *p; + char *timestr; + TALLOC_CTX *ctx; + + if (!(ctx = talloc_init())) { + return ADS_ERROR(LDAP_NO_MEMORY); + } status = ads_do_search(ads, "", LDAP_SCOPE_BASE, "(objectclass=*)", attrs, &res); if (!ADS_ERR_OK(status)) return status; - values = ldap_get_values(ads->ld, res, "ldapServiceName"); - if (!values || !values[0]) return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); + value = ads_pull_string(ads, ctx, res, "ldapServiceName"); + if (!value) { + return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); + } + + timestr = ads_pull_string(ads, ctx, res, "currentTime"); + if (!timestr) { + return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); + } - p = strchr(values[0], ':'); + ldap_msgfree(res); + + p = strchr(value, ':'); if (!p) { - ldap_value_free(values); - ldap_msgfree(res); + talloc_destroy(ctx); DEBUG(1, ("ads_server_info: returned ldap server name did not contain a ':' so was deemed invalid\n")); return ADS_ERROR(LDAP_DECODING_ERROR); } @@ -1657,8 +1691,7 @@ ADS_STATUS ads_server_info(ADS_STRUCT *ads) ads->config.ldap_server_name = strdup(p+1); p = strchr(ads->config.ldap_server_name, '$'); if (!p || p[1] != '@') { - ldap_value_free(values); - ldap_msgfree(res); + talloc_destroy(ctx); SAFE_FREE(ads->config.ldap_server_name); DEBUG(1, ("ads_server_info: returned ldap server name did not contain '$@' so was deemed invalid\n")); return ADS_ERROR(LDAP_DECODING_ERROR); @@ -1675,6 +1708,15 @@ ADS_STATUS ads_server_info(ADS_STRUCT *ads) DEBUG(3,("got ldap server name %s@%s\n", ads->config.ldap_server_name, ads->config.realm)); + ads->config.current_time = ads_parse_time(timestr); + + if (ads->config.current_time != 0) { + ads->auth.time_offset = ads->config.current_time - time(NULL); + DEBUG(4,("time offset is %d seconds\n", ads->auth.time_offset)); + } + + talloc_destroy(ctx); + return ADS_SUCCESS; } diff --git a/source3/libads/sasl.c b/source3/libads/sasl.c index 12a5722319..c110c1d2cd 100644 --- a/source3/libads/sasl.c +++ b/source3/libads/sasl.c @@ -122,7 +122,7 @@ static ADS_STATUS ads_sasl_spnego_krb5_bind(ADS_STRUCT *ads, const char *princip struct berval cred, *scred; int rc; - blob = spnego_gen_negTokenTarg(principal); + blob = spnego_gen_negTokenTarg(principal, ads->auth.time_offset); if (!blob.data) { return ADS_ERROR(LDAP_OPERATIONS_ERROR); @@ -144,7 +144,7 @@ static ADS_STATUS ads_sasl_spnego_krb5_bind(ADS_STRUCT *ads, const char *princip */ static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads) { - struct berval *scred; + struct berval *scred=NULL; int rc, i; ADS_STATUS status; DATA_BLOB blob; @@ -185,7 +185,8 @@ static ADS_STATUS ads_sasl_spnego_bind(ADS_STRUCT *ads) } DEBUG(3,("got principal=%s\n", principal)); - if (got_kerberos_mechanism && ads_kinit_password(ads) == 0) { + if (!(ads->auth.flags & ADS_AUTH_DISABLE_KERBEROS) && + got_kerberos_mechanism && ads_kinit_password(ads) == 0) { return ads_sasl_spnego_krb5_bind(ads, principal); } diff --git a/source3/libads/util.c b/source3/libads/util.c index b10b130a31..021f2d93e4 100644 --- a/source3/libads/util.c +++ b/source3/libads/util.c @@ -40,7 +40,7 @@ ADS_STATUS ads_change_trust_account_password(ADS_STRUCT *ads, char *host_princip asprintf(&service_principal, "HOST/%s", host_principal); ret = kerberos_set_password(ads->auth.kdc_server, host_principal, password, - service_principal, new_password); + service_principal, new_password, ads->auth.time_offset); if (!secrets_store_machine_password(new_password)) { DEBUG(1,("Failed to save machine password\n")); diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 6c5c5e0b0e..298b1e52b6 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -431,7 +431,7 @@ static BOOL cli_session_setup_kerberos(struct cli_state *cli, char *principal, c DEBUG(2,("Doing kerberos session setup\n")); /* generate the encapsulated kerberos5 ticket */ - negTokenTarg = spnego_gen_negTokenTarg(principal); + negTokenTarg = spnego_gen_negTokenTarg(principal, 0); if (!negTokenTarg.data) return False; diff --git a/source3/libsmb/clikrb5.c b/source3/libsmb/clikrb5.c index 1fc400edb0..22bfdc0463 100644 --- a/source3/libsmb/clikrb5.c +++ b/source3/libsmb/clikrb5.c @@ -64,6 +64,14 @@ static krb5_error_code krb5_mk_req2(krb5_context context, goto cleanup_creds; } + /* cope with the ticket being in the future due to clock skew */ + if ((unsigned)credsp->times.starttime > time(NULL)) { + time_t t = time(NULL); + int time_offset = (unsigned)credsp->times.starttime - t; + DEBUG(4,("Advancing clock by %d seconds to cope with clock skew\n", time_offset)); + krb5_set_real_time(context, t + time_offset + 1, 0); + } + in_data.length = 0; retval = krb5_mk_req_extended(context, auth_context, ap_req_options, &in_data, credsp, outbuf); @@ -86,7 +94,7 @@ cleanup_princ: /* get a kerberos5 ticket for the given service */ -DATA_BLOB krb5_get_ticket(char *principal) +DATA_BLOB krb5_get_ticket(char *principal, time_t time_offset) { krb5_error_code retval; krb5_data packet; @@ -108,6 +116,10 @@ DATA_BLOB krb5_get_ticket(char *principal) goto failed; } + if (time_offset != 0) { + krb5_set_real_time(context, time(NULL) + time_offset, 0); + } + if ((retval = krb5_cc_default(context, &ccdef))) { DEBUG(1,("krb5_cc_default failed (%s)\n", error_message(retval))); diff --git a/source3/libsmb/clispnego.c b/source3/libsmb/clispnego.c index 04ec6ed39e..55f49c5987 100644 --- a/source3/libsmb/clispnego.c +++ b/source3/libsmb/clispnego.c @@ -321,13 +321,13 @@ BOOL spnego_parse_krb5_wrap(DATA_BLOB blob, DATA_BLOB *ticket) generate a SPNEGO negTokenTarg packet, ready for a EXTENDED_SECURITY kerberos session setup */ -DATA_BLOB spnego_gen_negTokenTarg(const char *principal) +DATA_BLOB spnego_gen_negTokenTarg(const char *principal, int time_offset) { DATA_BLOB tkt, tkt_wrapped, targ; const char *krb_mechs[] = {OID_KERBEROS5_OLD, OID_NTLMSSP, NULL}; /* get a kerberos ticket for the service */ - tkt = krb5_get_ticket(principal); + tkt = krb5_get_ticket(principal, time_offset); /* wrap that up in a nice GSS-API wrapping */ tkt_wrapped = spnego_gen_krb5_wrap(tkt); diff --git a/source3/nsswitch/winbindd_cm.c b/source3/nsswitch/winbindd_cm.c index 9ac392a6ba..0b9e38eb1f 100644 --- a/source3/nsswitch/winbindd_cm.c +++ b/source3/nsswitch/winbindd_cm.c @@ -109,7 +109,7 @@ static BOOL cm_ads_find_dc(const char *domain, struct in_addr *dc_ip, fstring sr } /* we don't need to bind, just connect */ - ads->auth.no_bind = 1; + ads->auth.flags |= ADS_AUTH_NO_BIND; DEBUG(4,("cm_ads_find_dc: domain=%s\n", domain)); diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c index 8c85bd82f9..af290ce83c 100644 --- a/source3/utils/net_ads.c +++ b/source3/utils/net_ads.c @@ -66,7 +66,7 @@ static int net_ads_lookup(int argc, const char **argv) ads = ads_init(NULL, NULL, opt_host); if (ads) { - ads->auth.no_bind = 1; + ads->auth.flags |= ADS_AUTH_NO_BIND; } ads_connect(ads); @@ -88,7 +88,7 @@ static int net_ads_info(int argc, const char **argv) ads = ads_init(NULL, NULL, opt_host); if (ads) { - ads->auth.no_bind = 1; + ads->auth.flags |= ADS_AUTH_NO_BIND; } ads_connect(ads); @@ -103,6 +103,7 @@ static int net_ads_info(int argc, const char **argv) d_printf("Realm: %s\n", ads->config.realm); d_printf("Bind Path: %s\n", ads->config.bind_path); d_printf("LDAP port: %d\n", ads->ldap_port); + d_printf("Server time: %s\n", http_timestring(ads->config.current_time)); return 0; } @@ -199,7 +200,7 @@ static int net_ads_workgroup(int argc, const char **argv) -static void usergrp_display(char *field, void **values, void *data_area) +static BOOL usergrp_display(char *field, void **values, void *data_area) { char **disp_fields = (char **) data_area; @@ -213,15 +214,16 @@ static void usergrp_display(char *field, void **values, void *data_area) } SAFE_FREE(disp_fields[0]); SAFE_FREE(disp_fields[1]); - return; + return True; } if (!values) /* must be new field, indicate string field */ - return; + return True; if (StrCaseCmp(field, "sAMAccountName") == 0) { disp_fields[0] = strdup((char *) values[0]); } if (StrCaseCmp(field, "description") == 0) disp_fields[1] = strdup((char *) values[0]); + return True; } static int net_ads_user_usage(int argc, const char **argv) @@ -270,7 +272,7 @@ static int ads_user_add(int argc, const char **argv) /* try setting the password */ asprintf(&upn, "%s@%s", argv[0], ads->config.realm); - status = krb5_set_password(ads->auth.kdc_server, upn, argv[1]); + status = krb5_set_password(ads->auth.kdc_server, upn, argv[1], ads->auth.time_offset); safe_free(upn); if (ADS_ERR_OK(status)) { d_printf("User %s added\n", argv[0]); @@ -653,7 +655,9 @@ int net_ads_join(int argc, const char **argv) return -1; } - if (ads_kinit_password(ads)) { + rc = ads_domain_sid(ads, &dom_sid); + if (!ADS_ERR_OK(rc)) { + d_printf("ads_domain_sid: %s\n", ads_errstr(rc)); return -1; } @@ -663,12 +667,6 @@ int net_ads_join(int argc, const char **argv) return -1; } - rc = ads_domain_sid(ads, &dom_sid); - if (!ADS_ERR_OK(rc)) { - d_printf("ads_domain_sid: %s\n", ads_errstr(rc)); - return -1; - } - if (!secrets_store_domain_sid(lp_workgroup(), &dom_sid)) { DEBUG(1,("Failed to save domain sid\n")); return -1; @@ -885,7 +883,7 @@ static int net_ads_password(int argc, const char **argv) new_password = getpass(prompt); ret = kerberos_set_password(ads->auth.kdc_server, auth_principal, - auth_password, argv[0], new_password); + auth_password, argv[0], new_password, ads->auth.time_offset); if (!ADS_ERR_OK(ret)) { d_printf("Password change failed :-( ...\n"); ads_destroy(&ads); -- cgit From 9bab1d0c1a51a7532da0c55a59cf5a91b8ab6a3d Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 19:48:19 +0000 Subject: Actually use sendfile if selected. Jeremy. (This used to be commit 5881f0a22633ed9fb73e6cd788d0751c4db6cd32) --- source3/include/vfs.h | 7 +++++-- source3/lib/sendfile.c | 4 ++-- source3/smbd/reply.c | 2 +- source3/smbd/vfs-wrap.c | 7 +++---- source3/smbd/vfs.c | 3 +++ 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/source3/include/vfs.h b/source3/include/vfs.h index 1b1a13d7c1..9a06764371 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -44,17 +44,18 @@ /* Changed to version 2 for CIFS UNIX extensions (mknod and link added). JRA. */ /* Changed to version 3 for POSIX acl extensions. JRA. */ /* Changed to version 4 for cascaded VFS interface. Alexander Bokovoy. */ +/* Changed to version 5 for sendfile addition. JRA. */ #define SMB_VFS_INTERFACE_VERSION 5 /* Version of supported cascaded interface backward copmatibility. - (version 4 corresponds to SMB_VFS_INTERFACE_VERSION 4) + (version 5 corresponds to SMB_VFS_INTERFACE_VERSION 5) It is used in vfs_init_custom() to detect VFS modules which conform to cascaded VFS interface but implement elder version than current version of Samba uses. This allows to use old modules with new VFS interface as far as combined VFS operation set is coherent (will be in most cases). */ -#define SMB_VFS_INTERFACE_CASCADED 4 +#define SMB_VFS_INTERFACE_CASCADED 5 /* Each VFS module must provide following global functions: @@ -116,6 +117,7 @@ struct vfs_ops { ssize_t (*read)(struct files_struct *fsp, int fd, void *data, size_t n); ssize_t (*write)(struct files_struct *fsp, int fd, const void *data, size_t n); SMB_OFF_T (*lseek)(struct files_struct *fsp, int filedes, SMB_OFF_T offset, int whence); + ssize_t (*sendfile)(int tofd, files_struct *fsp, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count); int (*rename)(struct connection_struct *conn, const char *old, const char *new); int (*fsync)(struct files_struct *fsp, int fd); int (*stat)(struct connection_struct *conn, const char *fname, SMB_STRUCT_STAT *sbuf); @@ -210,6 +212,7 @@ typedef enum _vfs_op_type { SMB_VFS_OP_READ, SMB_VFS_OP_WRITE, SMB_VFS_OP_LSEEK, + SMB_VFS_OP_SENDFILE, SMB_VFS_OP_RENAME, SMB_VFS_OP_FSYNC, SMB_VFS_OP_STAT, diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c index 8bcb9dbd02..bcace5fee2 100644 --- a/source3/lib/sendfile.c +++ b/source3/lib/sendfile.c @@ -47,7 +47,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of if (header) { hdr_len = header->length; - while (total < hd_len) { + while (total < hdr_len) { ret = sys_send(tofd, header->data + total,hdr_len - total, MSG_MORE); if (ret == -1) return -1; @@ -115,7 +115,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of if (header) { hdr_len = header->length; - while (total < hd_len) { + while (total < hdr_len) { ret = sys_send(tofd, header->data + total,hdr_len - total, MSG_MORE); if (ret == -1) return -1; diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 45704b9264..b8a89b1d9d 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1723,7 +1723,7 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length SSVAL(outbuf,smb_vwv5,smb_maxcnt); SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf)); SSVAL(smb_buf(outbuf),-2,smb_maxcnt); - CVAL(outbuf,smb_vwv0) = 0xFF; + SCVAL(outbuf,smb_vwv0,0xFF); set_message(outbuf,12,smb_maxcnt,False); header.data = outbuf; header.length = data - outbuf; diff --git a/source3/smbd/vfs-wrap.c b/source3/smbd/vfs-wrap.c index 27bb1f42f3..bae304096c 100644 --- a/source3/smbd/vfs-wrap.c +++ b/source3/smbd/vfs-wrap.c @@ -192,17 +192,16 @@ SMB_OFF_T vfswrap_lseek(files_struct *fsp, int filedes, SMB_OFF_T offset, int wh return result; } -#if 0 /* JRATEST */ -ssize_t vfswrap_sendfile(int tofd, struct files_struct *fsp, int fromfd, DATA_BLOB *hdr, SMB_OFF_T offset, size_t n) +ssize_t vfswrap_sendfile(int tofd, struct files_struct *fsp, int fromfd, const DATA_BLOB *hdr, + SMB_OFF_T offset, size_t n) { ssize_t result; START_PROFILE_BYTES(syscall_sendfile, n); - result = sys_sendfile(outfd, fsp, infd, hdr, offset, n); + result = sys_sendfile(tofd, fromfd, hdr, offset, n); END_PROFILE(syscall_sendfile); return result; } -#endif int vfswrap_rename(connection_struct *conn, const char *old, const char *new) { diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index 6869c61861..a0a7b920b8 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -68,6 +68,7 @@ static struct vfs_ops default_vfs_ops = { vfswrap_read, vfswrap_write, vfswrap_lseek, + vfswrap_sendfile, vfswrap_rename, vfswrap_fsync, vfswrap_stat, @@ -263,6 +264,7 @@ BOOL smbd_vfs_init(connection_struct *conn) /******************************************************************* Create vfs_ops reflecting current vfs_opaque_ops *******************************************************************/ + struct vfs_ops *smb_vfs_get_opaque_ops(void) { int i; @@ -301,6 +303,7 @@ BOOL vfs_directory_exist(connection_struct *conn, const char *dname, SMB_STRUCT_ /******************************************************************* vfs getwd wrapper ********************************************************************/ + static char *vfs_getwd(connection_struct *conn, char *path) { return conn->vfs_ops.getwd(conn,path); -- cgit From fa184ea1699fb5aebdc2eb0f3ca4e02749201729 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 20:47:59 +0000 Subject: Only create the pidfile once we're ready to receive requests. This allows external programs to correctly synchronise with us. Jeremy. (This used to be commit ffb7632d05191342ecfc5f78fbfd7beacfe257ad) --- source3/nsswitch/winbindd.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c index 58b0f5943c..a937f06639 100644 --- a/source3/nsswitch/winbindd.c +++ b/source3/nsswitch/winbindd.c @@ -853,10 +853,8 @@ static void usage(void) fstrcpy(global_myworkgroup, lp_workgroup()); - if (!interactive) { + if (!interactive) become_daemon(); - pidfile_create("winbindd"); - } #if HAVE_SETPGID /* @@ -891,6 +889,10 @@ static void usage(void) return 1; } + /* Only create the pidfile when we're ready to receive requests. */ + if (!interactive) + pidfile_create("winbindd"); + /* Loop waiting for requests */ process_loop(accept_sock); -- cgit From fe92e9caedbb68756f9d4fcb8ee20c2573e9c4ae Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 20:53:21 +0000 Subject: Reverted my earlier change. It was incorrect. We must be protected by pidfile before doing secrets_init(). Jeremy. (This used to be commit f8a0e6ad8b25d405ff2bcb492974d2f0bef81036) --- source3/nsswitch/winbindd.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c index a937f06639..bb4a1b78ec 100644 --- a/source3/nsswitch/winbindd.c +++ b/source3/nsswitch/winbindd.c @@ -853,8 +853,11 @@ static void usage(void) fstrcpy(global_myworkgroup, lp_workgroup()); - if (!interactive) + if (!interactive) { become_daemon(); + pidfile_create("winbindd"); + } + #if HAVE_SETPGID /* @@ -889,10 +892,6 @@ static void usage(void) return 1; } - /* Only create the pidfile when we're ready to receive requests. */ - if (!interactive) - pidfile_create("winbindd"); - /* Loop waiting for requests */ process_loop(accept_sock); -- cgit From 8b46126a076075aeed31dae1c80eca1ed9f5a251 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 17 Sep 2002 23:45:21 +0000 Subject: Never, *ever* hold a mutex lock in the message database where there may be traversals being attempted. Yes, this was from bitter experience (and an out of control server :-). Also allow callers to break out of a tdb_chainlock with sigalarm if desired. Jeremy. (This used to be commit a7781f91d8c1177210bffc199cd2f3b7ff993eaf) --- source3/Makefile.in | 4 +-- source3/lib/messages.c | 69 ---------------------------------------------- source3/lib/server_mutex.c | 5 ++-- source3/passdb/secrets.c | 66 ++++++++++++++++++++++++++++++++++++++++++++ source3/tdb/tdb.c | 15 ++++++++++ source3/tdb/tdb.h | 1 + source3/tdb/tdbbackup.c | 1 + 7 files changed, 87 insertions(+), 74 deletions(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index 87ee4ef540..cc8fb42e9a 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -136,7 +136,7 @@ LIB_OBJ = lib/charcnv.o lib/debug.o lib/fault.o \ lib/util.o lib/util_sock.o lib/util_sec.o \ lib/talloc.o lib/hash.o lib/substitute.o lib/fsusage.o \ lib/ms_fnmatch.o lib/select.o lib/error.o lib/messages.o \ - lib/server_mutex.o lib/tallocmsg.o lib/dmallocmsg.o \ + lib/tallocmsg.o lib/dmallocmsg.o \ lib/md5.o lib/hmacmd5.o lib/iconv.o lib/smbpasswd.o \ nsswitch/wb_client.o nsswitch/wb_common.o \ lib/pam_errors.o intl/lang_tdb.o lib/account_pol.o \ @@ -259,7 +259,7 @@ SMBD_OBJ_SRV = smbd/files.o smbd/chgpasswd.o smbd/connection.o \ smbd/dosmode.o smbd/filename.o smbd/open.o smbd/close.o \ smbd/blocking.o smbd/sec_ctx.o \ smbd/vfs.o smbd/vfs-wrap.o smbd/statcache.o \ - smbd/posix_acls.o lib/sysacls.o \ + smbd/posix_acls.o lib/sysacls.o lib/server_mutex.o \ smbd/process.o smbd/service.o smbd/error.o \ printing/printfsp.o lib/util_seaccess.o smbd/srvstr.o \ smbd/build_options.o \ diff --git a/source3/lib/messages.c b/source3/lib/messages.c index 21470dff5c..d9886a54da 100644 --- a/source3/lib/messages.c +++ b/source3/lib/messages.c @@ -471,73 +471,4 @@ BOOL message_send_all(TDB_CONTEXT *conn_tdb, int msg_type, *n_sent = msg_all.n_sent; return True; } - -static SIG_ATOMIC_T gotalarm; - -/*************************************************************** - Signal function to tell us we timed out. -****************************************************************/ - -static void gotalarm_sig(void) -{ - gotalarm = 1; -} - -/** - * Lock the messaging tdb based on a string - this is used as a primitive - * form of mutex between smbd instances. - * - * @param name A string identifying the name of the mutex. - */ - -BOOL message_named_mutex(char *name, unsigned int timeout) -{ - TDB_DATA key; - int ret; - void (*oldsig_handler)(int) = NULL; - - if (!message_init()) - return False; - - key.dptr = name; - key.dsize = strlen(name)+1; - - if (timeout) { - gotalarm = 0; - oldsig_handler = CatchSignal(SIGALRM, SIGNAL_CAST gotalarm_sig); - alarm(timeout); - } - - ret = tdb_chainlock(tdb, key); - - if (timeout) { - alarm(0); - CatchSignal(SIGALRM, SIGNAL_CAST oldsig_handler); - if (gotalarm) - return False; - } - - if (ret == 0) - DEBUG(10,("message_named_mutex: got mutex for %s\n", name )); - - return (ret == 0); -} - -/** - * Unlock a named mutex. - * - * @param name A string identifying the name of the mutex. - */ - -void message_named_mutex_release(char *name) -{ - TDB_DATA key; - - key.dptr = name; - key.dsize = strlen(name)+1; - - tdb_chainunlock(tdb, key); - DEBUG(10,("message_named_mutex: released mutex for %s\n", name )); -} - /** @} **/ diff --git a/source3/lib/server_mutex.c b/source3/lib/server_mutex.c index 416d77564d..3e5512c734 100644 --- a/source3/lib/server_mutex.c +++ b/source3/lib/server_mutex.c @@ -38,7 +38,7 @@ BOOL grab_server_mutex(const char *name) DEBUG(0,("grab_server_mutex: malloc failed for %s\n", name)); return False; } - if (!message_named_mutex(mutex_server_name, 20)) { + if (!secrets_named_mutex(mutex_server_name, 10)) { DEBUG(10,("grab_server_mutex: failed for %s\n", name)); SAFE_FREE(mutex_server_name); return False; @@ -50,8 +50,7 @@ BOOL grab_server_mutex(const char *name) void release_server_mutex(void) { if (mutex_server_name) { - message_named_mutex_release(mutex_server_name); + secrets_named_mutex_release(mutex_server_name); SAFE_FREE(mutex_server_name); } } - diff --git a/source3/passdb/secrets.c b/source3/passdb/secrets.c index 307dc132fc..b2bdaf2753 100644 --- a/source3/passdb/secrets.c +++ b/source3/passdb/secrets.c @@ -559,3 +559,69 @@ NTSTATUS secrets_get_trusted_domains(TALLOC_CTX* ctx, int* enum_ctx, int max_num return status; } +static SIG_ATOMIC_T gotalarm; + +/*************************************************************** + Signal function to tell us we timed out. +****************************************************************/ + +static void gotalarm_sig(void) +{ + gotalarm = 1; +} + +/* + lock the secrets tdb based on a string - this is used as a primitive form of mutex + between smbd instances. +*/ +BOOL secrets_named_mutex(const char *name, unsigned int timeout) +{ + TDB_DATA key; + int ret; + + if (!message_init()) + return False; + + key.dptr = (char *)name; + key.dsize = strlen(name)+1; + + /* Allow tdb_chainlock to be interrupted by an alarm. */ + gotalarm = 0; + tdb_set_lock_alarm(&gotalarm); + + if (timeout) { + CatchSignal(SIGALRM, SIGNAL_CAST gotalarm_sig); + alarm(timeout); + } + + ret = tdb_chainlock(tdb, key); + + /* Prevent tdb_chainlock from being interrupted by an alarm. */ + tdb_set_lock_alarm(NULL); + + if (timeout) { + alarm(0); + CatchSignal(SIGALRM, SIGNAL_CAST SIG_IGN); + if (gotalarm) + return False; + } + + if (ret == 0) + DEBUG(10,("secrets_named_mutex: got mutex for %s\n", name )); + + return (ret == 0); +} + +/* + unlock a named mutex +*/ +void secrets_named_mutex_release(char *name) +{ + TDB_DATA key; + + key.dptr = name; + key.dsize = strlen(name)+1; + + tdb_chainunlock(tdb, key); + DEBUG(10,("secrets_named_mutex: released mutex for %s\n", name )); +} diff --git a/source3/tdb/tdb.c b/source3/tdb/tdb.c index 40e7dcd42c..5bb75ffe07 100644 --- a/source3/tdb/tdb.c +++ b/source3/tdb/tdb.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "tdb.h" #include "spinlock.h" #else @@ -160,6 +161,18 @@ struct list_struct { */ }; +/*************************************************************** + Allow a caller to set a "alarm" flag that tdb can check to abort + a blocking lock on SIGALRM. +***************************************************************/ + +static sig_atomic_t *palarm_fired; + +void tdb_set_lock_alarm(sig_atomic_t *palarm) +{ + palarm_fired = palarm; +} + /* a byte range locking function - return 0 on success this functions locks/unlocks 1 byte at the specified offset. @@ -186,6 +199,8 @@ static int tdb_brlock(TDB_CONTEXT *tdb, tdb_off offset, do { ret = fcntl(tdb->fd,lck_type,&fl); + if (ret == -1 && errno == EINTR && palarm_fired && *palarm_fired) + break; } while (ret == -1 && errno == EINTR); if (ret == -1) { diff --git a/source3/tdb/tdb.h b/source3/tdb/tdb.h index 8cc908703f..42b88aeb16 100644 --- a/source3/tdb/tdb.h +++ b/source3/tdb/tdb.h @@ -126,6 +126,7 @@ int tdb_lockall(TDB_CONTEXT *tdb); void tdb_unlockall(TDB_CONTEXT *tdb); /* Low level locking functions: use with care */ +void tdb_set_lock_alarm(sig_atomic_t *palarm); int tdb_chainlock(TDB_CONTEXT *tdb, TDB_DATA key); int tdb_chainunlock(TDB_CONTEXT *tdb, TDB_DATA key); diff --git a/source3/tdb/tdbbackup.c b/source3/tdb/tdbbackup.c index f59f98a90f..36ba7db918 100644 --- a/source3/tdb/tdbbackup.c +++ b/source3/tdb/tdbbackup.c @@ -53,6 +53,7 @@ #include #include #include +#include #include "tdb.h" static int failed; -- cgit From 8b4bafc76fab88d78b7234c43c34338b61d42656 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 18 Sep 2002 00:30:00 +0000 Subject: We had a race condition when changing a machine acount password as we were no longer locking the secrets entry. I saw this on a live system. Jeremy. (This used to be commit 660dafcbb2d1029831212a32d995891626a0344c) --- source3/passdb/secrets.c | 22 +++++++++++++++++++++- source3/smbd/process.c | 9 +++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/source3/passdb/secrets.c b/source3/passdb/secrets.c index b2bdaf2753..08a0e9c9ac 100644 --- a/source3/passdb/secrets.c +++ b/source3/passdb/secrets.c @@ -206,8 +206,27 @@ char *trustdom_keystr(const char *domain) } /************************************************************************ - Routine to get the machine trust account password for a domain. + Lock the trust password entry. ************************************************************************/ + +BOOL secrets_lock_trust_account_password(char *domain, BOOL dolock) +{ + if (!tdb) + return False; + + if (dolock) + return (tdb_lock_bystring(tdb, trust_keystr(domain)) == 0); + else + tdb_unlock_bystring(tdb, trust_keystr(domain)); + return True; +} + +/************************************************************************ + Routine to get the trust account password for a domain. + The user of this function must have locked the trust password file using + the above call. +************************************************************************/ + BOOL secrets_fetch_trust_account_password(char *domain, uint8 ret_pwd[16], time_t *pass_last_set_time) { @@ -243,6 +262,7 @@ BOOL secrets_fetch_trust_account_password(char *domain, uint8 ret_pwd[16], /************************************************************************ Routine to get account password to trusted domain ************************************************************************/ + BOOL secrets_fetch_trusted_domain_password(char *domain, char** pwd, DOM_SID *sid, time_t *pass_last_set_time) { diff --git a/source3/smbd/process.c b/source3/smbd/process.c index c796797fad..0f7cfd0e9c 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -1154,9 +1154,16 @@ static BOOL timeout_processing(int deadtime, int *select_timeout, time_t *last_t * First, open the machine password file with an exclusive lock. */ + if (secrets_lock_trust_account_password(global_myworkgroup, True) == False) { + DEBUG(0,("process: unable to lock the machine account password for \ +machine %s in domain %s.\n", global_myname, global_myworkgroup )); + return True; + } + if(!secrets_fetch_trust_account_password(global_myworkgroup, trust_passwd_hash, &lct)) { DEBUG(0,("process: unable to read the machine account password for \ machine %s in domain %s.\n", global_myname, global_myworkgroup )); + secrets_lock_trust_account_password(global_myworkgroup, False); return True; } @@ -1166,6 +1173,7 @@ machine %s in domain %s.\n", global_myname, global_myworkgroup )); if(t < lct + lp_machine_password_timeout()) { global_machine_password_needs_changing = False; + secrets_lock_trust_account_password(global_myworkgroup, False); return True; } @@ -1173,6 +1181,7 @@ machine %s in domain %s.\n", global_myname, global_myworkgroup )); change_trust_account_password( global_myworkgroup, remote_machine_list); global_machine_password_needs_changing = False; + secrets_lock_trust_account_password(global_myworkgroup, False); } /* -- cgit From 7e29a2ec1d7d86225cca4b02af28805a412da124 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 18 Sep 2002 01:40:13 +0000 Subject: Fixed compiler error when HAVE_KRB5 not defined. (This used to be commit 66c2e25079b348188abd48868300771b1e49fff3) --- source3/libsmb/clikrb5.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/libsmb/clikrb5.c b/source3/libsmb/clikrb5.c index 22bfdc0463..e7143d065d 100644 --- a/source3/libsmb/clikrb5.c +++ b/source3/libsmb/clikrb5.c @@ -154,7 +154,7 @@ failed: #else /* HAVE_KRB5 */ /* this saves a few linking headaches */ - DATA_BLOB krb5_get_ticket(char *principal) + DATA_BLOB krb5_get_ticket(char *principal, time_t time_offset) { DEBUG(0,("NO KERBEROS SUPPORT\n")); return data_blob(NULL, 0); -- cgit From c9ab9fe826a38e36a0f3c6b7924db8ce8fe70213 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Wed, 18 Sep 2002 06:11:13 +0000 Subject: Add a synonym for samdump ... (This used to be commit a8dc1464ea2d05eb2a26afdd433cdb6b69002259) --- source3/utils/net_rpc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index 4067ce344d..50c14c6f5b 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -2260,6 +2260,7 @@ int net_rpc(int argc, const char **argv) {"abortshutdown", rpc_shutdown_abort}, {"shutdown", rpc_shutdown}, {"samdump", rpc_samdump}, + {"vampire", rpc_samdump}, {"getsid", net_rpc_getsid}, {"help", net_rpc_help}, {NULL, NULL} -- cgit From e59d5b50fe882cb1b65ca2f665b0c93c6273c436 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 18 Sep 2002 06:34:10 +0000 Subject: First code for 'net rpc vampire'. We should probably find a more positive name for this. It creates users and global groups. More to come. Volker (This used to be commit 0c1fadd9e024ef886542d362a7f119968552852d) --- source3/Makefile.in | 2 +- source3/utils/net_rpc.c | 2 +- source3/utils/net_rpc_samsync.c | 278 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 280 insertions(+), 2 deletions(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index cc8fb42e9a..d7f8dc5f68 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -387,7 +387,7 @@ NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_ads_cldap.o utils/net_help.o \ utils/net_cache.o NET_OBJ = $(NET_OBJ1) $(SECRETS_OBJ) $(LIBSMB_OBJ) \ - $(RPC_PARSE_OBJ) $(PASSDB_GET_SET_OBJ) \ + $(RPC_PARSE_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \ $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \ $(LIBMSRPC_OBJ) $(LIBMSRPC_SERVER_OBJ) \ $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index 50c14c6f5b..3192768931 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -2260,7 +2260,7 @@ int net_rpc(int argc, const char **argv) {"abortshutdown", rpc_shutdown_abort}, {"shutdown", rpc_shutdown}, {"samdump", rpc_samdump}, - {"vampire", rpc_samdump}, + {"vampire", rpc_vampire}, {"getsid", net_rpc_getsid}, {"help", net_rpc_help}, {NULL, NULL} diff --git a/source3/utils/net_rpc_samsync.c b/source3/utils/net_rpc_samsync.c index 4ddb931adb..6d8b7c672f 100644 --- a/source3/utils/net_rpc_samsync.c +++ b/source3/utils/net_rpc_samsync.c @@ -185,3 +185,281 @@ fail: } return -1; } + +/* Convert a SAM_ACCOUNT_DELTA to a SAM_ACCOUNT. */ + +static NTSTATUS +sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta) +{ + DOM_SID sid; + fstring s; + + /* Username, fullname, home dir, dir drive, logon script, acct + desc, workstations, profile. */ + + unistr2_to_ascii(s, &delta->uni_acct_name, sizeof(s) - 1); + pdb_set_nt_username(account, s); + + /* Unix username is the same - for sainity */ + pdb_set_username(account, s); + + unistr2_to_ascii(s, &delta->uni_full_name, sizeof(s) - 1); + pdb_set_fullname(account, s); + + unistr2_to_ascii(s, &delta->uni_home_dir, sizeof(s) - 1); + pdb_set_homedir(account, s, True); + + unistr2_to_ascii(s, &delta->uni_dir_drive, sizeof(s) - 1); + pdb_set_dir_drive(account, s, True); + + unistr2_to_ascii(s, &delta->uni_logon_script, sizeof(s) - 1); + pdb_set_logon_script(account, s, True); + + unistr2_to_ascii(s, &delta->uni_acct_desc, sizeof(s) - 1); + pdb_set_acct_desc(account, s); + + unistr2_to_ascii(s, &delta->uni_workstations, sizeof(s) - 1); + pdb_set_workstations(account, s); + + unistr2_to_ascii(s, &delta->uni_profile, sizeof(s) - 1); + pdb_set_profile_path(account, s, True); + + /* User and group sid */ + + sid_copy(&sid, get_global_sam_sid()); + sid_append_rid(&sid, delta->user_rid); + pdb_set_user_sid(account, &sid); + + sid_copy(&sid, get_global_sam_sid()); + sid_append_rid(&sid, delta->group_rid); + pdb_set_group_sid(account, &sid); + + /* Logon and password information */ + + pdb_set_logon_time(account, nt_time_to_unix(&delta->logon_time), True); + pdb_set_logoff_time(account, nt_time_to_unix(&delta->logoff_time), + True); + + pdb_set_logon_divs(account, delta->logon_divs); + + /* TODO: logon hours */ + /* TODO: bad password count */ + /* TODO: logon count */ + + pdb_set_pass_last_set_time( + account, nt_time_to_unix(&delta->pwd_last_set_time)); + + /* TODO: account expiry time */ + + pdb_set_acct_ctrl(account, delta->acb_info); + return NT_STATUS_OK; +} + +static NTSTATUS +fetch_account_info(uint32 rid, SAM_ACCOUNT_INFO *delta) +{ + NTSTATUS nt_ret; + fstring account; + pstring add_script; + SAM_ACCOUNT *sam_account=NULL; + + fstrcpy(account, unistr2_static(&delta->uni_acct_name)); + d_printf("Creating account: %s\n", account); + + if (!NT_STATUS_IS_OK(nt_ret = pdb_init_sam(&sam_account))) + return nt_ret; + + if (!pdb_getsampwnam(sam_account, account)) { + struct passwd *pw; + + /* Create appropriate user */ + if (delta->acb_info & ACB_NORMAL) { + pstrcpy(add_script, lp_adduser_script()); + } else if ( (delta->acb_info & ACB_WSTRUST) || + (delta->acb_info & ACB_SVRTRUST) ) { + pstrcpy(add_script, lp_addmachine_script()); + } else { + DEBUG(1, ("Unknown user type: %s\n", + smbpasswd_encode_acb_info(delta->acb_info))); + pdb_free_sam(&sam_account); + return NT_STATUS_NO_SUCH_USER; + } + if (*add_script) { + int add_ret; + all_string_sub(add_script, "%u", account, + sizeof(account)); + add_ret = smbrun(add_script,NULL); + DEBUG(1,("fetch_account: Running the command `%s' " + "gave %d\n", add_script, add_ret)); + } + pw = getpwnam_alloc(account); + if (pw) { + nt_ret = pdb_init_sam_pw(&sam_account, pw); + + if (!NT_STATUS_IS_OK(nt_ret)) { + passwd_free(&pw); + pdb_free_sam(&sam_account); + return nt_ret; + } + passwd_free(&pw); + } else { + DEBUG(3, ("Could not create account %s\n", account)); + pdb_free_sam(&sam_account); + return NT_STATUS_NO_SUCH_USER; + } + } + + sam_account_from_delta(sam_account, delta); + pdb_add_sam_account(sam_account); + pdb_free_sam(&sam_account); + return NT_STATUS_OK; +} + +static NTSTATUS +fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) +{ + fstring name; + fstring comment; + struct group *grp; + DOM_SID group_sid; + fstring sid_string; + GROUP_MAP map; + int flag = TDB_INSERT; + + unistr2_to_ascii(name, &delta->uni_grp_name, sizeof(name)-1); + unistr2_to_ascii(comment, &delta->uni_grp_desc, sizeof(comment)-1); + + if ((grp = getgrnam(name)) == NULL) + smb_create_group(name); + + if ((grp = getgrnam(name)) == NULL) + return NT_STATUS_ACCESS_DENIED; + + /* add the group to the mapping table */ + sid_copy(&group_sid, get_global_sam_sid()); + sid_append_rid(&group_sid, rid); + sid_to_string(sid_string, &group_sid); + + /* Add the group mapping */ + if (get_group_map_from_sid(group_sid, &map, False)) { + /* Don't TDB_INSERT, mapping exists */ + flag = 0; + } + + map.gid = grp->gr_gid; + map.sid = group_sid; + map.sid_name_use = SID_NAME_DOM_GRP; + fstrcpy(map.nt_name, name); + fstrcpy(map.comment, comment); + + map.priv_set.count = 0; + map.priv_set.set = NULL; + + add_mapping_entry(&map, flag); + + return NT_STATUS_OK; +} + +static void +fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta) +{ + switch(hdr_delta->type) { + case SAM_DELTA_ACCOUNT_INFO: + fetch_account_info(hdr_delta->target_rid, + &delta->account_info); + break; + case SAM_DELTA_GROUP_INFO: + fetch_group_info(hdr_delta->target_rid, + &delta->group_info); + break; + default: + d_printf("Unknown delta record type %d\n", hdr_delta->type); + break; + } +} + +static void +fetch_database(struct cli_state *cli, unsigned db_type, DOM_CRED *ret_creds) +{ + unsigned last_rid = -1; + NTSTATUS result; + int i; + TALLOC_CTX *mem_ctx; + SAM_DELTA_HDR *hdr_deltas; + SAM_DELTA_CTR *deltas; + uint32 num_deltas; + + if (!(mem_ctx = talloc_init())) { + return; + } + + d_printf("Fetching database %u\n", db_type); + + do { + result = cli_netlogon_sam_sync(cli, mem_ctx, ret_creds, + db_type, last_rid+1, + &num_deltas, + &hdr_deltas, &deltas); + clnt_deal_with_creds(cli->sess_key, &(cli->clnt_cred), + ret_creds); + last_rid = 0; + for (i = 0; i < num_deltas; i++) { + fetch_sam_entry(&hdr_deltas[i], &deltas[i]); + last_rid = hdr_deltas[i].target_rid; + } + } while (last_rid && NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)); + + talloc_destroy(mem_ctx); +} + +/* dump sam database via samsync rpc calls */ +int rpc_vampire(int argc, const char **argv) +{ + NTSTATUS result; + struct cli_state *cli = NULL; + uchar trust_password[16]; + DOM_CRED ret_creds; + uint32 neg_flags = 0x000001ff; + + ZERO_STRUCT(ret_creds); + + /* Connect to remote machine */ + if (!(cli = net_make_ipc_connection(NET_FLAGS_ANONYMOUS | + NET_FLAGS_PDC))) { + return 1; + } + + if (!cli_nt_session_open(cli, PIPE_NETLOGON)) { + DEBUG(0,("Error connecting to NETLOGON pipe\n")); + goto fail; + } + + if (!secrets_fetch_trust_account_password(lp_workgroup(), + trust_password, NULL)) { + d_printf("Could not retrieve domain trust secret"); + goto fail; + } + + result = cli_nt_setup_creds(cli, SEC_CHAN_BDC, trust_password, + &neg_flags, 2); + if (!NT_STATUS_IS_OK(result)) { + d_printf("Failed to setup BDC creds\n"); + goto fail; + } + + fetch_database(cli, SAM_DATABASE_DOMAIN, &ret_creds); + fetch_database(cli, SAM_DATABASE_BUILTIN, &ret_creds); + + /* Currently we crash on PRIVS somewhere in unmarshalling */ + /* Dump_database(cli, SAM_DATABASE_PRIVS, &ret_creds); */ + + cli_nt_session_close(cli); + + return 0; + +fail: + if (cli) { + cli_nt_session_close(cli); + } + return -1; +} -- cgit From e7ff6ab84058a7823b047b99bafd87274d72fa3b Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 18 Sep 2002 08:16:22 +0000 Subject: Display the repr() of non-string dictionary values. (This used to be commit 3c6975c711d87755f0532147f9aaecb224159f43) --- source3/python/gtkdictbrowser.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/source3/python/gtkdictbrowser.py b/source3/python/gtkdictbrowser.py index 6d6cdb3c8a..dd8bed8f47 100755 --- a/source3/python/gtkdictbrowser.py +++ b/source3/python/gtkdictbrowser.py @@ -116,16 +116,27 @@ class GtkDictBrowser: # 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()) + def set_value_text(self, item): - # The text widget has trouble inserting text containing NULL - # characters. + # Clear old old value in text window - text = string.replace(text, "\x00", ".") + self.text.delete_text(0, self.text.get_length()) + + if type(item) == str: - self.text.insert(self.font, None, None, text) + # The text widget has trouble inserting text containing NULL + # characters. + + item = string.replace(item, "\x00", ".") + + self.text.insert(self.font, None, None, item) + else: + + # A non-text item + + self.text.insert(self.font, None, None, repr(item)) + # This function is called when a key is selected in the left hand side # of the user interface. @@ -246,7 +257,7 @@ def hex_string(data): if __name__ == "__main__": - dict = {"chicken": "ham", "spam": "fun"} + dict = {"chicken": "ham", "spam": "fun", "subdict": {"a": "b", "c": "d"}} db = GtkDictBrowser(dict) -- cgit From 86f746b28cdc4da03954ba01c9dd544bb0563d8b Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 18 Sep 2002 13:16:07 +0000 Subject: samtest and vfstest binaries shouldn't go into CVS... (This used to be commit 53f7af9c41633877757c85182660c0826275ff2d) --- source3/bin/.cvsignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source3/bin/.cvsignore b/source3/bin/.cvsignore index c87d15fdb4..de6085d526 100644 --- a/source3/bin/.cvsignore +++ b/source3/bin/.cvsignore @@ -38,3 +38,5 @@ testprns wbinfo winbindd wrepld +vfstest +samtest -- cgit From 6c665675009c2da25a57fb9f681e29731099ed4f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 18 Sep 2002 13:34:47 +0000 Subject: Update introduction somewhat (This used to be commit 060c0bda078923b11c34539323f9def176c006bc) --- docs/docbook/devdoc/dev-doc.sgml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/docbook/devdoc/dev-doc.sgml b/docs/docbook/devdoc/dev-doc.sgml index 0e017fb6a6..c1ffb735ba 100644 --- a/docs/docbook/devdoc/dev-doc.sgml +++ b/docs/docbook/devdoc/dev-doc.sgml @@ -31,9 +31,11 @@ This book is a collection of documents that might be useful for people developing samba or those interested in doing so. -than one person can maintain. The most recent version of this document -can be found at http://www.samba.org/ -on the "Documentation" page. Please send updates to http://devel.samba.org/. +Please send updates to jelmer@samba.org. -- cgit From aad3c35ac1197a70c04eccaf7d4fee804a210954 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 18 Sep 2002 19:06:58 +0000 Subject: printjob merge from APP_HEAD regarding device modes (This used to be commit aa52351384abace54a89c9fbfa5e4c31a8464c91) --- source3/include/includes.h | 5 ++ source3/include/printing.h | 1 + source3/printing/nt_printing.c | 4 +- source3/printing/printfsp.c | 2 +- source3/printing/printing.c | 156 ++++++++++++++++++++++++++++++------ source3/rpc_server/srv_spoolss_nt.c | 156 +++++++++++++++++++++--------------- 6 files changed, 232 insertions(+), 92 deletions(-) diff --git a/source3/include/includes.h b/source3/include/includes.h index bdf5bbcef3..56b8357831 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -803,6 +803,11 @@ struct functable { #include "nsswitch/nss.h" +/* forward declaration from printing.h to get around + header file dependencies */ + +struct printjob; + /***** automatically generated prototypes *****/ #include "proto.h" diff --git a/source3/include/printing.h b/source3/include/printing.h index ecf603b8fc..9774a6acd9 100644 --- a/source3/include/printing.h +++ b/source3/include/printing.h @@ -43,6 +43,7 @@ struct printjob { fstring jobname; /* the job name given to us by the client */ fstring user; /* the user who started the job */ fstring queuename; /* service number of printer for this job */ + NT_DEVICEMODE *nt_devmode; }; /* Information for print interfaces */ diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index 2a96f9a83e..58eba9d87e 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -1905,7 +1905,7 @@ static uint32 dump_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 /**************************************************************************** ****************************************************************************/ -static int pack_devicemode(NT_DEVICEMODE *nt_devmode, char *buf, int buflen) +int pack_devicemode(NT_DEVICEMODE *nt_devmode, char *buf, int buflen) { int len = 0; @@ -2282,7 +2282,7 @@ static void free_nt_printer_info_level_2(NT_PRINTER_INFO_LEVEL_2 **info_ptr) /**************************************************************************** ****************************************************************************/ -static int unpack_devicemode(NT_DEVICEMODE **nt_devmode, char *buf, int buflen) +int unpack_devicemode(NT_DEVICEMODE **nt_devmode, char *buf, int buflen) { int len = 0; int extra_len = 0; diff --git a/source3/printing/printfsp.c b/source3/printing/printfsp.c index ff50ac47c4..8a4e7ea073 100644 --- a/source3/printing/printfsp.c +++ b/source3/printing/printfsp.c @@ -46,7 +46,7 @@ files_struct *print_fsp_open(connection_struct *conn, char *fname) fstrcat(name, p); } - jobid = print_job_start(¤t_user, SNUM(conn), name); + jobid = print_job_start(¤t_user, SNUM(conn), name, NULL); if (jobid == -1) { file_free(fsp); return NULL; diff --git a/source3/printing/printing.c b/source3/printing/printing.c index 035d4d383a..208da5b78b 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -311,15 +311,49 @@ static TDB_DATA print_key(uint32 jobid) return ret; } +/*********************************************************************** + unpack a pjob from a tdb buffer +***********************************************************************/ + +int unpack_pjob( char* buf, int buflen, struct printjob *pjob ) +{ + int len = 0; + + if ( !buf || !pjob ) + return -1; + + len += tdb_unpack(buf+len, buflen-len, "dddddddddffff", + &pjob->pid, + &pjob->sysjob, + &pjob->fd, + &pjob->starttime, + &pjob->status, + &pjob->size, + &pjob->page_count, + &pjob->spooled, + &pjob->smbjob, + pjob->filename, + pjob->jobname, + pjob->user, + pjob->queuename); + + + len += unpack_devicemode(&pjob->nt_devmode, buf+len, buflen-len); + + return len; + +} + /**************************************************************************** Useful function to find a print job in the database. ****************************************************************************/ static struct printjob *print_job_find(int snum, uint32 jobid) { - static struct printjob pjob; - TDB_DATA ret; - struct tdb_print_db *pdb = get_print_db_byname(lp_const_servicename(snum)); + static struct printjob pjob; + TDB_DATA ret; + struct tdb_print_db *pdb = get_print_db_byname(lp_const_servicename(snum)); + if (!pdb) return NULL; @@ -327,11 +361,17 @@ static struct printjob *print_job_find(int snum, uint32 jobid) ret = tdb_fetch(pdb->tdb, print_key(jobid)); release_print_db(pdb); - if (!ret.dptr || ret.dsize != sizeof(pjob)) + if (!ret.dptr) return NULL; - - memcpy(&pjob, ret.dptr, sizeof(pjob)); - SAFE_FREE(ret.dptr); + + if ( pjob.nt_devmode ) + free_nt_devicemode( &pjob.nt_devmode ); + + ZERO_STRUCT( pjob ); + + unpack_pjob( ret.dptr, ret.dsize, &pjob ); + + SAFE_FREE(ret.dptr); return &pjob; } @@ -462,9 +502,12 @@ static void pjob_store_notify(int snum, uint32 jobid, struct printjob *old_data, static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) { - TDB_DATA old_data, new_data; - BOOL ret; - struct tdb_print_db *pdb = get_print_db_byname(lp_const_servicename(snum)); + TDB_DATA old_data, new_data; + BOOL ret = False; + struct tdb_print_db *pdb = get_print_db_byname(lp_const_servicename(snum)); + char *buf = NULL; + int len, newlen, buflen; + if (!pdb) return False; @@ -473,22 +516,63 @@ static BOOL pjob_store(int snum, uint32 jobid, struct printjob *pjob) old_data = tdb_fetch(pdb->tdb, print_key(jobid)); + /* Doh! Now we have to pack/unpack data since the NT_DEVICEMODE was added */ + + newlen = 0; + + do { + len = 0; + buflen = newlen; + len += tdb_pack(buf+len, buflen-len, "dddddddddffff", + pjob->pid, + pjob->sysjob, + pjob->fd, + pjob->starttime, + pjob->status, + pjob->size, + pjob->page_count, + pjob->spooled, + pjob->smbjob, + pjob->filename, + pjob->jobname, + pjob->user, + pjob->queuename); + + len += pack_devicemode(pjob->nt_devmode, buf+len, buflen-len); + + if (buflen != len) + { + char *tb; + + tb = (char *)Realloc(buf, len); + if (!tb) { + DEBUG(0,("pjob_store: failed to enlarge buffer!\n")); + goto done; + } + else + buf = tb; + newlen = len; + } + } + while ( buflen != len ); + + /* Store new data */ - new_data.dptr = (void *)pjob; - new_data.dsize = sizeof(*pjob); + new_data.dptr = buf; + new_data.dsize = len; ret = (tdb_store(pdb->tdb, print_key(jobid), new_data, TDB_REPLACE) == 0); release_print_db(pdb); /* Send notify updates for what has changed */ - if (ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob))) { - pjob_store_notify( - snum, jobid, (struct printjob *)old_data.dptr, - (struct printjob *)new_data.dptr); - free(old_data.dptr); - } + if ( ret && (old_data.dsize == 0 || old_data.dsize == sizeof(*pjob)) ) + pjob_store_notify( snum, jobid, (struct printjob *)old_data.dptr, pjob ); + +done: + SAFE_FREE( old_data.dptr ); + SAFE_FREE( buf ); return ret; } @@ -956,6 +1040,23 @@ char *print_job_fname(int snum, uint32 jobid) return pjob->filename; } + +/**************************************************************************** + Give the filename used for a jobid. + Only valid for the process doing the spooling and when the job + has not been spooled. +****************************************************************************/ + +NT_DEVICEMODE *print_job_devmode(int snum, uint32 jobid) +{ + struct printjob *pjob = print_job_find(snum, jobid); + + if ( !pjob ) + return NULL; + + return pjob->nt_devmode; +} + /**************************************************************************** Set the place in the queue for a job. ****************************************************************************/ @@ -1297,7 +1398,7 @@ int print_queue_length(int snum, print_status_struct *pstatus) Start spooling a job - return the jobid. ***************************************************************************/ -uint32 print_job_start(struct current_user *user, int snum, char *jobname) +uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DEVICEMODE *nt_devmode ) { uint32 jobid; char *path; @@ -1357,7 +1458,9 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) } /* create the database entry */ + ZERO_STRUCT(pjob); + pjob.pid = local_pid; pjob.sysjob = -1; pjob.fd = -1; @@ -1366,7 +1469,8 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname) pjob.size = 0; pjob.spooled = False; pjob.smbjob = True; - + pjob.nt_devmode = nt_devmode; + fstrcpy(pjob.jobname, jobname); if ((vuser = get_valid_user_struct(user->vuid)) != NULL) { @@ -1554,10 +1658,10 @@ static int traverse_fn_queue(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void * int i; uint32 jobid; - if (data.dsize != sizeof(pjob) || key.dsize != sizeof(int)) - return 0; memcpy(&jobid, key.dptr, sizeof(jobid)); - memcpy(&pjob, data.dptr, sizeof(pjob)); + + if ( !unpack_pjob( data.dptr, data.dsize, &pjob ) ) + return 0; /* maybe it isn't for this queue */ if (ts->snum != lp_servicenumber(pjob.queuename)) @@ -1596,10 +1700,10 @@ static int traverse_count_fn_queue(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, struct printjob pjob; uint32 jobid; - if (data.dsize != sizeof(pjob) || key.dsize != sizeof(int)) - return 0; memcpy(&jobid, key.dptr, sizeof(jobid)); - memcpy(&pjob, data.dptr, sizeof(pjob)); + + if ( !unpack_pjob( data.dptr, data.dsize, &pjob ) ) + return 0; /* maybe it isn't for this queue - this cannot happen with the tdb/printer code. JRA */ if (ts->snum != lp_servicenumber(pjob.queuename)) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index bcba89c2cc..6953ec3663 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -87,6 +87,10 @@ typedef struct _Printer{ fstring machine; fstring user; } client; + + /* devmode sent in the OpenPrinter() call */ + NT_DEVICEMODE *nt_devmode; + } Printer_entry; static Printer_entry *printers_list; @@ -224,6 +228,8 @@ static void free_printer_entry(void *ptr) free_spool_notify_option(&Printer->notify.option); Printer->notify.option=NULL; Printer->notify.client_connected=False; + + free_nt_devicemode( &Printer->nt_devmode ); /* Remove from the internal list. */ DLIST_REMOVE(printers_list, Printer); @@ -1446,9 +1452,9 @@ WERROR _spoolss_open_printer(pipes_struct *p, SPOOL_Q_OPEN_PRINTER *q_u, SPOOL_R WERROR _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u, SPOOL_R_OPEN_PRINTER_EX *r_u) { - UNISTR2 *printername = NULL; - PRINTER_DEFAULT *printer_default = &q_u->printer_default; - POLICY_HND *handle = &r_u->handle; + UNISTR2 *printername = NULL; + PRINTER_DEFAULT *printer_default = &q_u->printer_default; + POLICY_HND *handle = &r_u->handle; fstring name; int snum; @@ -1606,6 +1612,18 @@ Can't find printer handle we created for printer %s\n", name )); } Printer->access_granted = printer_default->access_required; + + /* + * If the client sent a devmode in the OpenPrinter() call, then + * save it here in case we get a job submission on this handle + */ + + if ( (Printer->printer_type != PRINTER_HANDLE_IS_PRINTSERVER) + && q_u->printer_default.devmode_cont.devmode_ptr ) + { + convert_devicemode( Printer->dev.handlename, q_u->printer_default.devmode_cont.devmode, + &Printer->nt_devmode ); + } return WERR_OK; } @@ -3784,47 +3802,20 @@ static void free_dev_mode(DEVICEMODE *dev) SAFE_FREE(dev); } + /**************************************************************************** - Create a DEVMODE struct. Returns malloced memory. + Convert an NT_DEVICEMODE to a DEVICEMODE structure. Both pointers + should be valid upon entry ****************************************************************************/ -DEVICEMODE *construct_dev_mode(int snum) +static BOOL convert_nt_devicemode( DEVICEMODE *devmode, NT_DEVICEMODE *ntdevmode ) { - char adevice[32]; - char aform[32]; - NT_PRINTER_INFO_LEVEL *printer = NULL; - NT_DEVICEMODE *ntdevmode = NULL; - DEVICEMODE *devmode = NULL; - - DEBUG(7,("construct_dev_mode\n")); - - DEBUGADD(8,("getting printer characteristics\n")); - - if ((devmode = (DEVICEMODE *)malloc(sizeof(DEVICEMODE))) == NULL) { - DEBUG(2,("construct_dev_mode: malloc fail.\n")); - return NULL; - } - - ZERO_STRUCTP(devmode); - - if (!W_ERROR_IS_OK(get_a_printer(&printer, 2, lp_servicename(snum)))) - goto fail; - - if (printer->info_2->devmode) - ntdevmode = dup_nt_devicemode(printer->info_2->devmode); - - if (ntdevmode == NULL) { - DEBUG(5, ("BONG! There was no device mode!\n")); - goto fail; - } - - DEBUGADD(8,("loading DEVICEMODE\n")); - - slprintf(adevice, sizeof(adevice)-1, printer->info_2->printername); - init_unistr(&devmode->devicename, adevice); + if ( !devmode || !ntdevmode ) + return False; + + init_unistr(&devmode->devicename, ntdevmode->devicename); - slprintf(aform, sizeof(aform)-1, ntdevmode->formname); - init_unistr(&devmode->formname, aform); + init_unistr(&devmode->formname, ntdevmode->formname); devmode->specversion = ntdevmode->specversion; devmode->driverversion = ntdevmode->driverversion; @@ -3852,23 +3843,51 @@ DEVICEMODE *construct_dev_mode(int snum) if (ntdevmode->private != NULL) { if ((devmode->private=(uint8 *)memdup(ntdevmode->private, ntdevmode->driverextra)) == NULL) - goto fail; + return False; } + + return True; +} - free_nt_devicemode(&ntdevmode); - free_a_printer(&printer,2); +/**************************************************************************** + Create a DEVMODE struct. Returns malloced memory. +****************************************************************************/ - return devmode; +DEVICEMODE *construct_dev_mode(int snum) +{ + NT_PRINTER_INFO_LEVEL *printer = NULL; + DEVICEMODE *devmode = NULL; + + DEBUG(7,("construct_dev_mode\n")); + + DEBUGADD(8,("getting printer characteristics\n")); - fail: + if (!W_ERROR_IS_OK(get_a_printer(&printer, 2, lp_servicename(snum)))) + return NULL; - if (ntdevmode) - free_nt_devicemode(&ntdevmode); - if (printer) - free_a_printer(&printer,2); - free_dev_mode(devmode); + if ( !printer->info_2->devmode ) { + DEBUG(5, ("BONG! There was no device mode!\n")); + goto done; + } + + if ((devmode = (DEVICEMODE *)malloc(sizeof(DEVICEMODE))) == NULL) { + DEBUG(2,("construct_dev_mode: malloc fail.\n")); + goto done; + } + + ZERO_STRUCTP(devmode); + + DEBUGADD(8,("loading DEVICEMODE\n")); + + if ( !convert_nt_devicemode( devmode, printer->info_2->devmode ) ) { + free_dev_mode( devmode ); + devmode = NULL; + } - return NULL; +done: + free_a_printer(&printer,2); + + return devmode; } /******************************************************************** @@ -5286,10 +5305,6 @@ WERROR _spoolss_startdocprinter(pipes_struct *p, SPOOL_Q_STARTDOCPRINTER *q_u, S * in EMF format. * * So I add checks like in NT Server ... - * - * lkclXXXX jean-francois, i love this kind of thing. oh, well, - * there's a bug in NT client-side code, so we'll fix it in the - * server-side code. *nnnnnggggh!* */ if (info_1->p_datatype != 0) { @@ -5307,7 +5322,7 @@ WERROR _spoolss_startdocprinter(pipes_struct *p, SPOOL_Q_STARTDOCPRINTER *q_u, S unistr2_to_ascii(jobname, &info_1->docname, sizeof(jobname)); - Printer->jobid = print_job_start(&user, snum, jobname); + Printer->jobid = print_job_start(&user, snum, jobname, Printer->nt_devmode); /* An error occured in print_job_start() so return an appropriate NT error code. */ @@ -8013,7 +8028,7 @@ static WERROR getjob_level_1(print_queue_struct *queue, int count, int snum, uin return WERR_NOMEM; } - for (i=0; i Date: Wed, 18 Sep 2002 20:07:56 +0000 Subject: HPUX sendfile is now detected correctly. Jeremy. (This used to be commit 91e41ebe97c143f413e2a5614b20f3db4642490f) --- source3/acconfig.h | 2 +- source3/configure | 1824 +++++++++++++++++++++++-------------------- source3/configure.in | 56 +- source3/include/config.h.in | 3 +- source3/lib/sendfile.c | 3 +- 5 files changed, 1042 insertions(+), 846 deletions(-) diff --git a/source3/acconfig.h b/source3/acconfig.h index 21c6e33076..45d6366935 100644 --- a/source3/acconfig.h +++ b/source3/acconfig.h @@ -228,5 +228,5 @@ #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE #undef FREEBSD_SENDFILE_API +#undef HPUX_SENDFILE_API #undef WITH_ADS - diff --git a/source3/configure b/source3/configure index ced279d410..9bd514ee04 100755 --- a/source3/configure +++ b/source3/configure @@ -50,6 +50,8 @@ ac_help="$ac_help --with-ads Active Directory support (default yes)" ac_help="$ac_help --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)" +ac_help="$ac_help + --with-ldap LDAP support (default yes)" ac_help="$ac_help --with-automount Include AUTOMOUNT support (default=no)" ac_help="$ac_help @@ -822,7 +824,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:826: checking for $ac_word" >&5 +echo "configure:828: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -852,7 +854,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:856: checking for $ac_word" >&5 +echo "configure:858: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -903,7 +905,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:907: checking for $ac_word" >&5 +echo "configure:909: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -935,7 +937,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:939: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:941: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -946,12 +948,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 950 "configure" +#line 952 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -977,12 +979,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:981: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:983: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:986: checking whether we are using GNU C" >&5 +echo "configure:988: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -991,7 +993,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:995: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:997: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1010,7 +1012,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1014: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:1016: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1072,7 +1074,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1076: checking for a BSD compatible install" >&5 +echo "configure:1078: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1124,12 +1126,12 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -for ac_prog in mawk gawk nawk awk +for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1133: checking for $ac_word" >&5 +echo "configure:1135: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1161,7 +1163,7 @@ done LD=ld echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 -echo "configure:1165: checking if the linker ($LD) is GNU ld" >&5 +echo "configure:1167: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1177,7 +1179,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1181: checking for POSIXized ISC" >&5 +echo "configure:1183: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then @@ -1200,10 +1202,10 @@ fi if test "x$CC" != xcc; then echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 -echo "configure:1204: checking whether $CC and cc understand -c and -o together" >&5 +echo "configure:1206: checking whether $CC and cc understand -c and -o together" >&5 else echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 -echo "configure:1207: checking whether cc understands -c and -o together" >&5 +echo "configure:1209: checking whether cc understands -c and -o together" >&5 fi set dummy $CC; ac_cc="`echo $2 | sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" @@ -1215,16 +1217,16 @@ else # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' -if { (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +if { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. - if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1227: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then ac_try='cc -c conftest.c -o conftest.o 1>&5' - if { (eval echo configure:1227: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && - test -f conftest.o && { (eval echo configure:1228: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + if { (eval echo configure:1229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:1230: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; then # cc works too. : @@ -1258,20 +1260,20 @@ fi echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6 -echo "configure:1262: checking that the C compiler understands volatile" >&5 +echo "configure:1264: checking that the C compiler understands volatile" >&5 if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { volatile int i = 0 ; return 0; } EOF -if { (eval echo configure:1275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1277: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_volatile=yes else @@ -1320,7 +1322,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:1324: checking host system type" >&5 +echo "configure:1326: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -1341,7 +1343,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:1345: checking target system type" >&5 +echo "configure:1347: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -1359,7 +1361,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1363: checking build system type" >&5 +echo "configure:1365: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1393,7 +1395,7 @@ esac echo $ac_n "checking config.cache system type""... $ac_c" 1>&6 -echo "configure:1397: checking config.cache system type" >&5 +echo "configure:1399: checking config.cache system type" >&5 if { test x"${ac_cv_host_system_type+set}" = x"set" && test x"$ac_cv_host_system_type" != x"$host"; } || { test x"${ac_cv_build_system_type+set}" = x"set" && @@ -1421,7 +1423,7 @@ case "$host_os" in *hpux*) echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6 -echo "configure:1425: checking whether ${CC-cc} accepts -Ae" >&5 +echo "configure:1427: checking whether ${CC-cc} accepts -Ae" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1582,14 +1584,14 @@ EOF *sysv4*) if test $host = mips-sni-sysv4 ; then echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1586: checking for LFS support" >&5 +echo "configure:1588: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then SINIX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1601,7 +1603,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then SINIX_LFS_SUPPORT=yes else @@ -1632,14 +1634,14 @@ EOF # *linux*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1636: checking for LFS support" >&5 +echo "configure:1638: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then LINUX_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1677,7 +1679,7 @@ main() { } EOF -if { (eval echo configure:1681: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then LINUX_LFS_SUPPORT=yes else @@ -1710,14 +1712,14 @@ EOF *hurd*) echo $ac_n "checking for LFS support""... $ac_c" 1>&6 -echo "configure:1714: checking for LFS support" >&5 +echo "configure:1716: checking for LFS support" >&5 old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS" if test "$cross_compiling" = yes; then GLIBC_LFS_SUPPORT=cross else cat > conftest.$ac_ext < @@ -1729,7 +1731,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then GLIBC_LFS_SUPPORT=yes else @@ -1759,21 +1761,21 @@ EOF esac echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:1763: checking for inline" >&5 +echo "configure:1765: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -1799,7 +1801,7 @@ EOF esac echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1803: checking how to run the C preprocessor" >&5 +echo "configure:1805: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1814,13 +1816,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1826: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1831,13 +1833,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1841: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1843: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1848,13 +1850,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1858: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1860: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1879,12 +1881,12 @@ fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1883: checking for ANSI C header files" >&5 +echo "configure:1885: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1892,7 +1894,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1896: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1898: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1909,7 +1911,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1927,7 +1929,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1948,7 +1950,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1959,7 +1961,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1987,12 +1989,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1991: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1993: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -2000,7 +2002,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:2004: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2006: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -2025,7 +2027,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2029: checking for opendir in -ldir" >&5 +echo "configure:2031: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2033,7 +2035,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2066,7 +2068,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2070: checking for opendir in -lx" >&5 +echo "configure:2072: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2074,7 +2076,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2108,12 +2110,12 @@ fi fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2112: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2114: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2122,7 +2124,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2128: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2143,12 +2145,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2147: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:2149: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2164,7 +2166,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:2168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2170: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -2188,17 +2190,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2192: checking for $ac_hdr" >&5 +echo "configure:2194: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2202: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2204: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2228,17 +2230,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2232: checking for $ac_hdr" >&5 +echo "configure:2234: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2244: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2268,17 +2270,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2272: checking for $ac_hdr" >&5 +echo "configure:2274: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2282: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2284: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2308,17 +2310,17 @@ for ac_hdr in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2312: checking for $ac_hdr" >&5 +echo "configure:2314: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2324: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2348,17 +2350,17 @@ for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h std do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2352: checking for $ac_hdr" >&5 +echo "configure:2354: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2364: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2388,17 +2390,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2392: checking for $ac_hdr" >&5 +echo "configure:2394: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2402: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2404: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2428,17 +2430,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2432: checking for $ac_hdr" >&5 +echo "configure:2434: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2442: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2468,17 +2470,17 @@ for ac_hdr in security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn. do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2472: checking for $ac_hdr" >&5 +echo "configure:2474: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2482: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2484: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2508,17 +2510,17 @@ for ac_hdr in sys/syslog.h syslog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2512: checking for $ac_hdr" >&5 +echo "configure:2514: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2524: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2552,14 +2554,14 @@ done case "$host_os" in *hpux*) cat > conftest.$ac_ext < int main() { struct spwd testme ; return 0; } EOF -if { (eval echo configure:2563: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2565: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_shadow_h=yes else @@ -2581,17 +2583,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2585: checking for $ac_hdr" >&5 +echo "configure:2587: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2595: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2597: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2621,17 +2623,17 @@ for ac_hdr in nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h sec do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2625: checking for $ac_hdr" >&5 +echo "configure:2627: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2635: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2637: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2661,17 +2663,17 @@ for ac_hdr in stropts.h poll.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2665: checking for $ac_hdr" >&5 +echo "configure:2667: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2675: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2677: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2701,17 +2703,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2705: checking for $ac_hdr" >&5 +echo "configure:2707: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2717: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2741,17 +2743,17 @@ for ac_hdr in sys/acl.h sys/cdefs.h glob.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2745: checking for $ac_hdr" >&5 +echo "configure:2747: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2755: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2757: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2783,17 +2785,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2787: checking for $ac_hdr" >&5 +echo "configure:2789: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2799: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2825,17 +2827,17 @@ for ac_hdr in sys/fs/vx_quota.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2829: checking for $ac_hdr" >&5 +echo "configure:2831: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2841: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2867,17 +2869,17 @@ for ac_hdr in linux/xqm.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2871: checking for $ac_hdr" >&5 +echo "configure:2873: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2881: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2883: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2905,7 +2907,7 @@ done echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2909: checking size of int" >&5 +echo "configure:2911: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2913,19 +2915,18 @@ else ac_cv_sizeof_int=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(int)); - exit(0); + return(0); } EOF -if { (eval echo configure:2929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2945,7 +2946,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2949: checking size of long" >&5 +echo "configure:2950: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2953,16 +2954,15 @@ else ac_cv_sizeof_long=cross else cat > conftest.$ac_ext < -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(long)); - exit(0); + return(0); } EOF if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2996,16 +2996,15 @@ else #line 2997 "configure" #include "confdefs.h" #include -#include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(short)); - exit(0); + return(0); } EOF -if { (eval echo configure:3009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -3026,12 +3025,12 @@ EOF echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3030: checking for working const" >&5 +echo "configure:3029: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3101,21 +3100,21 @@ EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 -echo "configure:3105: checking for inline" >&5 +echo "configure:3104: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else @@ -3141,14 +3140,14 @@ EOF esac echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3145: checking whether byte ordering is bigendian" >&5 +echo "configure:3144: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -3159,11 +3158,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -3174,7 +3173,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3177: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3194,7 +3193,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3210: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3231,14 +3230,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3235: checking whether char is unsigned" >&5 +echo "configure:3234: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3295,12 +3294,12 @@ fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:3299: checking return type of signal handlers" >&5 +echo "configure:3298: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3317,7 +3316,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:3321: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3320: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -3336,12 +3335,12 @@ EOF echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3340: checking for uid_t in sys/types.h" >&5 +echo "configure:3339: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -3370,12 +3369,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:3374: checking for mode_t" >&5 +echo "configure:3373: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3403,12 +3402,12 @@ EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 -echo "configure:3407: checking for off_t" >&5 +echo "configure:3406: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3436,12 +3435,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3440: checking for size_t" >&5 +echo "configure:3439: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3469,12 +3468,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:3473: checking for pid_t" >&5 +echo "configure:3472: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3502,12 +3501,12 @@ EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:3506: checking for st_rdev in struct stat" >&5 +echo "configure:3505: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3515,7 +3514,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:3519: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3518: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -3536,12 +3535,12 @@ EOF fi echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6 -echo "configure:3540: checking for d_off in dirent" >&5 +echo "configure:3539: checking for d_off in dirent" >&5 if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3551,7 +3550,7 @@ int main() { struct dirent d; d.d_off; ; return 0; } EOF -if { (eval echo configure:3555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3554: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_dirent_d_off=yes else @@ -3572,12 +3571,12 @@ EOF fi echo $ac_n "checking for ino_t""... $ac_c" 1>&6 -echo "configure:3576: checking for ino_t" >&5 +echo "configure:3575: checking for ino_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3605,12 +3604,12 @@ EOF fi echo $ac_n "checking for loff_t""... $ac_c" 1>&6 -echo "configure:3609: checking for loff_t" >&5 +echo "configure:3608: checking for loff_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3638,12 +3637,12 @@ EOF fi echo $ac_n "checking for offset_t""... $ac_c" 1>&6 -echo "configure:3642: checking for offset_t" >&5 +echo "configure:3641: checking for offset_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3671,12 +3670,12 @@ EOF fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:3675: checking for ssize_t" >&5 +echo "configure:3674: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3704,12 +3703,12 @@ EOF fi echo $ac_n "checking for wchar_t""... $ac_c" 1>&6 -echo "configure:3708: checking for wchar_t" >&5 +echo "configure:3707: checking for wchar_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3751,7 +3750,7 @@ if test x$enable_cups != xno; then # Extract the first word of "cups-config", so it can be a program name with args. set dummy cups-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3755: checking for $ac_word" >&5 +echo "configure:3754: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_CUPS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3800,12 +3799,12 @@ fi for ac_func in dlopen do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3804: checking for $ac_func" >&5 +echo "configure:3803: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3854,7 +3853,7 @@ done if test x"$ac_cv_func_dlopen" = x"no"; then echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:3858: checking for dlopen in -ldl" >&5 +echo "configure:3857: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -3862,7 +3861,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -3903,13 +3902,13 @@ fi ############################################ # check if the compiler can do immediate structures echo $ac_n "checking for immediate structures""... $ac_c" 1>&6 -echo "configure:3907: checking for immediate structures" >&5 +echo "configure:3906: checking for immediate structures" >&5 if eval "test \"`echo '$''{'samba_cv_immediate_structures'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3927,7 +3926,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3931: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3930: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_immediate_structures=yes else @@ -3950,13 +3949,13 @@ fi ############################################ # check for unix domain sockets echo $ac_n "checking for unix domain sockets""... $ac_c" 1>&6 -echo "configure:3954: checking for unix domain sockets" >&5 +echo "configure:3953: checking for unix domain sockets" >&5 if eval "test \"`echo '$''{'samba_cv_unixsocket'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3971,7 +3970,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3975: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3974: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_unixsocket=yes else @@ -3993,13 +3992,13 @@ fi echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6 -echo "configure:3997: checking for socklen_t type" >&5 +echo "configure:3996: checking for socklen_t type" >&5 if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4012,7 +4011,7 @@ int main() { socklen_t i = 0 ; return 0; } EOF -if { (eval echo configure:4016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_socklen_t=yes else @@ -4033,13 +4032,13 @@ EOF fi echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6 -echo "configure:4037: checking for sig_atomic_t type" >&5 +echo "configure:4036: checking for sig_atomic_t type" >&5 if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -4052,7 +4051,7 @@ int main() { sig_atomic_t i = 0 ; return 0; } EOF -if { (eval echo configure:4056: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_sig_atomic_t=yes else @@ -4075,20 +4074,20 @@ fi # stupid headers have the functions but no declaration. grrrr. echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 -echo "configure:4079: checking for errno declaration" >&5 +echo "configure:4078: checking for errno declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)errno ; return 0; } EOF -if { (eval echo configure:4092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4091: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_errno_decl=yes else @@ -4110,20 +4109,20 @@ EOF echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6 -echo "configure:4114: checking for setresuid declaration" >&5 +echo "configure:4113: checking for setresuid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresuid ; return 0; } EOF -if { (eval echo configure:4127: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresuid_decl=yes else @@ -4145,20 +4144,20 @@ EOF echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6 -echo "configure:4149: checking for setresgid declaration" >&5 +echo "configure:4148: checking for setresgid declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)setresgid ; return 0; } EOF -if { (eval echo configure:4162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4161: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_setresgid_decl=yes else @@ -4180,20 +4179,20 @@ EOF echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6 -echo "configure:4184: checking for asprintf declaration" >&5 +echo "configure:4183: checking for asprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)asprintf ; return 0; } EOF -if { (eval echo configure:4197: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_asprintf_decl=yes else @@ -4215,20 +4214,20 @@ EOF echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6 -echo "configure:4219: checking for vasprintf declaration" >&5 +echo "configure:4218: checking for vasprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vasprintf ; return 0; } EOF -if { (eval echo configure:4232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4231: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vasprintf_decl=yes else @@ -4250,20 +4249,20 @@ EOF echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6 -echo "configure:4254: checking for vsnprintf declaration" >&5 +echo "configure:4253: checking for vsnprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)vsnprintf ; return 0; } EOF -if { (eval echo configure:4267: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_vsnprintf_decl=yes else @@ -4285,20 +4284,20 @@ EOF echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6 -echo "configure:4289: checking for snprintf declaration" >&5 +echo "configure:4288: checking for snprintf declaration" >&5 if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = (int)snprintf ; return 0; } EOF -if { (eval echo configure:4302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_snprintf_decl=yes else @@ -4322,7 +4321,7 @@ EOF # and glibc has setresuid under linux but the function does # nothing until kernel 2.1.44! very dumb. echo $ac_n "checking for real setresuid""... $ac_c" 1>&6 -echo "configure:4326: checking for real setresuid" >&5 +echo "configure:4325: checking for real setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4331,12 +4330,12 @@ else samba_cv_have_setresuid=cross else cat > conftest.$ac_ext < main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);} EOF -if { (eval echo configure:4340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresuid=yes else @@ -4361,7 +4360,7 @@ fi # Do the same check for setresguid... # echo $ac_n "checking for real setresgid""... $ac_c" 1>&6 -echo "configure:4365: checking for real setresgid" >&5 +echo "configure:4364: checking for real setresgid" >&5 if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4370,13 +4369,13 @@ else samba_cv_have_setresgid=cross else cat > conftest.$ac_ext < #include main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);} EOF -if { (eval echo configure:4380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_setresgid=yes else @@ -4399,7 +4398,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:4403: checking for 8-bit clean memcmp" >&5 +echo "configure:4402: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4407,7 +4406,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -4440,12 +4439,12 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4444: checking for $ac_func" >&5 +echo "configure:4443: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4494,7 +4493,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:4498: checking for crypt in -lcrypt" >&5 +echo "configure:4497: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4502,7 +4501,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4546,7 +4545,7 @@ test "${with_readline+set}" != "set" && with_readline=yes # test for where we get readline() from echo $ac_n "checking whether to use readline""... $ac_c" 1>&6 -echo "configure:4550: checking whether to use readline" >&5 +echo "configure:4549: checking whether to use readline" >&5 # Check whether --with-readline or --without-readline was given. if test "${with_readline+set}" = set; then withval="$with_readline" @@ -4558,17 +4557,17 @@ if test "${with_readline+set}" = set; then do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4562: checking for $ac_hdr" >&5 +echo "configure:4561: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4572: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4571: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4598,17 +4597,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4602: checking for $ac_hdr" >&5 +echo "configure:4601: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4611: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4639,17 +4638,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4643: checking for $ac_hdr" >&5 +echo "configure:4642: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4653: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4672,7 +4671,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4676: checking for tgetent in -l${termlib}" >&5 +echo "configure:4675: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4680,7 +4679,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4713,7 +4712,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4717: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4716: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4721,7 +4720,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4783,17 +4782,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4787: checking for $ac_hdr" >&5 +echo "configure:4786: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4823,17 +4822,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4827: checking for $ac_hdr" >&5 +echo "configure:4826: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4836: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4864,17 +4863,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4868: checking for $ac_hdr" >&5 +echo "configure:4867: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4877: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4897,7 +4896,7 @@ EOF for termlib in ncurses curses termcap terminfo termlib; do echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6 -echo "configure:4901: checking for tgetent in -l${termlib}" >&5 +echo "configure:4900: checking for tgetent in -l${termlib}" >&5 ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4905,7 +4904,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${termlib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4938,7 +4937,7 @@ fi done echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6 -echo "configure:4942: checking for rl_callback_handler_install in -lreadline" >&5 +echo "configure:4941: checking for rl_callback_handler_install in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4946,7 +4945,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5007,7 +5006,7 @@ fi # code will generate warnings on one of them unless we have a few # special cases. echo $ac_n "checking for rl_completion_matches in -lreadline""... $ac_c" 1>&6 -echo "configure:5011: checking for rl_completion_matches in -lreadline" >&5 +echo "configure:5010: checking for rl_completion_matches in -lreadline" >&5 ac_lib_var=`echo readline'_'rl_completion_matches | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5015,7 +5014,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lreadline $TERMLIBS $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5059,12 +5058,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5063: checking for $ac_func" >&5 +echo "configure:5062: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5090: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5115,7 +5114,7 @@ if test x"$ac_cv_func_connect" = x"no"; then case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6 -echo "configure:5119: checking for printf in -lnsl_s" >&5 +echo "configure:5118: checking for printf in -lnsl_s" >&5 ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5123,7 +5122,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl_s $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5165,7 +5164,7 @@ fi case "$LIBS" in *-lnsl*) ;; *) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6 -echo "configure:5169: checking for printf in -lnsl" >&5 +echo "configure:5168: checking for printf in -lnsl" >&5 ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5173,7 +5172,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5215,7 +5214,7 @@ fi case "$LIBS" in *-lsocket*) ;; *) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:5219: checking for connect in -lsocket" >&5 +echo "configure:5218: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5223,7 +5222,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5265,7 +5264,7 @@ fi case "$LIBS" in *-linet*) ;; *) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6 -echo "configure:5269: checking for connect in -linet" >&5 +echo "configure:5268: checking for connect in -linet" >&5 ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5273,7 +5272,7 @@ else ac_save_LIBS="$LIBS" LIBS="-linet $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5328,12 +5327,12 @@ fi for ac_func in yp_get_default_domain do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5332: checking for $ac_func" >&5 +echo "configure:5331: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5382,7 +5381,7 @@ done if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6 -echo "configure:5386: checking for yp_get_default_domain in -lnsl" >&5 +echo "configure:5385: checking for yp_get_default_domain in -lnsl" >&5 ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5390,7 +5389,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5431,12 +5430,12 @@ fi for ac_func in execl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5435: checking for $ac_func" >&5 +echo "configure:5434: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5492,12 +5491,12 @@ fi for ac_func in dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5496: checking for $ac_func" >&5 +echo "configure:5495: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5547,12 +5546,12 @@ done for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5551: checking for $ac_func" >&5 +echo "configure:5550: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5602,12 +5601,12 @@ done for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5606: checking for $ac_func" >&5 +echo "configure:5605: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5657,12 +5656,12 @@ done for ac_func in strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5661: checking for $ac_func" >&5 +echo "configure:5660: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5712,12 +5711,12 @@ done for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf realpath do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5716: checking for $ac_func" >&5 +echo "configure:5715: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5767,12 +5766,12 @@ done for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5771: checking for $ac_func" >&5 +echo "configure:5770: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5822,12 +5821,12 @@ done for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5826: checking for $ac_func" >&5 +echo "configure:5825: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5877,12 +5876,12 @@ done for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5881: checking for $ac_func" >&5 +echo "configure:5880: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5932,12 +5931,12 @@ done for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5936: checking for $ac_func" >&5 +echo "configure:5935: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5987,12 +5986,12 @@ done for ac_func in syslog vsyslog getgrouplist do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5991: checking for $ac_func" >&5 +echo "configure:5990: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6043,12 +6042,12 @@ done for ac_func in setbuffer do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6047: checking for $ac_func" >&5 +echo "configure:6046: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6100,12 +6099,12 @@ done for ac_func in syscall do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6104: checking for $ac_func" >&5 +echo "configure:6103: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6156,12 +6155,12 @@ done for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6160: checking for $ac_func" >&5 +echo "configure:6159: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6211,12 +6210,12 @@ done for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6215: checking for $ac_func" >&5 +echo "configure:6214: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6266,12 +6265,12 @@ done for ac_func in __getcwd _getcwd do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6270: checking for $ac_func" >&5 +echo "configure:6269: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6321,12 +6320,12 @@ done for ac_func in __xstat __fxstat __lxstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6325: checking for $ac_func" >&5 +echo "configure:6324: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6376,12 +6375,12 @@ done for ac_func in _stat _lstat _fstat __stat __lstat __fstat do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6380: checking for $ac_func" >&5 +echo "configure:6379: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6431,12 +6430,12 @@ done for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6435: checking for $ac_func" >&5 +echo "configure:6434: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6486,12 +6485,12 @@ done for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6490: checking for $ac_func" >&5 +echo "configure:6489: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6541,12 +6540,12 @@ done for ac_func in getdents _getdents __getdents _lseek __lseek _read __read do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6545: checking for $ac_func" >&5 +echo "configure:6544: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6596,12 +6595,12 @@ done for ac_func in _write __write _fork __fork do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6600: checking for $ac_func" >&5 +echo "configure:6599: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6651,12 +6650,12 @@ done for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6655: checking for $ac_func" >&5 +echo "configure:6654: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6706,12 +6705,12 @@ done for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6710: checking for $ac_func" >&5 +echo "configure:6709: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6761,12 +6760,12 @@ done for ac_func in pread _pread __pread pread64 _pread64 __pread64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6765: checking for $ac_func" >&5 +echo "configure:6764: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6816,12 +6815,12 @@ done for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6820: checking for $ac_func" >&5 +echo "configure:6819: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6871,12 +6870,12 @@ done for ac_func in open64 _open64 __open64 creat64 do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:6875: checking for $ac_func" >&5 +echo "configure:6874: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -6930,9 +6929,9 @@ done if test x$ac_cv_func_stat64 = xno ; then echo $ac_n "checking for stat64 in ""... $ac_c" 1>&6 -echo "configure:6934: checking for stat64 in " >&5 +echo "configure:6933: checking for stat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_stat64=yes else @@ -6963,9 +6962,9 @@ fi if test x$ac_cv_func_lstat64 = xno ; then echo $ac_n "checking for lstat64 in ""... $ac_c" 1>&6 -echo "configure:6967: checking for lstat64 in " >&5 +echo "configure:6966: checking for lstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:6980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_lstat64=yes else @@ -6996,9 +6995,9 @@ fi if test x$ac_cv_func_fstat64 = xno ; then echo $ac_n "checking for fstat64 in ""... $ac_c" 1>&6 -echo "configure:7000: checking for fstat64 in " >&5 +echo "configure:6999: checking for fstat64 in " >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_fstat64=yes else @@ -7030,7 +7029,7 @@ fi ##################################### # we might need the resolv library on some systems echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6 -echo "configure:7034: checking for dn_expand in -lresolv" >&5 +echo "configure:7033: checking for dn_expand in -lresolv" >&5 ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7038,7 +7037,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7087,12 +7086,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7091: checking for $ac_func" >&5 +echo "configure:7090: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7140,7 +7139,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7144: checking for putprpwnam in -lsecurity" >&5 +echo "configure:7143: checking for putprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7148,7 +7147,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7189,12 +7188,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7193: checking for $ac_func" >&5 +echo "configure:7192: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7248,12 +7247,12 @@ case "$LIBS" in *-lsec*) for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7252: checking for $ac_func" >&5 +echo "configure:7251: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7301,7 +7300,7 @@ fi done ;; *) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:7305: checking for putprpwnam in -lsec" >&5 +echo "configure:7304: checking for putprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7309,7 +7308,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7350,12 +7349,12 @@ fi for ac_func in putprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7354: checking for $ac_func" >&5 +echo "configure:7353: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7410,12 +7409,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7414: checking for $ac_func" >&5 +echo "configure:7413: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7463,7 +7462,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6 -echo "configure:7467: checking for set_auth_parameters in -lsecurity" >&5 +echo "configure:7466: checking for set_auth_parameters in -lsecurity" >&5 ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7471,7 +7470,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7512,12 +7511,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7516: checking for $ac_func" >&5 +echo "configure:7515: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7571,12 +7570,12 @@ case "$LIBS" in *-lsec*) for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7575: checking for $ac_func" >&5 +echo "configure:7574: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7624,7 +7623,7 @@ fi done ;; *) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6 -echo "configure:7628: checking for set_auth_parameters in -lsec" >&5 +echo "configure:7627: checking for set_auth_parameters in -lsec" >&5 ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7632,7 +7631,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7646: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7673,12 +7672,12 @@ fi for ac_func in set_auth_parameters do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7677: checking for $ac_func" >&5 +echo "configure:7676: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7704: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7734,12 +7733,12 @@ case "$LIBS" in *-lgen*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7738: checking for $ac_func" >&5 +echo "configure:7737: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7787,7 +7786,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6 -echo "configure:7791: checking for getspnam in -lgen" >&5 +echo "configure:7790: checking for getspnam in -lgen" >&5 ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7795,7 +7794,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgen $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7836,12 +7835,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7840: checking for $ac_func" >&5 +echo "configure:7839: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7896,12 +7895,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:7900: checking for $ac_func" >&5 +echo "configure:7899: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -7949,7 +7948,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:7953: checking for getspnam in -lsecurity" >&5 +echo "configure:7952: checking for getspnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -7957,7 +7956,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:7971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -7998,12 +7997,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8002: checking for $ac_func" >&5 +echo "configure:8001: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8057,12 +8056,12 @@ case "$LIBS" in *-lsec*) for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8061: checking for $ac_func" >&5 +echo "configure:8060: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8110,7 +8109,7 @@ fi done ;; *) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6 -echo "configure:8114: checking for getspnam in -lsec" >&5 +echo "configure:8113: checking for getspnam in -lsec" >&5 ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8118,7 +8117,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8159,12 +8158,12 @@ fi for ac_func in getspnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8163: checking for $ac_func" >&5 +echo "configure:8162: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8219,12 +8218,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8223: checking for $ac_func" >&5 +echo "configure:8222: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8272,7 +8271,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6 -echo "configure:8276: checking for bigcrypt in -lsecurity" >&5 +echo "configure:8275: checking for bigcrypt in -lsecurity" >&5 ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8280,7 +8279,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8321,12 +8320,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8325: checking for $ac_func" >&5 +echo "configure:8324: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8380,12 +8379,12 @@ case "$LIBS" in *-lsec*) for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8384: checking for $ac_func" >&5 +echo "configure:8383: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8433,7 +8432,7 @@ fi done ;; *) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6 -echo "configure:8437: checking for bigcrypt in -lsec" >&5 +echo "configure:8436: checking for bigcrypt in -lsec" >&5 ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8441,7 +8440,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8482,12 +8481,12 @@ fi for ac_func in bigcrypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8486: checking for $ac_func" >&5 +echo "configure:8485: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8542,12 +8541,12 @@ case "$LIBS" in *-lsecurity*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8546: checking for $ac_func" >&5 +echo "configure:8545: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8595,7 +8594,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6 -echo "configure:8599: checking for getprpwnam in -lsecurity" >&5 +echo "configure:8598: checking for getprpwnam in -lsecurity" >&5 ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8603,7 +8602,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsecurity $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8644,12 +8643,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8648: checking for $ac_func" >&5 +echo "configure:8647: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8703,12 +8702,12 @@ case "$LIBS" in *-lsec*) for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8707: checking for $ac_func" >&5 +echo "configure:8706: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8756,7 +8755,7 @@ fi done ;; *) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6 -echo "configure:8760: checking for getprpwnam in -lsec" >&5 +echo "configure:8759: checking for getprpwnam in -lsec" >&5 ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -8764,7 +8763,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsec $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8778: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -8805,12 +8804,12 @@ fi for ac_func in getprpwnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:8809: checking for $ac_func" >&5 +echo "configure:8808: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -8877,7 +8876,7 @@ SHLIBEXT="so" # Assume non-shared by default and override below BLDSHARED="false" echo $ac_n "checking ability to build shared libraries""... $ac_c" 1>&6 -echo "configure:8881: checking ability to build shared libraries" >&5 +echo "configure:8880: checking ability to build shared libraries" >&5 # and these are for particular systems case "$host_os" in @@ -9037,7 +9036,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9041: checking for $ac_word" >&5 +echo "configure:9040: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9094,17 +9093,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9098: checking linker flags for shared libraries" >&5 +echo "configure:9097: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9101: checking compiler flags for position-independent code" >&5 +echo "configure:9100: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9108: checking whether building shared libraries actually works" >&5 +echo "configure:9107: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9135,7 +9134,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9139: checking for long long" >&5 +echo "configure:9138: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9144,12 +9143,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9176,20 +9175,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9180: checking for LL suffix on long long integers" >&5 +echo "configure:9179: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9193: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9211,7 +9210,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9215: checking for 64 bit off_t" >&5 +echo "configure:9214: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9220,13 +9219,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9230: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9249,7 +9248,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9253: checking for off64_t" >&5 +echo "configure:9252: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9258,7 +9257,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9291,7 +9290,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9295: checking for 64 bit ino_t" >&5 +echo "configure:9294: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9300,13 +9299,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9329,7 +9328,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9333: checking for ino64_t" >&5 +echo "configure:9332: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9338,7 +9337,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9371,7 +9370,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9375: checking for dev64_t" >&5 +echo "configure:9374: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9380,7 +9379,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9413,13 +9412,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9417: checking for struct dirent64" >&5 +echo "configure:9416: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9434: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9452,7 +9451,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9456: checking for major macro" >&5 +echo "configure:9455: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9461,7 +9460,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9493,7 +9492,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9497: checking for minor macro" >&5 +echo "configure:9496: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9502,7 +9501,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9534,7 +9533,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9538: checking for unsigned char" >&5 +echo "configure:9537: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9543,12 +9542,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9571,13 +9570,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9575: checking for sin_len in sock" >&5 +echo "configure:9574: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9586,7 +9585,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9590: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9607,13 +9606,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9611: checking whether seekdir returns void" >&5 +echo "configure:9610: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9622,7 +9621,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9626: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9643,20 +9642,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9647: checking for __FILE__ macro" >&5 +echo "configure:9646: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9677,20 +9676,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9681: checking for __FUNCTION__ macro" >&5 +echo "configure:9680: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9694: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9693: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9711,7 +9710,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9715: checking if gettimeofday takes tz argument" >&5 +echo "configure:9714: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9720,14 +9719,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9750,13 +9749,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9754: checking for __va_copy" >&5 +echo "configure:9753: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9764,7 +9763,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9785,7 +9784,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9789: checking for C99 vsnprintf" >&5 +echo "configure:9788: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9794,7 +9793,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9821,7 +9820,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9844,7 +9843,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9848: checking for broken readdir" >&5 +echo "configure:9847: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9853,7 +9852,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9861,7 +9860,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9884,13 +9883,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9888: checking for utimbuf" >&5 +echo "configure:9887: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9898,7 +9897,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9902: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9922,12 +9921,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9926: checking for $ac_func" >&5 +echo "configure:9925: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9976,13 +9975,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9980: checking for ut_name in utmp" >&5 +echo "configure:9979: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9990,7 +9989,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9994: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10011,13 +10010,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10015: checking for ut_user in utmp" >&5 +echo "configure:10014: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10025,7 +10024,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10029: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10046,13 +10045,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10050: checking for ut_id in utmp" >&5 +echo "configure:10049: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10060,7 +10059,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10064: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10081,13 +10080,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10085: checking for ut_host in utmp" >&5 +echo "configure:10084: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10095,7 +10094,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10099: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10116,13 +10115,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10120: checking for ut_time in utmp" >&5 +echo "configure:10119: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10130,7 +10129,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10134: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10151,13 +10150,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10155: checking for ut_tv in utmp" >&5 +echo "configure:10154: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10165,7 +10164,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10186,13 +10185,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10190: checking for ut_type in utmp" >&5 +echo "configure:10189: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10200,7 +10199,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10204: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10221,13 +10220,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10225: checking for ut_pid in utmp" >&5 +echo "configure:10224: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10235,7 +10234,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10239: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10238: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10256,13 +10255,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10260: checking for ut_exit in utmp" >&5 +echo "configure:10259: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10270,7 +10269,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10274: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10291,13 +10290,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10295: checking for ut_addr in utmp" >&5 +echo "configure:10294: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10305,7 +10304,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10309: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10327,13 +10326,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10331: checking whether pututline returns pointer" >&5 +echo "configure:10330: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10341,7 +10340,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10363,13 +10362,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10367: checking for ut_syslen in utmpx" >&5 +echo "configure:10366: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10377,7 +10376,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10401,7 +10400,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10405: checking whether to use libiconv" >&5 +echo "configure:10404: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10414,7 +10413,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10418: checking for iconv_open in -liconv" >&5 +echo "configure:10417: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10422,7 +10421,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10476,7 +10475,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10480: checking for working iconv" >&5 +echo "configure:10479: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10485,7 +10484,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10496,7 +10495,7 @@ main() { } EOF -if { (eval echo configure:10500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10520,7 +10519,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10524: checking for Linux kernel oplocks" >&5 +echo "configure:10523: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10529,7 +10528,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10543,7 +10542,7 @@ main() { } EOF -if { (eval echo configure:10547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10566,7 +10565,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10570: checking for kernel change notify support" >&5 +echo "configure:10569: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10575,7 +10574,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10589,7 +10588,7 @@ main() { } EOF -if { (eval echo configure:10593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10612,7 +10611,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10616: checking for kernel share modes" >&5 +echo "configure:10615: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10621,7 +10620,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10637,7 +10636,7 @@ main() { } EOF -if { (eval echo configure:10641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10663,13 +10662,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10667: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10666: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10677,7 +10676,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10681: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10698,7 +10697,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10702: checking for irix specific capabilities" >&5 +echo "configure:10701: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10707,7 +10706,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10722,7 +10721,7 @@ main() { } EOF -if { (eval echo configure:10726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10750,13 +10749,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10754: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10753: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10766,7 +10765,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10770: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10787,13 +10786,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10791: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10790: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10803,7 +10802,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10807: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10824,13 +10823,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10828: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10827: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10840,7 +10839,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10844: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10861,13 +10860,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10865: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10864: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10877,7 +10876,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10881: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10899,13 +10898,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10903: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10902: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10919,7 +10918,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10940,16 +10939,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10944: checking for test routines" >&5 +echo "configure:10943: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10963,7 +10962,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10967: checking for ftruncate extend" >&5 +echo "configure:10966: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10972,11 +10971,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10999,7 +10998,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11003: checking for AF_LOCAL socket support" >&5 +echo "configure:11002: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11008,11 +11007,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11036,7 +11035,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11040: checking for broken getgroups" >&5 +echo "configure:11039: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11045,11 +11044,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11072,7 +11071,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11076: checking whether getpass should be replaced" >&5 +echo "configure:11075: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11080,7 +11079,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11116,7 +11115,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11120: checking for broken inet_ntoa" >&5 +echo "configure:11119: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11125,7 +11124,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11139,7 +11138,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11162,7 +11161,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11166: checking for secure mkstemp" >&5 +echo "configure:11165: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11171,7 +11170,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11188,7 +11187,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11211,7 +11210,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11215: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11214: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11220,12 +11219,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11248,7 +11247,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11252: checking for root" >&5 +echo "configure:11251: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11257,11 +11256,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11289,7 +11288,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11293: checking for iface AIX" >&5 +echo "configure:11292: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11298,7 +11297,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11330,7 +11329,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11334: checking for iface ifconf" >&5 +echo "configure:11333: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11339,7 +11338,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11372,7 +11371,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11376: checking for iface ifreq" >&5 +echo "configure:11375: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11381,7 +11380,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11418,7 +11417,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11422: checking for setresuid" >&5 +echo "configure:11421: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11427,7 +11426,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11461,7 +11460,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11465: checking for setreuid" >&5 +echo "configure:11464: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11470,7 +11469,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11503,7 +11502,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11507: checking for seteuid" >&5 +echo "configure:11506: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11512,7 +11511,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11545,7 +11544,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11549: checking for setuidx" >&5 +echo "configure:11548: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11554,7 +11553,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11587,7 +11586,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11591: checking for working mmap" >&5 +echo "configure:11590: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11596,11 +11595,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11623,7 +11622,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11627: checking for ftruncate needs root" >&5 +echo "configure:11626: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11632,11 +11631,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11659,7 +11658,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11663: checking for fcntl locking" >&5 +echo "configure:11662: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11668,11 +11667,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11695,7 +11694,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11699: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11698: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11704,11 +11703,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11733,7 +11732,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11737: checking for 64 bit fcntl locking" >&5 +echo "configure:11736: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11742,7 +11741,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11791,13 +11790,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11795: checking for st_blocks in struct stat" >&5 +echo "configure:11794: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11806,7 +11805,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11809: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11827,13 +11826,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11831: checking for st_blksize in struct stat" >&5 +echo "configure:11830: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11842,7 +11841,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11846: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11865,13 +11864,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11869: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11868: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11908,13 +11907,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11912: checking for broken nisplus include files" >&5 +echo "configure:11911: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11924,7 +11923,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11928: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11948,7 +11947,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11952: checking whether to use smbwrapper" >&5 +echo "configure:11951: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11995,7 +11994,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11999: checking whether to use AFS clear-text auth" >&5 +echo "configure:11998: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12021,7 +12020,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12025: checking whether to use DFS clear-text auth" >&5 +echo "configure:12024: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12048,7 +12047,7 @@ fi with_ads_support=yes echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 -echo "configure:12052: checking whether to use Active Directory" >&5 +echo "configure:12051: checking whether to use Active Directory" >&5 # Check whether --with-ads or --without-ads was given. if test "${with_ads+set}" = set; then @@ -12075,7 +12074,7 @@ if test x"$with_ads_support" = x"yes"; then ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12079: checking for /usr/kerberos" >&5 +echo "configure:12078: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12088,7 +12087,7 @@ echo "configure:12079: checking for /usr/kerberos" >&5 ################################################# # check for location of Kerberos 5 install echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12092: checking for kerberos 5 install path" >&5 +echo "configure:12091: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12117,17 +12116,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12121: checking for $ac_hdr" >&5 +echo "configure:12120: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12131: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12130: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12160,17 +12159,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12164: checking for $ac_hdr" >&5 +echo "configure:12163: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12174: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12173: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12200,7 +12199,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12204: checking for _et_list in -lcom_err" >&5 +echo "configure:12203: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12208,7 +12207,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12240,7 +12239,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12244: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12243: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12248,7 +12247,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12284,7 +12283,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12288: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12287: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12292,7 +12291,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12331,7 +12330,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12335: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12334: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12339,7 +12338,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12376,11 +12375,33 @@ fi fi -################################################################## -# we might need the lber lib on some systems. To avoid link errors -# this test must be before the libldap test -echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12384: checking for ber_scanf in -llber" >&5 +######################################################## +# Compile with LDAP support? + +with_ldap_support=yes +echo $ac_n "checking whether to use LDAP""... $ac_c" 1>&6 +echo "configure:12384: checking whether to use LDAP" >&5 + +# Check whether --with-ldap or --without-ldap was given. +if test "${with_ldap+set}" = set; then + withval="$with_ldap" + case "$withval" in + no) + with_ldap_support=no + ;; + esac +fi + + +echo "$ac_t""$with_ldap_support" 1>&6 + +if test x"$with_ldap_support" = x"yes"; then + + ################################################################## + # we might need the lber lib on some systems. To avoid link errors + # this test must be before the libldap test + echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 +echo "configure:12405: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12388,7 +12409,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12420,11 +12441,11 @@ else fi -######################################################## -# now see if we can find the ldap libs in standard paths -if test x$have_ldap != xyes; then -echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12428: checking for ldap_domain2hostlist in -lldap" >&5 + ######################################################## + # now see if we can find the ldap libs in standard paths + if test x$have_ldap != xyes; then + echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 +echo "configure:12449: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12432,7 +12453,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12474,12 +12495,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12478: checking for $ac_func" >&5 +echo "configure:12499: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12527,13 +12548,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12531: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12552: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12542,7 +12563,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12567: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12559,12 +12580,13 @@ echo "$ac_t""$pam_ldap_cv_ldap_set_rebind_proc" 1>&6 #define LDAP_SET_REBIND_PROC_ARGS $pam_ldap_cv_ldap_set_rebind_proc EOF + fi fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12568: checking whether to use AUTOMOUNT" >&5 +echo "configure:12590: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12589,7 +12611,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12593: checking whether to use SMBMOUNT" >&5 +echo "configure:12615: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12626,7 +12648,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12630: checking whether to use PAM" >&5 +echo "configure:12652: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12652,7 +12674,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12656: checking for pam_get_data in -lpam" >&5 +echo "configure:12678: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12660,7 +12682,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12698,7 +12720,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12702: checking whether to use pam_smbpass" >&5 +echo "configure:12724: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12736,12 +12758,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12740: checking for $ac_func" >&5 +echo "configure:12762: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12790,7 +12812,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12794: checking for crypt in -lcrypt" >&5 +echo "configure:12816: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12798,7 +12820,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12844,7 +12866,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12848: checking for a crypt that needs truncated salt" >&5 +echo "configure:12870: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12853,11 +12875,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12883,7 +12905,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12887: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12909: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12915,7 +12937,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12919: checking whether to use TDB SAM database" >&5 +echo "configure:12941: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12940,7 +12962,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12944: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12966: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12971,7 +12993,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12975: checking whether to use NISPLUS_HOME" >&5 +echo "configure:12997: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -12996,7 +13018,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:13000: checking whether to use syslog logging" >&5 +echo "configure:13022: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -13021,7 +13043,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:13025: checking whether to use profiling" >&5 +echo "configure:13047: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13049,7 +13071,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13053: checking whether to support disk-quotas" >&5 +echo "configure:13075: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13060,13 +13082,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13064: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13086: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13078,7 +13100,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13127,7 +13149,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13131: checking whether to support utmp accounting" >&5 +echo "configure:13153: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13152,7 +13174,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13156: checking chosen man pages' language(s)" >&5 +echo "configure:13178: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13183,7 +13205,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13187: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13209: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13211,14 +13233,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13215: checking how to get filesystem space usage" >&5 +echo "configure:13237: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13222: checking statvfs64 function (SVR4)" >&5 +echo "configure:13244: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13226,7 +13248,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13273,12 +13295,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13277: checking statvfs function (SVR4)" >&5 +echo "configure:13299: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13286,7 +13308,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13311,7 +13333,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13315: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13337: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13319,7 +13341,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13332,7 +13354,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13359,7 +13381,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13363: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13385: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13367,7 +13389,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13413,7 +13435,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13417: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13439: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13421,7 +13443,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13431,7 +13453,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13458,7 +13480,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13462: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13484: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13466,7 +13488,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13482,7 +13504,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13509,7 +13531,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13513: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13535: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13517,7 +13539,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13537,7 +13559,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13570,9 +13592,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13574: checking if large file support can be enabled" >&5 +echo "configure:13596: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13611: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13650,7 +13672,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13654: checking whether to support ACLs" >&5 +echo "configure:13676: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13703,7 +13725,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13707: checking for acl_get_file in -lacl" >&5 +echo "configure:13729: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13711,7 +13733,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13750,13 +13772,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13754: checking for ACL support" >&5 +echo "configure:13776: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13764,7 +13786,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13784,13 +13806,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13788: checking for acl_get_perm_np" >&5 +echo "configure:13810: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13798,7 +13820,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13843,7 +13865,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13847: checking whether to support sendfile" >&5 +echo "configure:13869: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13853,13 +13875,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13857: checking for linux sendfile64 support" >&5 +echo "configure:13879: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13871,7 +13893,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13886,13 +13908,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13890: checking for linux sendfile support" >&5 +echo "configure:13912: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13904,7 +13926,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13920,13 +13942,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13924: checking for broken linux sendfile support" >&5 +echo "configure:13946: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13968: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -13998,13 +14020,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:14002: checking for freebsd sendfile support" >&5 +echo "configure:14024: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14026,7 +14048,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14057,7 +14079,125 @@ EOF echo "$ac_t""no" 1>&6; fi ;; - *) + + *hpux*) + echo $ac_n "checking for hpux sendfile64 support""... $ac_c" 1>&6 +echo "configure:14086: checking for hpux sendfile64 support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +#include +int main() { +\ + int fromfd, tofd; + size_t total=0; + struct iovec hdtrl[2]; + ssize_t nwritten; + off64_t offset; + + hdtrl[0].iov_base = 0; + hdtrl[0].iov_len = 0; + + nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0); + +; return 0; } +EOF +if { (eval echo configure:14112: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_SENDFILE64=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_SENDFILE64=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 + if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE64 1 +EOF + + cat >> confdefs.h <<\EOF +#define HPUX_SENDFILE_API 1 +EOF + + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 +EOF + + else + echo "$ac_t""no" 1>&6; + fi + + echo $ac_n "checking for hpux sendfile support""... $ac_c" 1>&6 +echo "configure:14143: checking for hpux sendfile support" >&5 +if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < +#include +int main() { +\ + int fromfd, tofd; + size_t total=0; + struct iovec hdtrl[2]; + ssize_t nwritten; + off_t offset; + + hdtrl[0].iov_base = 0; + hdtrl[0].iov_len = 0; + + nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0); + +; return 0; } +EOF +if { (eval echo configure:14169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + samba_cv_HAVE_SENDFILE=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + samba_cv_HAVE_SENDFILE=no +fi +rm -f conftest* +fi + +echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 + if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_SENDFILE 1 +EOF + + cat >> confdefs.h <<\EOF +#define HPUX_SENDFILE_API 1 +EOF + + cat >> confdefs.h <<\EOF +#define WITH_SENDFILE 1 +EOF + + else + echo "$ac_t""no" 1>&6; + fi + + ;; + + *) ;; esac ;; @@ -14078,7 +14218,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14082: checking whether to build winbind" >&5 +echo "configure:14222: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14174,20 +14314,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14178: checking whether struct passwd has pw_comment" >&5 +echo "configure:14318: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14331: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14212,20 +14352,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14216: checking whether struct passwd has pw_age" >&5 +echo "configure:14356: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14369: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14264,7 +14404,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14268: checking for poptGetContext in -lpopt" >&5 +echo "configure:14408: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14272,7 +14412,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14427: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14307,7 +14447,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14311: checking whether to use included popt" >&5 +echo "configure:14451: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14353,16 +14493,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14357: checking configure summary" >&5 +echo "configure:14497: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source3/configure.in b/source3/configure.in index ef25ba4fed..d53886bc65 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2793,7 +2793,61 @@ samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) AC_MSG_RESULT(no); fi ;; - *) + + *hpux*) + AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[ + AC_TRY_LINK([\ +#include +#include ], +[\ + int fromfd, tofd; + size_t total=0; + struct iovec hdtrl[2]; + ssize_t nwritten; + off64_t offset; + + hdtrl[0].iov_base = 0; + hdtrl[0].iov_len = 0; + + nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0); +], +samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)]) + if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE64) + AC_DEFINE(HPUX_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) + else + AC_MSG_RESULT(no); + fi + + AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[ + AC_TRY_LINK([\ +#include +#include ], +[\ + int fromfd, tofd; + size_t total=0; + struct iovec hdtrl[2]; + ssize_t nwritten; + off_t offset; + + hdtrl[0].iov_base = 0; + hdtrl[0].iov_len = 0; + + nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0); +], +samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) + if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then + AC_DEFINE(HAVE_SENDFILE) + AC_DEFINE(HPUX_SENDFILE_API) + AC_DEFINE(WITH_SENDFILE) + else + AC_MSG_RESULT(no); + fi + + ;; + + *) ;; esac ;; diff --git a/source3/include/config.h.in b/source3/include/config.h.in index 8e744e43f7..770af1a6b5 100644 --- a/source3/include/config.h.in +++ b/source3/include/config.h.in @@ -1,4 +1,4 @@ -/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */ +/* include/config.h.in. Generated automatically from configure.in by autoheader. */ /* Define if on AIX 3. System headers sometimes define this. @@ -294,6 +294,7 @@ #undef LINUX_BROKEN_SENDFILE_API #undef WITH_SENDFILE #undef FREEBSD_SENDFILE_API +#undef HPUX_SENDFILE_API #undef WITH_ADS /* The number of bytes in a int. */ diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c index bcace5fee2..df6c1980d0 100644 --- a/source3/lib/sendfile.c +++ b/source3/lib/sendfile.c @@ -209,7 +209,8 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of hdtrl[0].iov_len = 0; } else { nwritten = 0; - hdtrl[0].iov_base += nwritten; + /* iov_base is defined as a void *... */ + hdtrl[0].iov_base = ((char *)hdtrl[0].iov_base) + nwritten; hdtrl[0].iov_len -= nwritten; } } -- cgit From 7af9901fdb56ddf02c821064ccaeece7661c3b97 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 18 Sep 2002 20:36:50 +0000 Subject: Added "use sendfile" per share option. Jeremy. (This used to be commit 28466ff42c3328e49d46f7cddfc4bb2fe462d871) --- source3/param/loadparm.c | 13 ++++++++++++- source3/smbd/reply.c | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 7607760cca..67128c75d2 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -384,7 +384,9 @@ typedef struct BOOL bUseClientDriver; BOOL bDefaultDevmode; BOOL bNTAclSupport; - +#ifdef WITH_SENDFILE + BOOL bUseSendfile; +#endif char dummy[3]; /* for alignment */ } service; @@ -504,6 +506,9 @@ static service sDefault = { False, /* bUseClientDriver */ False, /* bDefaultDevmode */ True, /* bNTAclSupport */ +#ifdef WITH_SENDFILE + False, /* bUseSendfile */ +#endif "" /* dummy */ }; @@ -841,6 +846,9 @@ static struct parm_struct parm_table[] = { {"strict sync", P_BOOL, P_LOCAL, &sDefault.bStrictSync, NULL, NULL, FLAG_SHARE}, {"sync always", P_BOOL, P_LOCAL, &sDefault.bSyncAlways, NULL, NULL, FLAG_SHARE}, {"use mmap", P_BOOL, P_GLOBAL, &Globals.bUseMmap, NULL, NULL, FLAG_DEVELOPER}, +#ifdef WITH_SENDFILE + {"use sendfile", P_BOOL, P_LOCAL, &sDefault.bUseSendfile, NULL, NULL, FLAG_SHARE}, +#endif {"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"write cache size", P_INTEGER, P_LOCAL, &sDefault.iWriteCacheSize, NULL, NULL, FLAG_SHARE}, @@ -1728,6 +1736,9 @@ FN_LOCAL_BOOL(lp_inherit_acls, bInheritACLS) FN_LOCAL_BOOL(lp_use_client_driver, bUseClientDriver) FN_LOCAL_BOOL(lp_default_devmode, bDefaultDevmode) FN_LOCAL_BOOL(lp_nt_acl_support, bNTAclSupport) +#ifdef WITH_SENDFILE +FN_LOCAL_BOOL(lp_use_sendfile, bUseSendfile) +#endif FN_LOCAL_INTEGER(lp_create_mask, iCreate_mask) FN_LOCAL_INTEGER(lp_force_create_mode, iCreate_force_mode) FN_LOCAL_INTEGER(lp_security_mask, iSecurity_mask) diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index b8a89b1d9d..4c7d73bc6e 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1698,7 +1698,7 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length * that is exclusively oplocked. */ - if ((CVAL(inbuf,smb_vwv0) == 0xFF) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) { + if ((CVAL(inbuf,smb_vwv0) == 0xFF) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && lp_use_sendfile(SNUM(conn)) ) { SMB_STRUCT_STAT sbuf; DATA_BLOB header; -- cgit From 15fdb18dd7f7169be9f22b639a6e1e9bcab833b9 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 00:14:01 +0000 Subject: Implement printerdata_ex as Python dictionary. Read only at the moment. (This used to be commit 739ea89eb3ab49e5dccddfa767812811b413e67d) --- source3/python/printerdata.py | 43 +++++++++++++++++++++++++++---------- source3/python/samba/printerdata.py | 43 +++++++++++++++++++++++++++---------- 2 files changed, 64 insertions(+), 22 deletions(-) diff --git a/source3/python/printerdata.py b/source3/python/printerdata.py index 3384de4f30..33251f6a00 100644 --- a/source3/python/printerdata.py +++ b/source3/python/printerdata.py @@ -1,10 +1,18 @@ +#!/usr/bin/env python + # # A python module that maps printerdata to a dictionary. We define # two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData # and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx # -import spoolss +# +# TODO: +# +# - Implement __delitem__ +# + +from samba import spoolss class printerdata: def __init__(self, host, creds = {}): @@ -22,17 +30,30 @@ class printerdata: "data": value}) class printerdata_ex: - def __init__(self, host, creds = {}): - self.hnd = spoolss.openprinter(host, creds = creds) + def __init__(self, host): + self.host = host + self.top_level_keys = ["PrinterDriverData", "DsSpooler", "DsDriver", + "DsUser"] def keys(self): - return self.hnd.enumprinterdataex("PrinterDriverData").keys() + return self.top_level_keys - def __getitem__(self, key): - return self.hnd.getprinterdataex("PrinterDriverData", key)['data'] + def has_key(self, key): + for k in self.top_level_keys: + if k == key: + return 1 + return 0 - def __setitem__(self, key, value): - # Store as REG_BINARY for now - self.hnd.setprinterdataex({"key": "PrinterDriverData", "value": key, "type": 3, - "data": value}) - + class printerdata_ex_subkey: + def __init__(self, host, key): + self.hnd = spoolss.openprinter(host) + self.key = key + + def keys(self): + return self.hnd.enumprinterdataex(self.key).keys() + + def __getitem__(self, key): + return self.hnd.getprinterdataex(self.key, key)['data'] + + def __getitem__(self, key): + return self.printerdata_ex_subkey(self.host, key) diff --git a/source3/python/samba/printerdata.py b/source3/python/samba/printerdata.py index 3384de4f30..33251f6a00 100644 --- a/source3/python/samba/printerdata.py +++ b/source3/python/samba/printerdata.py @@ -1,10 +1,18 @@ +#!/usr/bin/env python + # # A python module that maps printerdata to a dictionary. We define # two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData # and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx # -import spoolss +# +# TODO: +# +# - Implement __delitem__ +# + +from samba import spoolss class printerdata: def __init__(self, host, creds = {}): @@ -22,17 +30,30 @@ class printerdata: "data": value}) class printerdata_ex: - def __init__(self, host, creds = {}): - self.hnd = spoolss.openprinter(host, creds = creds) + def __init__(self, host): + self.host = host + self.top_level_keys = ["PrinterDriverData", "DsSpooler", "DsDriver", + "DsUser"] def keys(self): - return self.hnd.enumprinterdataex("PrinterDriverData").keys() + return self.top_level_keys - def __getitem__(self, key): - return self.hnd.getprinterdataex("PrinterDriverData", key)['data'] + def has_key(self, key): + for k in self.top_level_keys: + if k == key: + return 1 + return 0 - def __setitem__(self, key, value): - # Store as REG_BINARY for now - self.hnd.setprinterdataex({"key": "PrinterDriverData", "value": key, "type": 3, - "data": value}) - + class printerdata_ex_subkey: + def __init__(self, host, key): + self.hnd = spoolss.openprinter(host) + self.key = key + + def keys(self): + return self.hnd.enumprinterdataex(self.key).keys() + + def __getitem__(self, key): + return self.hnd.getprinterdataex(self.key, key)['data'] + + def __getitem__(self, key): + return self.printerdata_ex_subkey(self.host, key) -- cgit From d3a661453e5e16cf0bd3bdcdb9b07d9f29ae0044 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 00:26:07 +0000 Subject: Moving to subdirectory. (This used to be commit 154c59c8f92b9f735f4e1e7c8c42692c959996f1) --- source3/python/printerdata.py | 59 ------------------------------------------- 1 file changed, 59 deletions(-) delete mode 100644 source3/python/printerdata.py diff --git a/source3/python/printerdata.py b/source3/python/printerdata.py deleted file mode 100644 index 33251f6a00..0000000000 --- a/source3/python/printerdata.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python - -# -# A python module that maps printerdata to a dictionary. We define -# two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData -# and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx -# - -# -# TODO: -# -# - Implement __delitem__ -# - -from samba import spoolss - -class printerdata: - def __init__(self, host, creds = {}): - self.hnd = spoolss.openprinter(host, creds = creds) - - def keys(self): - return self.hnd.enumprinterdata().keys() - - def __getitem__(self, key): - return self.hnd.getprinterdata(key)['data'] - - def __setitem__(self, key, value): - # Store as REG_BINARY for now - self.hnd.setprinterdata({"key": "", "value": key, "type": 3, - "data": value}) - -class printerdata_ex: - def __init__(self, host): - self.host = host - self.top_level_keys = ["PrinterDriverData", "DsSpooler", "DsDriver", - "DsUser"] - - def keys(self): - return self.top_level_keys - - def has_key(self, key): - for k in self.top_level_keys: - if k == key: - return 1 - return 0 - - class printerdata_ex_subkey: - def __init__(self, host, key): - self.hnd = spoolss.openprinter(host) - self.key = key - - def keys(self): - return self.hnd.enumprinterdataex(self.key).keys() - - def __getitem__(self, key): - return self.hnd.getprinterdataex(self.key, key)['data'] - - def __getitem__(self, key): - return self.printerdata_ex_subkey(self.host, key) -- cgit From a39dcb606dff72c2b851e692224b8ec1140e093c Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 05:29:14 +0000 Subject: Fixed bug in keyword args for enumprinterdataex (This used to be commit c7845b3c43f7167f2c695722bc9923ff666ade76) --- source3/python/py_spoolss_printerdata.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/python/py_spoolss_printerdata.c b/source3/python/py_spoolss_printerdata.c index ffff2b3a67..bacc870d9d 100644 --- a/source3/python/py_spoolss_printerdata.c +++ b/source3/python/py_spoolss_printerdata.c @@ -321,7 +321,7 @@ PyObject *spoolss_hnd_setprinterdataex(PyObject *self, PyObject *args, PyObject PyObject *spoolss_hnd_enumprinterdataex(PyObject *self, PyObject *args, PyObject *kw) { spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - static char *kwlist[] = { NULL }; + static char *kwlist[] = { "key", NULL }; uint32 needed, i; char *key; WERROR werror; -- cgit From 86c7c460ca6c099f3593a092581ee5364179e481 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 05:39:03 +0000 Subject: Bong! The devmode could be NULL. Don't crash if this is the case. (This used to be commit 3ce8f8c50c0adcedc38bf2812b7e9fae78942458) --- source3/python/py_spoolss_printers_conv.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source3/python/py_spoolss_printers_conv.c b/source3/python/py_spoolss_printers_conv.c index 247db65b1e..760896fcde 100644 --- a/source3/python/py_spoolss_printers_conv.c +++ b/source3/python/py_spoolss_printers_conv.c @@ -227,8 +227,14 @@ BOOL py_from_PRINTER_INFO_2(PyObject **dict, PRINTER_INFO_2 *info) 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); + /* Bong! The devmode could be NULL */ + + if (info->devmode) + py_from_DEVICEMODE(&obj, info->devmode); + else + obj = PyDict_New(); + + PyDict_SetItemString(*dict, "device_mode", obj); PyDict_SetItemString(*dict, "level", PyInt_FromLong(2)); -- cgit From 9583398baa3ef73b733215d22d2cfa746cacccb0 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 05:47:50 +0000 Subject: Clean up python extensions in clean target. Pass more flags down to setup.py so we don't have to hard code any -I directives. (This used to be commit a36882175ae546859fa4a5ba02a22d711a04cedf) --- source3/Makefile.in | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index d7f8dc5f68..c819ef1114 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -883,7 +883,7 @@ python_common_proto: $(PY_COMMON_PROTO_OBJ) python_ext: $(PYTHON_OBJS) - PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \ + PYTHON_OBJS="$(PYTHON_OBJS)" PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS) $(FLAGS)" \ LIBS="$(LIBS)" \ $(PYTHON) python/setup.py build @@ -892,6 +892,9 @@ python_install: $(PYTHON_OBJS) LIBS="$(LIBS)" \ $(PYTHON) python/setup.py install +python_clean: + @if test -n "$(PYTHON)"; then $(PYTHON) python/setup.py clean; fi + # revert to the previously installed version revert: @$(SHELL) $(srcdir)/script/revert.sh $(SBINDIR) $(SPROGS) @@ -927,9 +930,9 @@ uninstallscripts: # Toplevel clean files TOPFILES=dynconfig.o dynconfig.po -clean: delheaders +clean: delheaders python_clean -rm -f core */*~ *~ */*.o */*.po */*.po32 */*.@SHLIBEXT@ \ - $(TOPFILES) $(PROGS) $(SPROGS) .headers.stamp + $(TOPFILES) $(PROGS) $(SPROGS) .headers.stamp # Making this target will just make sure that the prototype files # exist, not necessarily that they are up to date. Since they're -- cgit From 8eda50793ea5edaddb5224496a42f677328d4af2 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 05:49:14 +0000 Subject: Remove hardcoded -I stuff. Hooray! (This used to be commit 105ff7c5400a6b79613b6a3b72808124b17ddc60) --- source3/python/setup.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source3/python/setup.py b/source3/python/setup.py index d3c420834a..6d03ca633a 100755 --- a/source3/python/setup.py +++ b/source3/python/setup.py @@ -65,13 +65,6 @@ setup( 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"], - # Get the "samba" directory of Python source. At the moment this # just contains the __init__ file that makes it work as a # subpackage. This is needed even though everything else is an @@ -104,6 +97,7 @@ setup( ], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # LSA pipe module @@ -114,6 +108,7 @@ setup( samba_srcdir + "python/py_ntsec.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # SAMR pipe module @@ -124,6 +119,7 @@ setup( samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # winbind client module @@ -135,8 +131,8 @@ setup( samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], - extra_objects = obj_list, - extra_compile_args = flags_list), + extra_compile_args = flags_list, + extra_objects = obj_list), # WINREG pipe module @@ -145,6 +141,7 @@ setup( samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # tdb module @@ -153,6 +150,7 @@ setup( sources = [samba_srcdir + "python/py_tdb.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # libsmb module @@ -162,6 +160,7 @@ setup( samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # Moving to merge all individual extensions in to one big @@ -173,6 +172,7 @@ setup( samba_srcdir + "python/py_common.c"], libraries = lib_list, library_dirs = ["/usr/kerberos/lib"], + extra_compile_args = flags_list, extra_objects = obj_list), # tdbpack/unpack extensions. Does not actually link to any Samba -- cgit From 1a01635486c1d383d0994408f133eecd6fe4acec Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 19 Sep 2002 12:34:39 +0000 Subject: trivial comment fix (This used to be commit 9d6331524089d76c5832b9ba001fb0e8a05f39d7) --- source3/rpc_server/srv_samr_nt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c index e2336aca55..fd1111d5dc 100644 --- a/source3/rpc_server/srv_samr_nt.c +++ b/source3/rpc_server/srv_samr_nt.c @@ -4072,9 +4072,9 @@ NTSTATUS _samr_set_groupinfo(pipes_struct *p, SAMR_Q_SET_GROUPINFO *q_u, SAMR_R_ } /********************************************************************* - _samr_set_groupinfo + _samr_set_aliasinfo - update a domain group's comment. + update an alias's comment. *********************************************************************/ NTSTATUS _samr_set_aliasinfo(pipes_struct *p, SAMR_Q_SET_ALIASINFO *q_u, SAMR_R_SET_ALIASINFO *r_u) -- cgit From 1244410cc4d48e3d68dad2c979a9ad2a2f70989e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 19 Sep 2002 15:39:00 +0000 Subject: Merge in first command for 'samtest' Fix small bug in sam/interface.c Make sam backend to default to a define (This used to be commit 60ab55fedf03a0b505b0b73527e031124a46304e) --- source3/Makefile.in | 2 +- source3/include/sam.h | 3 + source3/sam/interface.c | 33 +- source3/torture/cmd_sam.c | 1002 +++++++++++++++++++++++++++++++++++++++++++++ source3/torture/samtest.c | 14 +- source3/torture/samtest.h | 31 ++ 6 files changed, 1056 insertions(+), 29 deletions(-) create mode 100644 source3/torture/cmd_sam.c create mode 100644 source3/torture/samtest.h diff --git a/source3/Makefile.in b/source3/Makefile.in index c819ef1114..dbbd97bbff 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -225,7 +225,7 @@ SAM_STATIC_MODULES = sam/sam_plugin.o SAM_OBJ = sam/account.o sam/get_set_account.o sam/get_set_group.o \ sam/get_set_domain.o sam/interface.o sam/api.o $(SAM_STATIC_MODULES) -SAMTEST_OBJ = torture/samtest.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o passdb/machine_sid.o passdb/secrets.o +SAMTEST_OBJ = torture/samtest.o torture/cmd_sam.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o passdb/machine_sid.o passdb/secrets.o GROUPDB_OBJ = groupdb/mapping.o diff --git a/source3/include/sam.h b/source3/include/sam.h index 875efbe0de..ca1a84fd97 100644 --- a/source3/include/sam.h +++ b/source3/include/sam.h @@ -48,6 +48,9 @@ int sam_version(void)\ return SAM_INTERFACE_VERSION;\ } +/* Backend to use by default when no backend was specified */ +#define SAM_DEFAULT_BACKEND "plugin" + typedef struct sam_domain_handle { TALLOC_CTX *mem_ctx; uint32 access_granted; diff --git a/source3/sam/interface.c b/source3/sam/interface.c index a10b34200d..17df276aed 100644 --- a/source3/sam/interface.c +++ b/source3/sam/interface.c @@ -206,7 +206,7 @@ NTSTATUS context_sam_lookup_sid(const SAM_CONTEXT *context, const NT_USER_TOKEN NTSTATUS context_sam_update_domain(const SAM_CONTEXT *context, const SAM_DOMAIN_HANDLE *domain) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_update_domain: %d\n", __LINE__)); @@ -426,7 +426,7 @@ NTSTATUS context_sam_add_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_H NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_update_account: %d\n", __LINE__)); @@ -452,7 +452,7 @@ NTSTATUS context_sam_update_account(const SAM_CONTEXT *context, const SAM_ACCOUN NTSTATUS context_sam_delete_account(const SAM_CONTEXT *context, const SAM_ACCOUNT_HANDLE *account) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_delete_account: %d\n", __LINE__)); @@ -632,7 +632,7 @@ NTSTATUS context_sam_add_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDL NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_update_group: %d\n", __LINE__)); @@ -658,7 +658,7 @@ NTSTATUS context_sam_update_group(const SAM_CONTEXT *context, const SAM_GROUP_HA NTSTATUS context_sam_delete_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; DEBUG(5,("context_sam_delete_group: %d\n", __LINE__)); @@ -771,7 +771,7 @@ NTSTATUS context_sam_get_group_by_name(const SAM_CONTEXT *context, const NT_USER NTSTATUS context_sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; @@ -796,7 +796,7 @@ NTSTATUS context_sam_add_member_to_group(const SAM_CONTEXT *context, const SAM_G NTSTATUS context_sam_delete_member_from_group(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; /* invalid group or member specified */ @@ -819,7 +819,7 @@ NTSTATUS context_sam_delete_member_from_group(const SAM_CONTEXT *context, const NTSTATUS context_sam_enum_groupmembers(const SAM_CONTEXT *context, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) { - SAM_METHODS *tmp_methods; + const SAM_METHODS *tmp_methods; NTSTATUS nt_status; /* invalid group specified */ @@ -986,7 +986,7 @@ static NTSTATUS check_correct_backend_entries(SAM_BACKEND_ENTRY **backend_entrie } for (j = i + 1; j < *nBackends; j++) { if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { - DEBUG(2,("two backend modules claim the same domain %s", + DEBUG(0,("two backend modules claim the same domain %s\n", sid_string_static((*backend_entries)[j].domain_sid))); return NT_STATUS_INVALID_PARAMETER; } @@ -999,12 +999,11 @@ static NTSTATUS check_correct_backend_entries(SAM_BACKEND_ENTRY **backend_entrie if (increase_by > 0) { *nBackends += increase_by; - (*backend_entries) = (SAM_BACKEND_ENTRY *)realloc((*backend_entries), sizeof(SAM_BACKEND_ENTRY) * (*nBackends)); + (*backend_entries) = (SAM_BACKEND_ENTRY *)realloc((*backend_entries), sizeof(SAM_BACKEND_ENTRY) * (*nBackends+1)); if (!has_workgroup) { - /* should be replaced by the default sam module */ - DEBUG(4,("There was no backend specified for domain %s useing plugin\n", - lp_workgroup())); - (*backend_entries)[i].module_name = "plugin"; + DEBUG(4,("There was no backend specified for domain %s; using %s\n", + lp_workgroup(), SAM_DEFAULT_BACKEND)); + (*backend_entries)[i].module_name = SAM_DEFAULT_BACKEND; (*backend_entries)[i].module_params = NULL; (*backend_entries)[i].domain_name = lp_workgroup(); (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); @@ -1012,9 +1011,9 @@ static NTSTATUS check_correct_backend_entries(SAM_BACKEND_ENTRY **backend_entrie i++; } if (!has_builtin) { - /* should be replaced by the default sam module */ - DEBUG(4,("There was no backend specified for domain BUILTIN useing plugin\n")); - (*backend_entries)[i].module_name = "plugin"; + DEBUG(4,("There was no backend specified for domain BUILTIN; using %s\n", + SAM_DEFAULT_BACKEND)); + (*backend_entries)[i].module_name = SAM_DEFAULT_BACKEND; (*backend_entries)[i].module_params = NULL; (*backend_entries)[i].domain_name = "BUILTIN"; (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); diff --git a/source3/torture/cmd_sam.c b/source3/torture/cmd_sam.c new file mode 100644 index 0000000000..d276d52fe6 --- /dev/null +++ b/source3/torture/cmd_sam.c @@ -0,0 +1,1002 @@ +/* + Unix SMB/CIFS implementation. + SAM module functions + + Copyright (C) Jelmer Vernooij 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 "samtest.h" + +static NTSTATUS cmd_load_module(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char *plugin_arg[2]; + NTSTATUS status; + if (argc != 2) { + printf("Usage: load \n"); + return NT_STATUS_OK; + } + + asprintf(&plugin_arg[0], "plugin:%s", argv[1]); + plugin_arg[1] = NULL; + + if(!NT_STATUS_IS_OK(status = make_sam_context_list(&c, plugin_arg))) + { + return status; + } + printf("load: ok\n"); + return NT_STATUS_OK; +} + +#if 0 +static NTSTATUS cmd_populate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char c; + size_t size; + if (argc != 3) { + printf("Usage: populate \n"); + return NT_STATUS_OK; + } + c = argv[1][0]; + size = atoi(argv[2]); + vfs->data = (char *)talloc(mem_ctx, size); + if (vfs->data == NULL) { + printf("populate: error=-1 (not enough memory)"); + return NT_STATUS_UNSUCCESSFUL; + } + memset(vfs->data, c, size); + vfs->data_size = size; + return NT_STATUS_OK; +} + +static NTSTATUS cmd_show_data(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + size_t offset; + size_t len; + if (argc != 1 && argc != 3) { + printf("Usage: showdata [ ]\n"); + return NT_STATUS_OK; + } + if (vfs->data == NULL || vfs->data_size == 0) { + printf("show_data: error=-1 (buffer empty)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (argc == 3) { + offset = atoi(argv[1]); + len = atoi(argv[2]); + } else { + offset = 0; + len = vfs->data_size; + } + if ((offset + len) > vfs->data_size) { + printf("show_data: error=-1 (not enough data in buffer)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + dump_data(0, (char *)(vfs->data) + offset, len); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_connect(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + vfs->conn->vfs_ops.connect(vfs->conn, lp_servicename(vfs->conn->service), "vfstest"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_disconnect(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + vfs->conn->vfs_ops.disconnect(vfs->conn); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_disk_free(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + SMB_BIG_UINT diskfree, bsize, dfree, dsize; + if (argc != 2) { + printf("Usage: disk_free \n"); + return NT_STATUS_OK; + } + + diskfree = vfs->conn->vfs_ops.disk_free(vfs->conn, argv[1], False, &bsize, &dfree, &dsize); + printf("disk_free: %ld, bsize = %ld, dfree = %ld, dsize = %ld\n", diskfree, bsize, dfree, dsize); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_opendir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 2) { + printf("Usage: opendir \n"); + return NT_STATUS_OK; + } + + vfs->currentdir = vfs->conn->vfs_ops.opendir(vfs->conn, argv[1]); + if (vfs->currentdir == NULL) { + printf("opendir error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("opendir: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_readdir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + struct dirent *dent; + + if (vfs->currentdir == NULL) { + printf("readdir: error=-1 (no open directory)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + dent = vfs->conn->vfs_ops.readdir(vfs->conn, vfs->currentdir); + if (dent == NULL) { + printf("readdir: NULL\n"); + return NT_STATUS_OK; + } + + printf("readdir: %s\n", dent->d_name); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_mkdir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 2) { + printf("Usage: mkdir \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.mkdir(vfs->conn, argv[1], 00755) == -1) { + printf("mkdir error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("mkdir: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_closedir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret; + + if (vfs->currentdir == NULL) { + printf("closedir: failure (no directory open)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + ret = vfs->conn->vfs_ops.closedir(vfs->conn, vfs->currentdir); + if (ret == -1) { + printf("closedir failure: %s\n", strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("closedir: ok\n"); + vfs->currentdir = NULL; + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int flags, fd; + mode_t mode; + char *flagstr; + + mode = 00400; + + if (argc < 3 || argc > 5) { + printf("Usage: open \n"); + printf(" flags: O = O_RDONLY\n"); + printf(" R = O_RDWR\n"); + printf(" W = O_WRONLY\n"); + printf(" C = O_CREAT\n"); + printf(" E = O_EXCL\n"); + printf(" T = O_TRUNC\n"); + printf(" A = O_APPEND\n"); + printf(" N = O_NONBLOCK/O_NDELAY\n"); +#ifdef O_SYNC + printf(" S = O_SYNC\n"); +#endif +#ifdef O_NOFOLLOW + printf(" F = O_NOFOLLOW\n"); +#endif + printf(" mode: see open.2\n"); + printf(" mode is ignored if C flag not present\n"); + printf(" mode defaults to 00400\n"); + return NT_STATUS_OK; + } + flags = 0; + flagstr = argv[2]; + while (*flagstr) { + switch (*flagstr) { + case 'O': + flags |= O_RDONLY; + break; + case 'R': + flags |= O_RDWR; + break; + case 'W': + flags |= O_WRONLY; + break; + case 'C': + flags |= O_CREAT; + break; + case 'E': + flags |= O_EXCL; + break; + case 'T': + flags |= O_TRUNC; + break; + case 'A': + flags |= O_APPEND; + break; + case 'N': + flags |= O_NONBLOCK; + break; +#ifdef O_SYNC + case 'S': + flags |= O_SYNC; + break; +#endif +#ifdef O_NOFOLLOW + case 'F': + flags |= O_NOFOLLOW; + break; +#endif + default: + printf("open: error=-1 (invalid flag!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + flagstr++; + } + if ((flags & O_CREAT) && argc == 4) { + if (sscanf(argv[3], "%o", &mode) == 0) { + printf("open: error=-1 (invalid mode!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + } + + fd = vfs->conn->vfs_ops.open(vfs->conn, argv[1], flags, mode); + if (fd == -1) { + printf("open: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + vfs->files[fd] = (struct files_struct *)malloc(sizeof(struct files_struct)); + vfs->files[fd]->fsp_name = strdup(argv[1]); + vfs->files[fd]->fd = fd; + vfs->files[fd]->conn = vfs->conn; + printf("open: fd=%d\n", fd); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_pathfunc(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret = -1; + + if (argc != 2) { + printf("Usage: %s \n", argv[0]); + return NT_STATUS_OK; + } + + if (strcmp("rmdir", argv[0]) == 0 ) { + ret = vfs->conn->vfs_ops.rmdir(vfs->conn, argv[1]); + } else if (strcmp("unlink", argv[0]) == 0 ) { + ret = vfs->conn->vfs_ops.unlink(vfs->conn, argv[1]); + } else if (strcmp("chdir", argv[0]) == 0 ) { + ret = vfs->conn->vfs_ops.chdir(vfs->conn, argv[1]); + } else { + printf("%s: error=%d (invalid function name!)\n", argv[0], errno); + return NT_STATUS_UNSUCCESSFUL; + } + + if (ret == -1) { + printf("%s: error=%d (%s)\n", argv[0], errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("%s: ok\n", argv[0]); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_close(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd, ret; + + if (argc != 2) { + printf("Usage: close \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + if (vfs->files[fd] == NULL) { + printf("close: error=-1 (invalid file descriptor)\n"); + return NT_STATUS_OK; + } + + ret = vfs->conn->vfs_ops.close(vfs->files[fd], fd); + if (ret == -1 ) + printf("close: error=%d (%s)\n", errno, strerror(errno)); + else + printf("close: ok\n"); + + SAFE_FREE(vfs->files[fd]->fsp_name); + SAFE_FREE(vfs->files[fd]); + vfs->files[fd] = NULL; + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_read(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + size_t size, rsize; + + if (argc != 3) { + printf("Usage: read \n"); + return NT_STATUS_OK; + } + + /* do some error checking on these */ + fd = atoi(argv[1]); + size = atoi(argv[2]); + vfs->data = (char *)talloc(mem_ctx, size); + if (vfs->data == NULL) { + printf("read: error=-1 (not enough memory)"); + return NT_STATUS_UNSUCCESSFUL; + } + vfs->data_size = size; + + rsize = vfs->conn->vfs_ops.read(vfs->files[fd], fd, vfs->data, size); + if (rsize == -1) { + printf("read: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("read: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_write(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd, size, wsize; + + if (argc != 3) { + printf("Usage: write \n"); + return NT_STATUS_OK; + } + + /* some error checking should go here */ + fd = atoi(argv[1]); + size = atoi(argv[2]); + if (vfs->data == NULL) { + printf("write: error=-1 (buffer empty, please populate it before writing)"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (vfs->data_size < size) { + printf("write: error=-1 (buffer too small, please put some more data in)"); + return NT_STATUS_UNSUCCESSFUL; + } + + wsize = vfs->conn->vfs_ops.write(vfs->files[fd], fd, vfs->data, size); + + if (wsize == -1) { + printf("write: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("write: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_lseek(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd, offset, whence; + SMB_OFF_T pos; + + if (argc != 4) { + printf("Usage: lseek \n...where whence is 1 => SEEK_SET, 2 => SEEK_CUR, 3 => SEEK_END\n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + offset = atoi(argv[2]); + whence = atoi(argv[3]); + switch (whence) { + case 1: whence = SEEK_SET; break; + case 2: whence = SEEK_CUR; break; + default: whence = SEEK_END; + } + + pos = vfs->conn->vfs_ops.lseek(vfs->files[fd], fd, offset, whence); + if (pos == (SMB_OFF_T)-1) { + printf("lseek: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("lseek: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_rename(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret; + if (argc != 3) { + printf("Usage: rename \n"); + return NT_STATUS_OK; + } + + ret = vfs->conn->vfs_ops.rename(vfs->conn, argv[1], argv[2]); + if (ret == -1) { + printf("rename: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("rename: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fsync(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret, fd; + if (argc != 2) { + printf("Usage: fsync \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + ret = vfs->conn->vfs_ops.fsync(vfs->files[fd], fd); + if (ret == -1) { + printf("fsync: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("fsync: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_stat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int ret; + char *user; + char *group; + struct passwd *pwd; + struct group *grp; + SMB_STRUCT_STAT st; + + if (argc != 2) { + printf("Usage: stat \n"); + return NT_STATUS_OK; + } + + ret = vfs->conn->vfs_ops.stat(vfs->conn, argv[1], &st); + if (ret == -1) { + printf("stat: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + pwd = sys_getpwuid(st.st_uid); + if (pwd != NULL) user = strdup(pwd->pw_name); + else user = null_string; + grp = sys_getgrgid(st.st_gid); + if (grp != NULL) group = strdup(grp->gr_name); + else group = null_string; + + printf("stat: ok\n"); + printf(" File: %s", argv[1]); + if (S_ISREG(st.st_mode)) printf(" Regular File\n"); + else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); + else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); + else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); + else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); + else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); + else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); + printf(" Size: %10d", st.st_size); + printf(" Blocks: %9d", st.st_blocks); + printf(" IO Block: %d\n", st.st_blksize); + printf(" Device: 0x%10x", st.st_dev); + printf(" Inode: %10d", st.st_ino); + printf(" Links: %10d\n", st.st_nlink); + printf(" Access: %05o", (st.st_mode) & 007777); + printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); + printf(" Access: %s", ctime(&(st.st_atime))); + printf(" Modify: %s", ctime(&(st.st_mtime))); + printf(" Change: %s", ctime(&(st.st_ctime))); + if (user != null_string) SAFE_FREE(user); + if (group!= null_string) SAFE_FREE(group); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + char *user; + char *group; + struct passwd *pwd; + struct group *grp; + SMB_STRUCT_STAT st; + + if (argc != 2) { + printf("Usage: fstat \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + if (fd < 0 || fd > 1024) { + printf("fstat: error=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->files[fd] == NULL) { + printf("fstat: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.fstat(vfs->files[fd], fd, &st) == -1) { + printf("fstat: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + pwd = sys_getpwuid(st.st_uid); + if (pwd != NULL) user = strdup(pwd->pw_name); + else user = null_string; + grp = sys_getgrgid(st.st_gid); + if (grp != NULL) group = strdup(grp->gr_name); + else group = null_string; + + printf("fstat: ok\n"); + if (S_ISREG(st.st_mode)) printf(" Regular File\n"); + else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); + else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); + else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); + else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); + else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); + else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); + printf(" Size: %10d", st.st_size); + printf(" Blocks: %9d", st.st_blocks); + printf(" IO Block: %d\n", st.st_blksize); + printf(" Device: 0x%10x", st.st_dev); + printf(" Inode: %10d", st.st_ino); + printf(" Links: %10d\n", st.st_nlink); + printf(" Access: %05o", (st.st_mode) & 007777); + printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); + printf(" Access: %s", ctime(&(st.st_atime))); + printf(" Modify: %s", ctime(&(st.st_mtime))); + printf(" Change: %s", ctime(&(st.st_ctime))); + if (user != null_string) SAFE_FREE(user); + if (group!= null_string) SAFE_FREE(group); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_lstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char *user; + char *group; + struct passwd *pwd; + struct group *grp; + SMB_STRUCT_STAT st; + + if (argc != 2) { + printf("Usage: lstat \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.lstat(vfs->conn, argv[1], &st) == -1) { + printf("lstat: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + pwd = sys_getpwuid(st.st_uid); + if (pwd != NULL) user = strdup(pwd->pw_name); + else user = null_string; + grp = sys_getgrgid(st.st_gid); + if (grp != NULL) group = strdup(grp->gr_name); + else group = null_string; + + printf("lstat: ok\n"); + if (S_ISREG(st.st_mode)) printf(" Regular File\n"); + else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); + else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); + else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); + else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); + else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); + else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); + printf(" Size: %10d", st.st_size); + printf(" Blocks: %9d", st.st_blocks); + printf(" IO Block: %d\n", st.st_blksize); + printf(" Device: 0x%10x", st.st_dev); + printf(" Inode: %10d", st.st_ino); + printf(" Links: %10d\n", st.st_nlink); + printf(" Access: %05o", (st.st_mode) & 007777); + printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); + printf(" Access: %s", ctime(&(st.st_atime))); + printf(" Modify: %s", ctime(&(st.st_mtime))); + printf(" Change: %s", ctime(&(st.st_ctime))); + if (user != null_string) SAFE_FREE(user); + if (group!= null_string) SAFE_FREE(group); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_chmod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + mode_t mode; + if (argc != 3) { + printf("Usage: chmod \n"); + return NT_STATUS_OK; + } + + mode = atoi(argv[2]); + if (vfs->conn->vfs_ops.chmod(vfs->conn, argv[1], mode) == -1) { + printf("chmod: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("chmod: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fchmod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + mode_t mode; + if (argc != 3) { + printf("Usage: fchmod \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + mode = atoi(argv[2]); + if (fd < 0 || fd > 1024) { + printf("fchmod: error=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->files[fd] == NULL) { + printf("fchmod: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.fchmod(vfs->files[fd], fd, mode) == -1) { + printf("fchmod: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("fchmod: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_chown(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + uid_t uid; + gid_t gid; + if (argc != 4) { + printf("Usage: chown \n"); + return NT_STATUS_OK; + } + + uid = atoi(argv[2]); + gid = atoi(argv[3]); + if (vfs->conn->vfs_ops.chown(vfs->conn, argv[1], uid, gid) == -1) { + printf("chown: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("chown: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_fchown(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + uid_t uid; + gid_t gid; + int fd; + if (argc != 4) { + printf("Usage: fchown \n"); + return NT_STATUS_OK; + } + + uid = atoi(argv[2]); + gid = atoi(argv[3]); + fd = atoi(argv[1]); + if (fd < 0 || fd > 1024) { + printf("fchown: faliure=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->files[fd] == NULL) { + printf("fchown: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->conn->vfs_ops.fchown(vfs->files[fd], fd, uid, gid) == -1) { + printf("fchown error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("fchown: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_getwd(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char buf[PATH_MAX]; + if (vfs->conn->vfs_ops.getwd(vfs->conn, buf) == NULL) { + printf("getwd: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("getwd: %s\n", buf); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_utime(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + struct utimbuf times; + if (argc != 4) { + printf("Usage: utime \n"); + return NT_STATUS_OK; + } + times.actime = atoi(argv[2]); + times.modtime = atoi(argv[3]); + if (vfs->conn->vfs_ops.utime(vfs->conn, argv[1], ×) != 0) { + printf("utime: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("utime: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_ftruncate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int fd; + SMB_OFF_T off; + if (argc != 3) { + printf("Usage: ftruncate \n"); + return NT_STATUS_OK; + } + + fd = atoi(argv[1]); + off = atoi(argv[2]); + if (fd < 0 || fd > 1024) { + printf("ftruncate: error=%d (file descriptor out of range)\n", EBADF); + return NT_STATUS_OK; + } + if (vfs->files[fd] == NULL) { + printf("ftruncate: error=%d (invalid file descriptor)\n", EBADF); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.ftruncate(vfs->files[fd], fd, off) == -1) { + printf("ftruncate: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("ftruncate: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_lock(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + BOOL ret; + int fd; + int op; + long offset; + long count; + int type; + char *typestr; + + if (argc != 6) { + printf("Usage: lock \n"); + printf(" ops: G = F_GETLK\n"); + printf(" S = F_SETLK\n"); + printf(" W = F_SETLKW\n"); + printf(" type: R = F_RDLCK\n"); + printf(" W = F_WRLCK\n"); + printf(" U = F_UNLCK\n"); + return NT_STATUS_OK; + } + + if (sscanf(argv[1], "%d", &fd) == 0) { + printf("lock: error=-1 (error parsing fd)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + op = 0; + switch (*argv[2]) { + case 'G': + op = F_GETLK; + break; + case 'S': + op = F_SETLK; + break; + case 'W': + op = F_SETLKW; + break; + default: + printf("lock: error=-1 (invalid op flag!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (sscanf(argv[3], "%ld", &offset) == 0) { + printf("lock: error=-1 (error parsing fd)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (sscanf(argv[4], "%ld", &count) == 0) { + printf("lock: error=-1 (error parsing fd)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + type = 0; + typestr = argv[5]; + while(*typestr) { + switch (*typestr) { + case 'R': + type |= F_RDLCK; + break; + case 'W': + type |= F_WRLCK; + break; + case 'U': + type |= F_UNLCK; + break; + default: + printf("lock: error=-1 (invalid type flag!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + typestr++; + } + + printf("lock: debug lock(fd=%d, op=%d, offset=%ld, count=%ld, type=%d))\n", fd, op, offset, count, type); + + if ((ret = vfs->conn->vfs_ops.lock(vfs->files[fd], fd, op, offset, count, type)) == False) { + printf("lock: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("lock: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_symlink(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 3) { + printf("Usage: symlink \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.symlink(vfs->conn, argv[1], argv[2]) == -1) { + printf("symlink: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("symlink: ok\n"); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_readlink(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char buffer[PATH_MAX]; + int size; + + if (argc != 2) { + printf("Usage: readlink \n"); + return NT_STATUS_OK; + } + + if ((size = vfs->conn->vfs_ops.readlink(vfs->conn, argv[1], buffer, PATH_MAX)) == -1) { + printf("readlink: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + buffer[size] = '\0'; + printf("readlink: %s\n", buffer); + return NT_STATUS_OK; +} + + +static NTSTATUS cmd_link(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + if (argc != 3) { + printf("Usage: link \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.link(vfs->conn, argv[1], argv[2]) == -1) { + printf("link: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("link: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_mknod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + mode_t mode; + SMB_DEV_T dev; + + if (argc != 4) { + printf("Usage: mknod \n"); + printf(" mode is octal\n"); + printf(" dev is hex\n"); + return NT_STATUS_OK; + } + + if (sscanf(argv[2], "%o", &mode) == 0) { + printf("open: error=-1 (invalid mode!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (sscanf(argv[3], "%x", &dev) == 0) { + printf("open: error=-1 (invalid dev!)\n"); + return NT_STATUS_UNSUCCESSFUL; + } + + if (vfs->conn->vfs_ops.mknod(vfs->conn, argv[1], mode, dev) == -1) { + printf("mknod: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("mknod: ok\n"); + return NT_STATUS_OK; +} + +static NTSTATUS cmd_realpath(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + char respath[PATH_MAX]; + + if (argc != 2) { + printf("Usage: realpath \n"); + return NT_STATUS_OK; + } + + if (vfs->conn->vfs_ops.realpath(vfs->conn, argv[1], respath) == NULL) { + printf("realpath: error=%d (%s)\n", errno, strerror(errno)); + return NT_STATUS_UNSUCCESSFUL; + } + + printf("realpath: ok\n"); + return NT_STATUS_OK; +} + +#endif + +struct cmd_set sam_commands[] = { + + { "SAM Commands" }, + + { "load", cmd_load_module, "Load a module", "load " }, + { NULL } +}; diff --git a/source3/torture/samtest.c b/source3/torture/samtest.c index 490cc2cdf3..3ac65ef0df 100644 --- a/source3/torture/samtest.c +++ b/source3/torture/samtest.c @@ -23,20 +23,13 @@ */ #include "includes.h" +#include "samtest.h" struct func_entry { char *name; int (*fn)(struct connection_struct *conn, const char *path); }; -struct cmd_set { - char *name; - NTSTATUS (*fn)(struct sam_context *sam, TALLOC_CTX *mem_ctx, int argc, - char **argv); - char *description; - char *usage; -}; - /* List to hold groups of commands */ static struct cmd_list { struct cmd_list *prev, *next; @@ -164,9 +157,10 @@ static struct cmd_set separator_command[] = { /*extern struct cmd_set sam_commands[];*/ +extern struct cmd_set sam_commands[]; static struct cmd_set *samtest_command_list[] = { samtest_commands, -/* sam_commands, NOT YET */ + sam_commands, NULL }; @@ -336,12 +330,10 @@ int main(int argc, char *argv[]) int opt; static char *cmdstr = ""; static char *opt_logfile=NULL; - static int opt_debuglevel; pstring logfile; struct cmd_set **cmd_set; extern BOOL AllowDebugChange; static struct sam_context sam; - int i; /* make sure the vars that get altered (4th field) are in diff --git a/source3/torture/samtest.h b/source3/torture/samtest.h new file mode 100644 index 0000000000..2a8516cfc3 --- /dev/null +++ b/source3/torture/samtest.h @@ -0,0 +1,31 @@ +/* + Unix SMB/CIFS implementation. + SAM module tester + + Copyright (C) Jelmer Vernooij 2002 + + Most of this code was ripped off of rpcclient. + Copyright (C) Tim Potter 2000-2001 + + 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. +*/ + +struct cmd_set { + char *name; + NTSTATUS (*fn)(struct sam_context *sam, TALLOC_CTX *mem_ctx, int argc, + char **argv); + char *description; + char *usage; +}; -- cgit From 0ce509e2f5f291cc1ef7c4ec610f4c9f379898d9 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 19 Sep 2002 17:36:29 +0000 Subject: tdb tools need #include Jeremy. (This used to be commit 7e19a6b7ade1e70aafa9be8a86665a49f592b6f4) --- source3/tdb/spinlock.c | 1 + source3/tdb/tdbtest.c | 1 + source3/tdb/tdbtool.c | 1 + 3 files changed, 3 insertions(+) diff --git a/source3/tdb/spinlock.c b/source3/tdb/spinlock.c index 74472854cf..2370ce3bdd 100644 --- a/source3/tdb/spinlock.c +++ b/source3/tdb/spinlock.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "tdb.h" #include "spinlock.h" diff --git a/source3/tdb/tdbtest.c b/source3/tdb/tdbtest.c index 0741073ce1..89295a3291 100644 --- a/source3/tdb/tdbtest.c +++ b/source3/tdb/tdbtest.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "tdb.h" #include diff --git a/source3/tdb/tdbtool.c b/source3/tdb/tdbtool.c index ba0fb48957..f529c6e6ee 100644 --- a/source3/tdb/tdbtool.c +++ b/source3/tdb/tdbtool.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "tdb.h" /* a tdb tool for manipulating a tdb database */ -- cgit From 8322448c40ed7191b0669f885fde39d4ca89d341 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 19 Sep 2002 17:40:55 +0000 Subject: Move functionality to check whether entries for lp_workgroup() and "BUILTIN" exist and add them if necessary from check_correct_backend_entries into sam_context_check_default_backends. The reason for this is that we don't always want to have BUILTIN and lp_workgroup() in a sam_context, for example when doing sam2sam. check_correct_backend_entries has been renamed to 'check_duplicate_backend_entries' since that's what it currently does. The sam_context_check_default_backends() function is only called by sam_get_static_context(BOOL reload) currently currently. (This used to be commit 2fe72652ee468bf5e1f8f151215f45b10f4c8a28) --- source3/sam/api.c | 4 +- source3/sam/interface.c | 163 ++++++++++++++++++++++++++++-------------------- 2 files changed, 98 insertions(+), 69 deletions(-) diff --git a/source3/sam/api.c b/source3/sam/api.c index 5d850becce..fb2f015e95 100644 --- a/source3/sam/api.c +++ b/source3/sam/api.c @@ -1,7 +1,7 @@ /* Unix SMB/CIFS implementation. SAM interface API. - + Copyright (C) Stefan (metze) Metzmacher 2002 This program is free software; you can redistribute it and/or modify @@ -24,7 +24,7 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM -/* this function should be used by the rest of SAMBA --metze */ +/* these functions should be used by the rest of SAMBA --metze */ /* General API */ diff --git a/source3/sam/interface.c b/source3/sam/interface.c index 17df276aed..6668e3848d 100644 --- a/source3/sam/interface.c +++ b/source3/sam/interface.c @@ -965,65 +965,9 @@ static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_b return NT_STATUS_OK; } -static NTSTATUS check_correct_backend_entries(SAM_BACKEND_ENTRY **backend_entries, int *nBackends) -{ - BOOL has_builtin = False; - BOOL has_workgroup = False; - DOM_SID *global_sam_sid = get_global_sam_sid(); /* lp_workgroup doesn't play nicely with multiple domains */ - int increase_by = 0; - int i, j; - - DEBUG(5,("check_correct_backend_entries: %d\n", __LINE__)); - - for (i = 0; i < *nBackends; i++) { - if (sid_equal((*backend_entries)[i].domain_sid, &global_sid_Builtin)) { - DEBUG(20,("check_correct_backend_entries: smb.conf specified BUILTIN domain\n")); - has_builtin = True; - } - if (sid_equal((*backend_entries)[i].domain_sid, global_sam_sid)) { - DEBUG(20,("check_correct_backend_entries: smb.conf specified main domain\n")); - has_workgroup = True; - } - for (j = i + 1; j < *nBackends; j++) { - if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { - DEBUG(0,("two backend modules claim the same domain %s\n", - sid_string_static((*backend_entries)[j].domain_sid))); - return NT_STATUS_INVALID_PARAMETER; - } - } - } - - if (!has_workgroup) increase_by++; - if (!has_builtin) increase_by++; - - if (increase_by > 0) { - *nBackends += increase_by; - - (*backend_entries) = (SAM_BACKEND_ENTRY *)realloc((*backend_entries), sizeof(SAM_BACKEND_ENTRY) * (*nBackends+1)); - if (!has_workgroup) { - DEBUG(4,("There was no backend specified for domain %s; using %s\n", - lp_workgroup(), SAM_DEFAULT_BACKEND)); - (*backend_entries)[i].module_name = SAM_DEFAULT_BACKEND; - (*backend_entries)[i].module_params = NULL; - (*backend_entries)[i].domain_name = lp_workgroup(); - (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); - sid_copy((*backend_entries)[i].domain_sid, global_sam_sid); - i++; - } - if (!has_builtin) { - DEBUG(4,("There was no backend specified for domain BUILTIN; using %s\n", - SAM_DEFAULT_BACKEND)); - (*backend_entries)[i].module_name = SAM_DEFAULT_BACKEND; - (*backend_entries)[i].module_params = NULL; - (*backend_entries)[i].domain_name = "BUILTIN"; - (*backend_entries)[i].domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); - sid_copy((*backend_entries)[i].domain_sid, &global_sid_Builtin); - i++; - } - } - - return NT_STATUS_OK; -} +/****************************************************************** + create sam_methods struct based on sam_backend_entry + *****************************************************************/ static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods, SAM_BACKEND_ENTRY *backend_entry) { @@ -1048,7 +992,6 @@ static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS backend_entry->module_name, nt_errstr(nt_status))); } return nt_status; - break; /* unreached */ } } @@ -1057,6 +1000,90 @@ static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS return NT_STATUS_INVALID_PARAMETER; } +static NTSTATUS sam_context_check_default_backends(SAM_CONTEXT *context) +{ + SAM_BACKEND_ENTRY entry; + DOM_SID *global_sam_sid = get_global_sam_sid(); /* lp_workgroup doesn't play nicely with multiple domains */ + SAM_METHODS *methods, *tmpmethods; + NTSTATUS ntstatus; + + DEBUG(5,("sam_context_check_default_backends: %d\n", __LINE__)); + + /* Make sure domain lp_workgroup() is available */ + + ntstatus = sam_get_methods_by_sid(context, &methods, &global_sid_Builtin); + + if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { + DEBUG(4,("There was no backend specified for domain %s; using %s\n", + lp_workgroup(), SAM_DEFAULT_BACKEND)); + + SAM_ASSERT(global_sam_sid); + + entry.module_name = SAM_DEFAULT_BACKEND; + entry.module_params = NULL; + entry.domain_name = lp_workgroup(); + entry.domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy(entry.domain_sid, global_sam_sid); + + if (!NT_STATUS_IS_OK(ntstatus = make_sam_methods_backend_entry(context, &methods, &entry))) { + DEBUG(4,("make_sam_methods_backend_entry failed\n")); + return ntstatus; + } + + methods->parent = context; + DLIST_ADD_END(context->methods, methods, tmpmethods); + + } else if (!NT_STATUS_IS_OK(ntstatus)) { + DEBUG(2, ("sam_get_methods_by_sid failed for %s\n", lp_workgroup())); + return ntstatus; + } + + /* Make sure the BUILTIN domain is available */ + + ntstatus = sam_get_methods_by_sid(context, &methods, global_sam_sid); + + if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_NO_SUCH_DOMAIN)) { + DEBUG(4,("There was no backend specified for domain BUILTIN; using %s\n", + SAM_DEFAULT_BACKEND)); + entry.module_name = SAM_DEFAULT_BACKEND; + entry.module_params = NULL; + entry.domain_name = "BUILTIN"; + entry.domain_sid = (DOM_SID *)malloc(sizeof(DOM_SID)); + sid_copy(entry.domain_sid, &global_sid_Builtin); + + if (!NT_STATUS_IS_OK(ntstatus = make_sam_methods_backend_entry(context, &methods, &entry))) { + DEBUG(4,("make_sam_methods_backend_entry failed\n")); + return ntstatus; + } + + methods->parent = context; + DLIST_ADD_END(context->methods, methods, tmpmethods); + } else if (!NT_STATUS_IS_OK(ntstatus)) { + DEBUG(2, ("sam_get_methods_by_sid failed for BUILTIN\n")); + return ntstatus; + } + + return NT_STATUS_OK; +} + +static NTSTATUS check_duplicate_backend_entries(SAM_BACKEND_ENTRY **backend_entries, int *nBackends) +{ + int i, j; + + DEBUG(5,("check_duplicate_backend_entries: %d\n", __LINE__)); + + for (i = 0; i < *nBackends; i++) { + for (j = i + 1; j < *nBackends; j++) { + if (sid_equal((*backend_entries)[i].domain_sid, (*backend_entries)[j].domain_sid)) { + DEBUG(0,("two backend modules claim the same domain %s\n", + sid_string_static((*backend_entries)[j].domain_sid))); + return NT_STATUS_INVALID_PARAMETER; + } + } + } + + return NT_STATUS_OK; +} NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) { @@ -1095,8 +1122,8 @@ NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) } } - if (!NT_STATUS_IS_OK(nt_status = check_correct_backend_entries(&backends, &nBackends))) { - DEBUG(4,("check_correct_backend_entries failed\n")); + if (!NT_STATUS_IS_OK(nt_status = check_duplicate_backend_entries(&backends, &nBackends))) { + DEBUG(4,("check_duplicate_backend_entries failed\n")); for (j = 0; j < nBackends; j++) SAFE_FREE(backends[j].domain_sid); SAFE_FREE(backends); free_sam_context(context); @@ -1153,7 +1180,6 @@ NTSTATUS make_sam_context(SAM_CONTEXT **context) return NT_STATUS_OK; } - /****************************************************************** Return an already initialised sam_context, to facilitate backward compatibility (see functions below). @@ -1165,10 +1191,7 @@ struct sam_context *sam_get_static_context(BOOL reload) if ((sam_context) && (reload)) { sam_context->free_fn(&sam_context); - if (!NT_STATUS_IS_OK(make_sam_context_list(&sam_context, lp_sam_backend()))) { - DEBUG(4,("make_sam_context_list failed\n")); - return NULL; - } + sam_context = NULL; } if (!sam_context) { @@ -1176,6 +1199,12 @@ struct sam_context *sam_get_static_context(BOOL reload) DEBUG(4,("make_sam_context_list failed\n")); return NULL; } + + /* Make sure the required domains (default domain, builtin) are available */ + if (!NT_STATUS_IS_OK(sam_context_check_default_backends(sam_context))) { + DEBUG(4,("sam_context_check_default_backends failed\n")); + return NULL; + } } return sam_context; -- cgit From a5df564e05369f2cce8e630a355aa106d949f215 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 19 Sep 2002 18:20:38 +0000 Subject: Use sendfile in readbraw. Jeremy. (This used to be commit a77966645a976d6ae08581c2e92465c48a8e961d) --- source3/smbd/reply.c | 67 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 11 deletions(-) diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 4c7d73bc6e..a881e135c0 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1431,6 +1431,59 @@ void fail_readraw(void) exit_server(errstr); } +/**************************************************************************** + Use sendfile in readbraw. +****************************************************************************/ + +void send_file_readbraw(connection_struct *conn, files_struct *fsp, SMB_OFF_T startpos, size_t nread, + ssize_t mincount, char *outbuf) +{ + ssize_t ret=0; + +#if defined(WITH_SENDFILE) + /* + * We can only use sendfile on a non-chained packet and on a file + * that is exclusively oplocked. reply_readbraw has already checked the length. + */ + + if ((nread > 0) && (lp_write_cache_size(SNUM(conn)) == 0) && + EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && lp_use_sendfile(SNUM(conn)) ) { + DATA_BLOB header; + + _smb_setlen(outbuf,nread); + header.data = outbuf; + header.length = 4; + header.free = NULL; + + if ( conn->vfs_ops.sendfile( smbd_server_fd(), fsp, fsp->fd, &header, startpos, nread) == -1) { + /* + * Special hack for broken Linux with no 64 bit clean sendfile. If we + * return ENOSYS then pretend we just got a normal read. + */ + if (errno == ENOSYS) + goto normal_read; + + DEBUG(0,("send_file_readbraw: sendfile failed for file %s (%s). Terminating\n", + fsp->fsp_name, strerror(errno) )); + exit_server("send_file_readbraw sendfile failed"); + } + + } + + normal_read: +#endif + + if (nread > 0) { + ret = read_file(fsp,outbuf+4,startpos,nread); + if (ret < mincount) + ret = 0; + } + + _smb_setlen(outbuf,ret); + if (write_data(smbd_server_fd(),outbuf,4+ret) != 4+ret) + fail_readraw(); +} + /**************************************************************************** Reply to a readbraw (core+ protocol). ****************************************************************************/ @@ -1441,7 +1494,6 @@ int reply_readbraw(connection_struct *conn, char *inbuf, char *outbuf, int dum_s size_t nread = 0; SMB_OFF_T startpos; char *header = outbuf; - ssize_t ret=0; files_struct *fsp; START_PROFILE(SMBreadbraw); @@ -1545,15 +1597,7 @@ int reply_readbraw(connection_struct *conn, char *inbuf, char *outbuf, int dum_s DEBUG( 3, ( "readbraw fnum=%d start=%.0f max=%d min=%d nread=%d\n", fsp->fnum, (double)startpos, (int)maxcount, (int)mincount, (int)nread ) ); - if (nread > 0) { - ret = read_file(fsp,header+4,startpos,nread); - if (ret < mincount) - ret = 0; - } - - _smb_setlen(header,ret); - if (write_data(smbd_server_fd(),header,4+ret) != 4+ret) - fail_readraw(); + send_file_readbraw(conn, fsp, startpos, nread, mincount, outbuf); DEBUG(5,("readbraw finished\n")); END_PROFILE(SMBreadbraw); @@ -1698,7 +1742,8 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length * that is exclusively oplocked. */ - if ((CVAL(inbuf,smb_vwv0) == 0xFF) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && lp_use_sendfile(SNUM(conn)) ) { + if ((CVAL(inbuf,smb_vwv0) == 0xFF) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && + lp_use_sendfile(SNUM(conn)) && (lp_write_cache_size(SNUM(conn)) == 0) ) { SMB_STRUCT_STAT sbuf; DATA_BLOB header; -- cgit From 16b2465c091b50c47e827b004529043d15476d32 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 19 Sep 2002 23:32:38 +0000 Subject: remove proto headers on realclean (This used to be commit 1bd2c6e1441ea8e54284c72dc07de741f88dbe90) --- source3/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index dbbd97bbff..f1c7126451 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -1008,7 +1008,7 @@ etags: ctags: ctags `find $(srcdir) -name "*.[ch]" | grep -v /CVS/` -realclean: clean +realclean: clean delheaders -rm -f config.log $(PROGS) $(SPROGS) bin/.dummy -rmdir bin -- cgit From 737b0a54bfeae22f18b2b77850fe70f7326e5a6c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 20 Sep 2002 09:34:35 +0000 Subject: allow --with-krb5 to override the location of the kerberos libs on redhat (This used to be commit 56b194e83538bcb6006a5ab1e00cdb493dd9ad7f) --- source3/configure.in | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/source3/configure.in b/source3/configure.in index d53886bc65..7ae8ac90d3 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -1958,20 +1958,9 @@ AC_MSG_RESULT($with_ads_support) if test x"$with_ads_support" = x"yes"; then - ################################################# - # see if this box has the RedHat location for kerberos - AC_MSG_CHECKING(for /usr/kerberos) - if test -d /usr/kerberos; then - LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" - CFLAGS="$CFLAGS -I/usr/kerberos/include" - CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - ################################################# # check for location of Kerberos 5 install +FOUND_KRB5=0 AC_MSG_CHECKING(for kerberos 5 install path) AC_ARG_WITH(krb5, [ --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)], @@ -1985,11 +1974,28 @@ if test x"$with_ads_support" = x"yes"; then CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" + FOUND_KRB5=1 ;; esac ], AC_MSG_RESULT(no) ) + +if [ $FOUND_KRB5 = 0 ]; then +################################################# +# see if this box has the RedHat location for kerberos +AC_MSG_CHECKING(for /usr/kerberos) +if test -d /usr/kerberos; then + LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" + CFLAGS="$CFLAGS -I/usr/kerberos/include" + CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi +fi + + # now check for krb5.h. Some systems have the libraries without the headers! # note that this check is done here to allow for different kerberos # include paths -- cgit From 8ea2d8f255763b027cc70e35f96ad2ad325a4589 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 20 Sep 2002 09:37:02 +0000 Subject: change ADS negprot to match more closely the options used by w2k. This affects the principal used and the order of SPNEGO OIDs (This used to be commit e8ff1c0819e02a1fc7234ad0a07d5415936dfbd2) --- source3/smbd/negprot.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/source3/smbd/negprot.c b/source3/smbd/negprot.c index 0e306cdab0..16427b00d7 100644 --- a/source3/smbd/negprot.c +++ b/source3/smbd/negprot.c @@ -170,9 +170,9 @@ static int negprot_spnego(char *p) DATA_BLOB blob; extern pstring global_myname; uint8 guid[16]; - const char *OIDs_krb5[] = {OID_NTLMSSP, - OID_KERBEROS5, + const char *OIDs_krb5[] = {OID_KERBEROS5, OID_KERBEROS5_OLD, + OID_NTLMSSP, NULL}; const char *OIDs_plain[] = {OID_NTLMSSP, NULL}; char *principal; @@ -199,9 +199,7 @@ static int negprot_spnego(char *p) if (lp_security() != SEC_ADS) { blob = spnego_gen_negTokenInit(guid, OIDs_plain, "NONE"); } else { - /* win2000 uses host$@REALM, which we will probably use eventually, - but for now this works */ - asprintf(&principal, "HOST/%s@%s", guid, lp_realm()); + asprintf(&principal, "%s$@%s", guid, lp_realm()); blob = spnego_gen_negTokenInit(guid, OIDs_krb5, principal); free(principal); } -- cgit From 56baccb928c54f11882485030135aded52ae42ad Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 20 Sep 2002 15:11:31 +0000 Subject: CUPS merge from SAMBA_2_2 (This used to be commit cbb16eac0e79649f4383763439c7e745f27fd0cb) --- source3/printing/print_cups.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source3/printing/print_cups.c b/source3/printing/print_cups.c index 51ebb739a3..858647a52f 100644 --- a/source3/printing/print_cups.c +++ b/source3/printing/print_cups.c @@ -665,6 +665,10 @@ cups_job_submit(int snum, struct printjob *pjob) httpClose(http); + if ( ret == 0 ) + unlink(pjob->filename); + /* else print_job_end will do it for us */ + return (ret); } -- cgit From 3c1c9ac22825c2ca1ce3f7fca10047df3ebda8e5 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 20 Sep 2002 16:09:59 +0000 Subject: reran autoconf (This used to be commit 29be94110415c87c7030f0d2d87b612220397eae) --- source3/configure | 758 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 387 insertions(+), 371 deletions(-) diff --git a/source3/configure b/source3/configure index 9bd514ee04..7dc099e913 100755 --- a/source3/configure +++ b/source3/configure @@ -2918,12 +2918,12 @@ else #line 2919 "configure" #include "confdefs.h" #include -int main() +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(int)); - return(0); + exit(0); } EOF if { (eval echo configure:2930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2957,12 +2957,12 @@ else #line 2958 "configure" #include "confdefs.h" #include -int main() +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(long)); - return(0); + exit(0); } EOF if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2996,12 +2996,12 @@ else #line 2997 "configure" #include "confdefs.h" #include -int main() +main() { FILE *f=fopen("conftestval", "w"); - if (!f) return(1); + if (!f) exit(1); fprintf(f, "%d\n", sizeof(short)); - return(0); + exit(0); } EOF if { (eval echo configure:3008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -8928,7 +8928,17 @@ EOF SONAMEFLAG="-Wl,-h," PICFLAG="-KPIC" # Is this correct for SunOS ;; - *bsd*) BLDSHARED="true" + *freebsd*) BLDSHARED="true" + LDSHFLAGS="-shared" + DYNEXP="-Wl,--export-dynamic" + SONAMEFLAG="-Wl,-soname," + PICFLAG="-fPIC -DPIC" + cat >> confdefs.h <<\EOF +#define STAT_ST_BLOCKSIZE 512 +EOF + + ;; + *openbsd*) BLDSHARED="true" LDSHFLAGS="-shared" DYNEXP="-Wl,-Bdynamic" SONAMEFLAG="-Wl,-soname," @@ -9036,7 +9046,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9040: checking for $ac_word" >&5 +echo "configure:9050: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9093,17 +9103,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9097: checking linker flags for shared libraries" >&5 +echo "configure:9107: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9100: checking compiler flags for position-independent code" >&5 +echo "configure:9110: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9107: checking whether building shared libraries actually works" >&5 +echo "configure:9117: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9134,7 +9144,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9138: checking for long long" >&5 +echo "configure:9148: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9143,12 +9153,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9175,20 +9185,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9179: checking for LL suffix on long long integers" >&5 +echo "configure:9189: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9210,7 +9220,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9214: checking for 64 bit off_t" >&5 +echo "configure:9224: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9219,13 +9229,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9248,7 +9258,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9252: checking for off64_t" >&5 +echo "configure:9262: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9257,7 +9267,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9290,7 +9300,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9294: checking for 64 bit ino_t" >&5 +echo "configure:9304: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9299,13 +9309,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9328,7 +9338,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9332: checking for ino64_t" >&5 +echo "configure:9342: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9337,7 +9347,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9370,7 +9380,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9374: checking for dev64_t" >&5 +echo "configure:9384: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9379,7 +9389,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9412,13 +9422,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9416: checking for struct dirent64" >&5 +echo "configure:9426: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9444: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9451,7 +9461,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9455: checking for major macro" >&5 +echo "configure:9465: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9460,7 +9470,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9492,7 +9502,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9496: checking for minor macro" >&5 +echo "configure:9506: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9501,7 +9511,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9533,7 +9543,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9537: checking for unsigned char" >&5 +echo "configure:9547: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9542,12 +9552,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9570,13 +9580,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9574: checking for sin_len in sock" >&5 +echo "configure:9584: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9585,7 +9595,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9599: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9606,13 +9616,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9610: checking whether seekdir returns void" >&5 +echo "configure:9620: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9621,7 +9631,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9642,20 +9652,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9646: checking for __FILE__ macro" >&5 +echo "configure:9656: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9669: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9676,20 +9686,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9680: checking for __FUNCTION__ macro" >&5 +echo "configure:9690: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9693: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9703: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9710,7 +9720,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9714: checking if gettimeofday takes tz argument" >&5 +echo "configure:9724: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9719,14 +9729,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9749,13 +9759,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9753: checking for __va_copy" >&5 +echo "configure:9763: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9763,7 +9773,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9784,7 +9794,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9788: checking for C99 vsnprintf" >&5 +echo "configure:9798: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9793,7 +9803,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9820,7 +9830,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9843,7 +9853,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9847: checking for broken readdir" >&5 +echo "configure:9857: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9852,7 +9862,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9860,7 +9870,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9883,13 +9893,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9887: checking for utimbuf" >&5 +echo "configure:9897: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9897,7 +9907,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9911: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9921,12 +9931,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9925: checking for $ac_func" >&5 +echo "configure:9935: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9963: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9975,13 +9985,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9979: checking for ut_name in utmp" >&5 +echo "configure:9989: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9989,7 +9999,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10010,13 +10020,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10014: checking for ut_user in utmp" >&5 +echo "configure:10024: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10024,7 +10034,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10038: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10045,13 +10055,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10049: checking for ut_id in utmp" >&5 +echo "configure:10059: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10059,7 +10069,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10080,13 +10090,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10084: checking for ut_host in utmp" >&5 +echo "configure:10094: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10094,7 +10104,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10108: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10115,13 +10125,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10119: checking for ut_time in utmp" >&5 +echo "configure:10129: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10129,7 +10139,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10150,13 +10160,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10154: checking for ut_tv in utmp" >&5 +echo "configure:10164: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10164,7 +10174,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10185,13 +10195,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10189: checking for ut_type in utmp" >&5 +echo "configure:10199: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10199,7 +10209,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10213: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10220,13 +10230,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10224: checking for ut_pid in utmp" >&5 +echo "configure:10234: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10234,7 +10244,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10238: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10255,13 +10265,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10259: checking for ut_exit in utmp" >&5 +echo "configure:10269: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10269,7 +10279,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10290,13 +10300,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10294: checking for ut_addr in utmp" >&5 +echo "configure:10304: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10304,7 +10314,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10318: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10326,13 +10336,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10330: checking whether pututline returns pointer" >&5 +echo "configure:10340: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10340,7 +10350,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10362,13 +10372,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10366: checking for ut_syslen in utmpx" >&5 +echo "configure:10376: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10376,7 +10386,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10400,7 +10410,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10404: checking whether to use libiconv" >&5 +echo "configure:10414: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10413,7 +10423,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10417: checking for iconv_open in -liconv" >&5 +echo "configure:10427: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10421,7 +10431,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10475,7 +10485,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10479: checking for working iconv" >&5 +echo "configure:10489: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10484,7 +10494,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10495,7 +10505,7 @@ main() { } EOF -if { (eval echo configure:10499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10519,7 +10529,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10523: checking for Linux kernel oplocks" >&5 +echo "configure:10533: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10528,7 +10538,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10542,7 +10552,7 @@ main() { } EOF -if { (eval echo configure:10546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10565,7 +10575,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10569: checking for kernel change notify support" >&5 +echo "configure:10579: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10574,7 +10584,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10588,7 +10598,7 @@ main() { } EOF -if { (eval echo configure:10592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10611,7 +10621,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10615: checking for kernel share modes" >&5 +echo "configure:10625: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10620,7 +10630,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10636,7 +10646,7 @@ main() { } EOF -if { (eval echo configure:10640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10662,13 +10672,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10666: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10676: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10676,7 +10686,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10697,7 +10707,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10701: checking for irix specific capabilities" >&5 +echo "configure:10711: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10706,7 +10716,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10721,7 +10731,7 @@ main() { } EOF -if { (eval echo configure:10725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10749,13 +10759,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10753: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10763: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10765,7 +10775,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10786,13 +10796,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10790: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10800: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10802,7 +10812,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10823,13 +10833,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10827: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10837: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10839,7 +10849,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10860,13 +10870,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10864: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10874: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10876,7 +10886,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10890: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10898,13 +10908,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10902: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10912: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10918,7 +10928,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10939,16 +10949,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10943: checking for test routines" >&5 +echo "configure:10953: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10962,7 +10972,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10966: checking for ftruncate extend" >&5 +echo "configure:10976: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10971,11 +10981,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10998,7 +11008,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11002: checking for AF_LOCAL socket support" >&5 +echo "configure:11012: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11007,11 +11017,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11035,7 +11045,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11039: checking for broken getgroups" >&5 +echo "configure:11049: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11044,11 +11054,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11071,7 +11081,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11075: checking whether getpass should be replaced" >&5 +echo "configure:11085: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11079,7 +11089,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11106: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11115,7 +11125,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11119: checking for broken inet_ntoa" >&5 +echo "configure:11129: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11124,7 +11134,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11138,7 +11148,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11161,7 +11171,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11165: checking for secure mkstemp" >&5 +echo "configure:11175: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11170,7 +11180,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11187,7 +11197,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11210,7 +11220,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11214: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11224: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11219,12 +11229,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11247,7 +11257,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11251: checking for root" >&5 +echo "configure:11261: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11256,11 +11266,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11288,7 +11298,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11292: checking for iface AIX" >&5 +echo "configure:11302: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11297,7 +11307,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11329,7 +11339,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11333: checking for iface ifconf" >&5 +echo "configure:11343: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11338,7 +11348,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11371,7 +11381,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11375: checking for iface ifreq" >&5 +echo "configure:11385: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11380,7 +11390,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11417,7 +11427,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11421: checking for setresuid" >&5 +echo "configure:11431: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11426,7 +11436,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11460,7 +11470,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11464: checking for setreuid" >&5 +echo "configure:11474: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11469,7 +11479,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11502,7 +11512,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11506: checking for seteuid" >&5 +echo "configure:11516: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11511,7 +11521,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11544,7 +11554,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11548: checking for setuidx" >&5 +echo "configure:11558: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11553,7 +11563,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11586,7 +11596,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11590: checking for working mmap" >&5 +echo "configure:11600: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11595,11 +11605,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11622,7 +11632,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11626: checking for ftruncate needs root" >&5 +echo "configure:11636: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11631,11 +11641,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11658,7 +11668,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11662: checking for fcntl locking" >&5 +echo "configure:11672: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11667,11 +11677,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11694,7 +11704,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11698: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11708: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11703,11 +11713,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11732,7 +11742,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11736: checking for 64 bit fcntl locking" >&5 +echo "configure:11746: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11741,7 +11751,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11790,13 +11800,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11794: checking for st_blocks in struct stat" >&5 +echo "configure:11804: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11805,7 +11815,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11809: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11826,13 +11836,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11830: checking for st_blksize in struct stat" >&5 +echo "configure:11840: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11841,7 +11851,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11855: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11864,13 +11874,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11868: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11878: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11898: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11907,13 +11917,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11911: checking for broken nisplus include files" >&5 +echo "configure:11921: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11923,7 +11933,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11937: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11947,7 +11957,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11951: checking whether to use smbwrapper" >&5 +echo "configure:11961: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11994,7 +12004,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11998: checking whether to use AFS clear-text auth" >&5 +echo "configure:12008: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12020,7 +12030,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12024: checking whether to use DFS clear-text auth" >&5 +echo "configure:12034: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12047,7 +12057,7 @@ fi with_ads_support=yes echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 -echo "configure:12051: checking whether to use Active Directory" >&5 +echo "configure:12061: checking whether to use Active Directory" >&5 # Check whether --with-ads or --without-ads was given. if test "${with_ads+set}" = set; then @@ -12071,23 +12081,11 @@ echo "$ac_t""$with_ads_support" 1>&6 if test x"$with_ads_support" = x"yes"; then - ################################################# - # see if this box has the RedHat location for kerberos - echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12078: checking for /usr/kerberos" >&5 - if test -d /usr/kerberos; then - LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" - CFLAGS="$CFLAGS -I/usr/kerberos/include" - CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" - echo "$ac_t""yes" 1>&6 - else - echo "$ac_t""no" 1>&6 - fi - ################################################# # check for location of Kerberos 5 install +FOUND_KRB5=0 echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12091: checking for kerberos 5 install path" >&5 +echo "configure:12089: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12101,6 +12099,7 @@ if test "${with_krb5+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" + FOUND_KRB5=1 ;; esac else @@ -12109,6 +12108,23 @@ else fi + +if $FOUND_KRB5 = 0 ; then +################################################# +# see if this box has the RedHat location for kerberos +echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 +echo "configure:12117: checking for /usr/kerberos" >&5 +if test -d /usr/kerberos; then + LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" + CFLAGS="$CFLAGS -I/usr/kerberos/include" + CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include" + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +fi + + # now check for krb5.h. Some systems have the libraries without the headers! # note that this check is done here to allow for different kerberos # include paths @@ -12116,17 +12132,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12120: checking for $ac_hdr" >&5 +echo "configure:12136: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12130: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12159,17 +12175,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12163: checking for $ac_hdr" >&5 +echo "configure:12179: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12173: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12199,7 +12215,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12203: checking for _et_list in -lcom_err" >&5 +echo "configure:12219: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12207,7 +12223,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12239,7 +12255,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12243: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12259: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12247,7 +12263,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12283,7 +12299,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12287: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12303: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12291,7 +12307,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12330,7 +12346,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12334: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12350: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12338,7 +12354,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12380,7 +12396,7 @@ fi with_ldap_support=yes echo $ac_n "checking whether to use LDAP""... $ac_c" 1>&6 -echo "configure:12384: checking whether to use LDAP" >&5 +echo "configure:12400: checking whether to use LDAP" >&5 # Check whether --with-ldap or --without-ldap was given. if test "${with_ldap+set}" = set; then @@ -12401,7 +12417,7 @@ if test x"$with_ldap_support" = x"yes"; then # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12405: checking for ber_scanf in -llber" >&5 +echo "configure:12421: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12409,7 +12425,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12445,7 +12461,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12449: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12465: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12453,7 +12469,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12495,12 +12511,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12499: checking for $ac_func" >&5 +echo "configure:12515: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12548,13 +12564,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12552: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12568: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12563,7 +12579,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12567: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12583: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12586,7 +12602,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12590: checking whether to use AUTOMOUNT" >&5 +echo "configure:12606: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12611,7 +12627,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12615: checking whether to use SMBMOUNT" >&5 +echo "configure:12631: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12648,7 +12664,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12652: checking whether to use PAM" >&5 +echo "configure:12668: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12674,7 +12690,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12678: checking for pam_get_data in -lpam" >&5 +echo "configure:12694: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12682,7 +12698,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12720,7 +12736,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12724: checking whether to use pam_smbpass" >&5 +echo "configure:12740: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12758,12 +12774,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12762: checking for $ac_func" >&5 +echo "configure:12778: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12812,7 +12828,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12816: checking for crypt in -lcrypt" >&5 +echo "configure:12832: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12820,7 +12836,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12866,7 +12882,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12870: checking for a crypt that needs truncated salt" >&5 +echo "configure:12886: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12875,11 +12891,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12905,7 +12921,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12909: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12925: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12937,7 +12953,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12941: checking whether to use TDB SAM database" >&5 +echo "configure:12957: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12962,7 +12978,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12966: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12982: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12993,7 +13009,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:12997: checking whether to use NISPLUS_HOME" >&5 +echo "configure:13013: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -13018,7 +13034,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:13022: checking whether to use syslog logging" >&5 +echo "configure:13038: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -13043,7 +13059,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:13047: checking whether to use profiling" >&5 +echo "configure:13063: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13071,7 +13087,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13075: checking whether to support disk-quotas" >&5 +echo "configure:13091: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13082,13 +13098,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13086: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13102: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13100,7 +13116,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13149,7 +13165,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13153: checking whether to support utmp accounting" >&5 +echo "configure:13169: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13174,7 +13190,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13178: checking chosen man pages' language(s)" >&5 +echo "configure:13194: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13205,7 +13221,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13209: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13225: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13233,14 +13249,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13237: checking how to get filesystem space usage" >&5 +echo "configure:13253: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13244: checking statvfs64 function (SVR4)" >&5 +echo "configure:13260: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13248,7 +13264,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13295,12 +13311,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13299: checking statvfs function (SVR4)" >&5 +echo "configure:13315: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13308,7 +13324,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13333,7 +13349,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13337: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13353: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13341,7 +13357,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13354,7 +13370,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13381,7 +13397,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13385: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13401: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13389,7 +13405,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13435,7 +13451,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13439: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13455: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13443,7 +13459,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13453,7 +13469,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13480,7 +13496,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13484: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13500: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13488,7 +13504,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13504,7 +13520,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13531,7 +13547,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13535: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13551: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13539,7 +13555,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13559,7 +13575,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13592,9 +13608,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13596: checking if large file support can be enabled" >&5 +echo "configure:13612: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13627: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13672,7 +13688,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13676: checking whether to support ACLs" >&5 +echo "configure:13692: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13725,7 +13741,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13729: checking for acl_get_file in -lacl" >&5 +echo "configure:13745: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13733,7 +13749,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13772,13 +13788,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13776: checking for ACL support" >&5 +echo "configure:13792: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13786,7 +13802,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13806,13 +13822,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13810: checking for acl_get_perm_np" >&5 +echo "configure:13826: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13820,7 +13836,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13865,7 +13881,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13869: checking whether to support sendfile" >&5 +echo "configure:13885: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13875,13 +13891,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13879: checking for linux sendfile64 support" >&5 +echo "configure:13895: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13893,7 +13909,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13908,13 +13924,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13912: checking for linux sendfile support" >&5 +echo "configure:13928: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13926,7 +13942,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13942,13 +13958,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13946: checking for broken linux sendfile support" >&5 +echo "configure:13962: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -14020,13 +14036,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:14024: checking for freebsd sendfile support" >&5 +echo "configure:14040: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14048,7 +14064,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14082,13 +14098,13 @@ EOF *hpux*) echo $ac_n "checking for hpux sendfile64 support""... $ac_c" 1>&6 -echo "configure:14086: checking for hpux sendfile64 support" >&5 +echo "configure:14102: checking for hpux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14108,7 +14124,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14112: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -14139,13 +14155,13 @@ EOF fi echo $ac_n "checking for hpux sendfile support""... $ac_c" 1>&6 -echo "configure:14143: checking for hpux sendfile support" >&5 +echo "configure:14159: checking for hpux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14165,7 +14181,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14218,7 +14234,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14222: checking whether to build winbind" >&5 +echo "configure:14238: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14314,20 +14330,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14318: checking whether struct passwd has pw_comment" >&5 +echo "configure:14334: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14331: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14347: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14352,20 +14368,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14356: checking whether struct passwd has pw_age" >&5 +echo "configure:14372: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14369: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14385: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14404,7 +14420,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14408: checking for poptGetContext in -lpopt" >&5 +echo "configure:14424: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14412,7 +14428,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14447,7 +14463,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14451: checking whether to use included popt" >&5 +echo "configure:14467: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14493,16 +14509,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14497: checking configure summary" >&5 +echo "configure:14513: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else -- cgit From 696fedc7ad26222c94d0ecfda4aa3fa5be2377ca Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 20 Sep 2002 16:59:48 +0000 Subject: Add framework for samtest commands (This used to be commit f1021cbc557bfa0078e932a8268c5c9adcae0ae8) --- source3/torture/cmd_sam.c | 985 +++++----------------------------------------- source3/torture/samtest.c | 12 +- 2 files changed, 117 insertions(+), 880 deletions(-) diff --git a/source3/torture/cmd_sam.c b/source3/torture/cmd_sam.c index d276d52fe6..a2835ed69a 100644 --- a/source3/torture/cmd_sam.c +++ b/source3/torture/cmd_sam.c @@ -22,6 +22,26 @@ #include "includes.h" #include "samtest.h" +#if 0 +static struct cmd_popt_user_opts [] = { + { NULL, 0, POPT_ARG_CALLBACK, cmd_parse_user_opts }, + {"username", 'u', POPT_ARG_STRING, NULL, 1, "Username to use"}, +}; + +static void cmd_parse_user_opts(poptContext con, + enum poptCallbackReason reason, + const struct poptOption *opt, + const char *arg, const void *data) +{ + SAM_ACCOUNT_HANDLE *account = (SAM_ACCOUNT_HANDLE *)data; + switch(opt->val) { + case 'u': + sam_set_account_username(account, arg); + break; + } +} +#endif + static NTSTATUS cmd_load_module(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { char *plugin_arg[2]; @@ -42,961 +62,172 @@ static NTSTATUS cmd_load_module(struct sam_context *c, TALLOC_CTX *mem_ctx, int return NT_STATUS_OK; } -#if 0 -static NTSTATUS cmd_populate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - char c; - size_t size; - if (argc != 3) { - printf("Usage: populate \n"); - return NT_STATUS_OK; - } - c = argv[1][0]; - size = atoi(argv[2]); - vfs->data = (char *)talloc(mem_ctx, size); - if (vfs->data == NULL) { - printf("populate: error=-1 (not enough memory)"); - return NT_STATUS_UNSUCCESSFUL; - } - memset(vfs->data, c, size); - vfs->data_size = size; - return NT_STATUS_OK; -} - -static NTSTATUS cmd_show_data(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - size_t offset; - size_t len; - if (argc != 1 && argc != 3) { - printf("Usage: showdata [ ]\n"); - return NT_STATUS_OK; - } - if (vfs->data == NULL || vfs->data_size == 0) { - printf("show_data: error=-1 (buffer empty)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (argc == 3) { - offset = atoi(argv[1]); - len = atoi(argv[2]); - } else { - offset = 0; - len = vfs->data_size; - } - if ((offset + len) > vfs->data_size) { - printf("show_data: error=-1 (not enough data in buffer)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - dump_data(0, (char *)(vfs->data) + offset, len); - return NT_STATUS_OK; -} - -static NTSTATUS cmd_connect(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - vfs->conn->vfs_ops.connect(vfs->conn, lp_servicename(vfs->conn->service), "vfstest"); - return NT_STATUS_OK; -} - -static NTSTATUS cmd_disconnect(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - vfs->conn->vfs_ops.disconnect(vfs->conn); - return NT_STATUS_OK; -} - -static NTSTATUS cmd_disk_free(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - SMB_BIG_UINT diskfree, bsize, dfree, dsize; - if (argc != 2) { - printf("Usage: disk_free \n"); - return NT_STATUS_OK; - } - - diskfree = vfs->conn->vfs_ops.disk_free(vfs->conn, argv[1], False, &bsize, &dfree, &dsize); - printf("disk_free: %ld, bsize = %ld, dfree = %ld, dsize = %ld\n", diskfree, bsize, dfree, dsize); - return NT_STATUS_OK; -} - - -static NTSTATUS cmd_opendir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - if (argc != 2) { - printf("Usage: opendir \n"); - return NT_STATUS_OK; - } - - vfs->currentdir = vfs->conn->vfs_ops.opendir(vfs->conn, argv[1]); - if (vfs->currentdir == NULL) { - printf("opendir error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("opendir: ok\n"); - return NT_STATUS_OK; -} - - -static NTSTATUS cmd_readdir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - struct dirent *dent; - - if (vfs->currentdir == NULL) { - printf("readdir: error=-1 (no open directory)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - dent = vfs->conn->vfs_ops.readdir(vfs->conn, vfs->currentdir); - if (dent == NULL) { - printf("readdir: NULL\n"); - return NT_STATUS_OK; - } - - printf("readdir: %s\n", dent->d_name); - return NT_STATUS_OK; -} - - -static NTSTATUS cmd_mkdir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_get_sec_desc(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - if (argc != 2) { - printf("Usage: mkdir \n"); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.mkdir(vfs->conn, argv[1], 00755) == -1) { - printf("mkdir error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("mkdir: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_closedir(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_set_sec_desc(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int ret; - - if (vfs->currentdir == NULL) { - printf("closedir: failure (no directory open)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - ret = vfs->conn->vfs_ops.closedir(vfs->conn, vfs->currentdir); - if (ret == -1) { - printf("closedir failure: %s\n", strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("closedir: ok\n"); - vfs->currentdir = NULL; - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_open(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int flags, fd; - mode_t mode; - char *flagstr; - - mode = 00400; - - if (argc < 3 || argc > 5) { - printf("Usage: open \n"); - printf(" flags: O = O_RDONLY\n"); - printf(" R = O_RDWR\n"); - printf(" W = O_WRONLY\n"); - printf(" C = O_CREAT\n"); - printf(" E = O_EXCL\n"); - printf(" T = O_TRUNC\n"); - printf(" A = O_APPEND\n"); - printf(" N = O_NONBLOCK/O_NDELAY\n"); -#ifdef O_SYNC - printf(" S = O_SYNC\n"); -#endif -#ifdef O_NOFOLLOW - printf(" F = O_NOFOLLOW\n"); -#endif - printf(" mode: see open.2\n"); - printf(" mode is ignored if C flag not present\n"); - printf(" mode defaults to 00400\n"); - return NT_STATUS_OK; - } - flags = 0; - flagstr = argv[2]; - while (*flagstr) { - switch (*flagstr) { - case 'O': - flags |= O_RDONLY; - break; - case 'R': - flags |= O_RDWR; - break; - case 'W': - flags |= O_WRONLY; - break; - case 'C': - flags |= O_CREAT; - break; - case 'E': - flags |= O_EXCL; - break; - case 'T': - flags |= O_TRUNC; - break; - case 'A': - flags |= O_APPEND; - break; - case 'N': - flags |= O_NONBLOCK; - break; -#ifdef O_SYNC - case 'S': - flags |= O_SYNC; - break; -#endif -#ifdef O_NOFOLLOW - case 'F': - flags |= O_NOFOLLOW; - break; -#endif - default: - printf("open: error=-1 (invalid flag!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - flagstr++; - } - if ((flags & O_CREAT) && argc == 4) { - if (sscanf(argv[3], "%o", &mode) == 0) { - printf("open: error=-1 (invalid mode!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - } - - fd = vfs->conn->vfs_ops.open(vfs->conn, argv[1], flags, mode); - if (fd == -1) { - printf("open: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - vfs->files[fd] = (struct files_struct *)malloc(sizeof(struct files_struct)); - vfs->files[fd]->fsp_name = strdup(argv[1]); - vfs->files[fd]->fd = fd; - vfs->files[fd]->conn = vfs->conn; - printf("open: fd=%d\n", fd); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_pathfunc(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int ret = -1; - - if (argc != 2) { - printf("Usage: %s \n", argv[0]); - return NT_STATUS_OK; - } - - if (strcmp("rmdir", argv[0]) == 0 ) { - ret = vfs->conn->vfs_ops.rmdir(vfs->conn, argv[1]); - } else if (strcmp("unlink", argv[0]) == 0 ) { - ret = vfs->conn->vfs_ops.unlink(vfs->conn, argv[1]); - } else if (strcmp("chdir", argv[0]) == 0 ) { - ret = vfs->conn->vfs_ops.chdir(vfs->conn, argv[1]); - } else { - printf("%s: error=%d (invalid function name!)\n", argv[0], errno); - return NT_STATUS_UNSUCCESSFUL; - } - - if (ret == -1) { - printf("%s: error=%d (%s)\n", argv[0], errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("%s: ok\n", argv[0]); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_close(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd, ret; - - if (argc != 2) { - printf("Usage: close \n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - if (vfs->files[fd] == NULL) { - printf("close: error=-1 (invalid file descriptor)\n"); - return NT_STATUS_OK; - } - - ret = vfs->conn->vfs_ops.close(vfs->files[fd], fd); - if (ret == -1 ) - printf("close: error=%d (%s)\n", errno, strerror(errno)); - else - printf("close: ok\n"); - - SAFE_FREE(vfs->files[fd]->fsp_name); - SAFE_FREE(vfs->files[fd]); - vfs->files[fd] = NULL; - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_read(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd; - size_t size, rsize; - - if (argc != 3) { - printf("Usage: read \n"); - return NT_STATUS_OK; - } - - /* do some error checking on these */ - fd = atoi(argv[1]); - size = atoi(argv[2]); - vfs->data = (char *)talloc(mem_ctx, size); - if (vfs->data == NULL) { - printf("read: error=-1 (not enough memory)"); - return NT_STATUS_UNSUCCESSFUL; - } - vfs->data_size = size; - - rsize = vfs->conn->vfs_ops.read(vfs->files[fd], fd, vfs->data, size); - if (rsize == -1) { - printf("read: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("read: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_write(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_domain(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd, size, wsize; - - if (argc != 3) { - printf("Usage: write \n"); - return NT_STATUS_OK; - } - - /* some error checking should go here */ - fd = atoi(argv[1]); - size = atoi(argv[2]); - if (vfs->data == NULL) { - printf("write: error=-1 (buffer empty, please populate it before writing)"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (vfs->data_size < size) { - printf("write: error=-1 (buffer too small, please put some more data in)"); - return NT_STATUS_UNSUCCESSFUL; - } - - wsize = vfs->conn->vfs_ops.write(vfs->files[fd], fd, vfs->data, size); - - if (wsize == -1) { - printf("write: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("write: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_lseek(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_show_domain(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd, offset, whence; - SMB_OFF_T pos; - - if (argc != 4) { - printf("Usage: lseek \n...where whence is 1 => SEEK_SET, 2 => SEEK_CUR, 3 => SEEK_END\n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - offset = atoi(argv[2]); - whence = atoi(argv[3]); - switch (whence) { - case 1: whence = SEEK_SET; break; - case 2: whence = SEEK_CUR; break; - default: whence = SEEK_END; - } - - pos = vfs->conn->vfs_ops.lseek(vfs->files[fd], fd, offset, whence); - if (pos == (SMB_OFF_T)-1) { - printf("lseek: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("lseek: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_rename(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_create_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int ret; - if (argc != 3) { - printf("Usage: rename \n"); - return NT_STATUS_OK; - } - - ret = vfs->conn->vfs_ops.rename(vfs->conn, argv[1], argv[2]); - if (ret == -1) { - printf("rename: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("rename: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_fsync(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int ret, fd; - if (argc != 2) { - printf("Usage: fsync \n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - ret = vfs->conn->vfs_ops.fsync(vfs->files[fd], fd); - if (ret == -1) { - printf("fsync: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("fsync: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_stat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_delete_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int ret; - char *user; - char *group; - struct passwd *pwd; - struct group *grp; - SMB_STRUCT_STAT st; - - if (argc != 2) { - printf("Usage: stat \n"); - return NT_STATUS_OK; - } - - ret = vfs->conn->vfs_ops.stat(vfs->conn, argv[1], &st); - if (ret == -1) { - printf("stat: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - pwd = sys_getpwuid(st.st_uid); - if (pwd != NULL) user = strdup(pwd->pw_name); - else user = null_string; - grp = sys_getgrgid(st.st_gid); - if (grp != NULL) group = strdup(grp->gr_name); - else group = null_string; - - printf("stat: ok\n"); - printf(" File: %s", argv[1]); - if (S_ISREG(st.st_mode)) printf(" Regular File\n"); - else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); - else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); - else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); - else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); - else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); - else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); - printf(" Size: %10d", st.st_size); - printf(" Blocks: %9d", st.st_blocks); - printf(" IO Block: %d\n", st.st_blksize); - printf(" Device: 0x%10x", st.st_dev); - printf(" Inode: %10d", st.st_ino); - printf(" Links: %10d\n", st.st_nlink); - printf(" Access: %05o", (st.st_mode) & 007777); - printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); - printf(" Access: %s", ctime(&(st.st_atime))); - printf(" Modify: %s", ctime(&(st.st_mtime))); - printf(" Change: %s", ctime(&(st.st_ctime))); - if (user != null_string) SAFE_FREE(user); - if (group!= null_string) SAFE_FREE(group); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_fstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_enum_accounts(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd; - char *user; - char *group; - struct passwd *pwd; - struct group *grp; - SMB_STRUCT_STAT st; - - if (argc != 2) { - printf("Usage: fstat \n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - if (fd < 0 || fd > 1024) { - printf("fstat: error=%d (file descriptor out of range)\n", EBADF); - return NT_STATUS_OK; - } - - if (vfs->files[fd] == NULL) { - printf("fstat: error=%d (invalid file descriptor)\n", EBADF); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.fstat(vfs->files[fd], fd, &st) == -1) { - printf("fstat: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - pwd = sys_getpwuid(st.st_uid); - if (pwd != NULL) user = strdup(pwd->pw_name); - else user = null_string; - grp = sys_getgrgid(st.st_gid); - if (grp != NULL) group = strdup(grp->gr_name); - else group = null_string; - - printf("fstat: ok\n"); - if (S_ISREG(st.st_mode)) printf(" Regular File\n"); - else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); - else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); - else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); - else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); - else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); - else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); - printf(" Size: %10d", st.st_size); - printf(" Blocks: %9d", st.st_blocks); - printf(" IO Block: %d\n", st.st_blksize); - printf(" Device: 0x%10x", st.st_dev); - printf(" Inode: %10d", st.st_ino); - printf(" Links: %10d\n", st.st_nlink); - printf(" Access: %05o", (st.st_mode) & 007777); - printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); - printf(" Access: %s", ctime(&(st.st_atime))); - printf(" Modify: %s", ctime(&(st.st_mtime))); - printf(" Change: %s", ctime(&(st.st_ctime))); - if (user != null_string) SAFE_FREE(user); - if (group!= null_string) SAFE_FREE(group); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_lstat(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - char *user; - char *group; - struct passwd *pwd; - struct group *grp; - SMB_STRUCT_STAT st; - - if (argc != 2) { - printf("Usage: lstat \n"); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.lstat(vfs->conn, argv[1], &st) == -1) { - printf("lstat: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - pwd = sys_getpwuid(st.st_uid); - if (pwd != NULL) user = strdup(pwd->pw_name); - else user = null_string; - grp = sys_getgrgid(st.st_gid); - if (grp != NULL) group = strdup(grp->gr_name); - else group = null_string; - - printf("lstat: ok\n"); - if (S_ISREG(st.st_mode)) printf(" Regular File\n"); - else if (S_ISDIR(st.st_mode)) printf(" Directory\n"); - else if (S_ISCHR(st.st_mode)) printf(" Character Device\n"); - else if (S_ISBLK(st.st_mode)) printf(" Block Device\n"); - else if (S_ISFIFO(st.st_mode)) printf(" Fifo\n"); - else if (S_ISLNK(st.st_mode)) printf(" Symbolic Link\n"); - else if (S_ISSOCK(st.st_mode)) printf(" Socket\n"); - printf(" Size: %10d", st.st_size); - printf(" Blocks: %9d", st.st_blocks); - printf(" IO Block: %d\n", st.st_blksize); - printf(" Device: 0x%10x", st.st_dev); - printf(" Inode: %10d", st.st_ino); - printf(" Links: %10d\n", st.st_nlink); - printf(" Access: %05o", (st.st_mode) & 007777); - printf(" Uid: %5d/%.16s Gid: %5d/%.16s\n", st.st_uid, user, st.st_gid, group); - printf(" Access: %s", ctime(&(st.st_atime))); - printf(" Modify: %s", ctime(&(st.st_mtime))); - printf(" Change: %s", ctime(&(st.st_ctime))); - if (user != null_string) SAFE_FREE(user); - if (group!= null_string) SAFE_FREE(group); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_chmod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - mode_t mode; - if (argc != 3) { - printf("Usage: chmod \n"); - return NT_STATUS_OK; - } - - mode = atoi(argv[2]); - if (vfs->conn->vfs_ops.chmod(vfs->conn, argv[1], mode) == -1) { - printf("chmod: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("chmod: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_fchmod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_create_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd; - mode_t mode; - if (argc != 3) { - printf("Usage: fchmod \n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - mode = atoi(argv[2]); - if (fd < 0 || fd > 1024) { - printf("fchmod: error=%d (file descriptor out of range)\n", EBADF); - return NT_STATUS_OK; - } - if (vfs->files[fd] == NULL) { - printf("fchmod: error=%d (invalid file descriptor)\n", EBADF); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.fchmod(vfs->files[fd], fd, mode) == -1) { - printf("fchmod: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("fchmod: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_chown(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - uid_t uid; - gid_t gid; - if (argc != 4) { - printf("Usage: chown \n"); - return NT_STATUS_OK; - } - - uid = atoi(argv[2]); - gid = atoi(argv[3]); - if (vfs->conn->vfs_ops.chown(vfs->conn, argv[1], uid, gid) == -1) { - printf("chown: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("chown: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_fchown(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_delete_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - uid_t uid; - gid_t gid; - int fd; - if (argc != 4) { - printf("Usage: fchown \n"); - return NT_STATUS_OK; - } - - uid = atoi(argv[2]); - gid = atoi(argv[3]); - fd = atoi(argv[1]); - if (fd < 0 || fd > 1024) { - printf("fchown: faliure=%d (file descriptor out of range)\n", EBADF); - return NT_STATUS_OK; - } - if (vfs->files[fd] == NULL) { - printf("fchown: error=%d (invalid file descriptor)\n", EBADF); - return NT_STATUS_OK; - } - if (vfs->conn->vfs_ops.fchown(vfs->files[fd], fd, uid, gid) == -1) { - printf("fchown error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("fchown: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } - -static NTSTATUS cmd_getwd(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_enum_groups(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - char buf[PATH_MAX]; - if (vfs->conn->vfs_ops.getwd(vfs->conn, buf) == NULL) { - printf("getwd: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("getwd: %s\n", buf); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_utime(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - struct utimbuf times; - if (argc != 4) { - printf("Usage: utime \n"); - return NT_STATUS_OK; - } - times.actime = atoi(argv[2]); - times.modtime = atoi(argv[3]); - if (vfs->conn->vfs_ops.utime(vfs->conn, argv[1], ×) != 0) { - printf("utime: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("utime: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_ftruncate(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - int fd; - SMB_OFF_T off; - if (argc != 3) { - printf("Usage: ftruncate \n"); - return NT_STATUS_OK; - } - - fd = atoi(argv[1]); - off = atoi(argv[2]); - if (fd < 0 || fd > 1024) { - printf("ftruncate: error=%d (file descriptor out of range)\n", EBADF); - return NT_STATUS_OK; - } - if (vfs->files[fd] == NULL) { - printf("ftruncate: error=%d (invalid file descriptor)\n", EBADF); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.ftruncate(vfs->files[fd], fd, off) == -1) { - printf("ftruncate: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("ftruncate: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lock(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_add_member(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - BOOL ret; - int fd; - int op; - long offset; - long count; - int type; - char *typestr; - - if (argc != 6) { - printf("Usage: lock \n"); - printf(" ops: G = F_GETLK\n"); - printf(" S = F_SETLK\n"); - printf(" W = F_SETLKW\n"); - printf(" type: R = F_RDLCK\n"); - printf(" W = F_WRLCK\n"); - printf(" U = F_UNLCK\n"); - return NT_STATUS_OK; - } - - if (sscanf(argv[1], "%d", &fd) == 0) { - printf("lock: error=-1 (error parsing fd)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - op = 0; - switch (*argv[2]) { - case 'G': - op = F_GETLK; - break; - case 'S': - op = F_SETLK; - break; - case 'W': - op = F_SETLKW; - break; - default: - printf("lock: error=-1 (invalid op flag!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (sscanf(argv[3], "%ld", &offset) == 0) { - printf("lock: error=-1 (error parsing fd)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (sscanf(argv[4], "%ld", &count) == 0) { - printf("lock: error=-1 (error parsing fd)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - type = 0; - typestr = argv[5]; - while(*typestr) { - switch (*typestr) { - case 'R': - type |= F_RDLCK; - break; - case 'W': - type |= F_WRLCK; - break; - case 'U': - type |= F_UNLCK; - break; - default: - printf("lock: error=-1 (invalid type flag!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - typestr++; - } - - printf("lock: debug lock(fd=%d, op=%d, offset=%ld, count=%ld, type=%d))\n", fd, op, offset, count, type); - - if ((ret = vfs->conn->vfs_ops.lock(vfs->files[fd], fd, op, offset, count, type)) == False) { - printf("lock: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("lock: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_symlink(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_del_member(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - if (argc != 3) { - printf("Usage: symlink \n"); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.symlink(vfs->conn, argv[1], argv[2]) == -1) { - printf("symlink: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("symlink: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_readlink(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_enum(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - char buffer[PATH_MAX]; - int size; - - if (argc != 2) { - printf("Usage: readlink \n"); - return NT_STATUS_OK; - } - - if ((size = vfs->conn->vfs_ops.readlink(vfs->conn, argv[1], buffer, PATH_MAX)) == -1) { - printf("readlink: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - buffer[size] = '\0'; - printf("readlink: %s\n", buffer); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_link(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_get_sid_groups(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) { - if (argc != 3) { - printf("Usage: link \n"); - return NT_STATUS_OK; - } - - if (vfs->conn->vfs_ops.link(vfs->conn, argv[1], argv[2]) == -1) { - printf("link: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("link: ok\n"); - return NT_STATUS_OK; -} - -static NTSTATUS cmd_mknod(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - mode_t mode; - SMB_DEV_T dev; - - if (argc != 4) { - printf("Usage: mknod \n"); - printf(" mode is octal\n"); - printf(" dev is hex\n"); - return NT_STATUS_OK; - } - - if (sscanf(argv[2], "%o", &mode) == 0) { - printf("open: error=-1 (invalid mode!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (sscanf(argv[3], "%x", &dev) == 0) { - printf("open: error=-1 (invalid dev!)\n"); - return NT_STATUS_UNSUCCESSFUL; - } - - if (vfs->conn->vfs_ops.mknod(vfs->conn, argv[1], mode, dev) == -1) { - printf("mknod: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } - - printf("mknod: ok\n"); - return NT_STATUS_OK; + return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_realpath(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv) -{ - char respath[PATH_MAX]; - - if (argc != 2) { - printf("Usage: realpath \n"); - return NT_STATUS_OK; - } +struct cmd_set sam_general_commands[] = { - if (vfs->conn->vfs_ops.realpath(vfs->conn, argv[1], respath) == NULL) { - printf("realpath: error=%d (%s)\n", errno, strerror(errno)); - return NT_STATUS_UNSUCCESSFUL; - } + { "General SAM Commands" }, - printf("realpath: ok\n"); - return NT_STATUS_OK; -} - -#endif + { "load", cmd_load_module, "Load a module", "load " }, + { "get_sec_desc", cmd_get_sec_desc, "Get security descriptor info", "get_sec_desc " }, + { "set_sec_desc", cmd_set_sec_desc, "Set security descriptor info", "set_sec_desc " }, + { "lookup_sid", cmd_lookup_sid, "Lookup type of specified SID", "lookup_sid " }, + { "lookup_name", cmd_lookup_name, "Lookup type of specified name", "lookup_name " }, + { NULL } +}; -struct cmd_set sam_commands[] = { +struct cmd_set sam_domain_commands[] = { + { "Domain Commands" }, + { "update_domain", cmd_update_domain, "Update domain information", "update_domain [domain-options] domain-name | domain-sid" }, + { "show_domain", cmd_show_domain, "Show domain information", "show_domain domain-sid | domain-name" }, + { NULL } +}; - { "SAM Commands" }, +struct cmd_set sam_account_commands[] = { + { "Account Commands" }, + { "create_account", cmd_create_account, "Create a new account with specified properties", "create_account [account-options]" }, + { "update_account", cmd_update_account, "Update an existing account", "update_account [account-options] account-sid | account-name" }, + { "delete_account", cmd_delete_account, "Delete an account", "delete_account account-sid | account-name" }, + { "enum_accounts", cmd_enum_accounts, "Enumerate all accounts", "enum_accounts " }, + { "lookup_account", cmd_lookup_account, "Lookup an account by either sid or name", "lookup_account account-sid | account-name" }, + { "lookup_account_sid", cmd_lookup_account_sid, "Lookup an account by sid", "lookup_account_sid account-sid" }, + { "lookup_account_name", cmd_lookup_account_name, "Lookup an account by name", "lookup_account_name account-name" }, + { NULL } +}; - { "load", cmd_load_module, "Load a module", "load " }, +struct cmd_set sam_group_commands[] = { + { "Group Commands" }, + { "create_group", cmd_create_group, "Create a new group", "create_group [group-opts]" }, + { "update_group", cmd_update_group, "Update an existing group", "update_group [group-opts] group-name | group-sid" }, + { "delete_group", cmd_delete_group, "Delete an existing group", "delete_group group-name | group-sid" }, + { "enum_groups", cmd_enum_groups, "Enumerate all groups", "enum_groups " }, + { "lookup_group", cmd_lookup_group, "Lookup a group by SID or name", "lookup_group group-sid | group-name" }, + { "lookup_group_sid", cmd_lookup_group_sid, "Lookup a group by SID", "lookup_group_sid " }, + { "lookup_group_name", cmd_lookup_group_name, "Lookup a group by name", "lookup_group_name " }, + { "group_add_member", cmd_group_add_member, "Add group member to group", "group_add_member " }, + { "group_del_member", cmd_group_del_member, "Delete group member from group", "group_del_member " }, + { "group_enum", cmd_group_enum, "Enumerate all members of specified group", "group_enum group-sid | group-name" }, + + { "get_sid_groups", cmd_get_sid_groups, "Get a list of groups specified sid is a member of", "group_enum " }, { NULL } }; diff --git a/source3/torture/samtest.c b/source3/torture/samtest.c index 3ac65ef0df..0275e0f002 100644 --- a/source3/torture/samtest.c +++ b/source3/torture/samtest.c @@ -100,7 +100,7 @@ static NTSTATUS cmd_help(struct sam_context *sam, TALLOC_CTX *mem_ctx, while(tmp_set->name) { - printf("%15s\t\t%s\n", tmp_set->name, + printf("%20s\t%s\n", tmp_set->name, tmp_set->description ? tmp_set->description: ""); @@ -157,10 +157,16 @@ static struct cmd_set separator_command[] = { /*extern struct cmd_set sam_commands[];*/ -extern struct cmd_set sam_commands[]; +extern struct cmd_set sam_general_commands[]; +extern struct cmd_set sam_domain_commands[]; +extern struct cmd_set sam_account_commands[]; +extern struct cmd_set sam_group_commands[]; static struct cmd_set *samtest_command_list[] = { samtest_commands, - sam_commands, + sam_general_commands, + sam_domain_commands, + sam_account_commands, + sam_group_commands, NULL }; -- cgit From e633122fae47867f803422e75265864181839a96 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 20 Sep 2002 19:09:28 +0000 Subject: "@" is valid in NetBIOS domain names. Jeremy. (This used to be commit 5c4857d8e00162fc43a0f2e3a335b441bad743bd) --- source3/smbd/sesssetup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index 3dc9fe9208..09288ad44d 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -734,7 +734,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf, /* don't allow for weird usernames or domains */ alpha_strcpy(user, user, ". _-$", sizeof(user)); - alpha_strcpy(domain, domain, ". _-", sizeof(domain)); + alpha_strcpy(domain, domain, ". _-@", sizeof(domain)); if (strstr(user, "..") || strstr(domain,"..")) { return ERROR_NT(NT_STATUS_LOGON_FAILURE); } -- cgit From c48bfd8ce840f81e00a2373ee19668208a62a404 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 21 Sep 2002 01:30:08 +0000 Subject: enable 'map hidden' and 'create mask' to allow the new OPEN test to succeed (This used to be commit f1058012b9662f0f9ce62ea05833e78a411f80b9) --- testsuite/build_farm/basicsmb.smb.conf.template | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testsuite/build_farm/basicsmb.smb.conf.template b/testsuite/build_farm/basicsmb.smb.conf.template index ed2e3dee61..9b8483db16 100644 --- a/testsuite/build_farm/basicsmb.smb.conf.template +++ b/testsuite/build_farm/basicsmb.smb.conf.template @@ -20,6 +20,8 @@ passdb backend = smbpasswd_nua non unix account range = 10000-200000 + map hidden = yes + create mask = 0777 [test] path = PREFIX/testdir -- cgit From 515c1d42eec8d7c0a5eabeb72b274f5446012945 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sat, 21 Sep 2002 08:53:05 +0000 Subject: Merge back Richard's FreeBSD sendfile fixes. Jeremy. (This used to be commit f4845b0213aec58e0f489eba5653aa7b3855610f) --- source3/configure | 748 ++++++++++++++++++++++++------------------------- source3/configure.in | 20 +- source3/lib/sendfile.c | 10 +- 3 files changed, 390 insertions(+), 388 deletions(-) diff --git a/source3/configure b/source3/configure index 7dc099e913..994d830cdd 100755 --- a/source3/configure +++ b/source3/configure @@ -2918,12 +2918,12 @@ else #line 2919 "configure" #include "confdefs.h" #include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(int)); - exit(0); + return(0); } EOF if { (eval echo configure:2930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2957,12 +2957,12 @@ else #line 2958 "configure" #include "confdefs.h" #include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(long)); - exit(0); + return(0); } EOF if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -2996,12 +2996,12 @@ else #line 2997 "configure" #include "confdefs.h" #include -main() +int main() { FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); + if (!f) return(1); fprintf(f, "%d\n", sizeof(short)); - exit(0); + return(0); } EOF if { (eval echo configure:3008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null @@ -8928,17 +8928,7 @@ EOF SONAMEFLAG="-Wl,-h," PICFLAG="-KPIC" # Is this correct for SunOS ;; - *freebsd*) BLDSHARED="true" - LDSHFLAGS="-shared" - DYNEXP="-Wl,--export-dynamic" - SONAMEFLAG="-Wl,-soname," - PICFLAG="-fPIC -DPIC" - cat >> confdefs.h <<\EOF -#define STAT_ST_BLOCKSIZE 512 -EOF - - ;; - *openbsd*) BLDSHARED="true" + *bsd*) BLDSHARED="true" LDSHFLAGS="-shared" DYNEXP="-Wl,-Bdynamic" SONAMEFLAG="-Wl,-soname," @@ -9046,7 +9036,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9050: checking for $ac_word" >&5 +echo "configure:9040: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9103,17 +9093,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9107: checking linker flags for shared libraries" >&5 +echo "configure:9097: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9110: checking compiler flags for position-independent code" >&5 +echo "configure:9100: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9117: checking whether building shared libraries actually works" >&5 +echo "configure:9107: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9144,7 +9134,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9148: checking for long long" >&5 +echo "configure:9138: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9153,12 +9143,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9185,20 +9175,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9189: checking for LL suffix on long long integers" >&5 +echo "configure:9179: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9220,7 +9210,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9224: checking for 64 bit off_t" >&5 +echo "configure:9214: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9229,13 +9219,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9258,7 +9248,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9262: checking for off64_t" >&5 +echo "configure:9252: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9267,7 +9257,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9300,7 +9290,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9304: checking for 64 bit ino_t" >&5 +echo "configure:9294: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9309,13 +9299,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9338,7 +9328,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9342: checking for ino64_t" >&5 +echo "configure:9332: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9347,7 +9337,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9380,7 +9370,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9384: checking for dev64_t" >&5 +echo "configure:9374: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9389,7 +9379,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9422,13 +9412,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9426: checking for struct dirent64" >&5 +echo "configure:9416: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9434: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9461,7 +9451,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9465: checking for major macro" >&5 +echo "configure:9455: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9470,7 +9460,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9502,7 +9492,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9506: checking for minor macro" >&5 +echo "configure:9496: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9511,7 +9501,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9543,7 +9533,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9547: checking for unsigned char" >&5 +echo "configure:9537: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9552,12 +9542,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9580,13 +9570,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9584: checking for sin_len in sock" >&5 +echo "configure:9574: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9595,7 +9585,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9599: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9616,13 +9606,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9620: checking whether seekdir returns void" >&5 +echo "configure:9610: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9631,7 +9621,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9652,20 +9642,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9656: checking for __FILE__ macro" >&5 +echo "configure:9646: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9669: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9686,20 +9676,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9690: checking for __FUNCTION__ macro" >&5 +echo "configure:9680: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9703: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9693: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9720,7 +9710,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9724: checking if gettimeofday takes tz argument" >&5 +echo "configure:9714: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9729,14 +9719,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9759,13 +9749,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9763: checking for __va_copy" >&5 +echo "configure:9753: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9773,7 +9763,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9794,7 +9784,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9798: checking for C99 vsnprintf" >&5 +echo "configure:9788: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9803,7 +9793,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9830,7 +9820,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9853,7 +9843,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9857: checking for broken readdir" >&5 +echo "configure:9847: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9862,7 +9852,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9870,7 +9860,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9893,13 +9883,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9897: checking for utimbuf" >&5 +echo "configure:9887: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9907,7 +9897,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9911: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9931,12 +9921,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9935: checking for $ac_func" >&5 +echo "configure:9925: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9985,13 +9975,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9989: checking for ut_name in utmp" >&5 +echo "configure:9979: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9999,7 +9989,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10020,13 +10010,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10024: checking for ut_user in utmp" >&5 +echo "configure:10014: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10034,7 +10024,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10038: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10055,13 +10045,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10059: checking for ut_id in utmp" >&5 +echo "configure:10049: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10069,7 +10059,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10090,13 +10080,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10094: checking for ut_host in utmp" >&5 +echo "configure:10084: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10104,7 +10094,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10108: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10125,13 +10115,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10129: checking for ut_time in utmp" >&5 +echo "configure:10119: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10139,7 +10129,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10160,13 +10150,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10164: checking for ut_tv in utmp" >&5 +echo "configure:10154: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10174,7 +10164,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10195,13 +10185,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10199: checking for ut_type in utmp" >&5 +echo "configure:10189: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10209,7 +10199,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10213: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10230,13 +10220,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10234: checking for ut_pid in utmp" >&5 +echo "configure:10224: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10244,7 +10234,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10248: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10238: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10265,13 +10255,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10269: checking for ut_exit in utmp" >&5 +echo "configure:10259: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10279,7 +10269,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10300,13 +10290,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10304: checking for ut_addr in utmp" >&5 +echo "configure:10294: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10314,7 +10304,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10318: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10336,13 +10326,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10340: checking whether pututline returns pointer" >&5 +echo "configure:10330: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10350,7 +10340,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10372,13 +10362,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10376: checking for ut_syslen in utmpx" >&5 +echo "configure:10366: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10386,7 +10376,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10410,7 +10400,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10414: checking whether to use libiconv" >&5 +echo "configure:10404: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10423,7 +10413,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10427: checking for iconv_open in -liconv" >&5 +echo "configure:10417: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10431,7 +10421,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10485,7 +10475,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10489: checking for working iconv" >&5 +echo "configure:10479: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10494,7 +10484,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10505,7 +10495,7 @@ main() { } EOF -if { (eval echo configure:10509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10529,7 +10519,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10533: checking for Linux kernel oplocks" >&5 +echo "configure:10523: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10538,7 +10528,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10552,7 +10542,7 @@ main() { } EOF -if { (eval echo configure:10556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10575,7 +10565,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10579: checking for kernel change notify support" >&5 +echo "configure:10569: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10584,7 +10574,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10598,7 +10588,7 @@ main() { } EOF -if { (eval echo configure:10602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10621,7 +10611,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10625: checking for kernel share modes" >&5 +echo "configure:10615: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10630,7 +10620,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10646,7 +10636,7 @@ main() { } EOF -if { (eval echo configure:10650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10672,13 +10662,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10676: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10666: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10686,7 +10676,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10690: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10707,7 +10697,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10711: checking for irix specific capabilities" >&5 +echo "configure:10701: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10716,7 +10706,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10731,7 +10721,7 @@ main() { } EOF -if { (eval echo configure:10735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10759,13 +10749,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10763: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10753: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10775,7 +10765,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10796,13 +10786,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10800: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10790: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10812,7 +10802,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10833,13 +10823,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10837: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10827: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10849,7 +10839,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10870,13 +10860,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10874: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10864: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10886,7 +10876,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10890: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10908,13 +10898,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10912: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10902: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10928,7 +10918,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10949,16 +10939,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10953: checking for test routines" >&5 +echo "configure:10943: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10972,7 +10962,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10976: checking for ftruncate extend" >&5 +echo "configure:10966: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10981,11 +10971,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -11008,7 +10998,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11012: checking for AF_LOCAL socket support" >&5 +echo "configure:11002: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11017,11 +11007,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11015: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11045,7 +11035,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11049: checking for broken getgroups" >&5 +echo "configure:11039: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11054,11 +11044,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11052: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11081,7 +11071,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11085: checking whether getpass should be replaced" >&5 +echo "configure:11075: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11089,7 +11079,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11125,7 +11115,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11129: checking for broken inet_ntoa" >&5 +echo "configure:11119: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11134,7 +11124,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11148,7 +11138,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11171,7 +11161,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11175: checking for secure mkstemp" >&5 +echo "configure:11165: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11180,7 +11170,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11197,7 +11187,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11220,7 +11210,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11224: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11214: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11229,12 +11219,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11257,7 +11247,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11261: checking for root" >&5 +echo "configure:11251: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11266,11 +11256,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11298,7 +11288,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11302: checking for iface AIX" >&5 +echo "configure:11292: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11307,7 +11297,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11339,7 +11329,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11343: checking for iface ifconf" >&5 +echo "configure:11333: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11348,7 +11338,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11381,7 +11371,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11385: checking for iface ifreq" >&5 +echo "configure:11375: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11390,7 +11380,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11427,7 +11417,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11431: checking for setresuid" >&5 +echo "configure:11421: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11436,7 +11426,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11470,7 +11460,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11474: checking for setreuid" >&5 +echo "configure:11464: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11479,7 +11469,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11512,7 +11502,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11516: checking for seteuid" >&5 +echo "configure:11506: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11521,7 +11511,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11554,7 +11544,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11558: checking for setuidx" >&5 +echo "configure:11548: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11563,7 +11553,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11596,7 +11586,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11600: checking for working mmap" >&5 +echo "configure:11590: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11605,11 +11595,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11632,7 +11622,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11636: checking for ftruncate needs root" >&5 +echo "configure:11626: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11641,11 +11631,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11668,7 +11658,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11672: checking for fcntl locking" >&5 +echo "configure:11662: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11677,11 +11667,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11704,7 +11694,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11708: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11698: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11713,11 +11703,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11742,7 +11732,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11746: checking for 64 bit fcntl locking" >&5 +echo "configure:11736: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11751,7 +11741,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11800,13 +11790,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11804: checking for st_blocks in struct stat" >&5 +echo "configure:11794: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11815,7 +11805,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11809: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11836,13 +11826,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11840: checking for st_blksize in struct stat" >&5 +echo "configure:11830: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11851,7 +11841,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11855: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11874,13 +11864,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11878: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11868: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11917,13 +11907,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11921: checking for broken nisplus include files" >&5 +echo "configure:11911: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11933,7 +11923,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11937: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11957,7 +11947,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11961: checking whether to use smbwrapper" >&5 +echo "configure:11951: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -12004,7 +11994,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12008: checking whether to use AFS clear-text auth" >&5 +echo "configure:11998: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12030,7 +12020,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12034: checking whether to use DFS clear-text auth" >&5 +echo "configure:12024: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12057,7 +12047,7 @@ fi with_ads_support=yes echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 -echo "configure:12061: checking whether to use Active Directory" >&5 +echo "configure:12051: checking whether to use Active Directory" >&5 # Check whether --with-ads or --without-ads was given. if test "${with_ads+set}" = set; then @@ -12085,7 +12075,7 @@ if test x"$with_ads_support" = x"yes"; then # check for location of Kerberos 5 install FOUND_KRB5=0 echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12089: checking for kerberos 5 install path" >&5 +echo "configure:12079: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12113,7 +12103,7 @@ if $FOUND_KRB5 = 0 ; then ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12117: checking for /usr/kerberos" >&5 +echo "configure:12107: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12132,17 +12122,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12136: checking for $ac_hdr" >&5 +echo "configure:12126: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12136: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12175,17 +12165,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12179: checking for $ac_hdr" >&5 +echo "configure:12169: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12189: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12215,7 +12205,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12219: checking for _et_list in -lcom_err" >&5 +echo "configure:12209: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12223,7 +12213,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12255,7 +12245,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12259: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12249: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12263,7 +12253,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12299,7 +12289,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12303: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12293: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12307,7 +12297,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12346,7 +12336,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12350: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12340: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12354,7 +12344,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12396,7 +12386,7 @@ fi with_ldap_support=yes echo $ac_n "checking whether to use LDAP""... $ac_c" 1>&6 -echo "configure:12400: checking whether to use LDAP" >&5 +echo "configure:12390: checking whether to use LDAP" >&5 # Check whether --with-ldap or --without-ldap was given. if test "${with_ldap+set}" = set; then @@ -12417,7 +12407,7 @@ if test x"$with_ldap_support" = x"yes"; then # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12421: checking for ber_scanf in -llber" >&5 +echo "configure:12411: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12425,7 +12415,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12461,7 +12451,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12465: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12455: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12469,7 +12459,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12511,12 +12501,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12515: checking for $ac_func" >&5 +echo "configure:12505: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12564,13 +12554,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12568: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12558: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12579,7 +12569,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12583: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12602,7 +12592,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12606: checking whether to use AUTOMOUNT" >&5 +echo "configure:12596: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12627,7 +12617,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12631: checking whether to use SMBMOUNT" >&5 +echo "configure:12621: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12664,7 +12654,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12668: checking whether to use PAM" >&5 +echo "configure:12658: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12690,7 +12680,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12694: checking for pam_get_data in -lpam" >&5 +echo "configure:12684: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12698,7 +12688,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12736,7 +12726,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12740: checking whether to use pam_smbpass" >&5 +echo "configure:12730: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12774,12 +12764,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12778: checking for $ac_func" >&5 +echo "configure:12768: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12828,7 +12818,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12832: checking for crypt in -lcrypt" >&5 +echo "configure:12822: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12836,7 +12826,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12882,7 +12872,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12886: checking for a crypt that needs truncated salt" >&5 +echo "configure:12876: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12891,11 +12881,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12921,7 +12911,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12925: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12915: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12953,7 +12943,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12957: checking whether to use TDB SAM database" >&5 +echo "configure:12947: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12978,7 +12968,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12982: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12972: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -13009,7 +12999,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:13013: checking whether to use NISPLUS_HOME" >&5 +echo "configure:13003: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -13034,7 +13024,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:13038: checking whether to use syslog logging" >&5 +echo "configure:13028: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -13059,7 +13049,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:13063: checking whether to use profiling" >&5 +echo "configure:13053: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13087,7 +13077,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13091: checking whether to support disk-quotas" >&5 +echo "configure:13081: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13098,13 +13088,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13102: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13092: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13116,7 +13106,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13110: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13165,7 +13155,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13169: checking whether to support utmp accounting" >&5 +echo "configure:13159: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13190,7 +13180,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13194: checking chosen man pages' language(s)" >&5 +echo "configure:13184: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13221,7 +13211,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13225: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13215: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13249,14 +13239,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13253: checking how to get filesystem space usage" >&5 +echo "configure:13243: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13260: checking statvfs64 function (SVR4)" >&5 +echo "configure:13250: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13264,7 +13254,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13311,12 +13301,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13315: checking statvfs function (SVR4)" >&5 +echo "configure:13305: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13324,7 +13314,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13349,7 +13339,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13353: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13343: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13357,7 +13347,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13370,7 +13360,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13397,7 +13387,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13401: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13391: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13405,7 +13395,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13451,7 +13441,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13455: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13445: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13459,7 +13449,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13469,7 +13459,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13496,7 +13486,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13500: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13490: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13504,7 +13494,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13520,7 +13510,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13547,7 +13537,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13551: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13541: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13555,7 +13545,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13575,7 +13565,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13608,9 +13598,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13612: checking if large file support can be enabled" >&5 +echo "configure:13602: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13688,7 +13678,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13692: checking whether to support ACLs" >&5 +echo "configure:13682: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13741,7 +13731,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13745: checking for acl_get_file in -lacl" >&5 +echo "configure:13735: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13749,7 +13739,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13788,13 +13778,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13792: checking for ACL support" >&5 +echo "configure:13782: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13802,7 +13792,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13822,13 +13812,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13826: checking for acl_get_perm_np" >&5 +echo "configure:13816: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13836,7 +13826,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13881,7 +13871,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13885: checking whether to support sendfile" >&5 +echo "configure:13875: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13891,13 +13881,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13895: checking for linux sendfile64 support" >&5 +echo "configure:13885: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13909,7 +13899,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13924,13 +13914,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13928: checking for linux sendfile support" >&5 +echo "configure:13918: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13942,7 +13932,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13958,13 +13948,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13962: checking for broken linux sendfile support" >&5 +echo "configure:13952: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -14036,13 +14026,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:14040: checking for freebsd sendfile support" >&5 +echo "configure:14030: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14050,21 +14040,27 @@ else #include int main() { \ - int fromfd, tofd; +#define NULL (void *)0 + int fromfd, tofd, ret, total; off_t offset, nwritten; - struct sf_hdtr hdr; + struct sf_hdtr { + struct iovec *headers; + int hdr_cnt; + struct iovec *trailers; + int trl_cnt; + } hdr; struct iovec hdtrl; - hdr->headers = &hdtrl; - hdr->hdr_cnt = 1; - hdr->trailers = NULL; - hdr->trl_cnt = 0; + hdr.headers = &hdtrl; + hdr.hdr_cnt = 1; + hdr.trailers = NULL; + hdr.trl_cnt = 0; hdtrl.iov_base = NULL; hdtrl.iov_len = 0; - int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); ; return 0; } EOF -if { (eval echo configure:14068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14098,13 +14094,13 @@ EOF *hpux*) echo $ac_n "checking for hpux sendfile64 support""... $ac_c" 1>&6 -echo "configure:14102: checking for hpux sendfile64 support" >&5 +echo "configure:14098: checking for hpux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14124,7 +14120,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -14155,13 +14151,13 @@ EOF fi echo $ac_n "checking for hpux sendfile support""... $ac_c" 1>&6 -echo "configure:14159: checking for hpux sendfile support" >&5 +echo "configure:14155: checking for hpux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14181,7 +14177,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14234,7 +14230,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14238: checking whether to build winbind" >&5 +echo "configure:14234: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14330,20 +14326,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14334: checking whether struct passwd has pw_comment" >&5 +echo "configure:14330: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14347: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14368,20 +14364,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14372: checking whether struct passwd has pw_age" >&5 +echo "configure:14368: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14385: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14420,7 +14416,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14424: checking for poptGetContext in -lpopt" >&5 +echo "configure:14420: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14428,7 +14424,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14463,7 +14459,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14467: checking whether to use included popt" >&5 +echo "configure:14463: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14509,16 +14505,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14513: checking configure summary" >&5 +echo "configure:14509: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source3/configure.in b/source3/configure.in index 7ae8ac90d3..6b4f138747 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2777,17 +2777,23 @@ samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)] #include #include ], [\ - int fromfd, tofd; +#define NULL (void *)0 + int fromfd, tofd, ret, total; off_t offset, nwritten; - struct sf_hdtr hdr; + struct sf_hdtr { + struct iovec *headers; + int hdr_cnt; + struct iovec *trailers; + int trl_cnt; + } hdr; struct iovec hdtrl; - hdr->headers = &hdtrl; - hdr->hdr_cnt = 1; - hdr->trailers = NULL; - hdr->trl_cnt = 0; + hdr.headers = &hdtrl; + hdr.hdr_cnt = 1; + hdr.trailers = NULL; + hdr.trl_cnt = 0; hdtrl.iov_base = NULL; hdtrl.iov_len = 0; - int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); ], samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) diff --git a/source3/lib/sendfile.c b/source3/lib/sendfile.c index df6c1980d0..98a52608b8 100644 --- a/source3/lib/sendfile.c +++ b/source3/lib/sendfile.c @@ -233,10 +233,10 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of struct iovec hdtrl; size_t hdr_len = 0; - hdr->headers = &hdtrl; - hdr->hdr_cnt = 1; - hdr->trailers = NULL; - hdr->trl_cnt = 0; + hdr.headers = &hdtrl; + hdr.hdr_cnt = 1; + hdr.trailers = NULL; + hdr.trl_cnt = 0; /* Set up the header iovec. */ if (header) { @@ -274,7 +274,7 @@ ssize_t sys_sendfile(int tofd, int fromfd, const DATA_BLOB *header, SMB_OFF_T of * We change nwritten to be the number of file bytes written. */ - if (hdtrl[0].iov_base && hdtrl.iov_len) { + if (hdtrl.iov_base && hdtrl.iov_len) { if (nwritten >= hdtrl.iov_len) { nwritten -= hdtrl.iov_len; hdtrl.iov_base = NULL; -- cgit From 9251be2afc79b0500e839fd6220c7a03a89eb169 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sat, 21 Sep 2002 14:14:40 +0000 Subject: Sorry for the new parameter, but I think to really reflect what's coming in via deltas, we need a way to set a user's primary group. Volker (This used to be commit 9f7a16acf1b1f3b100b85339aad8268254512e68) --- source3/groupdb/mapping.c | 24 +++++++++++++++++++++--- source3/param/loadparm.c | 3 +++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/source3/groupdb/mapping.c b/source3/groupdb/mapping.c index 70d6317a77..2c9c7f47ea 100644 --- a/source3/groupdb/mapping.c +++ b/source3/groupdb/mapping.c @@ -434,7 +434,7 @@ BOOL check_priv_in_privilege(PRIVILEGE_SET *priv_set, LUID_ATTR set) } /**************************************************************************** -remove a privilege to a privilege array +remove a privilege from a privilege array ****************************************************************************/ BOOL remove_privilege(PRIVILEGE_SET *priv_set, LUID_ATTR set) { @@ -1187,7 +1187,25 @@ int smb_delete_group(char *unix_group) } /**************************************************************************** - Create a UNIX group on demand. + Set a user's primary UNIX group. +****************************************************************************/ +int smb_set_primary_group(const char *unix_group, const char* unix_user) +{ + pstring add_script; + int ret; + + pstrcpy(add_script, lp_setprimarygroup_script()); + if (! *add_script) return -1; + all_string_sub(add_script, "%g", unix_group, sizeof(add_script)); + all_string_sub(add_script, "%u", unix_user, sizeof(add_script)); + ret = smbrun(add_script,NULL); + DEBUG(3,("smb_set_primary_group: " + "Running the command `%s' gave %d\n",add_script,ret)); + return ret; +} + +/**************************************************************************** + Add a user to a UNIX group. ****************************************************************************/ int smb_add_user_group(char *unix_group, char *unix_user) @@ -1205,7 +1223,7 @@ int smb_add_user_group(char *unix_group, char *unix_user) } /**************************************************************************** - Delete a UNIX group on demand. + Delete a user from a UNIX group ****************************************************************************/ int smb_delete_user_group(const char *unix_group, const char *unix_user) diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 67128c75d2..f95c03dcdb 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -140,6 +140,7 @@ typedef struct char *szDelGroupScript; char *szAddUserToGroupScript; char *szDelUserFromGroupScript; + char *szSetPrimaryGroupScript; char *szAddMachineScript; char *szShutdownScript; char *szAbortShutdownScript; @@ -927,6 +928,7 @@ static struct parm_struct parm_table[] = { {"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"set primary group script", P_STRING, P_GLOBAL, &Globals.szSetPrimaryGroupScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, @@ -1542,6 +1544,7 @@ FN_GLOBAL_STRING(lp_addgroup_script, &Globals.szAddGroupScript) FN_GLOBAL_STRING(lp_delgroup_script, &Globals.szDelGroupScript) FN_GLOBAL_STRING(lp_addusertogroup_script, &Globals.szAddUserToGroupScript) FN_GLOBAL_STRING(lp_deluserfromgroup_script, &Globals.szDelUserFromGroupScript) +FN_GLOBAL_STRING(lp_setprimarygroup_script, &Globals.szSetPrimaryGroupScript) FN_GLOBAL_STRING(lp_addmachine_script, &Globals.szAddMachineScript) -- cgit From d06d2c876e3f295715e818fa6869d968e32b3dc4 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 22 Sep 2002 10:30:00 +0000 Subject: Change parsing of policy and privs delta to what Ethereal says. Volker (This used to be commit 8c41b5cd1b8b0c2639def9552bd20b8aca39785c) --- source3/include/rpc_netlogon.h | 93 +++++++++++---------------- source3/rpc_parse/parse_net.c | 136 +++++++++++++++++++--------------------- source3/utils/net_rpc_samsync.c | 4 +- 3 files changed, 104 insertions(+), 129 deletions(-) diff --git a/source3/include/rpc_netlogon.h b/source3/include/rpc_netlogon.h index 500f5fef8a..fb849f8238 100644 --- a/source3/include/rpc_netlogon.h +++ b/source3/include/rpc_netlogon.h @@ -719,45 +719,31 @@ typedef struct sam_alias_mem_info_info /* SAM_DELTA_POLICY (0x0D) */ typedef struct { - uint32 unknown1; /* 0x5000 */ - uint32 unknown2; /* 0 */ - uint32 unknown3; /* 0 */ - uint32 unknown4; /* 0 */ - uint32 count1; - uint32 ptr1; - uint16 count2; - uint16 count3; - uint32 ptr2; - uint32 ptr3; - - uint32 unknown4b; /* 0x02000000 */ - uint32 unknown5; /* 0x00100000 */ - uint32 unknown6; /* 0x00010000 */ - uint32 unknown7; /* 0x0f000000 */ - uint32 unknown8; /* 0 */ - uint32 unknown9; /* 0 */ - uint32 unknown10; /* 0 */ - uint32 unknown11; /* 0x3c*/ - uint32 unknown12; /* 0*/ - - uint32 unknown13; /* a7080110 */ - uint32 unknown14; /* 01bfb0dd */ - uint32 unknown15; /* 0f */ - uint32 unknown16; /* 68 */ - uint32 unknown17; /* 00169000 */ - - uint32 count4; - uint32 unknown18; /* 0 times count4 */ - - uint32 unknown19; /* 8 */ - - uint32 unknown20; /* 0x04 times count1 */ - - uint32 ptr4; - - UNISTR2 domain_name; + uint32 max_log_size; /* 0x5000 */ + UINT64_S audit_retention_period; /* 0 */ + uint32 auditing_mode; /* 0 */ + uint32 num_events; + uint32 ptr_events; + UNIHDR hdr_dom_name; + uint32 sid_ptr; + + uint32 paged_pool_limit; /* 0x02000000 */ + uint32 non_paged_pool_limit; /* 0x00100000 */ + uint32 min_workset_size; /* 0x00010000 */ + uint32 max_workset_size; /* 0x0f000000 */ + uint32 page_file_limit; /* 0 */ + UINT64_S time_limit; /* 0 */ + NTTIME modify_time; /* 0x3c*/ + NTTIME create_time; /* a7080110 */ + BUFHDR2 hdr_sec_desc; + + uint32 num_event_audit_options; + uint32 event_audit_option; + + UNISTR2 domain_name; DOM_SID2 domain_sid; + BUFFER4 buf_sec_desc; } SAM_DELTA_POLICY; /* SAM_DELTA_TRUST_DOMS */ @@ -783,29 +769,24 @@ typedef struct /* SAM_DELTA_PRIVS (0x10) */ typedef struct { - uint32 buf_size; - SEC_DESC *sec_desc; DOM_SID2 sid; uint32 priv_count; - uint32 reserved1; /* 0x0 */ - - uint32 ptr1; - uint32 ptr2; - - uint32 unknown1; - uint32 unknown2; - uint32 unknown3; - uint32 unknown4; - uint32 unknown5; - uint32 unknown6; - uint32 unknown7; - uint32 unknown8; - uint32 unknown9; + uint32 priv_control; + + uint32 priv_attr_ptr; + uint32 priv_name_ptr; + + uint32 paged_pool_limit; /* 0x02000000 */ + uint32 non_paged_pool_limit; /* 0x00100000 */ + uint32 min_workset_size; /* 0x00010000 */ + uint32 max_workset_size; /* 0x0f000000 */ + uint32 page_file_limit; /* 0 */ + UINT64_S time_limit; /* 0 */ + uint32 system_flags; /* 1 */ + BUFHDR2 hdr_sec_desc; uint32 buf_size2; - uint32 ptr3; - uint32 unknown10; /* 48 bytes 0x0*/ uint32 attribute_count; uint32 *attributes; @@ -814,7 +795,7 @@ typedef struct UNIHDR *hdr_privslist; UNISTR2 *uni_privslist; - + BUFFER4 buf_sec_desc; } SAM_DELTA_PRIVS; /* SAM_DELTA_SECRET */ diff --git a/source3/rpc_parse/parse_net.c b/source3/rpc_parse/parse_net.c index f1d813c3f0..e0f710b2d7 100644 --- a/source3/rpc_parse/parse_net.c +++ b/source3/rpc_parse/parse_net.c @@ -2357,79 +2357,70 @@ static BOOL net_io_sam_policy_info(char *desc, SAM_DELTA_POLICY *info, prs_struct *ps, int depth) { int i; - prs_debug(ps, depth, desc, "net_io_sam_policy_info"); depth++; if(!prs_align(ps)) return False; - if (!prs_uint32("unknown1", ps, depth, &info->unknown1)) - return False; - if (!prs_uint32("unknown2", ps, depth, &info->unknown2)) + if (!prs_uint32("max_log_size", ps, depth, &info->max_log_size)) return False; - if (!prs_uint32("unknown3", ps, depth, &info->unknown3)) + if (!prs_uint64("audit_retention_period", ps, depth, + &info->audit_retention_period)) return False; - if (!prs_uint32("unknown4", ps, depth, &info->unknown4)) + if (!prs_uint32("auditing_mode", ps, depth, &info->auditing_mode)) return False; - if (!prs_uint32("count1", ps, depth, &info->count1)) + if (!prs_uint32("num_events", ps, depth, &info->num_events)) return False; - if (!prs_uint32("ptr1", ps, depth, &info->ptr1)) + if (!prs_uint32("ptr_events", ps, depth, &info->ptr_events)) return False; - if (!prs_uint16("count2", ps, depth, &info->count2)) - return False; - if (!prs_uint16("count3", ps, depth, &info->count3)) - return False; + if (!smb_io_unihdr("hdr_dom_name", &info->hdr_dom_name, ps, depth)) + return False; - if (!prs_uint32("ptr2", ps, depth, &info->ptr2)) - return False; - if (!prs_uint32("ptr3", ps, depth, &info->ptr3)) + if (!prs_uint32("sid_ptr", ps, depth, &info->sid_ptr)) return False; - if (!prs_uint32("unknown4b", ps, depth, &info->unknown4b)) + if (!prs_uint32("paged_pool_limit", ps, depth, &info->paged_pool_limit)) return False; - if (!prs_uint32("unknown5", ps, depth, &info->unknown5)) + if (!prs_uint32("non_paged_pool_limit", ps, depth, + &info->non_paged_pool_limit)) return False; - if (!prs_uint32("unknown6", ps, depth, &info->unknown6)) + if (!prs_uint32("min_workset_size", ps, depth, &info->min_workset_size)) return False; - if (!prs_uint32("unknown7", ps, depth, &info->unknown7)) + if (!prs_uint32("max_workset_size", ps, depth, &info->max_workset_size)) return False; - if (!prs_uint32("unknown8", ps, depth, &info->unknown8)) + if (!prs_uint32("page_file_limit", ps, depth, &info->page_file_limit)) return False; - if (!prs_uint32("unknown9", ps, depth, &info->unknown9)) + if (!prs_uint64("time_limit", ps, depth, &info->time_limit)) return False; - if (!prs_uint32("unknown10", ps, depth, &info->unknown10)) + if (!smb_io_time("modify_time", &info->modify_time, ps, depth)) return False; - if (!prs_uint32("unknown11", ps, depth, &info->unknown11)) + if (!smb_io_time("create_time", &info->create_time, ps, depth)) return False; - if (!prs_uint32("unknown12", ps, depth, &info->unknown12)) + if (!smb_io_bufhdr2("hdr_sec_desc", &info->hdr_sec_desc, ps, depth)) return False; - if (!prs_uint32("unknown13", ps, depth, &info->unknown13)) - return False; - if (!prs_uint32("unknown14", ps, depth, &info->unknown14)) - return False; - if (!prs_uint32("unknown15", ps, depth, &info->unknown15)) - return False; - if (!prs_uint32("unknown16", ps, depth, &info->unknown16)) - return False; - if (!prs_uint32("unknown17", ps, depth, &info->unknown17)) - return False; + for (i=0; i<4; i++) { + UNIHDR dummy; + if (!smb_io_unihdr("dummy", &dummy, ps, depth)) + return False; + } - for (i=0; icount2; i++) - if (!prs_uint32("unknown18", ps, depth, &info->unknown18)) - return False; + for (i=0; i<4; i++) { + uint32 reserved; + if (!prs_uint32("reserved", ps, depth, &reserved)) + return False; + } - if (!prs_uint32("unknown19", ps, depth, &info->unknown19)) + if (!prs_uint32("num_event_audit_options", ps, depth, + &info->num_event_audit_options)) return False; - for (i=0; icount1; i++) - if (!prs_uint32("unknown20", ps, depth, &info->unknown20)) - return False; - - if (!prs_uint32("ptr4", ps, depth, &info->ptr4)) - return False; + for (i=0; inum_event_audit_options; i++) + if (!prs_uint32("event_audit_option", ps, depth, + &info->event_audit_option)) + return False; if (!smb_io_unistr2("domain_name", &info->domain_name, True, ps, depth)) return False; @@ -2437,6 +2428,11 @@ static BOOL net_io_sam_policy_info(char *desc, SAM_DELTA_POLICY *info, if(!smb_io_dom_sid2("domain_sid", &info->domain_sid, ps, depth)) return False; + if (!smb_io_buffer4("buf_sec_desc", &info->buf_sec_desc, + info->hdr_sec_desc.buffer, ps, depth)) + + return False; + return True; } @@ -2589,52 +2585,48 @@ static BOOL net_io_sam_privs_info(char *desc, SAM_DELTA_PRIVS *info, if(!prs_align(ps)) return False; - if(!prs_uint32("buf_size", ps, depth, &info->buf_size)) - return False; - - if(!sec_io_desc("sec_desc", &info->sec_desc, ps, depth)) - return False; - if(!smb_io_dom_sid2("sid", &info->sid, ps, depth)) return False; if(!prs_uint32("priv_count", ps, depth, &info->priv_count)) return False; - if(!prs_uint32("reserved1", ps, depth, &info->reserved1)) + if(!prs_uint32("priv_control", ps, depth, &info->priv_control)) return False; - if(!prs_uint32("ptr1", ps, depth, &info->ptr1)) + if(!prs_uint32("priv_attr_ptr", ps, depth, &info->priv_attr_ptr)) return False; - if(!prs_uint32("ptr2", ps, depth, &info->ptr2)) + if(!prs_uint32("priv_name_ptr", ps, depth, &info->priv_name_ptr)) return False; - if(!prs_uint32("unknown1", ps, depth, &info->unknown1)) + if (!prs_uint32("paged_pool_limit", ps, depth, &info->paged_pool_limit)) return False; - if(!prs_uint32("unknown2", ps, depth, &info->unknown2)) + if (!prs_uint32("non_paged_pool_limit", ps, depth, + &info->non_paged_pool_limit)) return False; - if(!prs_uint32("unknown3", ps, depth, &info->unknown3)) + if (!prs_uint32("min_workset_size", ps, depth, &info->min_workset_size)) return False; - if(!prs_uint32("unknown4", ps, depth, &info->unknown4)) + if (!prs_uint32("max_workset_size", ps, depth, &info->max_workset_size)) return False; - if(!prs_uint32("unknown5", ps, depth, &info->unknown5)) + if (!prs_uint32("page_file_limit", ps, depth, &info->page_file_limit)) return False; - if(!prs_uint32("unknown6", ps, depth, &info->unknown6)) + if (!prs_uint64("time_limit", ps, depth, &info->time_limit)) return False; - if(!prs_uint32("unknown7", ps, depth, &info->unknown7)) + if (!prs_uint32("system_flags", ps, depth, &info->system_flags)) return False; - if(!prs_uint32("unknown8", ps, depth, &info->unknown8)) - return False; - if(!prs_uint32("unknown9", ps, depth, &info->unknown9)) + if (!smb_io_bufhdr2("hdr_sec_desc", &info->hdr_sec_desc, ps, depth)) return False; - if(!prs_uint32("buf_size2", ps, depth, &info->buf_size2)) - return False; - if(!prs_uint32("ptr3", ps, depth, &info->ptr3)) - return False; + for (i=0; i<4; i++) { + UNIHDR dummy; + if (!smb_io_unihdr("dummy", &dummy, ps, depth)) + return False; + } - for (i=0; i<12; i++) - if(!prs_uint32("unknown10", ps, depth, &info->unknown10)) - return False; + for (i=0; i<4; i++) { + uint32 reserved; + if (!prs_uint32("reserved", ps, depth, &reserved)) + return False; + } if(!prs_uint32("attribute_count", ps, depth, &info->attribute_count)) return False; @@ -2659,6 +2651,10 @@ static BOOL net_io_sam_privs_info(char *desc, SAM_DELTA_PRIVS *info, if (!smb_io_unistr2("uni_privslist", &info->uni_privslist[i], True, ps, depth)) return False; + if (!smb_io_buffer4("buf_sec_desc", &info->buf_sec_desc, + info->hdr_sec_desc.buffer, ps, depth)) + return False; + return True; } diff --git a/source3/utils/net_rpc_samsync.c b/source3/utils/net_rpc_samsync.c index 6d8b7c672f..9d54a771fc 100644 --- a/source3/utils/net_rpc_samsync.c +++ b/source3/utils/net_rpc_samsync.c @@ -171,9 +171,7 @@ int rpc_samdump(int argc, const char **argv) dump_database(cli, SAM_DATABASE_DOMAIN, &ret_creds); dump_database(cli, SAM_DATABASE_BUILTIN, &ret_creds); - - /* Currently we crash on PRIVS somewhere in unmarshalling */ - /* Dump_database(cli, SAM_DATABASE_PRIVS, &ret_creds); */ + dump_database(cli, SAM_DATABASE_PRIVS, &ret_creds); cli_nt_session_close(cli); -- cgit From 8aaf8174bf1efef402d46489d56ae759a70341b8 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sun, 22 Sep 2002 16:22:48 +0000 Subject: Small, long overdue, fix for libsmbclient. (This used to be commit 40aea3fe94b68ce284e2f21e57f086212936c049) --- source3/libsmb/clientgen.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index 6b6a2acd3b..793dd19644 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -328,3 +328,22 @@ uint16 cli_setpid(struct cli_state *cli, uint16 pid) cli->pid = pid; return ret; } + +/**************************************************************************** +Send a keepalive packet to the server +****************************************************************************/ +BOOL cli_send_keepalive(struct cli_state *cli) +{ + if (cli->fd == -1) { + DEBUG(3, ("cli_send_keepalive: fd == -1\n")); + return False; + } + if (!send_keepalive(cli->fd)) { + close(cli->fd); + cli->fd = -1; + DEBUG(0,("Error sending keepalive packet to client.\n")); + return False; + } + return True; +} + -- cgit From 15bc0437a9239f1461b0562b2964da607e16fe20 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 23 Sep 2002 02:49:01 +0000 Subject: Fix typo. (This used to be commit 575b8674863341d3dbd04d8618a3a5f2ff5651ee) --- docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml b/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml index 594516640d..adcd059bc2 100644 --- a/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml +++ b/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml @@ -154,7 +154,7 @@ password required /lib/security/pam_smbpass.so nodelay smbconf=/etc/samba. Note: PAM allows stacking of authentication mechanisms. It is -also possible to pass information obtained within on PAM module through +also possible to pass information obtained within one PAM module through to the next module in the PAM stack. Please refer to the documentation for your particular system implementation for details regarding the specific capabilities of PAM in this environment. Some Linux implmentations also -- cgit From 1c1355c5a36152737fb29ce257bc0798c0dfb7ac Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Mon, 23 Sep 2002 04:01:28 +0000 Subject: * fix getpass check * merge in AIX fixes from SAMBA_2_2 (This used to be commit 50752f84f24b36332ec4f1ade92dc5a095ac077b) --- source3/configure | 740 ++++++++++++++++++++++++++------------------------- source3/configure.in | 39 ++- 2 files changed, 390 insertions(+), 389 deletions(-) diff --git a/source3/configure b/source3/configure index 994d830cdd..39fa8b05f0 100755 --- a/source3/configure +++ b/source3/configure @@ -8928,7 +8928,17 @@ EOF SONAMEFLAG="-Wl,-h," PICFLAG="-KPIC" # Is this correct for SunOS ;; - *bsd*) BLDSHARED="true" + *freebsd*) BLDSHARED="true" + LDSHFLAGS="-shared" + DYNEXP="-Wl,--export-dynamic" + SONAMEFLAG="-Wl,-soname," + PICFLAG="-fPIC -DPIC" + cat >> confdefs.h <<\EOF +#define STAT_ST_BLOCKSIZE 512 +EOF + + ;; + *openbsd*) BLDSHARED="true" LDSHFLAGS="-shared" DYNEXP="-Wl,-Bdynamic" SONAMEFLAG="-Wl,-soname," @@ -8971,12 +8981,10 @@ EOF BLDSHARED="true" LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry" DYNEXP="-Wl,-brtl,-bexpall" - if test "${GCC}" = "yes"; then - PICFLAG="-O2" - else - PICFLAG="-O2 -qmaxmem=6000" + PICFLAG="-O2" + if test "${GCC}" != "yes"; then ## for funky AIX compiler using strncpy() - CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT" + CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000" fi cat >> confdefs.h <<\EOF @@ -9036,7 +9044,7 @@ EOF *dgux*) # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:9040: checking for $ac_word" >&5 +echo "configure:9048: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9093,17 +9101,17 @@ esac echo "$ac_t""$BLDSHARED" 1>&6 echo $ac_n "checking linker flags for shared libraries""... $ac_c" 1>&6 -echo "configure:9097: checking linker flags for shared libraries" >&5 +echo "configure:9105: checking linker flags for shared libraries" >&5 echo "$ac_t""$LDSHFLAGS" 1>&6 echo $ac_n "checking compiler flags for position-independent code""... $ac_c" 1>&6 -echo "configure:9100: checking compiler flags for position-independent code" >&5 +echo "configure:9108: checking compiler flags for position-independent code" >&5 echo "$ac_t""$PICFLAGS" 1>&6 ####################################################### # test whether building a shared library actually works if test $BLDSHARED = true; then echo $ac_n "checking whether building shared libraries actually works""... $ac_c" 1>&6 -echo "configure:9107: checking whether building shared libraries actually works" >&5 +echo "configure:9115: checking whether building shared libraries actually works" >&5 if eval "test \"`echo '$''{'ac_cv_shlib_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9134,7 +9142,7 @@ fi ################ echo $ac_n "checking for long long""... $ac_c" 1>&6 -echo "configure:9138: checking for long long" >&5 +echo "configure:9146: checking for long long" >&5 if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9143,12 +9151,12 @@ if test "$cross_compiling" = yes; then samba_cv_have_longlong=cross else cat > conftest.$ac_ext < main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); } EOF -if { (eval echo configure:9152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_have_longlong=yes else @@ -9175,20 +9183,20 @@ fi # AIX needs this. echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6 -echo "configure:9179: checking for LL suffix on long long integers" >&5 +echo "configure:9187: checking for LL suffix on long long integers" >&5 if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { long long i = 0x8000000000LL ; return 0; } EOF -if { (eval echo configure:9192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9200: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_compiler_supports_ll=yes else @@ -9210,7 +9218,7 @@ fi echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6 -echo "configure:9214: checking for 64 bit off_t" >&5 +echo "configure:9222: checking for 64 bit off_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9219,13 +9227,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_OFF_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(off_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_OFF_T=yes else @@ -9248,7 +9256,7 @@ EOF fi echo $ac_n "checking for off64_t""... $ac_c" 1>&6 -echo "configure:9252: checking for off64_t" >&5 +echo "configure:9260: checking for off64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9257,7 +9265,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_OFF64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_OFF64_T=yes else @@ -9290,7 +9298,7 @@ EOF fi echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6 -echo "configure:9294: checking for 64 bit ino_t" >&5 +echo "configure:9302: checking for 64 bit ino_t" >&5 if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9299,13 +9307,13 @@ if test "$cross_compiling" = yes; then samba_cv_SIZEOF_INO_T=cross else cat > conftest.$ac_ext < #include main() { exit((sizeof(ino_t) == 8) ? 0 : 1); } EOF -if { (eval echo configure:9309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SIZEOF_INO_T=yes else @@ -9328,7 +9336,7 @@ EOF fi echo $ac_n "checking for ino64_t""... $ac_c" 1>&6 -echo "configure:9332: checking for ino64_t" >&5 +echo "configure:9340: checking for ino64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9337,7 +9345,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_INO64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_INO64_T=yes else @@ -9370,7 +9378,7 @@ EOF fi echo $ac_n "checking for dev64_t""... $ac_c" 1>&6 -echo "configure:9374: checking for dev64_t" >&5 +echo "configure:9382: checking for dev64_t" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEV64_T'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9379,7 +9387,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEV64_T=cross else cat > conftest.$ac_ext < main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); } EOF -if { (eval echo configure:9393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEV64_T=yes else @@ -9412,13 +9420,13 @@ EOF fi echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6 -echo "configure:9416: checking for struct dirent64" >&5 +echo "configure:9424: checking for struct dirent64" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9442: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STRUCT_DIRENT64=yes else @@ -9451,7 +9459,7 @@ EOF fi echo $ac_n "checking for major macro""... $ac_c" 1>&6 -echo "configure:9455: checking for major macro" >&5 +echo "configure:9463: checking for major macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MAJOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9460,7 +9468,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MAJOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = major(dev); return 0; } EOF -if { (eval echo configure:9473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MAJOR_FN=yes else @@ -9492,7 +9500,7 @@ EOF fi echo $ac_n "checking for minor macro""... $ac_c" 1>&6 -echo "configure:9496: checking for minor macro" >&5 +echo "configure:9504: checking for minor macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_DEVICE_MINOR_FN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9501,7 +9509,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_DEVICE_MINOR_FN=cross else cat > conftest.$ac_ext < main() { dev_t dev; int i = minor(dev); return 0; } EOF -if { (eval echo configure:9514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_DEVICE_MINOR_FN=yes else @@ -9533,7 +9541,7 @@ EOF fi echo $ac_n "checking for unsigned char""... $ac_c" 1>&6 -echo "configure:9537: checking for unsigned char" >&5 +echo "configure:9545: checking for unsigned char" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9542,12 +9550,12 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_UNSIGNED_CHAR=cross else cat > conftest.$ac_ext < main() { char c; c=250; exit((c > 0)?0:1); } EOF -if { (eval echo configure:9551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_UNSIGNED_CHAR=yes else @@ -9570,13 +9578,13 @@ EOF fi echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6 -echo "configure:9574: checking for sin_len in sock" >&5 +echo "configure:9582: checking for sin_len in sock" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9585,7 +9593,7 @@ int main() { struct sockaddr_in sock; sock.sin_len = sizeof(sock); ; return 0; } EOF -if { (eval echo configure:9589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9597: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_SOCK_SIN_LEN=yes else @@ -9606,13 +9614,13 @@ EOF fi echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6 -echo "configure:9610: checking whether seekdir returns void" >&5 +echo "configure:9618: checking whether seekdir returns void" >&5 if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9621,7 +9629,7 @@ int main() { return 0; ; return 0; } EOF -if { (eval echo configure:9625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9633: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_SEEKDIR_RETURNS_VOID=yes else @@ -9642,20 +9650,20 @@ EOF fi echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6 -echo "configure:9646: checking for __FILE__ macro" >&5 +echo "configure:9654: checking for __FILE__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FILE__); ; return 0; } EOF -if { (eval echo configure:9659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9667: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FILE_MACRO=yes else @@ -9676,20 +9684,20 @@ EOF fi echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6 -echo "configure:9680: checking for __FUNCTION__ macro" >&5 +echo "configure:9688: checking for __FUNCTION__ macro" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { printf("%s\n", __FUNCTION__); ; return 0; } EOF -if { (eval echo configure:9693: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9701: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_FUNCTION_MACRO=yes else @@ -9710,7 +9718,7 @@ EOF fi echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6 -echo "configure:9714: checking if gettimeofday takes tz argument" >&5 +echo "configure:9722: checking if gettimeofday takes tz argument" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9719,14 +9727,14 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_GETTIMEOFDAY_TZ=cross else cat > conftest.$ac_ext < #include main() { struct timeval tv; exit(gettimeofday(&tv, NULL));} EOF -if { (eval echo configure:9730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_GETTIMEOFDAY_TZ=yes else @@ -9749,13 +9757,13 @@ EOF fi echo $ac_n "checking for __va_copy""... $ac_c" 1>&6 -echo "configure:9753: checking for __va_copy" >&5 +echo "configure:9761: checking for __va_copy" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_VA_COPY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < va_list ap1,ap2; @@ -9763,7 +9771,7 @@ int main() { __va_copy(ap1,ap2); ; return 0; } EOF -if { (eval echo configure:9767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_VA_COPY=yes else @@ -9784,7 +9792,7 @@ EOF fi echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6 -echo "configure:9788: checking for C99 vsnprintf" >&5 +echo "configure:9796: checking for C99 vsnprintf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9793,7 +9801,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_C99_VSNPRINTF=cross else cat > conftest.$ac_ext < @@ -9820,7 +9828,7 @@ void foo(const char *format, ...) { main() { foo("hello"); } EOF -if { (eval echo configure:9824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_C99_VSNPRINTF=yes else @@ -9843,7 +9851,7 @@ EOF fi echo $ac_n "checking for broken readdir""... $ac_c" 1>&6 -echo "configure:9847: checking for broken readdir" >&5 +echo "configure:9855: checking for broken readdir" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -9852,7 +9860,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_READDIR=cross else cat > conftest.$ac_ext < #include @@ -9860,7 +9868,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d); if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 && di->d_name[0] == 0) exit(0); exit(1);} EOF -if { (eval echo configure:9864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:9872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_READDIR=yes else @@ -9883,13 +9891,13 @@ EOF fi echo $ac_n "checking for utimbuf""... $ac_c" 1>&6 -echo "configure:9887: checking for utimbuf" >&5 +echo "configure:9895: checking for utimbuf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9897,7 +9905,7 @@ int main() { struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf)); ; return 0; } EOF -if { (eval echo configure:9901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:9909: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UTIMBUF=yes else @@ -9921,12 +9929,12 @@ fi for ac_func in pututline pututxline updwtmp updwtmpx getutmpx do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:9925: checking for $ac_func" >&5 +echo "configure:9933: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:9961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -9975,13 +9983,13 @@ done echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6 -echo "configure:9979: checking for ut_name in utmp" >&5 +echo "configure:9987: checking for ut_name in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -9989,7 +9997,7 @@ int main() { struct utmp ut; ut.ut_name[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:9993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10001: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_NAME=yes else @@ -10010,13 +10018,13 @@ EOF fi echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6 -echo "configure:10014: checking for ut_user in utmp" >&5 +echo "configure:10022: checking for ut_user in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10024,7 +10032,7 @@ int main() { struct utmp ut; ut.ut_user[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10036: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_USER=yes else @@ -10045,13 +10053,13 @@ EOF fi echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6 -echo "configure:10049: checking for ut_id in utmp" >&5 +echo "configure:10057: checking for ut_id in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10059,7 +10067,7 @@ int main() { struct utmp ut; ut.ut_id[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10071: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ID=yes else @@ -10080,13 +10088,13 @@ EOF fi echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6 -echo "configure:10084: checking for ut_host in utmp" >&5 +echo "configure:10092: checking for ut_host in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10094,7 +10102,7 @@ int main() { struct utmp ut; ut.ut_host[0] = 'a'; ; return 0; } EOF -if { (eval echo configure:10098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10106: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_HOST=yes else @@ -10115,13 +10123,13 @@ EOF fi echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6 -echo "configure:10119: checking for ut_time in utmp" >&5 +echo "configure:10127: checking for ut_time in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10129,7 +10137,7 @@ int main() { struct utmp ut; time_t t; ut.ut_time = t; ; return 0; } EOF -if { (eval echo configure:10133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10141: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TIME=yes else @@ -10150,13 +10158,13 @@ EOF fi echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6 -echo "configure:10154: checking for ut_tv in utmp" >&5 +echo "configure:10162: checking for ut_tv in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10164,7 +10172,7 @@ int main() { struct utmp ut; struct timeval tv; ut.ut_tv = tv; ; return 0; } EOF -if { (eval echo configure:10168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TV=yes else @@ -10185,13 +10193,13 @@ EOF fi echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6 -echo "configure:10189: checking for ut_type in utmp" >&5 +echo "configure:10197: checking for ut_type in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10199,7 +10207,7 @@ int main() { struct utmp ut; ut.ut_type = 0; ; return 0; } EOF -if { (eval echo configure:10203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_TYPE=yes else @@ -10220,13 +10228,13 @@ EOF fi echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6 -echo "configure:10224: checking for ut_pid in utmp" >&5 +echo "configure:10232: checking for ut_pid in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10234,7 +10242,7 @@ int main() { struct utmp ut; ut.ut_pid = 0; ; return 0; } EOF -if { (eval echo configure:10238: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_PID=yes else @@ -10255,13 +10263,13 @@ EOF fi echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6 -echo "configure:10259: checking for ut_exit in utmp" >&5 +echo "configure:10267: checking for ut_exit in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10269,7 +10277,7 @@ int main() { struct utmp ut; ut.ut_exit.e_exit = 0; ; return 0; } EOF -if { (eval echo configure:10273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10281: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_EXIT=yes else @@ -10290,13 +10298,13 @@ EOF fi echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6 -echo "configure:10294: checking for ut_addr in utmp" >&5 +echo "configure:10302: checking for ut_addr in utmp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10304,7 +10312,7 @@ int main() { struct utmp ut; ut.ut_addr = 0; ; return 0; } EOF -if { (eval echo configure:10308: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10316: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UT_UT_ADDR=yes else @@ -10326,13 +10334,13 @@ fi if test x$ac_cv_func_pututline = xyes ; then echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6 -echo "configure:10330: checking whether pututline returns pointer" >&5 +echo "configure:10338: checking whether pututline returns pointer" >&5 if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10340,7 +10348,7 @@ int main() { struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg); ; return 0; } EOF -if { (eval echo configure:10344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10352: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_PUTUTLINE_RETURNS_UTMP=yes else @@ -10362,13 +10370,13 @@ EOF fi echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6 -echo "configure:10366: checking for ut_syslen in utmpx" >&5 +echo "configure:10374: checking for ut_syslen in utmpx" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10376,7 +10384,7 @@ int main() { struct utmpx ux; ux.ut_syslen = 0; ; return 0; } EOF -if { (eval echo configure:10380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10388: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UX_UT_SYSLEN=yes else @@ -10400,7 +10408,7 @@ fi ################################################# # check for libiconv support echo $ac_n "checking whether to use libiconv""... $ac_c" 1>&6 -echo "configure:10404: checking whether to use libiconv" >&5 +echo "configure:10412: checking whether to use libiconv" >&5 # Check whether --with-libiconv or --without-libiconv was given. if test "${with_libiconv+set}" = set; then withval="$with_libiconv" @@ -10413,7 +10421,7 @@ if test "${with_libiconv+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:10417: checking for iconv_open in -liconv" >&5 +echo "configure:10425: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -10421,7 +10429,7 @@ else ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:10444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -10475,7 +10483,7 @@ fi ############ # check for iconv in libc echo $ac_n "checking for working iconv""... $ac_c" 1>&6 -echo "configure:10479: checking for working iconv" >&5 +echo "configure:10487: checking for working iconv" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_NATIVE_ICONV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10484,7 +10492,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_NATIVE_ICONV=cross else cat > conftest.$ac_ext < @@ -10495,7 +10503,7 @@ main() { } EOF -if { (eval echo configure:10499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_NATIVE_ICONV=yes else @@ -10519,7 +10527,7 @@ fi echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6 -echo "configure:10523: checking for Linux kernel oplocks" >&5 +echo "configure:10531: checking for Linux kernel oplocks" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10528,7 +10536,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross else cat > conftest.$ac_ext < @@ -10542,7 +10550,7 @@ main() { } EOF -if { (eval echo configure:10546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes else @@ -10565,7 +10573,7 @@ EOF fi echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6 -echo "configure:10569: checking for kernel change notify support" >&5 +echo "configure:10577: checking for kernel change notify support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10574,7 +10582,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross else cat > conftest.$ac_ext < @@ -10588,7 +10596,7 @@ main() { } EOF -if { (eval echo configure:10592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes else @@ -10611,7 +10619,7 @@ EOF fi echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6 -echo "configure:10615: checking for kernel share modes" >&5 +echo "configure:10623: checking for kernel share modes" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10620,7 +10628,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_KERNEL_SHARE_MODES=cross else cat > conftest.$ac_ext < @@ -10636,7 +10644,7 @@ main() { } EOF -if { (eval echo configure:10640: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_KERNEL_SHARE_MODES=yes else @@ -10662,13 +10670,13 @@ fi echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6 -echo "configure:10666: checking for IRIX kernel oplock type definitions" >&5 +echo "configure:10674: checking for IRIX kernel oplock type definitions" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -10676,7 +10684,7 @@ int main() { oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1; ; return 0; } EOF -if { (eval echo configure:10680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes else @@ -10697,7 +10705,7 @@ EOF fi echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6 -echo "configure:10701: checking for irix specific capabilities" >&5 +echo "configure:10709: checking for irix specific capabilities" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10706,7 +10714,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross else cat > conftest.$ac_ext < #include @@ -10721,7 +10729,7 @@ main() { } EOF -if { (eval echo configure:10725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes else @@ -10749,13 +10757,13 @@ fi # echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10753: checking for int16 typedef included by rpc/rpc.h" >&5 +echo "configure:10761: checking for int16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10765,7 +10773,7 @@ int main() { int16 testvar; ; return 0; } EOF -if { (eval echo configure:10769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes else @@ -10786,13 +10794,13 @@ EOF fi echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10790: checking for uint16 typedef included by rpc/rpc.h" >&5 +echo "configure:10798: checking for uint16 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10802,7 +10810,7 @@ int main() { uint16 testvar; ; return 0; } EOF -if { (eval echo configure:10806: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes else @@ -10823,13 +10831,13 @@ EOF fi echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10827: checking for int32 typedef included by rpc/rpc.h" >&5 +echo "configure:10835: checking for int32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10839,7 +10847,7 @@ int main() { int32 testvar; ; return 0; } EOF -if { (eval echo configure:10843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes else @@ -10860,13 +10868,13 @@ EOF fi echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10864: checking for uint32 typedef included by rpc/rpc.h" >&5 +echo "configure:10872: checking for uint32 typedef included by rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPC_RPC_H) @@ -10876,7 +10884,7 @@ int main() { uint32 testvar; ; return 0; } EOF -if { (eval echo configure:10880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes else @@ -10898,13 +10906,13 @@ fi echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6 -echo "configure:10902: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 +echo "configure:10910: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef HAVE_SYS_SECURITY_H @@ -10918,7 +10926,7 @@ int main() { int testvar; ; return 0; } EOF -if { (eval echo configure:10922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:10930: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no else @@ -10939,16 +10947,16 @@ EOF fi echo $ac_n "checking for test routines""... $ac_c" 1>&6 -echo "configure:10943: checking for test routines" >&5 +echo "configure:10951: checking for test routines" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else @@ -10962,7 +10970,7 @@ fi echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6 -echo "configure:10966: checking for ftruncate extend" >&5 +echo "configure:10974: checking for ftruncate extend" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -10971,11 +10979,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FTRUNCATE_EXTEND=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:10987: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FTRUNCATE_EXTEND=yes else @@ -10998,7 +11006,7 @@ EOF fi echo $ac_n "checking for AF_LOCAL socket support""... $ac_c" 1>&6 -echo "configure:11002: checking for AF_LOCAL socket support" >&5 +echo "configure:11010: checking for AF_LOCAL socket support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_WORKING_AF_LOCAL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11007,11 +11015,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_WORKING_AF_LOCAL=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_WORKING_AF_LOCAL=yes else @@ -11035,7 +11043,7 @@ EOF fi echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6 -echo "configure:11039: checking for broken getgroups" >&5 +echo "configure:11047: checking for broken getgroups" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11044,11 +11052,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_GETGROUPS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_GETGROUPS=yes else @@ -11071,7 +11079,7 @@ EOF fi echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6 -echo "configure:11075: checking whether getpass should be replaced" >&5 +echo "configure:11083: checking whether getpass should be replaced" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11079,7 +11087,7 @@ else SAVE_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/smbwrapper" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11104: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_REPLACE_GETPASS=yes else @@ -11115,7 +11123,7 @@ EOF fi echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6 -echo "configure:11119: checking for broken inet_ntoa" >&5 +echo "configure:11127: checking for broken inet_ntoa" >&5 if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11124,7 +11132,7 @@ if test "$cross_compiling" = yes; then samba_cv_REPLACE_INET_NTOA=cross else cat > conftest.$ac_ext < @@ -11138,7 +11146,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") && strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } exit(1);} EOF -if { (eval echo configure:11142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11150: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_REPLACE_INET_NTOA=yes else @@ -11161,7 +11169,7 @@ EOF fi echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6 -echo "configure:11165: checking for secure mkstemp" >&5 +echo "configure:11173: checking for secure mkstemp" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11170,7 +11178,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_SECURE_MKSTEMP=cross else cat > conftest.$ac_ext < #include @@ -11187,7 +11195,7 @@ main() { exit(0); } EOF -if { (eval echo configure:11191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_SECURE_MKSTEMP=yes else @@ -11210,7 +11218,7 @@ EOF fi echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6 -echo "configure:11214: checking for sysconf(_SC_NGROUPS_MAX)" >&5 +echo "configure:11222: checking for sysconf(_SC_NGROUPS_MAX)" >&5 if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11219,12 +11227,12 @@ if test "$cross_compiling" = yes; then samba_cv_SYSCONF_SC_NGROUPS_MAX=cross else cat > conftest.$ac_ext < main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); } EOF -if { (eval echo configure:11228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_SYSCONF_SC_NGROUPS_MAX=yes else @@ -11247,7 +11255,7 @@ EOF fi echo $ac_n "checking for root""... $ac_c" 1>&6 -echo "configure:11251: checking for root" >&5 +echo "configure:11259: checking for root" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11256,11 +11264,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_ROOT=yes else @@ -11288,7 +11296,7 @@ fi # look for a method of finding the list of network interfaces iface=no; echo $ac_n "checking for iface AIX""... $ac_c" 1>&6 -echo "configure:11292: checking for iface AIX" >&5 +echo "configure:11300: checking for iface AIX" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11297,7 +11305,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_AIX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_AIX=yes else @@ -11329,7 +11337,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6 -echo "configure:11333: checking for iface ifconf" >&5 +echo "configure:11341: checking for iface ifconf" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11338,7 +11346,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFCONF=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFCONF=yes else @@ -11371,7 +11379,7 @@ fi if test $iface = no; then echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6 -echo "configure:11375: checking for iface ifreq" >&5 +echo "configure:11383: checking for iface ifreq" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11380,7 +11388,7 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_IFACE_IFREQ=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_IFACE_IFREQ=yes else @@ -11417,7 +11425,7 @@ fi seteuid=no; if test $seteuid = no; then echo $ac_n "checking for setresuid""... $ac_c" 1>&6 -echo "configure:11421: checking for setresuid" >&5 +echo "configure:11429: checking for setresuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11426,7 +11434,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETRESUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETRESUID=yes else @@ -11460,7 +11468,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setreuid""... $ac_c" 1>&6 -echo "configure:11464: checking for setreuid" >&5 +echo "configure:11472: checking for setreuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11469,7 +11477,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETREUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETREUID=yes else @@ -11502,7 +11510,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:11506: checking for seteuid" >&5 +echo "configure:11514: checking for seteuid" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11511,7 +11519,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETEUID=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETEUID=yes else @@ -11544,7 +11552,7 @@ fi if test $seteuid = no; then echo $ac_n "checking for setuidx""... $ac_c" 1>&6 -echo "configure:11548: checking for setuidx" >&5 +echo "configure:11556: checking for setuidx" >&5 if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11553,7 +11561,7 @@ if test "$cross_compiling" = yes; then samba_cv_USE_SETUIDX=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_USE_SETUIDX=yes else @@ -11586,7 +11594,7 @@ fi echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:11590: checking for working mmap" >&5 +echo "configure:11598: checking for working mmap" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11595,11 +11603,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_MMAP=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_MMAP=yes else @@ -11622,7 +11630,7 @@ EOF fi echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6 -echo "configure:11626: checking for ftruncate needs root" >&5 +echo "configure:11634: checking for ftruncate needs root" >&5 if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11631,11 +11639,11 @@ if test "$cross_compiling" = yes; then samba_cv_FTRUNCATE_NEEDS_ROOT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_FTRUNCATE_NEEDS_ROOT=yes else @@ -11658,7 +11666,7 @@ EOF fi echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6 -echo "configure:11662: checking for fcntl locking" >&5 +echo "configure:11670: checking for fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11667,11 +11675,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_FCNTL_LOCK=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_FCNTL_LOCK=yes else @@ -11694,7 +11702,7 @@ EOF fi echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11698: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 +echo "configure:11706: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11703,11 +11711,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes else @@ -11732,7 +11740,7 @@ else echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6 -echo "configure:11736: checking for 64 bit fcntl locking" >&5 +echo "configure:11744: checking for 64 bit fcntl locking" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -11741,7 +11749,7 @@ else samba_cv_HAVE_STRUCT_FLOCK64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:11777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_STRUCT_FLOCK64=yes else @@ -11790,13 +11798,13 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:11794: checking for st_blocks in struct stat" >&5 +echo "configure:11802: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLOCKS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11805,7 +11813,7 @@ int main() { struct stat st; st.st_blocks = 0; ; return 0; } EOF -if { (eval echo configure:11809: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11817: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLOCKS=yes else @@ -11826,13 +11834,13 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:11830: checking for st_blksize in struct stat" >&5 +echo "configure:11838: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_STAT_ST_BLKSIZE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -11841,7 +11849,7 @@ int main() { struct stat st; st.st_blksize = 0; ; return 0; } EOF -if { (eval echo configure:11845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11853: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_STAT_ST_BLKSIZE=yes else @@ -11864,13 +11872,13 @@ fi case "$host_os" in *linux*) echo $ac_n "checking for broken RedHat 7.2 system header files""... $ac_c" 1>&6 -echo "configure:11868: checking for broken RedHat 7.2 system header files" >&5 +echo "configure:11876: checking for broken RedHat 7.2 system header files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no else @@ -11907,13 +11915,13 @@ fi esac echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6 -echo "configure:11911: checking for broken nisplus include files" >&5 +echo "configure:11919: checking for broken nisplus include files" >&5 if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if defined(HAVE_RPCSVC_NIS_H) @@ -11923,7 +11931,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:11927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:11935: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no else @@ -11947,7 +11955,7 @@ fi ################################################# # check for smbwrapper support echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6 -echo "configure:11951: checking whether to use smbwrapper" >&5 +echo "configure:11959: checking whether to use smbwrapper" >&5 # Check whether --with-smbwrapper or --without-smbwrapper was given. if test "${with_smbwrapper+set}" = set; then withval="$with_smbwrapper" @@ -11994,7 +12002,7 @@ fi ################################################# # check for AFS clear-text auth support echo $ac_n "checking whether to use AFS clear-text auth""... $ac_c" 1>&6 -echo "configure:11998: checking whether to use AFS clear-text auth" >&5 +echo "configure:12006: checking whether to use AFS clear-text auth" >&5 # Check whether --with-afs or --without-afs was given. if test "${with_afs+set}" = set; then withval="$with_afs" @@ -12020,7 +12028,7 @@ fi ################################################# # check for the DFS clear-text auth system echo $ac_n "checking whether to use DFS clear-text auth""... $ac_c" 1>&6 -echo "configure:12024: checking whether to use DFS clear-text auth" >&5 +echo "configure:12032: checking whether to use DFS clear-text auth" >&5 # Check whether --with-dfs or --without-dfs was given. if test "${with_dfs+set}" = set; then withval="$with_dfs" @@ -12047,7 +12055,7 @@ fi with_ads_support=yes echo $ac_n "checking whether to use Active Directory""... $ac_c" 1>&6 -echo "configure:12051: checking whether to use Active Directory" >&5 +echo "configure:12059: checking whether to use Active Directory" >&5 # Check whether --with-ads or --without-ads was given. if test "${with_ads+set}" = set; then @@ -12075,7 +12083,7 @@ if test x"$with_ads_support" = x"yes"; then # check for location of Kerberos 5 install FOUND_KRB5=0 echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 -echo "configure:12079: checking for kerberos 5 install path" >&5 +echo "configure:12087: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. if test "${with_krb5+set}" = set; then withval="$with_krb5" @@ -12089,7 +12097,7 @@ if test "${with_krb5+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" - FOUND_KRB5=1 + FOUND_KRB5=1 ;; esac else @@ -12103,7 +12111,7 @@ if $FOUND_KRB5 = 0 ; then ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 -echo "configure:12107: checking for /usr/kerberos" >&5 +echo "configure:12115: checking for /usr/kerberos" >&5 if test -d /usr/kerberos; then LDFLAGS="$LDFLAGS -L/usr/kerberos/lib" CFLAGS="$CFLAGS -I/usr/kerberos/include" @@ -12122,17 +12130,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12126: checking for $ac_hdr" >&5 +echo "configure:12134: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12136: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12165,17 +12173,17 @@ done do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:12169: checking for $ac_hdr" >&5 +echo "configure:12177: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:12179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:12187: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -12205,7 +12213,7 @@ done ################################################################## # we might need the k5crypto and com_err libraries on some systems echo $ac_n "checking for _et_list in -lcom_err""... $ac_c" 1>&6 -echo "configure:12209: checking for _et_list in -lcom_err" >&5 +echo "configure:12217: checking for _et_list in -lcom_err" >&5 ac_lib_var=`echo com_err'_'_et_list | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12213,7 +12221,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcom_err $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12245,7 +12253,7 @@ else fi echo $ac_n "checking for krb5_encrypt_data in -lk5crypto""... $ac_c" 1>&6 -echo "configure:12249: checking for krb5_encrypt_data in -lk5crypto" >&5 +echo "configure:12257: checking for krb5_encrypt_data in -lk5crypto" >&5 ac_lib_var=`echo k5crypto'_'krb5_encrypt_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12253,7 +12261,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lk5crypto $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12276: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12289,7 +12297,7 @@ fi # now see if we can find the krb5 libs in standard paths # or as specified above echo $ac_n "checking for krb5_mk_req_extended in -lkrb5""... $ac_c" 1>&6 -echo "configure:12293: checking for krb5_mk_req_extended in -lkrb5" >&5 +echo "configure:12301: checking for krb5_mk_req_extended in -lkrb5" >&5 ac_lib_var=`echo krb5'_'krb5_mk_req_extended | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12297,7 +12305,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lkrb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12336,7 +12344,7 @@ fi ######################################################## # now see if we can find the gssapi libs in standard paths echo $ac_n "checking for gss_display_status in -lgssapi_krb5""... $ac_c" 1>&6 -echo "configure:12340: checking for gss_display_status in -lgssapi_krb5" >&5 +echo "configure:12348: checking for gss_display_status in -lgssapi_krb5" >&5 ac_lib_var=`echo gssapi_krb5'_'gss_display_status | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12344,7 +12352,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgssapi_krb5 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12367: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12386,7 +12394,7 @@ fi with_ldap_support=yes echo $ac_n "checking whether to use LDAP""... $ac_c" 1>&6 -echo "configure:12390: checking whether to use LDAP" >&5 +echo "configure:12398: checking whether to use LDAP" >&5 # Check whether --with-ldap or --without-ldap was given. if test "${with_ldap+set}" = set; then @@ -12407,7 +12415,7 @@ if test x"$with_ldap_support" = x"yes"; then # we might need the lber lib on some systems. To avoid link errors # this test must be before the libldap test echo $ac_n "checking for ber_scanf in -llber""... $ac_c" 1>&6 -echo "configure:12411: checking for ber_scanf in -llber" >&5 +echo "configure:12419: checking for ber_scanf in -llber" >&5 ac_lib_var=`echo lber'_'ber_scanf | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12415,7 +12423,7 @@ else ac_save_LIBS="$LIBS" LIBS="-llber $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12451,7 +12459,7 @@ fi # now see if we can find the ldap libs in standard paths if test x$have_ldap != xyes; then echo $ac_n "checking for ldap_domain2hostlist in -lldap""... $ac_c" 1>&6 -echo "configure:12455: checking for ldap_domain2hostlist in -lldap" >&5 +echo "configure:12463: checking for ldap_domain2hostlist in -lldap" >&5 ac_lib_var=`echo ldap'_'ldap_domain2hostlist | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12459,7 +12467,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lldap $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12501,12 +12509,12 @@ fi for ac_func in ldap_set_rebind_proc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12505: checking for $ac_func" >&5 +echo "configure:12513: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12554,13 +12562,13 @@ fi done echo $ac_n "checking whether ldap_set_rebind_proc takes 3 arguments""... $ac_c" 1>&6 -echo "configure:12558: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 +echo "configure:12566: checking whether ldap_set_rebind_proc takes 3 arguments" >&5 if eval "test \"`echo '$''{'pam_ldap_cv_ldap_set_rebind_proc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -12569,7 +12577,7 @@ int main() { ldap_set_rebind_proc(0, 0, 0); ; return 0; } EOF -if { (eval echo configure:12573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:12581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* pam_ldap_cv_ldap_set_rebind_proc=3 else @@ -12592,7 +12600,7 @@ fi ################################################# # check for automount support echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6 -echo "configure:12596: checking whether to use AUTOMOUNT" >&5 +echo "configure:12604: checking whether to use AUTOMOUNT" >&5 # Check whether --with-automount or --without-automount was given. if test "${with_automount+set}" = set; then withval="$with_automount" @@ -12617,7 +12625,7 @@ fi ################################################# # check for smbmount support echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6 -echo "configure:12621: checking whether to use SMBMOUNT" >&5 +echo "configure:12629: checking whether to use SMBMOUNT" >&5 # Check whether --with-smbmount or --without-smbmount was given. if test "${with_smbmount+set}" = set; then withval="$with_smbmount" @@ -12654,7 +12662,7 @@ fi # check for a PAM clear-text auth, accounts, password and session support with_pam_for_crypt=no echo $ac_n "checking whether to use PAM""... $ac_c" 1>&6 -echo "configure:12658: checking whether to use PAM" >&5 +echo "configure:12666: checking whether to use PAM" >&5 # Check whether --with-pam or --without-pam was given. if test "${with_pam+set}" = set; then withval="$with_pam" @@ -12680,7 +12688,7 @@ fi # we can't build a pam module if we don't have pam. echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6 -echo "configure:12684: checking for pam_get_data in -lpam" >&5 +echo "configure:12692: checking for pam_get_data in -lpam" >&5 ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12688,7 +12696,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12726,7 +12734,7 @@ fi ################################################# # check for pam_smbpass support echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6 -echo "configure:12730: checking whether to use pam_smbpass" >&5 +echo "configure:12738: checking whether to use pam_smbpass" >&5 # Check whether --with-pam_smbpass or --without-pam_smbpass was given. if test "${with_pam_smbpass+set}" = set; then withval="$with_pam_smbpass" @@ -12764,12 +12772,12 @@ if test $with_pam_for_crypt = no; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:12768: checking for $ac_func" >&5 +echo "configure:12776: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -12818,7 +12826,7 @@ done if test x"$ac_cv_func_crypt" = x"no"; then echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:12822: checking for crypt in -lcrypt" >&5 +echo "configure:12830: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -12826,7 +12834,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:12849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -12872,7 +12880,7 @@ fi ## if test $with_pam_for_crypt = no; then echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6 -echo "configure:12876: checking for a crypt that needs truncated salt" >&5 +echo "configure:12884: checking for a crypt that needs truncated salt" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -12881,11 +12889,11 @@ if test "$cross_compiling" = yes; then samba_cv_HAVE_TRUNCATED_SALT=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:12897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then samba_cv_HAVE_TRUNCATED_SALT=no else @@ -12911,7 +12919,7 @@ fi # New experimental SAM system echo $ac_n "checking whether to build the new (experimental) SAM database""... $ac_c" 1>&6 -echo "configure:12915: checking whether to build the new (experimental) SAM database" >&5 +echo "configure:12923: checking whether to build the new (experimental) SAM database" >&5 # Check whether --with-sam or --without-sam was given. if test "${with_sam+set}" = set; then withval="$with_sam" @@ -12943,7 +12951,7 @@ fi ################################################# # check for a TDB password database echo $ac_n "checking whether to use TDB SAM database""... $ac_c" 1>&6 -echo "configure:12947: checking whether to use TDB SAM database" >&5 +echo "configure:12955: checking whether to use TDB SAM database" >&5 # Check whether --with-tdbsam or --without-tdbsam was given. if test "${with_tdbsam+set}" = set; then withval="$with_tdbsam" @@ -12968,7 +12976,7 @@ fi ################################################# # check for a NISPLUS password database echo $ac_n "checking whether to use NISPLUS SAM database""... $ac_c" 1>&6 -echo "configure:12972: checking whether to use NISPLUS SAM database" >&5 +echo "configure:12980: checking whether to use NISPLUS SAM database" >&5 # Check whether --with-nisplussam or --without-nisplussam was given. if test "${with_nisplussam+set}" = set; then withval="$with_nisplussam" @@ -12999,7 +13007,7 @@ fi ################################################# # check for a NISPLUS_HOME support echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6 -echo "configure:13003: checking whether to use NISPLUS_HOME" >&5 +echo "configure:13011: checking whether to use NISPLUS_HOME" >&5 # Check whether --with-nisplus-home or --without-nisplus-home was given. if test "${with_nisplus_home+set}" = set; then withval="$with_nisplus_home" @@ -13024,7 +13032,7 @@ fi ################################################# # check for syslog logging echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6 -echo "configure:13028: checking whether to use syslog logging" >&5 +echo "configure:13036: checking whether to use syslog logging" >&5 # Check whether --with-syslog or --without-syslog was given. if test "${with_syslog+set}" = set; then withval="$with_syslog" @@ -13049,7 +13057,7 @@ fi ################################################# # check for a shared memory profiling support echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6 -echo "configure:13053: checking whether to use profiling" >&5 +echo "configure:13061: checking whether to use profiling" >&5 # Check whether --with-profiling-data or --without-profiling-data was given. if test "${with_profiling_data+set}" = set; then withval="$with_profiling_data" @@ -13077,7 +13085,7 @@ fi QUOTAOBJS=smbd/noquotas.o echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6 -echo "configure:13081: checking whether to support disk-quotas" >&5 +echo "configure:13089: checking whether to support disk-quotas" >&5 # Check whether --with-quotas or --without-quotas was given. if test "${with_quotas+set}" = set; then withval="$with_quotas" @@ -13088,13 +13096,13 @@ if test "${with_quotas+set}" = set; then *linux*) # Check for kernel 2.4.x quota braindamage... echo $ac_n "checking for linux 2.4.x quota braindamage..""... $ac_c" 1>&6 -echo "configure:13092: checking for linux 2.4.x quota braindamage.." >&5 +echo "configure:13100: checking for linux 2.4.x quota braindamage.." >&5 if eval "test \"`echo '$''{'samba_cv_linux_2_4_quota_braindamage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13106,7 +13114,7 @@ int main() { struct mem_dqblk D; ; return 0; } EOF -if { (eval echo configure:13110: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13118: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_linux_2_4_quota_braindamage=yes else @@ -13155,7 +13163,7 @@ fi # check for experimental utmp accounting echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6 -echo "configure:13159: checking whether to support utmp accounting" >&5 +echo "configure:13167: checking whether to support utmp accounting" >&5 # Check whether --with-utmp or --without-utmp was given. if test "${with_utmp+set}" = set; then withval="$with_utmp" @@ -13180,7 +13188,7 @@ fi ################################################# # choose native language(s) of man pages echo $ac_n "checking chosen man pages' language(s)""... $ac_c" 1>&6 -echo "configure:13184: checking chosen man pages' language(s)" >&5 +echo "configure:13192: checking chosen man pages' language(s)" >&5 # Check whether --with-manpages-langs or --without-manpages-langs was given. if test "${with_manpages_langs+set}" = set; then withval="$with_manpages_langs" @@ -13211,7 +13219,7 @@ fi LIBSMBCLIENT_SHARED= LIBSMBCLIENT= echo $ac_n "checking whether to build the libsmbclient shared library""... $ac_c" 1>&6 -echo "configure:13215: checking whether to build the libsmbclient shared library" >&5 +echo "configure:13223: checking whether to build the libsmbclient shared library" >&5 # Check whether --with-libsmbclient or --without-libsmbclient was given. if test "${with_libsmbclient+set}" = set; then withval="$with_libsmbclient" @@ -13239,14 +13247,14 @@ fi ################################################# # these tests are taken from the GNU fileutils package echo "checking how to get filesystem space usage" 1>&6 -echo "configure:13243: checking how to get filesystem space usage" >&5 +echo "configure:13251: checking how to get filesystem space usage" >&5 space=no # Test for statvfs64. if test $space = no; then # SVR4 echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6 -echo "configure:13250: checking statvfs64 function (SVR4)" >&5 +echo "configure:13258: checking statvfs64 function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13254,7 +13262,7 @@ else fu_cv_sys_stat_statvfs64=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statvfs64=yes else @@ -13301,12 +13309,12 @@ fi if test $space = no; then # SVR4 echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6 -echo "configure:13305: checking statvfs function (SVR4)" >&5 +echo "configure:13313: checking statvfs function (SVR4)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13314,7 +13322,7 @@ int main() { struct statvfs fsd; statvfs (0, &fsd); ; return 0; } EOF -if { (eval echo configure:13318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* fu_cv_sys_stat_statvfs=yes else @@ -13339,7 +13347,7 @@ fi if test $space = no; then # DEC Alpha running OSF/1 echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6 -echo "configure:13343: checking for 3-argument statfs function (DEC OSF/1)" >&5 +echo "configure:13351: checking for 3-argument statfs function (DEC OSF/1)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13347,7 +13355,7 @@ else fu_cv_sys_stat_statfs3_osf1=no else cat > conftest.$ac_ext < @@ -13360,7 +13368,7 @@ else exit (statfs (".", &fsd, sizeof (struct statfs))); } EOF -if { (eval echo configure:13364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs3_osf1=yes else @@ -13387,7 +13395,7 @@ fi if test $space = no; then # AIX echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6 -echo "configure:13391: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 +echo "configure:13399: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13395,7 +13403,7 @@ else fu_cv_sys_stat_statfs2_bsize=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_bsize=yes else @@ -13441,7 +13449,7 @@ fi if test $space = no; then # SVR3 echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6 -echo "configure:13445: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 +echo "configure:13453: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13449,7 +13457,7 @@ else fu_cv_sys_stat_statfs4=no else cat > conftest.$ac_ext < #include @@ -13459,7 +13467,7 @@ else exit (statfs (".", &fsd, sizeof fsd, 0)); } EOF -if { (eval echo configure:13463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs4=yes else @@ -13486,7 +13494,7 @@ fi if test $space = no; then # 4.4BSD and NetBSD echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6 -echo "configure:13490: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 +echo "configure:13498: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13494,7 +13502,7 @@ else fu_cv_sys_stat_statfs2_fsize=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13510,7 +13518,7 @@ else exit (statfs (".", &fsd)); } EOF -if { (eval echo configure:13514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_statfs2_fsize=yes else @@ -13537,7 +13545,7 @@ fi if test $space = no; then # Ultrix echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6 -echo "configure:13541: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 +echo "configure:13549: checking for two-argument statfs with struct fs_data (Ultrix)" >&5 if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -13545,7 +13553,7 @@ else fu_cv_sys_stat_fs_data=no else cat > conftest.$ac_ext < #ifdef HAVE_SYS_PARAM_H @@ -13565,7 +13573,7 @@ else exit (statfs (".", &fsd) != 1); } EOF -if { (eval echo configure:13569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:13577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then fu_cv_sys_stat_fs_data=yes else @@ -13598,9 +13606,9 @@ fi # file support. # echo $ac_n "checking if large file support can be enabled""... $ac_c" 1>&6 -echo "configure:13602: checking if large file support can be enabled" >&5 +echo "configure:13610: checking if large file support can be enabled" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:13625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes else @@ -13678,7 +13686,7 @@ fi # check for ACL support echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6 -echo "configure:13682: checking whether to support ACLs" >&5 +echo "configure:13690: checking whether to support ACLs" >&5 # Check whether --with-acl-support or --without-acl-support was given. if test "${with_acl_support+set}" = set; then withval="$with_acl_support" @@ -13731,7 +13739,7 @@ EOF ;; *) echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6 -echo "configure:13735: checking for acl_get_file in -lacl" >&5 +echo "configure:13743: checking for acl_get_file in -lacl" >&5 ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -13739,7 +13747,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lacl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -13778,13 +13786,13 @@ else fi echo $ac_n "checking for ACL support""... $ac_c" 1>&6 -echo "configure:13782: checking for ACL support" >&5 +echo "configure:13790: checking for ACL support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13792,7 +13800,7 @@ int main() { acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p); ; return 0; } EOF -if { (eval echo configure:13796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_POSIX_ACLS=yes else @@ -13812,13 +13820,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6 EOF echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6 -echo "configure:13816: checking for acl_get_perm_np" >&5 +echo "configure:13824: checking for acl_get_perm_np" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -13826,7 +13834,7 @@ int main() { acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm); ; return 0; } EOF -if { (eval echo configure:13830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_ACL_GET_PERM_NP=yes else @@ -13871,7 +13879,7 @@ fi # check for sendfile support echo $ac_n "checking whether to support sendfile""... $ac_c" 1>&6 -echo "configure:13875: checking whether to support sendfile" >&5 +echo "configure:13883: checking whether to support sendfile" >&5 # Check whether --with-sendfile-support or --without-sendfile-support was given. if test "${with_sendfile_support+set}" = set; then withval="$with_sendfile_support" @@ -13881,13 +13889,13 @@ if test "${with_sendfile_support+set}" = set; then case "$host_os" in *linux*) echo $ac_n "checking for linux sendfile64 support""... $ac_c" 1>&6 -echo "configure:13885: checking for linux sendfile64 support" >&5 +echo "configure:13893: checking for linux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13899,7 +13907,7 @@ ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -13914,13 +13922,13 @@ fi echo "$ac_t""$samba_cv_HAVE_SENDFILE64" 1>&6 echo $ac_n "checking for linux sendfile support""... $ac_c" 1>&6 -echo "configure:13918: checking for linux sendfile support" >&5 +echo "configure:13926: checking for linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -13932,7 +13940,7 @@ ssize_t nwritten = sendfile(tofd, fromfd, &offset, total); ; return 0; } EOF -if { (eval echo configure:13936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -13948,13 +13956,13 @@ echo "$ac_t""$samba_cv_HAVE_SENDFILE" 1>&6 # Try and cope with broken Linux sendfile.... echo $ac_n "checking for broken linux sendfile support""... $ac_c" 1>&6 -echo "configure:13952: checking for broken linux sendfile support" >&5 +echo "configure:13960: checking for broken linux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_LINUX_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:13982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes else @@ -14026,13 +14034,13 @@ EOF ;; *freebsd*) echo $ac_n "checking for freebsd sendfile support""... $ac_c" 1>&6 -echo "configure:14030: checking for freebsd sendfile support" >&5 +echo "configure:14038: checking for freebsd sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14040,27 +14048,21 @@ else #include int main() { \ -#define NULL (void *)0 - int fromfd, tofd, ret, total; + int fromfd, tofd; off_t offset, nwritten; - struct sf_hdtr { - struct iovec *headers; - int hdr_cnt; - struct iovec *trailers; - int trl_cnt; - } hdr; + struct sf_hdtr hdr; struct iovec hdtrl; - hdr.headers = &hdtrl; - hdr.hdr_cnt = 1; - hdr.trailers = NULL; - hdr.trl_cnt = 0; + hdr->headers = &hdtrl; + hdr->hdr_cnt = 1; + hdr->trailers = NULL; + hdr->trl_cnt = 0; hdtrl.iov_base = NULL; hdtrl.iov_len = 0; - ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); ; return 0; } EOF -if { (eval echo configure:14064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14094,13 +14096,13 @@ EOF *hpux*) echo $ac_n "checking for hpux sendfile64 support""... $ac_c" 1>&6 -echo "configure:14098: checking for hpux sendfile64 support" >&5 +echo "configure:14100: checking for hpux sendfile64 support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14120,7 +14122,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE64=yes else @@ -14151,13 +14153,13 @@ EOF fi echo $ac_n "checking for hpux sendfile support""... $ac_c" 1>&6 -echo "configure:14155: checking for hpux sendfile support" >&5 +echo "configure:14157: checking for hpux sendfile support" >&5 if eval "test \"`echo '$''{'samba_cv_HAVE_SENDFILE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -14177,7 +14179,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:14181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* samba_cv_HAVE_SENDFILE=yes else @@ -14230,7 +14232,7 @@ fi # (WINBIND_STARGETS) and shared libraries (WINBIND_LTARGETS). echo $ac_n "checking whether to build winbind""... $ac_c" 1>&6 -echo "configure:14234: checking whether to build winbind" >&5 +echo "configure:14236: checking whether to build winbind" >&5 # Initially, the value of $host_os decides whether winbind is supported @@ -14326,20 +14328,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_comment""... $ac_c" 1>&6 -echo "configure:14330: checking whether struct passwd has pw_comment" >&5 +echo "configure:14332: checking whether struct passwd has pw_comment" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_comment'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_comment; ; return 0; } EOF -if { (eval echo configure:14343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_comment=yes else @@ -14364,20 +14366,20 @@ fi # [#include ]) echo $ac_n "checking whether struct passwd has pw_age""... $ac_c" 1>&6 -echo "configure:14368: checking whether struct passwd has pw_age" >&5 +echo "configure:14370: checking whether struct passwd has pw_age" >&5 if eval "test \"`echo '$''{'samba_cv_passwd_pw_age'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct passwd p; p.pw_age; ; return 0; } EOF -if { (eval echo configure:14381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:14383: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* samba_cv_passwd_pw_age=yes else @@ -14416,7 +14418,7 @@ fi if test x"$INCLUDED_POPT" != x"yes"; then echo $ac_n "checking for poptGetContext in -lpopt""... $ac_c" 1>&6 -echo "configure:14420: checking for poptGetContext in -lpopt" >&5 +echo "configure:14422: checking for poptGetContext in -lpopt" >&5 ac_lib_var=`echo popt'_'poptGetContext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -14424,7 +14426,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:14441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -14459,7 +14461,7 @@ fi fi echo $ac_n "checking whether to use included popt""... $ac_c" 1>&6 -echo "configure:14463: checking whether to use included popt" >&5 +echo "configure:14465: checking whether to use included popt" >&5 if test x"$INCLUDED_POPT" = x"yes"; then echo "$ac_t""yes" 1>&6 BUILD_POPT='$(POPT_OBJS)' @@ -14505,16 +14507,16 @@ fi # final configure stuff echo $ac_n "checking configure summary""... $ac_c" 1>&6 -echo "configure:14509: checking configure summary" >&5 +echo "configure:14511: checking configure summary" >&5 if test "$cross_compiling" = yes; then echo "configure: warning: cannot run when cross-compiling" 1>&2 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:14520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then echo "$ac_t""yes" 1>&6 else diff --git a/source3/configure.in b/source3/configure.in index 6b4f138747..07cf6e88cd 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -896,7 +896,14 @@ case "$host_os" in SONAMEFLAG="-Wl,-h," PICFLAG="-KPIC" # Is this correct for SunOS ;; - *bsd*) BLDSHARED="true" + *freebsd*) BLDSHARED="true" + LDSHFLAGS="-shared" + DYNEXP="-Wl,--export-dynamic" + SONAMEFLAG="-Wl,-soname," + PICFLAG="-fPIC -DPIC" + AC_DEFINE(STAT_ST_BLOCKSIZE,512) + ;; + *openbsd*) BLDSHARED="true" LDSHFLAGS="-shared" DYNEXP="-Wl,-Bdynamic" SONAMEFLAG="-Wl,-soname," @@ -924,12 +931,10 @@ case "$host_os" in BLDSHARED="true" LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry" DYNEXP="-Wl,-brtl,-bexpall" - if test "${GCC}" = "yes"; then - PICFLAG="-O2" - else - PICFLAG="-O2 -qmaxmem=6000" + PICFLAG="-O2" + if test "${GCC}" != "yes"; then ## for funky AIX compiler using strncpy() - CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT" + CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000" fi AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE) @@ -1974,7 +1979,7 @@ FOUND_KRB5=0 CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" - FOUND_KRB5=1 + FOUND_KRB5=1 ;; esac ], AC_MSG_RESULT(no) @@ -2777,23 +2782,17 @@ samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)] #include #include ], [\ -#define NULL (void *)0 - int fromfd, tofd, ret, total; + int fromfd, tofd; off_t offset, nwritten; - struct sf_hdtr { - struct iovec *headers; - int hdr_cnt; - struct iovec *trailers; - int trl_cnt; - } hdr; + struct sf_hdtr hdr; struct iovec hdtrl; - hdr.headers = &hdtrl; - hdr.hdr_cnt = 1; - hdr.trailers = NULL; - hdr.trl_cnt = 0; + hdr->headers = &hdtrl; + hdr->hdr_cnt = 1; + hdr->trailers = NULL; + hdr->trl_cnt = 0; hdtrl.iov_base = NULL; hdtrl.iov_len = 0; - ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); + int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0); ], samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)]) -- cgit From cd2924f94efcb82683c702d4576aef85d33b8771 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 23 Sep 2002 10:05:15 +0000 Subject: Add the ability to view/set the current local domain SIDs. Volker (This used to be commit f6ed429838cc0140c0d033875012c7a999891549) --- source3/utils/net.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/source3/utils/net.c b/source3/utils/net.c index e3cfc24b69..9363d1a6a0 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -329,6 +329,49 @@ static int net_file(int argc, const char **argv) return net_rap_file(argc, argv); } +static int net_setlocalsid(int argc, const char **argv) +{ + DOM_SID sid; + + if ( (argc != 1) + || (strncmp(argv[0], "S-1-5-21-", strlen("S-1-5-21-")) != 0) + || (!string_to_sid(&sid, argv[0])) + || (sid.num_auths != 4)) { + d_printf("usage: net setlocalsid S-1-5-21-x-y-z\n"); + return 1; + } + + if (!secrets_store_domain_sid(global_myname, &sid)) { + DEBUG(0,("Can't store domain SID as a pdc/bdc.\n")); + return 1; + } + + return 0; +} + +static int net_getdomainsid(int argc, const char **argv) +{ + DOM_SID domain_sid; + fstring sid_str; + + if (!secrets_fetch_domain_sid(global_myname, &domain_sid)) { + d_printf("Could not fetch local SID\n"); + return 1; + } + sid_to_string(sid_str, &domain_sid); + d_printf("SID for domain %s is: %s\n", global_myname, sid_str); + + if (!secrets_fetch_domain_sid(lp_workgroup(), &domain_sid)) { + d_printf("Could not fetch domain SID\n"); + return 1; + } + + sid_to_string(sid_str, &domain_sid); + d_printf("SID for domain %s is: %s\n", lp_workgroup(), sid_str); + + return 0; +} + /* main function table */ static struct functable net_func[] = { {"RPC", net_rpc}, @@ -353,6 +396,8 @@ static struct functable net_func[] = { {"LOOKUP", net_lookup}, {"JOIN", net_join}, {"CACHE", net_cache}, + {"SETLOCALSID", net_setlocalsid}, + {"GETDOMAINSID", net_getdomainsid}, {"HELP", net_help}, {NULL, NULL} -- cgit From 7eb8c5e8d0884f834cda623cf0b67932102ad70b Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 23 Sep 2002 15:00:09 +0000 Subject: tdbdump also needs signal.h. Thanks to Guenther Deschner Volker (This used to be commit a1bade0748fa46c6cb00e99d7022b21057679889) --- source3/tdb/tdbdump.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source3/tdb/tdbdump.c b/source3/tdb/tdbdump.c index 6664213209..9c1dc2761b 100644 --- a/source3/tdb/tdbdump.c +++ b/source3/tdb/tdbdump.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "tdb.h" static void print_data(TDB_DATA d) -- cgit From 83ca90a67dd3db225706d32ffe58b114e1faf7d3 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 23 Sep 2002 15:36:02 +0000 Subject: Cosmetic fix for debug message. (This used to be commit 42774a7753eb8be1ec04bcb5dda089910a1b6d0b) --- source3/utils/net_rpc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index 3192768931..8b8278b053 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -424,8 +424,7 @@ rpc_getsid_internals(const DOM_SID *domain_sid, struct cli_state *cli, sid_str, lp_workgroup()); if (!secrets_store_domain_sid(global_myname, domain_sid)) { - DEBUG(0,("pdb_generate_sam_sid: " - "Can't store domain SID as a pdc/bdc.\n")); + DEBUG(0,("Can't store domain SID\n")); return NT_STATUS_UNSUCCESSFUL; } -- cgit From 06ce201a29bb90a428a59a3d85752ccf2dca1bdd Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 23 Sep 2002 16:21:01 +0000 Subject: Ok, getting a bit more ambitious. Stop me, if this is wrong. ;-) When creating a group you have to take care of the fact that the underlying unix might not like the group name. This change gets around that problem by giving the add group script the chance to invent a group name. It then must only return the newly created numerical gid. Volker (This used to be commit b959419ed38e66a12b63cad3e5fbfa849f952acc) --- docs/manpages/smb.conf.5 | 9 +++++++-- source3/groupdb/mapping.c | 30 ++++++++++++++++++++++++++++-- source3/rpc_server/srv_samr_nt.c | 12 ++++++++---- source3/utils/net_rpc_samsync.c | 5 +++-- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/docs/manpages/smb.conf.5 b/docs/manpages/smb.conf.5 index 990ba027ab..8967134481 100644 --- a/docs/manpages/smb.conf.5 +++ b/docs/manpages/smb.conf.5 @@ -1616,8 +1616,13 @@ Example: \fBadd user script = /usr/local/samba/bin/add_user %u\fR .TP \fBadd group script (G)\fR -This is the full pathname to a script that will -be run \fBAS ROOT\fR by smbd(8) when a new group is requested. It will expand any \fI%g\fR to the group name passed. This script is only useful for installations using the Windows NT domain administration tools. +This is the full pathname to a script that will be run \fBAS ROOT\fR +by smbd(8) when a new group is requested. It will expand any \fI%g\fR +to the group name passed. This script is only useful for +installations using the Windows NT domain administration tools. The +script is free to create a group with an arbitrary name to circumvent +unix group name restrictions. In that case the script must print the +numeric gid of the created group on stdout. .TP \fBadmin users (S)\fR This is a list of users who will be granted diff --git a/source3/groupdb/mapping.c b/source3/groupdb/mapping.c index 2c9c7f47ea..5641431246 100644 --- a/source3/groupdb/mapping.c +++ b/source3/groupdb/mapping.c @@ -1156,16 +1156,42 @@ BOOL get_uid_list_of_group(gid_t gid, uid_t **uid, int *num_uids) Create a UNIX group on demand. ****************************************************************************/ -int smb_create_group(char *unix_group) +int smb_create_group(char *unix_group, gid_t *new_gid) { pstring add_script; int ret; + int fd = 0; pstrcpy(add_script, lp_addgroup_script()); if (! *add_script) return -1; pstring_sub(add_script, "%g", unix_group); - ret = smbrun(add_script,NULL); + ret = smbrun(add_script, (new_gid!=NULL) ? &fd : NULL); DEBUG(3,("smb_create_group: Running the command `%s' gave %d\n",add_script,ret)); + if (ret != 0) + return ret; + + if (fd != 0) { + fstring output; + + *new_gid = 0; + if (read(fd, output, sizeof(output)) > 0) { + *new_gid = (gid_t)strtoul(output, NULL, 10); + } + close(fd); + + if (*new_gid == 0) { + /* The output was garbage. We assume nobody + will create group 0 via smbd. Now we try to + get the group via getgrnam. */ + + struct group *grp = getgrnam(unix_group); + if (grp != NULL) + *new_gid = grp->gr_gid; + else + return 1; + } + } + return ret; } diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c index fd1111d5dc..ea631838da 100644 --- a/source3/rpc_server/srv_samr_nt.c +++ b/source3/rpc_server/srv_samr_nt.c @@ -3857,6 +3857,7 @@ NTSTATUS _samr_create_dom_group(pipes_struct *p, SAMR_Q_CREATE_DOM_GROUP *q_u, S struct samr_info *info; PRIVILEGE_SET priv_set; uint32 acc_granted; + gid_t gid; init_privilege(&priv_set); @@ -3880,10 +3881,11 @@ NTSTATUS _samr_create_dom_group(pipes_struct *p, SAMR_Q_CREATE_DOM_GROUP *q_u, S return NT_STATUS_GROUP_EXISTS; /* we can create the UNIX group */ - smb_create_group(name); + if (smb_create_group(name, &gid) != 0) + return NT_STATUS_ACCESS_DENIED; /* check if the group has been successfully created */ - if ((grp=getgrnam(name)) == NULL) + if ((grp=getgrgid(gid)) == NULL) return NT_STATUS_ACCESS_DENIED; r_u->rid=pdb_gid_to_group_rid(grp->gr_gid); @@ -3920,6 +3922,7 @@ NTSTATUS _samr_create_dom_alias(pipes_struct *p, SAMR_Q_CREATE_DOM_ALIAS *q_u, S struct samr_info *info; PRIVILEGE_SET priv_set; uint32 acc_granted; + gid_t gid; init_privilege(&priv_set); @@ -3943,10 +3946,11 @@ NTSTATUS _samr_create_dom_alias(pipes_struct *p, SAMR_Q_CREATE_DOM_ALIAS *q_u, S return NT_STATUS_GROUP_EXISTS; /* we can create the UNIX group */ - smb_create_group(name); + if (smb_create_group(name, &gid) != 0) + return NT_STATUS_ACCESS_DENIED; /* check if the group has been successfully created */ - if ((grp=getgrnam(name)) == NULL) + if ((grp=getgrgid(gid)) == NULL) return NT_STATUS_ACCESS_DENIED; r_u->rid=pdb_gid_to_group_rid(grp->gr_gid); diff --git a/source3/utils/net_rpc_samsync.c b/source3/utils/net_rpc_samsync.c index 9d54a771fc..95a813dcfd 100644 --- a/source3/utils/net_rpc_samsync.c +++ b/source3/utils/net_rpc_samsync.c @@ -323,14 +323,15 @@ fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) fstring sid_string; GROUP_MAP map; int flag = TDB_INSERT; + gid_t gid; unistr2_to_ascii(name, &delta->uni_grp_name, sizeof(name)-1); unistr2_to_ascii(comment, &delta->uni_grp_desc, sizeof(comment)-1); if ((grp = getgrnam(name)) == NULL) - smb_create_group(name); + smb_create_group(name, &gid); - if ((grp = getgrnam(name)) == NULL) + if ((grp = getgrgid(gid)) == NULL) return NT_STATUS_ACCESS_DENIED; /* add the group to the mapping table */ -- cgit From 587c4c5aa67a4c589fb276fe2df355b443b1d086 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Mon, 23 Sep 2002 16:46:32 +0000 Subject: Add net getlocalsid [name] (This used to be commit 08c3e2b824cd2c93ca548fa18ea16a18f5b197e5) --- source3/utils/net.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/source3/utils/net.c b/source3/utils/net.c index 9363d1a6a0..800aeded0a 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -329,6 +329,31 @@ static int net_file(int argc, const char **argv) return net_rap_file(argc, argv); } +/* + Retrieve our local SID or the SID for the specified name + */ +static int net_getlocalsid(int argc, const char **argv) +{ + DOM_SID sid; + const char *name; + fstring sid_str; + + if (argc >= 1) { + name = argv[0]; + } + else { + name = global_myname; + } + + if (!secrets_fetch_domain_sid(name, &sid)) { + DEBUG(0, ("Can't fetch domain SID for name: %s\n", name)); + return 1; + } + sid_to_string(sid_str, &sid); + d_printf("SID for domain %s is: %s\n", name, sid_str); + return 0; +} + static int net_setlocalsid(int argc, const char **argv) { DOM_SID sid; @@ -396,6 +421,7 @@ static struct functable net_func[] = { {"LOOKUP", net_lookup}, {"JOIN", net_join}, {"CACHE", net_cache}, + {"GETLOCALSID", net_getlocalsid}, {"SETLOCALSID", net_setlocalsid}, {"GETDOMAINSID", net_getdomainsid}, -- cgit From 9264711576bff6b2c39be8a6aaad0024fbd4120f Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Mon, 23 Sep 2002 16:54:32 +0000 Subject: Update some help. People keep forgetting that! (This used to be commit b53547bf663ed1714326f9b0e74215e012e728af) --- source3/utils/net_help.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source3/utils/net_help.c b/source3/utils/net_help.c index 16309c5334..262670cb2a 100644 --- a/source3/utils/net_help.c +++ b/source3/utils/net_help.c @@ -58,7 +58,7 @@ static int help_usage(int argc, const char **argv) "\n"\ "Valid functions are:\n"\ " RPC RAP ADS FILE SHARE SESSION SERVER DOMAIN PRINTQ USER GROUP VALIDATE\n"\ -" GROUPMEMBER ADMIN SERVICE PASSWORD TIME LOOKUP\n"); +" GROUPMEMBER ADMIN SERVICE PASSWORD TIME LOOKUP GETLOCALSID SETLOCALSID\n"); return -1; } @@ -136,6 +136,8 @@ static int net_usage(int argc, const char **argv) " net group\t\tto manage groups\n"\ " net join\t\tto join a domain\n"\ " net cache\t\tto operate on cache tdb file\n"\ + " net getlocalsid [NAME]\tto get the SID for local name\n"\ + " net setlocalsid SID\tto set the local domain SID\n"\ "\n"\ " net ads \tto run ADS commands\n"\ " net rap \tto run RAP (pre-RPC) commands\n"\ -- cgit From 2b6057ef1f9fbfb583a2f77e3b5d3aee2c115fe4 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 23 Sep 2002 17:50:04 +0000 Subject: Ok, what's this? Samba as a PDC wants to authenticate a user coming in to a native NT member server. If the logoff time in the samlogon reply is set to something else but infinity, the tree connect to the member server comes back with 'bad uid'. In my traces, NT PDC sends 0x7fff.. always. Weird, but true. I would really like others to double-check this. If you have questions regarding the setup, feel free to ask! Thanks! Volker (This used to be commit 066b163bde9419d32fe8ffe00c1841107357c138) --- source3/rpc_server/srv_netlog_nt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/rpc_server/srv_netlog_nt.c b/source3/rpc_server/srv_netlog_nt.c index 8f6011826a..4478729e4d 100644 --- a/source3/rpc_server/srv_netlog_nt.c +++ b/source3/rpc_server/srv_netlog_nt.c @@ -712,8 +712,8 @@ NTSTATUS _net_sam_logon(pipes_struct *p, NET_Q_SAM_LOGON *q_u, NET_R_SAM_LOGON * pdb_get_logon_script(sampw), pdb_get_profile_path(sampw), pdb_get_logon_time(sampw), - pdb_get_logoff_time(sampw), - pdb_get_kickoff_time(sampw), + get_time_t_max(), + get_time_t_max(), pdb_get_pass_last_set_time(sampw), pdb_get_pass_can_change_time(sampw), pdb_get_pass_must_change_time(sampw), -- cgit From af78eafa6cd8cf5e43c0c4104a3944855e35743f Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 23 Sep 2002 21:24:31 +0000 Subject: Don't uppercase the username and domain in a session setup. (This used to be commit 0ad19825df318030b1772404570cd993fe49e40a) --- source3/client/client.c | 2 -- source3/libsmb/cliconnect.c | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/source3/client/client.c b/source3/client/client.c index 7afd8f25bc..eb6b572760 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -2758,7 +2758,6 @@ static void remember_query_host(const char *arg, got_pass = True; memset(strchr_m(getenv("USER"),'%')+1,'X',strlen(password)); } - strupper(username); } /* modification to support PASSWD environmental var @@ -2775,7 +2774,6 @@ static void remember_query_host(const char *arg, if (*username == 0 && getenv("LOGNAME")) { pstrcpy(username,getenv("LOGNAME")); - strupper(username); } if (*username == 0) { diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 298b1e52b6..62acccdfb7 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -317,8 +317,8 @@ static BOOL cli_session_setup_nt1(struct cli_state *cli, char *user, p = smb_buf(cli->outbuf); memcpy(p,pword,passlen); p += passlen; memcpy(p,ntpword,ntpasslen); p += ntpasslen; - p += clistr_push(cli, p, user, -1, STR_TERMINATE|STR_UPPER); - p += clistr_push(cli, p, workgroup, -1, STR_TERMINATE|STR_UPPER); + p += clistr_push(cli, p, user, -1, STR_TERMINATE); + p += clistr_push(cli, p, workgroup, -1, STR_TERMINATE); p += clistr_push(cli, p, "Unix", -1, STR_TERMINATE); p += clistr_push(cli, p, "Samba", -1, STR_TERMINATE); cli_setup_bcc(cli, p); -- cgit From 6077a0a551fd66c993bb79f40feb9213b014abc8 Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Tue, 24 Sep 2002 01:12:11 +0000 Subject: Updated in preparation for samba-3.0.0alpha20 (This used to be commit 05f61b2dc4c120f5303e1a7c85ca8b1409d9a95e) --- packaging/Caldera/OpenLinux/samba3.spec.tmpl | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/packaging/Caldera/OpenLinux/samba3.spec.tmpl b/packaging/Caldera/OpenLinux/samba3.spec.tmpl index 7d7da04336..a59ef071b2 100644 --- a/packaging/Caldera/OpenLinux/samba3.spec.tmpl +++ b/packaging/Caldera/OpenLinux/samba3.spec.tmpl @@ -244,25 +244,23 @@ CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \ --with-netatalk \ --with-smbwrapper \ --with-libsmbclient \ + --with-acl-support \ --with-sambabook=$(DESTDIR)/usr/share/swat/using_samba # Temp disabled - add later - JHT # --with-pam_smbpass \ # --with-nisplus-home \ -# --with-acl-support \ make all nsswitch/libnss_wins.so nsswitch/libnss_winbind.so torture nsswitch/pam_winbind.so everything (cd tdb; make tdbdump tdbtest tdbtorture tdbtool) -#cd ../examples/VFS -#CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \ -# --prefix='$(DESTDIR)/usr' \ -# --localstatedir='$(DESTDIR)/var' \ -# --libdir='$(DESTDIR)%{EtcSamba}' \ -# --sbindir='$(DESTDIR)/usr/sbin' -#make -#cd block -#make +cd ../examples/VFS +CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \ + --prefix='$(DESTDIR)/usr' \ + --localstatedir='$(DESTDIR)/var' \ + --libdir='$(DESTDIR)%{EtcSamba}' \ + --sbindir='$(DESTDIR)/usr/sbin' +make %Install %{mkDESTDIR} @@ -304,11 +302,12 @@ for i in tdbdump tdbtest tdbtorture tdbtool do install -m 755 source/tdb/$i $DESTDIR/usr/sbin done + # Add VFS Modules -#for i in audit.so recycle.so block/block.so -#do -# install -m755 $i $DESTDIR/lib/samba -#done +for i in audit.so recycle.so netatalk.so skel.so +do + install -m755 $i $DESTDIR/lib/samba +done #mv $DESTDIR/usr/bin/{make,add,conv}* $DESTDIR/usr/sbin -- cgit From 68e361e72a8d23eaedcddc5a90db0846949d3e8e Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Tue, 24 Sep 2002 01:37:05 +0000 Subject: Removed call to configure for VFS modules. (This used to be commit a029d9781d8511eb5eb51568647fbeccde2efed3) --- packaging/Caldera/OpenLinux/samba3.spec.tmpl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packaging/Caldera/OpenLinux/samba3.spec.tmpl b/packaging/Caldera/OpenLinux/samba3.spec.tmpl index a59ef071b2..4e9f755edc 100644 --- a/packaging/Caldera/OpenLinux/samba3.spec.tmpl +++ b/packaging/Caldera/OpenLinux/samba3.spec.tmpl @@ -255,11 +255,11 @@ make all nsswitch/libnss_wins.so nsswitch/libnss_winbind.so torture nsswitch/pam (cd tdb; make tdbdump tdbtest tdbtorture tdbtool) cd ../examples/VFS -CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \ - --prefix='$(DESTDIR)/usr' \ - --localstatedir='$(DESTDIR)/var' \ - --libdir='$(DESTDIR)%{EtcSamba}' \ - --sbindir='$(DESTDIR)/usr/sbin' +#CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \ +# --prefix='$(DESTDIR)/usr' \ +# --localstatedir='$(DESTDIR)/var' \ +# --libdir='$(DESTDIR)%{EtcSamba}' \ +# --sbindir='$(DESTDIR)/usr/sbin' make %Install -- cgit From 0f72389a85699fc0b96f3a6b5f1ad5df41620eda Mon Sep 17 00:00:00 2001 From: John Terpstra Date: Tue, 24 Sep 2002 01:59:08 +0000 Subject: Typos! Fix 'em! (This used to be commit d2976b6872c43e3b5bb9a589e8eaff1a08ad5352) --- packaging/Caldera/OpenLinux/samba3.spec.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/Caldera/OpenLinux/samba3.spec.tmpl b/packaging/Caldera/OpenLinux/samba3.spec.tmpl index 4e9f755edc..43e60a2ac0 100644 --- a/packaging/Caldera/OpenLinux/samba3.spec.tmpl +++ b/packaging/Caldera/OpenLinux/samba3.spec.tmpl @@ -306,7 +306,7 @@ done # Add VFS Modules for i in audit.so recycle.so netatalk.so skel.so do - install -m755 $i $DESTDIR/lib/samba + install -m755 examples/VFS/$i $DESTDIR/lib/samba done #mv $DESTDIR/usr/bin/{make,add,conv}* $DESTDIR/usr/sbin -- cgit From 05c557c31ceaacdfcf911145b9479285e5e08a83 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Tue, 24 Sep 2002 06:44:37 +0000 Subject: Make sure that Alfred Perlstein's changes get into head as smbprint and that the old one becomes smbprint.old. We still need to hack smbprint some more to make sure that we can pass the username and password in a file rather than on the command line where local hackers can see it. (This used to be commit ef970a764eb97893ff2090f7cbf2f2ec06911d0f) --- examples/printing/smbprint | 104 ++++++++++++++++++++++++++++++----------- examples/printing/smbprint.old | 95 +++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+), 27 deletions(-) create mode 100755 examples/printing/smbprint.old diff --git a/examples/printing/smbprint b/examples/printing/smbprint index 5a00a2a8aa..68bd66a13f 100755 --- a/examples/printing/smbprint +++ b/examples/printing/smbprint @@ -25,6 +25,11 @@ # # -t now causes translate to be used when sending files # +# Further modifications by Alfred Perlstein to fix some problems and +# improve the quality of the code (3-Dec-2001). +# +# More hacking by Richard Sharpe to improve portability. 9-Dec-2001. +# # In order for this to work the /etc/printcap entry must include an # accounting file (af=...): # @@ -46,12 +51,10 @@ # service=CJET_371 # password="" -# -# Debugging log file, change to /dev/null if you like. -# -logfile=/tmp/smb-print.log -# logfile=/dev/null +#smbclient=/usr/pkg/bin/smbclient +# Assume that smbclient will be in the same place as smbprint +smbclient="`dirname $0`/smbclient" # # The last parameter to the filter is the accounting file name. @@ -67,29 +70,76 @@ config_file=$spool_dir/.config # server # service # password -eval `cat $config_file` +# username (optional) +# IP (optional) +# debug (optional) +# debugsmb (optional) +# debugfile (optional) +. $config_file + +if [ "x$password" = "x" ] ; then + password="-N" +fi -while getopts t c; do - case $c in - t) - TRANS=1 - ;; +if [ "x$username" == "x" ] ; then + username="$server"; +fi - '?') # Bad parameters, ignore it ... - ;; - esac +while test $# -gt 0; do + case "$1" in + -t) + TRANS=1 + ;; + + *) # Bad Parameters, ignore them ... + ;; + esac + shift done + +command="print - ;" +if [ $TRANS -eq 1 ]; then + command="translate;$command"; +fi + +debugfile="/tmp/smb-print.log" +if [ "x$debug" = "x" ] ; then + debugfile=/dev/null debugargs= +else + if [ $debug -eq 0 ] ; then + debugfile=/dev/null debugargs= + else + set -x; exec >>$debugfile 2>&1 + debugargs="$debugfile." + #[ "x$debugsmb" == "x" ] || debugargs="$debugargs -d $debugsmb" + fi +fi + +if [ "x$smbconf" != "x" ]; then + + smbconf="-s $smbconf" + +fi + +if [ "x$IP" != "x" ]; then + + IP="-I $IP" + +fi + +if [ "x$debugargs" != "x" ]; then + + debugargs="-l $debugargs" + +fi + +$smbclient \ + "\\\\$server\\$service" \ + $password \ + $smbconf \ + $IP \ + $debugargs \ + -U $username \ + -P \ + -c "$command" # -# Some debugging help, change the >> to > if you want to same space. -# -echo "server $server, service $service" >> $logfile - -( -# NOTE You may wish to add the line `echo translate' if you want automatic -# CR/LF translation when printing. - if [ $TRANS -eq 1 ]; then - echo translate - fi - echo "print -" - cat -) | /usr/local/samba/bin/smbclient "\\\\$server\\$service" $password -U $server -N -P >> $logfile diff --git a/examples/printing/smbprint.old b/examples/printing/smbprint.old new file mode 100755 index 0000000000..5a00a2a8aa --- /dev/null +++ b/examples/printing/smbprint.old @@ -0,0 +1,95 @@ +#!/bin/sh + +# This script is an input filter for printcap printing on a unix machine. It +# uses the smbclient program to print the file to the specified smb-based +# server and service. +# For example you could have a printcap entry like this +# +# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint +# +# which would create a unix printer called "smb" that will print via this +# script. You will need to create the spool directory /usr/spool/smb with +# appropriate permissions and ownerships for your system. + +# Set these to the server and service you wish to print to +# In this example I have a WfWg PC called "lapland" that has a printer +# exported called "printer" with no password. + +# +# Script further altered by hamiltom@ecnz.co.nz (Michael Hamilton) +# so that the server, service, and password can be read from +# a /usr/var/spool/lpd/PRINTNAME/.config file. +# +# Script further modified by Richard Sharpe to fix some things. +# Get rid of the -x on the first line, and add parameters +# +# -t now causes translate to be used when sending files +# +# In order for this to work the /etc/printcap entry must include an +# accounting file (af=...): +# +# cdcolour:\ +# :cm=CD IBM Colorjet on 6th:\ +# :sd=/var/spool/lpd/cdcolour:\ +# :af=/var/spool/lpd/cdcolour/acct:\ +# :if=/usr/local/etc/smbprint:\ +# :mx=0:\ +# :lp=/dev/null: +# +# The /usr/var/spool/lpd/PRINTNAME/.config file should contain: +# server=PC_SERVER +# service=PR_SHARENAME +# password="password" +# +# E.g. +# server=PAULS_PC +# service=CJET_371 +# password="" + +# +# Debugging log file, change to /dev/null if you like. +# +logfile=/tmp/smb-print.log +# logfile=/dev/null + + +# +# The last parameter to the filter is the accounting file name. +# Extract the directory name from the file name. +# Concat this with /.config to get the config file. +# +TRANS=0 +eval acct_file=\${$#} +spool_dir=`dirname $acct_file` +config_file=$spool_dir/.config + +# Should read the following variables set in the config file: +# server +# service +# password +eval `cat $config_file` + +while getopts t c; do + case $c in + t) + TRANS=1 + ;; + + '?') # Bad parameters, ignore it ... + ;; + esac +done +# +# Some debugging help, change the >> to > if you want to same space. +# +echo "server $server, service $service" >> $logfile + +( +# NOTE You may wish to add the line `echo translate' if you want automatic +# CR/LF translation when printing. + if [ $TRANS -eq 1 ]; then + echo translate + fi + echo "print -" + cat +) | /usr/local/samba/bin/smbclient "\\\\$server\\$service" $password -U $server -N -P >> $logfile -- cgit From 28947d6cd12040de37e3dfb29eeb1163cc429f32 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 24 Sep 2002 06:50:11 +0000 Subject: This is a first working version of net rpc vampire. First do a net rpc getsid, then join as a BDC, and then watch net rpc vampire suck out the good stuff out of a PDC :-). It's not perfect, but it does quite a bit for me. Watch out for more. Volker (This used to be commit f0d7ac9feb5844c93789344285b1d66f480209ba) --- source3/utils/net_rpc_samsync.c | 276 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 264 insertions(+), 12 deletions(-) diff --git a/source3/utils/net_rpc_samsync.c b/source3/utils/net_rpc_samsync.c index 95a813dcfd..202d5b5c88 100644 --- a/source3/utils/net_rpc_samsync.c +++ b/source3/utils/net_rpc_samsync.c @@ -23,6 +23,8 @@ #include "includes.h" #include "../utils/net.h" +extern DOM_SID global_sid_Builtin; + static void display_group_mem_info(uint32 rid, SAM_GROUP_MEM_INFO *g) { int i; @@ -191,6 +193,7 @@ sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta) { DOM_SID sid; fstring s; + uchar lm_passwd[16], nt_passwd[16]; /* Username, fullname, home dir, dir drive, logon script, acct desc, workstations, profile. */ @@ -235,9 +238,8 @@ sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta) /* Logon and password information */ pdb_set_logon_time(account, nt_time_to_unix(&delta->logon_time), True); - pdb_set_logoff_time(account, nt_time_to_unix(&delta->logoff_time), + pdb_set_logoff_time(account, nt_time_to_unix(&delta->logoff_time), True); - pdb_set_logon_divs(account, delta->logon_divs); /* TODO: logon hours */ @@ -247,6 +249,14 @@ sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta) pdb_set_pass_last_set_time( account, nt_time_to_unix(&delta->pwd_last_set_time)); + pdb_set_kickoff_time(account, get_time_t_max(), True); + + /* Decode hashes from password hash */ + sam_pwd_hash(delta->user_rid, delta->pass.buf_lm_pwd, lm_passwd, 0); + sam_pwd_hash(delta->user_rid, delta->pass.buf_nt_pwd, nt_passwd, 0); + pdb_set_nt_passwd(account, nt_passwd); + pdb_set_lanman_passwd(account, lm_passwd); + /* TODO: account expiry time */ pdb_set_acct_ctrl(account, delta->acb_info); @@ -260,6 +270,8 @@ fetch_account_info(uint32 rid, SAM_ACCOUNT_INFO *delta) fstring account; pstring add_script; SAM_ACCOUNT *sam_account=NULL; + GROUP_MAP map; + struct group *grp; fstrcpy(account, unistr2_static(&delta->uni_acct_name)); d_printf("Creating account: %s\n", account); @@ -270,6 +282,8 @@ fetch_account_info(uint32 rid, SAM_ACCOUNT_INFO *delta) if (!pdb_getsampwnam(sam_account, account)) { struct passwd *pw; + pdb_free_sam(&sam_account); + /* Create appropriate user */ if (delta->acb_info & ACB_NORMAL) { pstrcpy(add_script, lp_adduser_script()); @@ -308,7 +322,29 @@ fetch_account_info(uint32 rid, SAM_ACCOUNT_INFO *delta) } sam_account_from_delta(sam_account, delta); - pdb_add_sam_account(sam_account); + + if (!pdb_add_sam_account(sam_account)) { + DEBUG(1, ("SAM Account for %s already existed, updating\n", + account)); + pdb_update_sam_account(sam_account); + } + + if (!get_group_map_from_sid(*pdb_get_group_sid(sam_account), + &map, False)) { + DEBUG(0, ("Primary group of %s has no mapping!\n", + pdb_get_username(sam_account))); + pdb_free_sam(&sam_account); + return NT_STATUS_NO_SUCH_GROUP; + } + + if (!(grp = getgrgid(map.gid))) { + DEBUG(0, ("Could not find unix group %d\n", map.gid)); + pdb_free_sam(&sam_account); + return NT_STATUS_NO_SUCH_GROUP; + } + + smb_set_primary_group(grp->gr_name, pdb_get_username(sam_account)); + pdb_free_sam(&sam_account); return NT_STATUS_OK; } @@ -318,7 +354,7 @@ fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) { fstring name; fstring comment; - struct group *grp; + struct group *grp = NULL; DOM_SID group_sid; fstring sid_string; GROUP_MAP map; @@ -339,10 +375,24 @@ fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) sid_append_rid(&group_sid, rid); sid_to_string(sid_string, &group_sid); - /* Add the group mapping */ if (get_group_map_from_sid(group_sid, &map, False)) { - /* Don't TDB_INSERT, mapping exists */ - flag = 0; + grp = getgrgid(map.gid); + flag = 0; /* Don't TDB_INSERT, mapping exists */ + } + + if (grp == NULL) + { + gid_t new_gid; + /* No group found from mapping, find it from its name. */ + if ((grp = getgrnam(name)) == NULL) { + /* No appropriate group found, create one */ + d_printf("Creating unix group: '%s'\n", name); + if (smb_create_group(name, &new_gid) != 0) + return NT_STATUS_ACCESS_DENIED; + } + + if ((grp = getgrgid(new_gid)) == NULL) + return NT_STATUS_ACCESS_DENIED; } map.gid = grp->gr_gid; @@ -359,8 +409,193 @@ fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta) return NT_STATUS_OK; } +static NTSTATUS +fetch_group_mem_info(uint32 rid, SAM_GROUP_MEM_INFO *delta) +{ + int i; + TALLOC_CTX *t = NULL; + char **nt_members = NULL; + char **unix_members; + DOM_SID group_sid; + GROUP_MAP map; + struct group *grp; + + if (delta->num_members == 0) { + return NT_STATUS_OK; + } + + sid_copy(&group_sid, get_global_sam_sid()); + sid_append_rid(&group_sid, rid); + + if (!get_domain_group_from_sid(group_sid, &map, False)) { + DEBUG(0, ("Could not find global group %d\n", rid)); + return NT_STATUS_NO_SUCH_GROUP; + } + + if (!(grp = getgrgid(map.gid))) { + DEBUG(0, ("Could not find unix group %d\n", map.gid)); + return NT_STATUS_NO_SUCH_GROUP; + } + + d_printf("Group members of %s: ", grp->gr_name); + + if (!(t = talloc_init())) { + DEBUG(0, ("could not talloc_init\n")); + return NT_STATUS_NO_MEMORY; + } + + nt_members = talloc_zero(t, sizeof(char *) * delta->num_members); + + for (i=0; inum_members; i++) { + NTSTATUS nt_status; + SAM_ACCOUNT *member = NULL; + DOM_SID member_sid; + + if (!NT_STATUS_IS_OK(nt_status = pdb_init_sam_talloc(t, &member))) { + talloc_destroy(t); + return nt_status; + } + + sid_copy(&member_sid, get_global_sam_sid()); + sid_append_rid(&member_sid, delta->rids[i]); + + if (!pdb_getsampwsid(member, &member_sid)) { + DEBUG(1, ("Found bogus group member: %d\n", + delta->rids[i])); + pdb_free_sam(&member); + continue; + } + + if (pdb_get_group_rid(member) == rid) { + d_printf("%s(primary),", pdb_get_username(member)); + pdb_free_sam(&member); + continue; + } + + d_printf("%s,", pdb_get_username(member)); + nt_members[i] = talloc_strdup(t, pdb_get_username(member)); + pdb_free_sam(&member); + } + + d_printf("\n"); + + unix_members = grp->gr_mem; + + while (*unix_members) { + BOOL is_nt_member = False; + for (i=0; inum_members; i++) { + if (nt_members[i] == NULL) { + /* This was a primary group */ + continue; + } + + if (strcmp(*unix_members, nt_members[i]) == 0) { + is_nt_member = True; + break; + } + } + if (!is_nt_member) { + /* We look at a unix group member that is not + an nt group member. So, remove it. NT is + boss here. */ + smb_delete_user_group(grp->gr_name, *unix_members); + } + unix_members += 1; + } + + for (i=0; inum_members; i++) { + BOOL is_unix_member = False; + + if (nt_members[i] == NULL) { + /* This was the primary group */ + continue; + } + + unix_members = grp->gr_mem; + + while (*unix_members) { + if (strcmp(*unix_members, nt_members[i]) == 0) { + is_unix_member = True; + break; + } + unix_members += 1; + } + + if (!is_unix_member) { + /* We look at a nt group member that is not a + unix group member currently. So, add the nt + group member. */ + smb_add_user_group(grp->gr_name, nt_members[i]); + } + } + + talloc_destroy(t); + return NT_STATUS_OK; +} + +static NTSTATUS fetch_alias_info(uint32 rid, SAM_ALIAS_INFO *delta, + DOM_SID dom_sid) +{ + fstring name; + fstring comment; + struct group *grp = NULL; + DOM_SID alias_sid; + fstring sid_string; + GROUP_MAP map; + int insert_flag = TDB_INSERT; + + unistr2_to_ascii(name, &delta->uni_als_name, sizeof(name)-1); + unistr2_to_ascii(comment, &delta->uni_als_desc, sizeof(comment)-1); + + /* Find out whether the group is already mapped */ + sid_copy(&alias_sid, &dom_sid); + sid_append_rid(&alias_sid, rid); + sid_to_string(sid_string, &alias_sid); + + if (get_group_map_from_sid(alias_sid, &map, False)) { + grp = getgrgid(map.gid); + insert_flag = 0; /* Don't TDB_INSERT, mapping exists */ + } + + if (grp == NULL) { + gid_t new_gid; + /* No group found from mapping, find it from its name. */ + if ((grp = getgrnam(name)) == NULL) { + /* No appropriate group found, create one */ + d_printf("Creating unix group: '%s'\n", name); + if (smb_create_group(name, &new_gid) != 0) + return NT_STATUS_ACCESS_DENIED; + } + + if ((grp = getgrgid(new_gid)) == NULL) + return NT_STATUS_ACCESS_DENIED; + } + + map.gid = grp->gr_gid; + map.sid = alias_sid; + map.sid_name_use = SID_NAME_ALIAS; + + fstrcpy(map.nt_name, name); + fstrcpy(map.comment, comment); + + map.priv_set.count = 0; + map.priv_set.set = NULL; + + add_mapping_entry(&map, insert_flag); + + return NT_STATUS_OK; +} + +static NTSTATUS +fetch_alias_mem(uint32 rid, SAM_ALIAS_MEM_INFO *delta, DOM_SID dom_sid) +{ + + return NT_STATUS_OK; +} + static void -fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta) +fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta, + DOM_SID dom_sid) { switch(hdr_delta->type) { case SAM_DELTA_ACCOUNT_INFO: @@ -371,6 +606,18 @@ fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta) fetch_group_info(hdr_delta->target_rid, &delta->group_info); break; + case SAM_DELTA_GROUP_MEM: + fetch_group_mem_info(hdr_delta->target_rid, + &delta->grp_mem_info); + break; + case SAM_DELTA_ALIAS_INFO: + fetch_alias_info(hdr_delta->target_rid, + &delta->alias_info, dom_sid); + break; + case SAM_DELTA_ALIAS_MEM: + fetch_alias_mem(hdr_delta->target_rid, + &delta->als_mem_info, dom_sid); + break; default: d_printf("Unknown delta record type %d\n", hdr_delta->type); break; @@ -378,7 +625,8 @@ fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta) } static void -fetch_database(struct cli_state *cli, unsigned db_type, DOM_CRED *ret_creds) +fetch_database(struct cli_state *cli, unsigned db_type, DOM_CRED *ret_creds, + DOM_SID dom_sid) { unsigned last_rid = -1; NTSTATUS result; @@ -403,7 +651,7 @@ fetch_database(struct cli_state *cli, unsigned db_type, DOM_CRED *ret_creds) ret_creds); last_rid = 0; for (i = 0; i < num_deltas; i++) { - fetch_sam_entry(&hdr_deltas[i], &deltas[i]); + fetch_sam_entry(&hdr_deltas[i], &deltas[i], dom_sid); last_rid = hdr_deltas[i].target_rid; } } while (last_rid && NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)); @@ -419,6 +667,7 @@ int rpc_vampire(int argc, const char **argv) uchar trust_password[16]; DOM_CRED ret_creds; uint32 neg_flags = 0x000001ff; + DOM_SID dom_sid; ZERO_STRUCT(ret_creds); @@ -446,8 +695,11 @@ int rpc_vampire(int argc, const char **argv) goto fail; } - fetch_database(cli, SAM_DATABASE_DOMAIN, &ret_creds); - fetch_database(cli, SAM_DATABASE_BUILTIN, &ret_creds); + dom_sid = *get_global_sam_sid(); + fetch_database(cli, SAM_DATABASE_DOMAIN, &ret_creds, dom_sid); + + sid_copy(&dom_sid, &global_sid_Builtin); + fetch_database(cli, SAM_DATABASE_BUILTIN, &ret_creds, dom_sid); /* Currently we crash on PRIVS somewhere in unmarshalling */ /* Dump_database(cli, SAM_DATABASE_PRIVS, &ret_creds); */ -- cgit From 2cd64003e3b127ca5a204b801155fcb4a7447a48 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 24 Sep 2002 20:18:39 +0000 Subject: - Don't put pointer to sam_domain_handle in sam_methods but single domainsid and domainname - Allocate sam_methods, set domain_sid, domain_name and backend_name in make_sam_methods_backend_entry instead of in the backend - Remove sam_context and domain_sid pointers from the sam_init_function - we don't need those arguments anymore since they're available in sam_methods as well (This used to be commit 50d2527eed0eb26c16f2f7e28badbf08d771380e) --- examples/sam/sam_skel.c | 114 +++++++++++++++++++++------------------------- source3/include/sam.h | 5 +- source3/sam/interface.c | 39 +++++++++------- source3/sam/sam_plugin.c | 6 +-- source3/torture/cmd_sam.c | 102 ++++++++++++++++++++++------------------- source3/torture/samtest.c | 22 +++++---- source3/torture/samtest.h | 9 +++- 7 files changed, 156 insertions(+), 141 deletions(-) diff --git a/examples/sam/sam_skel.c b/examples/sam/sam_skel.c index a3b8f13391..da3a375894 100644 --- a/examples/sam/sam_skel.c +++ b/examples/sam/sam_skel.c @@ -3,6 +3,7 @@ this is a skeleton for SAM backend modules. Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jelmer Vernooij 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 @@ -29,29 +30,28 @@ static int sam_skel_debug_level = DBGC_SAM; /* define the version of the SAM interface */ SAM_MODULE_VERSIONING_MAGIC - /* General API */ -NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) +NTSTATUS sam_skel_get_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, SEC_DESC **sd) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) +NTSTATUS sam_skel_set_sec_desc(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, const SEC_DESC *sd) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) +NTSTATUS sam_skel_lookup_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID *sid, char **name, uint32 *type) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type) +NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const char *name, DOM_SID **sid, uint32 *type) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -60,13 +60,13 @@ NTSTATUS sam_skel_lookup_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN /* Domain API */ -NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_method, const SAM_DOMAIN_HANDLE *domain) +NTSTATUS sam_skel_update_domain(const SAM_METHODS *sam_methods, const SAM_DOMAIN_HANDLE *domain) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain) +NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, SAM_DOMAIN_HANDLE **domain) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -75,44 +75,44 @@ NTSTATUS sam_skel_get_domain_handle(const SAM_METHODS *sam_method, const NT_USER /* Account API */ -NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_create_account(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *group_name, uint16 acct_ctrl, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_add_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_update_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_method, const SAM_ACCOUNT_HANDLE *account) +NTSTATUS sam_skel_delete_account(const SAM_METHODS *sam_methods, const SAM_ACCOUNT_HANDLE *account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) +NTSTATUS sam_skel_enum_accounts(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 acct_ctrl, uint32 *account_count, SAM_ACCOUNT_ENUM **accounts) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_get_account_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *accountsid, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) +NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_ACCOUNT_HANDLE **account) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; @@ -121,126 +121,118 @@ NTSTATUS sam_skel_get_account_by_name(const SAM_METHODS *sam_method, const NT_US /* Group API */ -NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_create_group(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *account_name, uint16 group_ctrl, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_add_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_update_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group) +NTSTATUS sam_skel_delete_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_skel_enum_groups(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint16 group_ctrl, uint32 *groups_count, SAM_GROUP_ENUM **groups) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_get_group_by_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const DOM_SID *groupsid, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) +NTSTATUS sam_skel_get_group_by_name(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, uint32 access_desired, const char *name, SAM_GROUP_HANDLE **group) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +NTSTATUS sam_skel_add_member_to_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) +NTSTATUS sam_skel_delete_member_from_group(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, const SAM_GROUP_MEMBER *member) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_method, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) +NTSTATUS sam_skel_enum_groupmembers(const SAM_METHODS *sam_methods, const SAM_GROUP_HANDLE *group, uint32 *members_count, SAM_GROUP_MEMBER **members) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_method, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) +NTSTATUS sam_skel_get_groups_of_sid(const SAM_METHODS *sam_methods, const NT_USER_TOKEN *access_token, const DOM_SID **sids, uint16 group_ctrl, uint32 *group_count, SAM_GROUP_ENUM **groups) { DEBUG(0,("sam_skel: %s was called!\n",__FUNCTION__)); return NT_STATUS_NOT_IMPLEMENTED; } -NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const DOM_SID *domain, const char *module_params) +NTSTATUS sam_init(SAM_METHODS *sam_methods, const char *module_params) { - NTSTATUS nt_status; - - if (!NT_STATUS_IS_OK(nt_status = make_sam_methods(sam_context->mem_ctx, sam_method))) { - return nt_status; - } - - (*sam_method)->backendname = "sam_skel"; - /* Functions your SAM module doesn't provide should be set * to NULL */ - (*sam_method)->sam_get_sec_desc = sam_skel_get_sec_desc; - (*sam_method)->sam_set_sec_desc = sam_skel_set_sec_desc; + sam_methods->sam_get_sec_desc = sam_skel_get_sec_desc; + sam_methods->sam_set_sec_desc = sam_skel_set_sec_desc; - (*sam_method)->sam_lookup_sid = sam_skel_lookup_sid; - (*sam_method)->sam_lookup_name = sam_skel_lookup_name; + sam_methods->sam_lookup_sid = sam_skel_lookup_sid; + sam_methods->sam_lookup_name = sam_skel_lookup_name; /* Domain API */ - (*sam_method)->sam_update_domain = sam_skel_update_domain; - (*sam_method)->sam_get_domain_handle = sam_skel_get_domain_handle; + sam_methods->sam_update_domain = sam_skel_update_domain; + sam_methods->sam_get_domain_handle = sam_skel_get_domain_handle; /* Account API */ - (*sam_method)->sam_create_account = sam_skel_create_account; - (*sam_method)->sam_add_account = sam_skel_add_account; - (*sam_method)->sam_update_account = sam_skel_update_account; - (*sam_method)->sam_delete_account = sam_skel_delete_account; - (*sam_method)->sam_enum_accounts = sam_skel_enum_accounts; + sam_methods->sam_create_account = sam_skel_create_account; + sam_methods->sam_add_account = sam_skel_add_account; + sam_methods->sam_update_account = sam_skel_update_account; + sam_methods->sam_delete_account = sam_skel_delete_account; + sam_methods->sam_enum_accounts = sam_skel_enum_accounts; - (*sam_method)->sam_get_account_by_sid = sam_skel_get_account_by_sid; - (*sam_method)->sam_get_account_by_name = sam_skel_get_account_by_name; + sam_methods->sam_get_account_by_sid = sam_skel_get_account_by_sid; + sam_methods->sam_get_account_by_name = sam_skel_get_account_by_name; /* Group API */ - (*sam_method)->sam_create_group = sam_skel_create_group; - (*sam_method)->sam_add_group = sam_skel_add_group; - (*sam_method)->sam_update_group = sam_skel_update_group; - (*sam_method)->sam_delete_group = sam_skel_delete_group; - (*sam_method)->sam_enum_groups = sam_skel_enum_groups; - (*sam_method)->sam_get_group_by_sid = sam_skel_get_group_by_sid; - (*sam_method)->sam_get_group_by_name = sam_skel_get_group_by_name; + sam_methods->sam_create_group = sam_skel_create_group; + sam_methods->sam_add_group = sam_skel_add_group; + sam_methods->sam_update_group = sam_skel_update_group; + sam_methods->sam_delete_group = sam_skel_delete_group; + sam_methods->sam_enum_groups = sam_skel_enum_groups; + sam_methods->sam_get_group_by_sid = sam_skel_get_group_by_sid; + sam_methods->sam_get_group_by_name = sam_skel_get_group_by_name; - (*sam_method)->sam_add_member_to_group = sam_skel_add_member_to_group; - (*sam_method)->sam_delete_member_from_group = sam_skel_delete_member_from_group; - (*sam_method)->sam_enum_groupmembers = sam_skel_enum_groupmembers; + sam_methods->sam_add_member_to_group = sam_skel_add_member_to_group; + sam_methods->sam_delete_member_from_group = sam_skel_delete_member_from_group; + sam_methods->sam_enum_groupmembers = sam_skel_enum_groupmembers; - (*sam_method)->sam_get_groups_of_sid = sam_skel_get_groups_of_sid; + sam_methods->sam_get_groups_of_sid = sam_skel_get_groups_of_sid; - (*sam_method)->free_private_data = NULL; + sam_methods->free_private_data = NULL; sam_skel_debug_level = debug_add_class("sam_skel"); @@ -250,9 +242,9 @@ NTSTATUS sam_init(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, cons } else DEBUG(2, ("sam_skel: Debug class number of 'sam_skel': %d\n", sam_skel_debug_level)); if(module_params) - DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params, sid_string_static(domain))); + DEBUG(0, ("Starting 'sam_skel' with parameters '%s' for domain %s\n", module_params, sam_methods->domain_name)); else - DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sid_string_static(domain))); + DEBUG(0, ("Starting 'sam_skel' for domain %s without paramters\n", sam_methods->domain_name)); return NT_STATUS_OK; } diff --git a/source3/include/sam.h b/source3/include/sam.h index ca1a84fd97..4d18ec61b9 100644 --- a/source3/include/sam.h +++ b/source3/include/sam.h @@ -216,7 +216,8 @@ typedef struct sam_methods struct sam_methods *next; struct sam_methods *prev; const char *backendname; - struct sam_domain_handle *domain; + const char *domain_name; + DOM_SID domain_sid; void *private_data; /* General API */ @@ -262,7 +263,7 @@ typedef struct sam_methods void (*free_private_data)(void **); } SAM_METHODS; -typedef NTSTATUS (*sam_init_function)(const SAM_CONTEXT *, SAM_METHODS **, const DOM_SID *domain, const char *); +typedef NTSTATUS (*sam_init_function)(SAM_METHODS *, const char *); struct sam_init_function_entry { char *module_name; diff --git a/source3/sam/interface.c b/source3/sam/interface.c index 6668e3848d..6e6902ab3c 100644 --- a/source3/sam/interface.c +++ b/source3/sam/interface.c @@ -54,7 +54,7 @@ NTSTATUS sam_get_methods_by_sid(const SAM_CONTEXT *context, SAM_METHODS **sam_me tmp_methods = context->methods; while (tmp_methods) { - if (sid_equal(domainsid, &(tmp_methods->domain->private.sid))) + if (sid_equal(domainsid, &(tmp_methods->domain_sid))) { (*sam_method) = tmp_methods; return NT_STATUS_OK; @@ -79,7 +79,7 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m tmp_methods = context->methods; while (tmp_methods) { - if (strcmp(domainname, tmp_methods->domain->private.name)) + if (strcmp(domainname, tmp_methods->domain_name)) { (*sam_method) = tmp_methods; return NT_STATUS_OK; @@ -162,7 +162,7 @@ NTSTATUS context_sam_lookup_name(const SAM_CONTEXT *context, const NT_USER_TOKEN if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_lookup_name(tmp_methods, access_token, name, sid, type))) { DEBUG(4,("sam_lookup_name for %s\\%s in backend %s failed\n", - tmp_methods->domain->private.name, name, tmp_methods->backendname)); + tmp_methods->domain_name, name, tmp_methods->backendname)); return nt_status; } @@ -278,9 +278,9 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE } while (tmp_methods) { - DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain->private.name, sid_string_static(&tmp_methods->domain->private.sid))); - sid_copy(domains[i],&tmp_methods->domain->private.sid); - if(asprintf(&(*domain_names[i]),"%s",tmp_methods->domain->private.name) < 0) { + DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain_name, sid_string_static(&tmp_methods->domain_sid))); + sid_copy(domains[i],&tmp_methods->domain_sid); + if(asprintf(&(*domain_names[i]),"%s",tmp_methods->domain_name) < 0) { DEBUG(0,("context_sam_enum_domains: asprintf failed")); SAFE_FREE((*domains)); SAFE_FREE((*domain_names)); @@ -321,8 +321,8 @@ NTSTATUS context_sam_lookup_domain(const SAM_CONTEXT *context, const NT_USER_TOK tmp_methods= context->methods; while (tmp_methods) { - if (strcmp(domain, tmp_methods->domain->private.name) == 0) { - sid_copy((*domainsid), &tmp_methods->domain->private.sid); + if (strcmp(domain, tmp_methods->domain_name) == 0) { + sid_copy((*domainsid), &tmp_methods->domain_sid); return NT_STATUS_OK; } tmp_methods= tmp_methods->next; @@ -495,7 +495,7 @@ NTSTATUS context_sam_enum_accounts(const SAM_CONTEXT *context, const NT_USER_TOK if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_accounts(tmp_methods, access_token, acct_ctrl, account_count, accounts))) { DEBUG(4,("sam_enum_accounts for domain %s in backend %s failed\n", - tmp_methods->domain->private.name, tmp_methods->backendname)); + tmp_methods->domain_name, tmp_methods->backendname)); return nt_status; } @@ -701,7 +701,7 @@ NTSTATUS context_sam_enum_groups(const SAM_CONTEXT *context, const NT_USER_TOKEN if (!NT_STATUS_IS_OK(nt_status = tmp_methods->sam_enum_groups(tmp_methods, access_token, group_ctrl, groups_count, groups))) { DEBUG(4,("sam_enum_groups for domain %s in backend %s failed\n", - tmp_methods->domain->private.name, tmp_methods->backendname)); + tmp_methods->domain_name, tmp_methods->backendname)); return nt_status; } @@ -969,13 +969,23 @@ static NTSTATUS make_backend_entry(SAM_BACKEND_ENTRY *backend_entry, char *sam_b create sam_methods struct based on sam_backend_entry *****************************************************************/ -static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods, SAM_BACKEND_ENTRY *backend_entry) +static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS **methods_ptr, SAM_BACKEND_ENTRY *backend_entry) { NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + SAM_METHODS *methods; int i; - + DEBUG(5,("make_sam_methods_backend_entry: %d\n", __LINE__)); + if (!NT_STATUS_IS_OK(nt_status = make_sam_methods(context->mem_ctx, methods_ptr))) { + return nt_status; + } + + methods = *methods_ptr; + methods->backendname = talloc_strdup(context->mem_ctx, backend_entry->module_name); + methods->domain_name = talloc_strdup(context->mem_ctx, backend_entry->domain_name); + sid_copy(&methods->domain_sid, backend_entry->domain_sid); + methods->parent = context; DEBUG(5,("Attempting to find sam backend %s\n", backend_entry->module_name)); for (i = 0; builtin_sam_init_functions[i].module_name; i++) @@ -984,7 +994,7 @@ static NTSTATUS make_sam_methods_backend_entry(SAM_CONTEXT *context, SAM_METHODS { DEBUG(5,("Found sam backend %s (at pos %d)\n", backend_entry->module_name, i)); DEBUGADD(5,("initialising it with options=%s for domain %s\n", backend_entry->module_params, sid_string_static(backend_entry->domain_sid))); - nt_status = builtin_sam_init_functions[i].init(context, methods, backend_entry->domain_sid, backend_entry->module_params); + nt_status = builtin_sam_init_functions[i].init(methods, backend_entry->module_params); if (NT_STATUS_IS_OK(nt_status)) { DEBUG(5,("sam backend %s has a valid init\n", backend_entry->module_name)); } else { @@ -1030,7 +1040,6 @@ static NTSTATUS sam_context_check_default_backends(SAM_CONTEXT *context) return ntstatus; } - methods->parent = context; DLIST_ADD_END(context->methods, methods, tmpmethods); } else if (!NT_STATUS_IS_OK(ntstatus)) { @@ -1056,7 +1065,6 @@ static NTSTATUS sam_context_check_default_backends(SAM_CONTEXT *context) return ntstatus; } - methods->parent = context; DLIST_ADD_END(context->methods, methods, tmpmethods); } else if (!NT_STATUS_IS_OK(ntstatus)) { DEBUG(2, ("sam_get_methods_by_sid failed for BUILTIN\n")); @@ -1138,7 +1146,6 @@ NTSTATUS make_sam_context_list(SAM_CONTEXT **context, char **sam_backends_param) free_sam_context(context); return nt_status; } - curmethods->parent = *context; DLIST_ADD_END((*context)->methods, curmethods, tmpmethods); } diff --git a/source3/sam/sam_plugin.c b/source3/sam/sam_plugin.c index 9d2ee937ef..fd26c4b8d3 100644 --- a/source3/sam/sam_plugin.c +++ b/source3/sam/sam_plugin.c @@ -25,7 +25,7 @@ #undef DBGC_CLASS #define DBGC_CLASS DBGC_SAM -NTSTATUS sam_init_plugin(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_method, const DOM_SID *domain, const char *module_params) +NTSTATUS sam_init_plugin(SAM_METHODS *sam_methods, const char *module_params) { void *dl_handle; char *plugin_params, *plugin_name, *p; @@ -74,6 +74,6 @@ NTSTATUS sam_init_plugin(const SAM_CONTEXT *sam_context, SAM_METHODS **sam_metho return NT_STATUS_UNSUCCESSFUL; } - DEBUG(5, ("Starting sam plugin %s with parameters %s for domain %s\n", plugin_name, plugin_params, sid_string_static(domain))); - return plugin_init(sam_context, sam_method, domain, plugin_params); + DEBUG(5, ("Starting sam plugin %s with parameters %s for domain %s\n", plugin_name, plugin_params, sam_methods->domain_name)); + return plugin_init(sam_methods, plugin_params); } diff --git a/source3/torture/cmd_sam.c b/source3/torture/cmd_sam.c index a2835ed69a..2b4c21e501 100644 --- a/source3/torture/cmd_sam.c +++ b/source3/torture/cmd_sam.c @@ -22,27 +22,7 @@ #include "includes.h" #include "samtest.h" -#if 0 -static struct cmd_popt_user_opts [] = { - { NULL, 0, POPT_ARG_CALLBACK, cmd_parse_user_opts }, - {"username", 'u', POPT_ARG_STRING, NULL, 1, "Username to use"}, -}; - -static void cmd_parse_user_opts(poptContext con, - enum poptCallbackReason reason, - const struct poptOption *opt, - const char *arg, const void *data) -{ - SAM_ACCOUNT_HANDLE *account = (SAM_ACCOUNT_HANDLE *)data; - switch(opt->val) { - case 'u': - sam_set_account_username(account, arg); - break; - } -} -#endif - -static NTSTATUS cmd_load_module(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_load_module(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { char *plugin_arg[2]; NTSTATUS status; @@ -54,132 +34,158 @@ static NTSTATUS cmd_load_module(struct sam_context *c, TALLOC_CTX *mem_ctx, int asprintf(&plugin_arg[0], "plugin:%s", argv[1]); plugin_arg[1] = NULL; - if(!NT_STATUS_IS_OK(status = make_sam_context_list(&c, plugin_arg))) - { + if(!NT_STATUS_IS_OK(status = make_sam_context_list(&st->context, plugin_arg))) { + free(plugin_arg[0]); return status; } + + free(plugin_arg[0]); + printf("load: ok\n"); return NT_STATUS_OK; } -static NTSTATUS cmd_get_sec_desc(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_get_sec_desc(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_set_sec_desc(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_set_sec_desc(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { - return NT_STATUS_NOT_IMPLEMENTED; + char *name; + uint32 type; + NTSTATUS status; + DOM_SID sid; + if(argc != 2) { + printf("Usage: lookup_sid \n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!string_to_sid(&sid, argv[1])){ + printf("Unparseable SID specified!\n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if(!NT_STATUS_IS_OK(status = context_sam_lookup_sid(st->context, st->token, &sid, &name, &type))) { + printf("context_sam_lookup_sid failed!\n"); + return status; + } + + return NT_STATUS_OK; } -static NTSTATUS cmd_lookup_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { + if(argc != 2) { + printf("Usage: lookup_name \n"); + return NT_STATUS_INVALID_PARAMETER; + } return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_update_domain(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_show_domain(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_show_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_create_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_create_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_update_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_delete_account(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_delete_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_enum_accounts(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_enum_accounts(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_account_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_account_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_account_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_create_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_create_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_update_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_update_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_delete_group(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_delete_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_enum_groups(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_enum_groups(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_group_sid(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_lookup_group_name(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_lookup_group_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_group_add_member(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_add_member(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_group_del_member(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_del_member(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_group_enum(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_group_enum(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } -static NTSTATUS cmd_get_sid_groups(struct sam_context *c, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_get_sid_groups(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; } diff --git a/source3/torture/samtest.c b/source3/torture/samtest.c index 0275e0f002..e68ff5a0bf 100644 --- a/source3/torture/samtest.c +++ b/source3/torture/samtest.c @@ -54,7 +54,7 @@ static char* next_command (char** cmdstr) } /* Display help on commands */ -static NTSTATUS cmd_help(struct sam_context *sam, TALLOC_CTX *mem_ctx, +static NTSTATUS cmd_help(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { struct cmd_list *tmp; @@ -112,7 +112,7 @@ static NTSTATUS cmd_help(struct sam_context *sam, TALLOC_CTX *mem_ctx, } /* Change the debug level */ -static NTSTATUS cmd_debuglevel(struct sam_context *sam, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_debuglevel(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { if (argc > 2) { printf("Usage: %s [debuglevel]\n", argv[0]); @@ -128,7 +128,7 @@ static NTSTATUS cmd_debuglevel(struct sam_context *sam, TALLOC_CTX *mem_ctx, int return NT_STATUS_OK; } -static NTSTATUS cmd_quit(struct sam_context *sam, TALLOC_CTX *mem_ctx, int argc, char **argv) +static NTSTATUS cmd_quit(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { /* Cleanup */ talloc_destroy(mem_ctx); @@ -185,7 +185,7 @@ static void add_command_set(struct cmd_set *cmd_set) DLIST_ADD(cmd_list, entry); } -static NTSTATUS do_cmd(struct sam_context *sam, struct cmd_set *cmd_entry, char *cmd) +static NTSTATUS do_cmd(struct samtest_state *st, struct cmd_set *cmd_entry, char *cmd) { char *p = cmd, **argv = NULL; NTSTATUS result = NT_STATUS_UNSUCCESSFUL; @@ -237,7 +237,7 @@ static NTSTATUS do_cmd(struct sam_context *sam, struct cmd_set *cmd_entry, char } /* Run command */ - result = cmd_entry->fn(sam, mem_ctx, argc, argv); + result = cmd_entry->fn(st, mem_ctx, argc, argv); } else { fprintf (stderr, "Invalid command\n"); @@ -259,7 +259,7 @@ static NTSTATUS do_cmd(struct sam_context *sam, struct cmd_set *cmd_entry, char } /* Process a command entered at the prompt or as part of -c */ -static NTSTATUS process_cmd(struct sam_context *sam, char *cmd) +static NTSTATUS process_cmd(struct samtest_state *st, char *cmd) { struct cmd_list *temp_list; BOOL found = False; @@ -288,7 +288,7 @@ static NTSTATUS process_cmd(struct sam_context *sam, char *cmd) while(temp_set->name) { if (strequal(buf, temp_set->name)) { found = True; - result = do_cmd(sam, temp_set, cmd); + result = do_cmd(st, temp_set, cmd); goto done; } @@ -339,7 +339,7 @@ int main(int argc, char *argv[]) pstring logfile; struct cmd_set **cmd_set; extern BOOL AllowDebugChange; - static struct sam_context sam; + struct samtest_state st; /* make sure the vars that get altered (4th field) are in @@ -353,6 +353,8 @@ int main(int argc, char *argv[]) { 0, 0, 0, 0} }; + ZERO_STRUCT(st); + setlinebuf(stdout); DEBUGLEVEL = 1; @@ -397,7 +399,7 @@ int main(int argc, char *argv[]) char *p = cmdstr; while((cmd=next_command(&p)) != NULL) { - process_cmd(&sam, cmd); + process_cmd(&st, cmd); } return 0; @@ -417,7 +419,7 @@ int main(int argc, char *argv[]) break; if (line[0] != '\n') - process_cmd(&sam, line); + process_cmd(&st, line); } return 0; diff --git a/source3/torture/samtest.h b/source3/torture/samtest.h index 2a8516cfc3..a136ab191e 100644 --- a/source3/torture/samtest.h +++ b/source3/torture/samtest.h @@ -22,10 +22,17 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +struct samtest_state { + SAM_CONTEXT *context; + NT_USER_TOKEN *token; +}; + struct cmd_set { char *name; - NTSTATUS (*fn)(struct sam_context *sam, TALLOC_CTX *mem_ctx, int argc, + NTSTATUS (*fn)(struct samtest_state *sam, TALLOC_CTX *mem_ctx, int argc, char **argv); char *description; char *usage; }; + + -- cgit From 529848e988fb28b54303408f31e21051ae0b94a6 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 24 Sep 2002 21:18:22 +0000 Subject: Fix bug in get_methods_by_name Fix bug in enum_domains Add samtest commands: - lookup_sid - lookup_name - enum_domains - lookup_domain (This used to be commit 0c01219850e5d9b77b3b2c0b4b87aa3c82e3292b) --- source3/sam/interface.c | 19 ++++++----- source3/torture/cmd_sam.c | 80 +++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 80 insertions(+), 19 deletions(-) diff --git a/source3/sam/interface.c b/source3/sam/interface.c index 6e6902ab3c..e129604ca3 100644 --- a/source3/sam/interface.c +++ b/source3/sam/interface.c @@ -79,7 +79,7 @@ NTSTATUS sam_get_methods_by_name(const SAM_CONTEXT *context, SAM_METHODS **sam_m tmp_methods = context->methods; while (tmp_methods) { - if (strcmp(domainname, tmp_methods->domain_name)) + if (!strcmp(domainname, tmp_methods->domain_name)) { (*sam_method) = tmp_methods; return NT_STATUS_OK; @@ -256,6 +256,7 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE } tmp_methods= context->methods; + *domain_count = 0; while (tmp_methods) { (*domain_count)++; @@ -264,15 +265,19 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE DEBUG(6,("context_sam_enum_domains: enumerating %d domains\n", (*domain_count))); + if (*domain_count == 0) { + return NT_STATUS_OK; + } + tmp_methods = context->methods; if (((*domains) = malloc( sizeof(DOM_SID) * (*domain_count))) == NULL) { - DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain list\n")); + DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain SID list\n")); return NT_STATUS_NO_MEMORY; } if (((*domain_names) = malloc( sizeof(char*) * (*domain_count))) == NULL) { - DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain list\n")); + DEBUG(0,("context_sam_enum_domains: Out of memory allocating domain name list\n")); SAFE_FREE((*domains)); return NT_STATUS_NO_MEMORY; } @@ -280,13 +285,7 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE while (tmp_methods) { DEBUGADD(7,(" [%d] %s: %s\n", i, tmp_methods->domain_name, sid_string_static(&tmp_methods->domain_sid))); sid_copy(domains[i],&tmp_methods->domain_sid); - if(asprintf(&(*domain_names[i]),"%s",tmp_methods->domain_name) < 0) { - DEBUG(0,("context_sam_enum_domains: asprintf failed")); - SAFE_FREE((*domains)); - SAFE_FREE((*domain_names)); - return NT_STATUS_NO_MEMORY; - } - + *domain_names[i] = smb_xstrdup(tmp_methods->domain_name); i++; tmp_methods= tmp_methods->next; } diff --git a/source3/torture/cmd_sam.c b/source3/torture/cmd_sam.c index 2b4c21e501..3ebf91434e 100644 --- a/source3/torture/cmd_sam.c +++ b/source3/torture/cmd_sam.c @@ -26,12 +26,16 @@ static NTSTATUS cmd_load_module(struct samtest_state *st, TALLOC_CTX *mem_ctx, i { char *plugin_arg[2]; NTSTATUS status; - if (argc != 2) { - printf("Usage: load \n"); + if (argc != 2 && argc != 3) { + printf("Usage: load [domain-sid]\n"); return NT_STATUS_OK; } - asprintf(&plugin_arg[0], "plugin:%s", argv[1]); + if (argc == 3) + asprintf(&plugin_arg[0], "%s|plugin:%s", argv[2], argv[1]); + else + asprintf(&plugin_arg[0], "plugin:%s", argv[1]); + plugin_arg[1] = NULL; if(!NT_STATUS_IS_OK(status = make_sam_context_list(&st->context, plugin_arg))) { @@ -61,7 +65,7 @@ static NTSTATUS cmd_lookup_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, in uint32 type; NTSTATUS status; DOM_SID sid; - if(argc != 2) { + if (argc != 2) { printf("Usage: lookup_sid \n"); return NT_STATUS_INVALID_PARAMETER; } @@ -71,21 +75,36 @@ static NTSTATUS cmd_lookup_sid(struct samtest_state *st, TALLOC_CTX *mem_ctx, in return NT_STATUS_INVALID_PARAMETER; } - if(!NT_STATUS_IS_OK(status = context_sam_lookup_sid(st->context, st->token, &sid, &name, &type))) { + if (!NT_STATUS_IS_OK(status = context_sam_lookup_sid(st->context, st->token, &sid, &name, &type))) { printf("context_sam_lookup_sid failed!\n"); return status; } + printf("Name: %s\n", name); + printf("Type: %d\n", type); /* FIXME: What kind of an integer is type ? */ + return NT_STATUS_OK; } static NTSTATUS cmd_lookup_name(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { - if(argc != 2) { - printf("Usage: lookup_name \n"); + DOM_SID *sid; + uint32 type; + NTSTATUS status; + if (argc != 3) { + printf("Usage: lookup_name \n"); return NT_STATUS_INVALID_PARAMETER; } - return NT_STATUS_NOT_IMPLEMENTED; + + if (!NT_STATUS_IS_OK(status = context_sam_lookup_name(st->context, st->token, argv[1], argv[2], &sid, &type))) { + printf("context_sam_lookup_name failed!\n"); + return status; + } + + printf("SID: %s\n", sid_string_static(sid)); + printf("Type: %d\n", type); + + return NT_STATUS_OK; } static NTSTATUS cmd_lookup_account(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) @@ -98,6 +117,47 @@ static NTSTATUS cmd_lookup_group(struct samtest_state *st, TALLOC_CTX *mem_ctx, return NT_STATUS_NOT_IMPLEMENTED; } +static NTSTATUS cmd_lookup_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + DOM_SID *sid; + NTSTATUS status; + if (argc != 2) { + printf("Usage: lookup_domain \n"); + return NT_STATUS_INVALID_PARAMETER; + } + + if (!NT_STATUS_IS_OK(status = context_sam_lookup_domain(st->context, st->token, argv[1], &sid))) { + printf("context_sam_lookup_name failed!\n"); + return status; + } + + printf("SID: %s\n", sid_string_static(sid)); + + return NT_STATUS_OK; +} + +static NTSTATUS cmd_enum_domains(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) +{ + int32 domain_count, i; + DOM_SID *domain_sids; + char **domain_names; + NTSTATUS status; + + if (!NT_STATUS_IS_OK(status = context_sam_enum_domains(st->context, st->token, &domain_count, &domain_sids, &domain_names))) { + printf("context_sam_enum_domains failed!\n"); + return status; + } + + for (i = 0; i < domain_count; i++) { + printf("%s %s\n", domain_names[i], sid_string_static(&domain_sids[i])); + } + + SAFE_FREE(domain_sids); + SAFE_FREE(domain_names); + + return NT_STATUS_OK; +} + static NTSTATUS cmd_update_domain(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) { return NT_STATUS_NOT_IMPLEMENTED; @@ -194,7 +254,7 @@ struct cmd_set sam_general_commands[] = { { "General SAM Commands" }, - { "load", cmd_load_module, "Load a module", "load " }, + { "load", cmd_load_module, "Load a module", "load [domain-sid]" }, { "get_sec_desc", cmd_get_sec_desc, "Get security descriptor info", "get_sec_desc " }, { "set_sec_desc", cmd_set_sec_desc, "Set security descriptor info", "set_sec_desc " }, { "lookup_sid", cmd_lookup_sid, "Lookup type of specified SID", "lookup_sid " }, @@ -206,6 +266,8 @@ struct cmd_set sam_domain_commands[] = { { "Domain Commands" }, { "update_domain", cmd_update_domain, "Update domain information", "update_domain [domain-options] domain-name | domain-sid" }, { "show_domain", cmd_show_domain, "Show domain information", "show_domain domain-sid | domain-name" }, + { "enum_domains", cmd_enum_domains, "Enumerate all domains", "enum_domains " }, + { "lookup_domain", cmd_lookup_domain, "Lookup a domain by name", "lookup_domain domain-name" }, { NULL } }; -- cgit From a3eb2684c307e1000104266a71d5fafbc97ab3be Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 24 Sep 2002 21:29:33 +0000 Subject: enum_domains shouldn't crash when there are no domains available (This used to be commit d312e1c2b44905af87c4d550975eee78dbf2edee) --- source3/sam/interface.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source3/sam/interface.c b/source3/sam/interface.c index e129604ca3..bb7b88b240 100644 --- a/source3/sam/interface.c +++ b/source3/sam/interface.c @@ -265,10 +265,6 @@ NTSTATUS context_sam_enum_domains(const SAM_CONTEXT *context, const NT_USER_TOKE DEBUG(6,("context_sam_enum_domains: enumerating %d domains\n", (*domain_count))); - if (*domain_count == 0) { - return NT_STATUS_OK; - } - tmp_methods = context->methods; if (((*domains) = malloc( sizeof(DOM_SID) * (*domain_count))) == NULL) { -- cgit From f63ed5295a230455394d3f441a257cce3468902f Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 24 Sep 2002 22:56:59 +0000 Subject: Moved -ve cache check to correct place. Jeremy. (This used to be commit 38c67632ade40413c0cc2b91e04105e4065a18b7) --- source3/nsswitch/winbindd_cm.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/source3/nsswitch/winbindd_cm.c b/source3/nsswitch/winbindd_cm.c index 0b9e38eb1f..01f5569889 100644 --- a/source3/nsswitch/winbindd_cm.c +++ b/source3/nsswitch/winbindd_cm.c @@ -382,16 +382,6 @@ static NTSTATUS cm_open_connection(const char *domain,const char *pipe_name, fstrcpy(new_conn->domain, domain); fstrcpy(new_conn->pipe_name, pipe_name); - /* Look for a domain controller for this domain. Negative results - are cached so don't bother applying the caching for this - function just yet. */ - - if (!cm_get_dc_name(domain, new_conn->controller, &dc_ip)) { - result = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND; - add_failed_connection_entry(new_conn, result); - return result; - } - /* Return false if we have tried to look up this domain and netbios name before and failed. */ @@ -423,6 +413,16 @@ static NTSTATUS cm_open_connection(const char *domain,const char *pipe_name, return result; } + /* Look for a domain controller for this domain. Negative results + are cached so don't bother applying the caching for this + function just yet. */ + + if (!cm_get_dc_name(domain, new_conn->controller, &dc_ip)) { + result = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND; + add_failed_connection_entry(new_conn, result); + return result; + } + /* Initialise SMB connection */ cm_get_ipc_userpass(&ipc_username, &ipc_domain, &ipc_password); -- cgit From 2b425763b82aeb68cc6344fc0b09e6d7f9a6f017 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 24 Sep 2002 22:57:51 +0000 Subject: Hold lock on NEXTJOB record for a very short time. Jerry needs to add code to make this rebust w.r.t. stored devicemodes. Jeremy. (This used to be commit f93a008f09acda2ddaff9857f2fe0c86948539d1) --- source3/printing/printing.c | 81 +++++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 29 deletions(-) diff --git a/source3/printing/printing.c b/source3/printing/printing.c index 208da5b78b..0344d44d61 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -382,9 +382,13 @@ static uint32 sysjob_to_jobid_value; static int unixjob_traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA data, void *state) { - struct printjob *pjob = (struct printjob *)data.dptr; + struct printjob *pjob; int *sysjob = (int *)state; + if (!data.dptr || data.dsize == 0) + return 0; + + pjob = (struct printjob *)data.dptr; if (key.dsize != sizeof(uint32)) return 0; @@ -1408,6 +1412,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DE int njobs = 0; const char *printername = lp_const_servicename(snum); struct tdb_print_db *pdb = get_print_db_byname(printername); + BOOL pdb_locked = False; errno = 0; @@ -1457,37 +1462,15 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DE return (uint32)-1; } - /* create the database entry */ - - ZERO_STRUCT(pjob); - - pjob.pid = local_pid; - pjob.sysjob = -1; - pjob.fd = -1; - pjob.starttime = time(NULL); - pjob.status = LPQ_SPOOLING; - pjob.size = 0; - pjob.spooled = False; - pjob.smbjob = True; - pjob.nt_devmode = nt_devmode; - - fstrcpy(pjob.jobname, jobname); - - if ((vuser = get_valid_user_struct(user->vuid)) != NULL) { - fstrcpy(pjob.user, vuser->user.smb_name); - } else { - fstrcpy(pjob.user, uidtoname(user->uid)); - } - - fstrcpy(pjob.queuename, lp_const_servicename(snum)); - - /* lock the database */ + /* Lock the database */ if (tdb_lock_bystring(pdb->tdb, "INFO/nextjob") == -1) { DEBUG(0,("print_job_start: failed to lock printing database %s\n", printername )); release_print_db(pdb); return (uint32)-1; } + pdb_locked = True; + next_jobid = tdb_fetch_int32(pdb->tdb, "INFO/nextjob"); if (next_jobid == -1) next_jobid = 1; @@ -1496,13 +1479,27 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DE if (!print_job_exists(snum, jobid)) break; } - if (jobid == next_jobid || !pjob_store(snum, jobid, &pjob)) { - DEBUG(3, ("print_job_start: either jobid (%d)==next_jobid(%d) or pjob_store failed.\n", + + if (jobid == next_jobid) { + DEBUG(3, ("print_job_start: jobid (%d)==next_jobid(%d).\n", jobid, next_jobid )); jobid = -1; goto fail; } + /* Store a dummy placeholder. This must be quick as we have the lock. */ + { + TDB_DATA dum; + dum.dptr = NULL; + dum.dsize = 0; + if (tdb_store(pdb->tdb, print_key(jobid), dum, TDB_INSERT) == -1) { + DEBUG(3, ("print_job_start: jobid (%d) failed to store placeholder.\n", + jobid )); + jobid = -1; + goto fail; + } + } + if (tdb_store_int32(pdb->tdb, "INFO/nextjob", jobid)==-1) { DEBUG(3, ("print_job_start: failed to store INFO/nextjob.\n")); jobid = -1; @@ -1511,6 +1508,31 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DE /* We've finished with the INFO/nextjob lock. */ tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); + pdb_locked = False; + + /* create the database entry */ + + ZERO_STRUCT(pjob); + + pjob.pid = local_pid; + pjob.sysjob = -1; + pjob.fd = -1; + pjob.starttime = time(NULL); + pjob.status = LPQ_SPOOLING; + pjob.size = 0; + pjob.spooled = False; + pjob.smbjob = True; + pjob.nt_devmode = nt_devmode; + + fstrcpy(pjob.jobname, jobname); + + if ((vuser = get_valid_user_struct(user->vuid)) != NULL) { + fstrcpy(pjob.user, vuser->user.smb_name); + } else { + fstrcpy(pjob.user, uidtoname(user->uid)); + } + + fstrcpy(pjob.queuename, lp_const_servicename(snum)); /* we have a job entry - now create the spool file */ slprintf(pjob.filename, sizeof(pjob.filename)-1, "%s/%s%.8u.XXXXXX", @@ -1551,7 +1573,8 @@ to open spool file %s.\n", pjob.filename)); if (jobid != -1) pjob_delete(snum, jobid); - tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); + if (pdb_locked) + tdb_unlock_bystring(pdb->tdb, "INFO/nextjob"); release_print_db(pdb); DEBUG(3, ("print_job_start: returning fail. Error = %s\n", strerror(errno) )); -- cgit From 4912dd90eeebc0c35240703cdae8ce98e572a47b Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Wed, 25 Sep 2002 05:01:51 +0000 Subject: merge from APP_HEAD (This used to be commit 930c6710fe076b52ad21addf5fcda834f85e15a9) --- source3/printing/printing.c | 40 +++++++++++++++++++++++++++++-------- source3/rpc_server/srv_spoolss_nt.c | 2 ++ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/source3/printing/printing.c b/source3/printing/printing.c index 0344d44d61..6474c92c69 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -318,6 +318,7 @@ static TDB_DATA print_key(uint32 jobid) int unpack_pjob( char* buf, int buflen, struct printjob *pjob ) { int len = 0; + int used; if ( !buf || !pjob ) return -1; @@ -336,9 +337,14 @@ int unpack_pjob( char* buf, int buflen, struct printjob *pjob ) pjob->jobname, pjob->user, pjob->queuename); - - - len += unpack_devicemode(&pjob->nt_devmode, buf+len, buflen-len); + + if ( len == -1 ) + return -1; + + if ( (used = unpack_devicemode(&pjob->nt_devmode, buf+len, buflen-len)) == -1 ) + return -1; + + len += used; return len; @@ -369,7 +375,8 @@ static struct printjob *print_job_find(int snum, uint32 jobid) ZERO_STRUCT( pjob ); - unpack_pjob( ret.dptr, ret.dsize, &pjob ); + if ( unpack_pjob( ret.dptr, ret.dsize, &pjob ) == -1 ) + return NULL; SAFE_FREE(ret.dptr); return &pjob; @@ -689,10 +696,14 @@ static int traverse_fn_delete(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void uint32 jobid; int i; - if (data.dsize != sizeof(pjob) || key.dsize != sizeof(jobid)) + if ( key.dsize != sizeof(jobid) ) return 0; + memcpy(&jobid, key.dptr, sizeof(jobid)); - memcpy(&pjob, data.dptr, sizeof(pjob)); + if ( unpack_pjob( data.dptr, data.dsize, &pjob ) == -1 ) + return 0; + free_nt_devicemode( &pjob.nt_devmode ); + if (ts->snum != lp_servicenumber(pjob.queuename)) { /* this isn't for the queue we are looking at - this cannot happen with the split tdb's. JRA */ @@ -1681,10 +1692,16 @@ static int traverse_fn_queue(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void * int i; uint32 jobid; + /* sanity checks */ + + if ( key.dsize != sizeof(jobid) ) + return 0; + memcpy(&jobid, key.dptr, sizeof(jobid)); - if ( !unpack_pjob( data.dptr, data.dsize, &pjob ) ) + if ( unpack_pjob( data.dptr, data.dsize, &pjob ) == -1 ) return 0; + free_nt_devicemode( &pjob.nt_devmode ); /* maybe it isn't for this queue */ if (ts->snum != lp_servicenumber(pjob.queuename)) @@ -1723,10 +1740,17 @@ static int traverse_count_fn_queue(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, struct printjob pjob; uint32 jobid; + /* sanity checks */ + + if ( key.dsize != sizeof(jobid) ) + return 0; + memcpy(&jobid, key.dptr, sizeof(jobid)); - if ( !unpack_pjob( data.dptr, data.dsize, &pjob ) ) + if ( unpack_pjob( data.dptr, data.dsize, &pjob ) == -1 ) return 0; + + free_nt_devicemode( &pjob.nt_devmode ); /* maybe it isn't for this queue - this cannot happen with the tdb/printer code. JRA */ if (ts->snum != lp_servicenumber(pjob.queuename)) diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 6953ec3663..2190215107 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -5421,11 +5421,13 @@ static WERROR control_printer(POLICY_HND *handle, uint32 command, errcode = WERR_OK; } break; +#if 0 /* JERRY - Never called */ case PRINTER_CONTROL_PURGE: if (print_queue_purge(&user, snum, &errcode)) { errcode = WERR_OK; } break; +#endif default: return WERR_UNKNOWN_LEVEL; } -- cgit From b952ddfbe6e6527892cabf0076e16a4c14f952b8 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 25 Sep 2002 05:11:25 +0000 Subject: Merge of "profile acls" code. Jeremy. (This used to be commit cfd1bf250b417f3ba3ad21ff681ab282311bb7eb) --- source3/lib/util_sid.c | 9 +++++++-- source3/param/loadparm.c | 6 ++++++ source3/smbd/posix_acls.c | 30 ++++++++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/source3/lib/util_sid.c b/source3/lib/util_sid.c index 8bb06e8866..e9635fc7f8 100644 --- a/source3/lib/util_sid.c +++ b/source3/lib/util_sid.c @@ -30,13 +30,11 @@ extern fstring global_myworkgroup; * Some useful sids */ -DOM_SID global_sid_Builtin; /* Local well-known domain */ DOM_SID global_sid_World_Domain; /* Everyone domain */ DOM_SID global_sid_World; /* Everyone */ DOM_SID global_sid_Creator_Owner_Domain; /* Creator Owner domain */ DOM_SID global_sid_NT_Authority; /* NT Authority */ DOM_SID global_sid_NULL; /* NULL sid */ -DOM_SID global_sid_Builtin_Guests; /* Builtin guest users */ DOM_SID global_sid_Authenticated_Users; /* All authenticated rids */ DOM_SID global_sid_Network; /* Network rids */ @@ -44,6 +42,11 @@ static DOM_SID global_sid_Creator_Owner; /* Creator Owner */ static DOM_SID global_sid_Creator_Group; /* Creator Group */ static DOM_SID global_sid_Anonymous; /* Anonymous login */ +DOM_SID global_sid_Builtin; /* Local well-known domain */ +DOM_SID global_sid_Builtin_Administrators; +DOM_SID global_sid_Builtin_Users; +DOM_SID global_sid_Builtin_Guests; /* Builtin guest users */ + /* * An NT compatible anonymous token. */ @@ -99,6 +102,8 @@ const char *sid_type_lookup(uint32 sid_type) void generate_wellknown_sids(void) { string_to_sid(&global_sid_Builtin, "S-1-5-32"); + string_to_sid(&global_sid_Builtin_Administrators, "S-1-5-32-544"); + string_to_sid(&global_sid_Builtin_Users, "S-1-5-32-545"); string_to_sid(&global_sid_Builtin_Guests, "S-1-5-32-546"); string_to_sid(&global_sid_World_Domain, "S-1-1"); string_to_sid(&global_sid_World, "S-1-1-0"); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index f95c03dcdb..7b8efbd5bc 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -388,6 +388,8 @@ typedef struct #ifdef WITH_SENDFILE BOOL bUseSendfile; #endif + BOOL bProfileAcls; + char dummy[3]; /* for alignment */ } service; @@ -510,6 +512,7 @@ static service sDefault = { #ifdef WITH_SENDFILE False, /* bUseSendfile */ #endif + False, /* bProfileAcls */ "" /* dummy */ }; @@ -811,6 +814,8 @@ static struct parm_struct parm_table[] = { {"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE | FLAG_ADVANCED | FLAG_WIZARD}, {"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"profile acls", P_BOOL, P_LOCAL, &sDefault.bProfileAcls, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE | FLAG_ADVANCED | FLAG_WIZARD}, + {"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, FLAG_DEVELOPER}, {"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as, FLAG_DEVELOPER}, {"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, @@ -1742,6 +1747,7 @@ FN_LOCAL_BOOL(lp_nt_acl_support, bNTAclSupport) #ifdef WITH_SENDFILE FN_LOCAL_BOOL(lp_use_sendfile, bUseSendfile) #endif +FN_LOCAL_BOOL(lp_profile_acls, bProfileAcls) FN_LOCAL_INTEGER(lp_create_mask, iCreate_mask) FN_LOCAL_INTEGER(lp_force_create_mode, iCreate_force_mode) FN_LOCAL_INTEGER(lp_security_mask, iSecurity_mask) diff --git a/source3/smbd/posix_acls.c b/source3/smbd/posix_acls.c index 043e33e836..e6ae1c7d79 100644 --- a/source3/smbd/posix_acls.c +++ b/source3/smbd/posix_acls.c @@ -1881,6 +1881,8 @@ static int nt_ace_comp( SEC_ACE *a1, SEC_ACE *a2) size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) { + extern DOM_SID global_sid_Builtin_Administrators; + extern DOM_SID global_sid_Builtin_Users; connection_struct *conn = fsp->conn; SMB_STRUCT_STAT sbuf; SEC_ACE *nt_ace_list = NULL; @@ -1895,6 +1897,7 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) SMB_ACL_T dir_acl = NULL; canon_ace *file_ace = NULL; canon_ace *dir_ace = NULL; + size_t num_profile_acls = 0; *ppdesc = NULL; @@ -1939,7 +1942,14 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) * Get the owner, group and world SIDs. */ - create_file_sids(&sbuf, &owner_sid, &group_sid); + if (lp_profile_acls(SNUM(fsp->conn))) { + /* For WXP SP1 the owner must be administrators. */ + sid_copy(&owner_sid, &global_sid_Builtin_Administrators); + sid_copy(&group_sid, &global_sid_Builtin_Users); + num_profile_acls = 2; + } else { + create_file_sids(&sbuf, &owner_sid, &group_sid); + } /* Create the canon_ace lists. */ file_ace = canonicalise_acl( fsp, posix_acl, &sbuf, &owner_sid, &group_sid); @@ -1963,7 +1973,7 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) } /* Allocate the ace list. */ - if ((nt_ace_list = (SEC_ACE *)malloc((num_acls + num_dir_acls)* sizeof(SEC_ACE))) == NULL) { + if ((nt_ace_list = (SEC_ACE *)malloc((num_acls + num_profile_acls + num_dir_acls)* sizeof(SEC_ACE))) == NULL) { DEBUG(0,("get_nt_acl: Unable to malloc space for nt_ace_list.\n")); goto done; } @@ -1986,6 +1996,13 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) init_sec_ace(&nt_ace_list[num_aces++], &ace->trustee, nt_acl_type, acc, 0); } + /* The User must have access to a profile share - even if we can't map the SID. */ + if (lp_profile_acls(SNUM(fsp->conn))) { + SEC_ACCESS acc; + init_sec_access(&acc,FILE_GENERIC_ALL); + init_sec_ace(&nt_ace_list[num_aces++], &global_sid_Builtin_Users, SEC_ACE_TYPE_ACCESS_ALLOWED, acc, 0); + } + ace = dir_ace; for (i = 0; i < num_dir_acls; i++, ace = ace->next) { @@ -1994,6 +2011,15 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc) SEC_ACE_FLAG_OBJECT_INHERIT|SEC_ACE_FLAG_CONTAINER_INHERIT|SEC_ACE_FLAG_INHERIT_ONLY); } + /* The User must have access to a profile share - even if we can't map the SID. */ + if (lp_profile_acls(SNUM(fsp->conn))) { + SEC_ACCESS acc; + init_sec_access(&acc,FILE_GENERIC_ALL); + init_sec_ace(&nt_ace_list[num_aces++], &global_sid_Builtin_Users, SEC_ACE_TYPE_ACCESS_ALLOWED, acc, + SEC_ACE_FLAG_OBJECT_INHERIT|SEC_ACE_FLAG_CONTAINER_INHERIT| + SEC_ACE_FLAG_INHERIT_ONLY); + } + /* * Sort to force deny entries to the front. */ -- cgit From 5b71a0055ffe619d7b2aaef453c39fcbc2b3f4e4 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 25 Sep 2002 06:25:02 +0000 Subject: The security descriptor in a PRINTER_INFO_2 could be NULL. (Bong?) (This used to be commit 7ce782c20c6b9e515a2fa831315ae14c66d322ee) --- source3/python/py_spoolss_printers_conv.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source3/python/py_spoolss_printers_conv.c b/source3/python/py_spoolss_printers_conv.c index 760896fcde..9bef118f2b 100644 --- a/source3/python/py_spoolss_printers_conv.c +++ b/source3/python/py_spoolss_printers_conv.c @@ -224,8 +224,12 @@ BOOL py_from_PRINTER_INFO_2(PyObject **dict, PRINTER_INFO_2 *info) *dict = from_struct(info, py_PRINTER_INFO_2); - if (py_from_SECDESC(&obj, info->secdesc)) - PyDict_SetItemString(*dict, "security_descriptor", obj); + /* The security descriptor could be NULL */ + + if (info->secdesc) { + if (py_from_SECDESC(&obj, info->secdesc)) + PyDict_SetItemString(*dict, "security_descriptor", obj); + } /* Bong! The devmode could be NULL */ -- cgit From 6f67ae667aabacbfc46faadfe2bb7bbe04dd049a Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:32:08 +0000 Subject: Avoid a segfault in net join when you have not done an kinit, and it's falling back to NTLMSSP. We need to get the password out of the user, and this eventually does. Andrew Bartlett (This used to be commit bb518a3bae3bf91a589021fcc5b1e715247c5ded) --- source3/libads/sasl.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source3/libads/sasl.c b/source3/libads/sasl.c index c110c1d2cd..f7dd01084a 100644 --- a/source3/libads/sasl.c +++ b/source3/libads/sasl.c @@ -39,6 +39,11 @@ static ADS_STATUS ads_sasl_spnego_ntlmssp_bind(ADS_STRUCT *ads) extern pstring global_myname; int rc; + if (!ads->auth.password) { + /* No password, don't segfault below... */ + return ADS_ERROR_NT(NT_STATUS_LOGON_FAILURE); + } + neg_flags = NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_128 | NTLMSSP_NEGOTIATE_NTLM; -- cgit From 2bd2b243fcdd92979ad98baea55569005df21670 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:34:43 +0000 Subject: Move to common user token debugging, and ensure we always print both the NT_TOKEN and the unix credentials - as we incresingly use the NT stuff we want to make it easy to check they don't get out of wack. Andrew Bartlett (This used to be commit a3882a19254811ace2f9545580c14ce3bd588095) --- source3/auth/auth_util.c | 30 ++++++++++++++++++++++++------ source3/smbd/sec_ctx.c | 13 ++----------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index c2d92a985f..ce5fd32337 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -478,12 +478,32 @@ void debug_nt_user_token(int dbg_class, int dbg_lev, NT_USER_TOKEN *token) fstring sid_str; int i; + if (!token) { + DEBUGC(dbg_class, dbg_lev, ("NT user token: (NULL)\n")); + return; + } + DEBUGC(dbg_class, dbg_lev, ("NT user token of user %s\n", - sid_to_string(sid_str, &token->user_sids[0]) )); + sid_to_string(sid_str, &token->user_sids[0]) )); DEBUGADDC(dbg_class, dbg_lev, ("contains %i SIDs\n", token->num_sids)); for (i = 0; i < token->num_sids; i++) DEBUGADDC(dbg_class, dbg_lev, ("SID[%3i]: %s\n", i, - sid_to_string(sid_str, &token->user_sids[i]))); + sid_to_string(sid_str, &token->user_sids[i]))); +} + +/**************************************************************************** + prints a UNIX 'token' to debug output. +****************************************************************************/ + +void debug_unix_user_token(int dbg_class, int dbg_lev, uid_t uid, gid_t gid, int n_groups, gid_t *groups) +{ + int i; + DEBUGC(dbg_class, dbg_lev, ("UNIX token of user %ld\n", (long int)uid)); + + DEBUGADDC(dbg_class, dbg_lev, ("Primary group is %ld and contains %i supplementary groups\n", (long int)gid, n_groups)); + for (i = 0; i < n_groups; i++) + DEBUGADDC(dbg_class, dbg_lev, ("Group[%3i]: %ld\n", i, + (long int)groups[i])); } /**************************************************************************** @@ -668,12 +688,10 @@ static NTSTATUS get_user_groups_from_local_sam(const DOM_SID *user_sid, } } + debug_unix_user_token(DBGC_CLASS, 5, usr->pw_uid, usr->pw_gid, n_unix_groups, *unix_groups); + passwd_free(&usr); - DEBUG(5,("get_user_groups_from_local_sam: user is in the unix following groups\n")); - for (i = 0; i < n_unix_groups; i++) - DEBUGADD(5,("supplementary group gid:%ld\n",(long int)(*unix_groups)[i])); - if (n_unix_groups > 0) { *groups = malloc(sizeof(DOM_SID) * n_unix_groups); if (!*groups) { diff --git a/source3/smbd/sec_ctx.c b/source3/smbd/sec_ctx.c index bdcdce6e14..411ece5249 100644 --- a/source3/smbd/sec_ctx.c +++ b/source3/smbd/sec_ctx.c @@ -287,17 +287,8 @@ void set_sec_ctx(uid_t uid, gid_t gid, int ngroups, gid_t *groups, NT_USER_TOKEN DEBUG(3, ("setting sec ctx (%u, %u) - sec_ctx_stack_ndx = %d\n", (unsigned int)uid, (unsigned int)gid, sec_ctx_stack_ndx)); - if (ngroups) { - int i; - - DEBUG(3, ("%d user groups: \n", ngroups)); - for (i = 0; i < ngroups; i++) { - DEBUGADD(3, ("%u ", (unsigned int)groups[i])); - } - - DEBUG(3, ("\n")); - } - + debug_nt_user_token(DBGC_CLASS, 5, token); + debug_unix_user_token(DBGC_CLASS, 5, uid, gid, ngroups, groups); gain_root(); -- cgit From bfa04e42b895e1113b7fa38024b7e7d3d2df7adb Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:35:45 +0000 Subject: If adding a user to ldap, make sure we have the 'account' structural class, or else we can't add to OpenLDAP 2.1 (This used to be commit d9a91a41441c156223760cb356fa997ea7bdbc1a) --- source3/passdb/pdb_ldap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source3/passdb/pdb_ldap.c b/source3/passdb/pdb_ldap.c index f82cb4488f..6d38a2600d 100644 --- a/source3/passdb/pdb_ldap.c +++ b/source3/passdb/pdb_ldap.c @@ -1590,6 +1590,7 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT rc = ldap_modify_s(ldap_struct, dn, mods); } else { + make_a_mod(&mods, LDAP_MOD_ADD, "objectclass", "account"); rc = ldap_add_s(ldap_struct, dn, mods); } -- cgit From 3c39539ddf5edce614559e1a84aeda53416a1850 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:37:18 +0000 Subject: Actually pick up the kerberos libs in RedHat - the previous shell construct didn't seem to work properly. Andrew Bartlett (This used to be commit c0925b6352ff6135da03edff44e0bbd72c949a20) --- source3/configure | 8 ++++---- source3/configure.in | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/source3/configure b/source3/configure index 39fa8b05f0..538f44621c 100755 --- a/source3/configure +++ b/source3/configure @@ -12077,11 +12077,11 @@ fi echo "$ac_t""$with_ads_support" 1>&6 +FOUND_KRB5=no if test x"$with_ads_support" = x"yes"; then ################################################# # check for location of Kerberos 5 install -FOUND_KRB5=0 echo $ac_n "checking for kerberos 5 install path""... $ac_c" 1>&6 echo "configure:12087: checking for kerberos 5 install path" >&5 # Check whether --with-krb5 or --without-krb5 was given. @@ -12097,7 +12097,7 @@ if test "${with_krb5+set}" = set; then CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" - FOUND_KRB5=1 + FOUND_KRB5=yes ;; esac else @@ -12107,7 +12107,7 @@ fi -if $FOUND_KRB5 = 0 ; then +if test x$FOUND_KRB5 = x"no"; then ################################################# # see if this box has the RedHat location for kerberos echo $ac_n "checking for /usr/kerberos""... $ac_c" 1>&6 @@ -12768,7 +12768,7 @@ fi ############################################### # test for where we get crypt() from, but only # if not using PAM -if test $with_pam_for_crypt = no; then +if test x"$with_pam_for_crypt" = x"no"; then for ac_func in crypt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 diff --git a/source3/configure.in b/source3/configure.in index 07cf6e88cd..5221b8ec2b 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -1961,11 +1961,11 @@ fi AC_MSG_RESULT($with_ads_support) +FOUND_KRB5=no if test x"$with_ads_support" = x"yes"; then ################################################# # check for location of Kerberos 5 install -FOUND_KRB5=0 AC_MSG_CHECKING(for kerberos 5 install path) AC_ARG_WITH(krb5, [ --with-krb5=base-dir Locate Kerberos 5 support (default=/usr)], @@ -1979,14 +1979,14 @@ FOUND_KRB5=0 CFLAGS="$CFLAGS -I$withval/include" CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" - FOUND_KRB5=1 + FOUND_KRB5=yes ;; esac ], AC_MSG_RESULT(no) ) -if [ $FOUND_KRB5 = 0 ]; then +if test x$FOUND_KRB5 = x"no"; then ################################################# # see if this box has the RedHat location for kerberos AC_MSG_CHECKING(for /usr/kerberos) @@ -2168,7 +2168,7 @@ AC_ARG_WITH(pam_smbpass, ############################################### # test for where we get crypt() from, but only # if not using PAM -if test $with_pam_for_crypt = no; then +if test x"$with_pam_for_crypt" = x"no"; then AC_CHECK_FUNCS(crypt) if test x"$ac_cv_func_crypt" = x"no"; then AC_CHECK_LIB(crypt, crypt, [LIBS="$LIBS -lcrypt"; -- cgit From 891f580300d8d8eb5e258bdc31c881e73aa6ad38 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:38:27 +0000 Subject: Header files should not include includes.h - therein lies maddness, particuarly if we ever want to get rid of the magic macros. (This used to be commit 13f33e466ed31d35221157d6b3a1a05507157b66) --- source3/include/smb_acls.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/source3/include/smb_acls.h b/source3/include/smb_acls.h index 3ed670d38b..e7edb62bde 100644 --- a/source3/include/smb_acls.h +++ b/source3/include/smb_acls.h @@ -20,9 +20,6 @@ #ifndef _SMB_ACLS_H #define _SMB_ACLS_H - -#include "includes.h" - #if defined(HAVE_POSIX_ACLS) /* This is an identity mapping (just remove the SMB_). */ -- cgit From b06d2abe746fb7873846e9f14bb8d3895c4290ed Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:40:45 +0000 Subject: Another patch from metze, towards his work on sam_ads. See mx-ldap.sf.net for his current progress. (This used to be commit 9c62d1312fdf0aa7b1978e8bbb56fc076ba7e9d0) --- source3/include/ads.h | 13 +++--- source3/include/sam.h | 6 +-- source3/libads/ads_utils.c | 98 +++++++++++++++++++++++++++++++++++++++++++++- source3/libads/ldap.c | 2 +- 4 files changed, 108 insertions(+), 11 deletions(-) diff --git a/source3/include/ads.h b/source3/include/ads.h index 875b895e49..0181ae535e 100644 --- a/source3/include/ads.h +++ b/source3/include/ads.h @@ -134,6 +134,7 @@ typedef void **ADS_MODLIST; #define ADS_PAGE_CTL_OID "1.2.840.113556.1.4.319" #define ADS_NO_REFERRALS_OID "1.2.840.113556.1.4.1339" #define ADS_SERVER_SORT_OID "1.2.840.113556.1.4.473" +#define ADS_PERMIT_MODIFY_OID "1.2.840.113556.1.4.1413" /* UserFlags for userAccountControl */ #define UF_SCRIPT 0x00000001 @@ -163,7 +164,7 @@ typedef void **ADS_MODLIST; #define UF_NOT_DELEGATED 0x00100000 #define UF_USE_DES_KEY_ONLY 0x00200000 -#define UF_DONT_REQUIRE_PREAUTH 0x00400000 +#define UF_DONT_REQUIRE_PREAUTH 0x00400000 #define UF_UNUSED_5 0x00800000 #define UF_UNUSED_6 0x01000000 @@ -210,11 +211,11 @@ typedef void **ADS_MODLIST; /* sAMAccountType */ #define ATYPE_NORMAL_ACCOUNT 0x30000000 /* 805306368 */ -#define ATYPE_WORKSTATION_TRUST 0x30000001 /* 805306369 */ -#define ATYPE_INTERDOMAIN_TRUST 0x30000002 /* 805306370 */ +#define ATYPE_WORKSTATION_TRUST 0x30000001 /* 805306369 */ +#define ATYPE_INTERDOMAIN_TRUST 0x30000002 /* 805306370 */ #define ATYPE_SECURITY_GLOBAL_GROUP 0x10000000 /* 268435456 */ -#define ATYPE_DISTRIBUTION_GLOBAL_GROUP 0x10000001 /* 268435457 */ -#define ATYPE_DISTRIBUTION_UNIVERSAL_GROUP AT_DISTRIBUTION_GLOBAL_GROUP +#define ATYPE_DISTRIBUTION_GLOBAL_GROUP 0x10000001 /* 268435457 */ +#define ATYPE_DISTRIBUTION_UNIVERSAL_GROUP ATYPE_DISTRIBUTION_GLOBAL_GROUP #define ATYPE_SECURITY_LOCAL_GROUP 0x20000000 /* 536870912 */ #define ATYPE_DISTRIBUTION_LOCAL_GROUP 0x20000001 /* 536870913 */ @@ -226,7 +227,7 @@ typedef void **ADS_MODLIST; #define GTYPE_SECURITY_BUILTIN_LOCAL_GROUP 0x80000005 /* -2147483643 */ #define GTYPE_SECURITY_DOMAIN_LOCAL_GROUP 0x80000004 /* -2147483644 */ #define GTYPE_SECURITY_GLOBAL_GROUP 0x80000002 /* -2147483646 */ -#define GTYPE_DISTRIBUTION_GLOBAL_GROUP 0x00000002 /* 2 */ +#define GTYPE_DISTRIBUTION_GLOBAL_GROUP 0x00000002 /* 2 */ #define GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP 0x00000004 /* 4 */ #define GTYPE_DISTRIBUTION_UNIVERSAL_GROUP 0x00000008 /* 8 */ diff --git a/source3/include/sam.h b/source3/include/sam.h index 4d18ec61b9..2157a37065 100644 --- a/source3/include/sam.h +++ b/source3/include/sam.h @@ -152,10 +152,10 @@ typedef struct sam_group_enum { /* bits for group_ctrl: to spezify if the group is global group or alias */ -#define GCB_LOCAL_GROUP 0x0001 -#define GCB_ALIAS_GROUP GCB_LOCAL_GROUP +#define GCB_LOCAL_GROUP 0x0001 +#define GCB_ALIAS_GROUP (GCB_LOCAL_GROUP |GCB_BUILTIN) #define GCB_GLOBAL_GROUP 0x0002 - +#define GCB_BUILTIN 0x1000 typedef struct sam_context { diff --git a/source3/libads/ads_utils.c b/source3/libads/ads_utils.c index 1789193d7e..fc8a270021 100644 --- a/source3/libads/ads_utils.c +++ b/source3/libads/ads_utils.c @@ -46,7 +46,9 @@ uint32 ads_acb2uf(uint16 acb) return uf; } -/* translated the UserFlags (userAccountControl) to ACB_CTRL Flags */ +/* +translated the UserFlags (userAccountControl) to ACB_CTRL Flags +*/ uint16 ads_uf2acb(uint32 uf) { uint16 acb = 0x0000; @@ -72,4 +74,98 @@ uint16 ads_uf2acb(uint32 uf) return acb; } +/* +get the accountType from the UserFlags +*/ +uint32 ads_uf2atype(uint32 uf) +{ + uint32 atype = 0x00000000; + + if (uf & UF_NORMAL_ACCOUNT) atype = ATYPE_NORMAL_ACCOUNT; + else if (uf & UF_TEMP_DUPLICATE_ACCOUNT) atype = ATYPE_NORMAL_ACCOUNT; + else if (uf & UF_SERVER_TRUST_ACCOUNT) atype = ATYPE_WORKSTATION_TRUST; + else if (uf & UF_WORKSTATION_TRUST_ACCOUNT) atype = ATYPE_WORKSTATION_TRUST; + else if (uf & UF_INTERDOMAIN_TRUST_ACCOUNT) atype = ATYPE_INTERDOMAIN_TRUST; + + return atype; +} + +/* +translated the GROUP_CTRL Flags to GroupType (groupType) +*/ +uint32 ads_gcb2gtype(uint16 gcb) +{ + uint32 gtype = 0x00000000; + + if (gcb & GCB_ALIAS_GROUP) gtype |= GTYPE_SECURITY_BUILTIN_LOCAL_GROUP; + else if(gcb & GCB_LOCAL_GROUP) gtype |= GTYPE_SECURITY_DOMAIN_LOCAL_GROUP; + if (gcb & GCB_GLOBAL_GROUP) gtype |= GTYPE_SECURITY_GLOBAL_GROUP; + + return gtype; +} + +/* +translated the GroupType (groupType) to GROUP_CTRL Flags +*/ +uint16 ads_gtype2gcb(uint32 gtype) +{ + uint16 gcb = 0x0000; + + switch(gtype) { + case GTYPE_SECURITY_BUILTIN_LOCAL_GROUP: + gcb = GCB_ALIAS_GROUP; + break; + case GTYPE_SECURITY_DOMAIN_LOCAL_GROUP: + gcb = GCB_LOCAL_GROUP; + break; + case GTYPE_SECURITY_GLOBAL_GROUP: + gcb = GCB_GLOBAL_GROUP; + break; + + case GTYPE_DISTRIBUTION_GLOBAL_GROUP: + gcb = GCB_GLOBAL_GROUP; + break; + case GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP: + gcb = GCB_LOCAL_GROUP; + break; + case GTYPE_DISTRIBUTION_UNIVERSAL_GROUP: + gcb = GCB_GLOBAL_GROUP; + break; + } + + return gcb; +} + +/* +get the accountType from the groupType +*/ +uint32 ads_gtype2atype(uint32 gtype) +{ + uint32 atype = 0x00000000; + + switch(gtype) { + case GTYPE_SECURITY_BUILTIN_LOCAL_GROUP: + atype = ATYPE_SECURITY_LOCAL_GROUP; + break; + case GTYPE_SECURITY_DOMAIN_LOCAL_GROUP: + atype = ATYPE_SECURITY_LOCAL_GROUP; + break; + case GTYPE_SECURITY_GLOBAL_GROUP: + atype = ATYPE_SECURITY_GLOBAL_GROUP; + break; + + case GTYPE_DISTRIBUTION_GLOBAL_GROUP: + atype = ATYPE_DISTRIBUTION_GLOBAL_GROUP; + break; + case GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP: + atype = ATYPE_DISTRIBUTION_UNIVERSAL_GROUP; + break; + case GTYPE_DISTRIBUTION_UNIVERSAL_GROUP: + atype = ATYPE_DISTRIBUTION_LOCAL_GROUP; + break; + } + + return atype; +} + #endif diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index 385a9bd93f..7a0afb1a81 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -890,7 +890,7 @@ ADS_STATUS ads_gen_mod(ADS_STRUCT *ads, const char *mod_dn, ADS_MODLIST mods) non-existent attribute (but allowable for the object) to run */ LDAPControl PermitModify = { - "1.2.840.113556.1.4.1413", + ADS_PERMIT_MODIFY_OID, {0, NULL}, (char) 1}; LDAPControl *controls[2]; -- cgit From 8a3bb8b36bf1bedabb6dfa931ec9a1d579f80500 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:55:41 +0000 Subject: Kill of Get_Pwnam_Modify and smb_getpwnam(). The latter assumes some things that just don't apply any more - now that we always keep username and domain seperate. Also, the policy it was trying to permit is now implemented by the auth code. Andrew Bartlett (This used to be commit 760c0740cad948665db4a1d462fbbd99332713ef) --- source3/lib/username.c | 57 ------------------------------------------------ source3/smbd/sesssetup.c | 4 ++-- 2 files changed, 2 insertions(+), 59 deletions(-) diff --git a/source3/lib/username.c b/source3/lib/username.c index 5db7f58b1e..ef11542ab1 100644 --- a/source3/lib/username.c +++ b/source3/lib/username.c @@ -273,27 +273,6 @@ done: return ret; } -/**************************************************************************** - Get_Pwnam wrapper for modification. - NOTE: This can potentially modify 'user'! -****************************************************************************/ - -struct passwd *Get_Pwnam_Modify(fstring user) -{ - fstring user2; - struct passwd *ret; - - fstrcpy(user2, user); - - ret = Get_Pwnam_internals(user, user2); - - /* If caller wants the modified username, ensure they get it */ - fstrcpy(user,user2); - - /* We can safely assume ret is NULL if none of the above succeed */ - return(ret); -} - /**************************************************************************** Get_Pwnam wrapper without modification. NOTE: This with NOT modify 'user'! @@ -636,39 +615,3 @@ static struct passwd * uname_string_combinations(char *s,struct passwd * (*fn)(c return(NULL); } -/**************************************************************************** - These wrappers allow appliance mode to work. In appliance mode the username - takes the form DOMAIN/user. -****************************************************************************/ - -struct passwd *smb_getpwnam(char *user, BOOL allow_change) -{ - struct passwd *pw; - char *p; - char *sep; - extern pstring global_myname; - - if (allow_change) - pw = Get_Pwnam_Modify(user); - else - pw = Get_Pwnam(user); - - if (pw) - return pw; - - /* - * If it is a domain qualified name and it isn't in our password - * database but the domain portion matches our local machine name then - * lookup just the username portion locally. - */ - - sep = lp_winbind_separator(); - p = strchr_m(user,*sep); - if (p && strncasecmp(global_myname, user, strlen(global_myname))==0) { - if (allow_change) - pw = Get_Pwnam_Modify(p+1); - else - pw = Get_Pwnam(p+1); - } - return NULL; -} diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index 09288ad44d..785f8d6821 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -160,12 +160,12 @@ static int reply_spnego_kerberos(connection_struct *conn, ads_destroy(&ads); /* the password is good - let them in */ - pw = smb_getpwnam(user,False); + pw = Get_Pwnam(user); if (!pw && !strstr(user, lp_winbind_separator())) { char *user2; /* try it with a winbind domain prefix */ asprintf(&user2, "%s%s%s", lp_workgroup(), lp_winbind_separator(), user); - pw = smb_getpwnam(user2,False); + pw = Get_Pwnam(user2); if (pw) { free(user); user = user2; -- cgit From 780e048f58c4947de56544d46297e2a3d66a81e7 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 09:56:36 +0000 Subject: At least try to get this function picked up by the autoprototyper (This used to be commit d5303d5c080212486329f7e5a65f732e11efbb37) --- source3/printing/print_cups.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/printing/print_cups.c b/source3/printing/print_cups.c index 858647a52f..2df846aa57 100644 --- a/source3/printing/print_cups.c +++ b/source3/printing/print_cups.c @@ -73,9 +73,9 @@ cups_passwd_cb(const char *prompt) /* I - Prompt */ * system. */ -void -cups_printer_fn(void (*fn)(char *, char *)) /* I - Function to call */ +void cups_printer_fn(void (*fn)(char *, char *)) { + /* I - Function to call */ http_t *http; /* HTTP connection to server */ ipp_t *request, /* IPP Request */ *response; /* IPP Response */ -- cgit From efcf29fde63feb31625021d12da59db31c79b454 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 10:17:08 +0000 Subject: samtest should load smb.conf by default add command-line option to samtest to specify alternate config file - use /dev/null to don't load any config file.. add 'conf' command to load specified config file (This used to be commit 237883d1e68e99a3ea3df9b6e182c70cb31b2523) --- source3/torture/samtest.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/source3/torture/samtest.c b/source3/torture/samtest.c index e68ff5a0bf..5503887e62 100644 --- a/source3/torture/samtest.c +++ b/source3/torture/samtest.c @@ -53,6 +53,24 @@ static char* next_command (char** cmdstr) return command; } +/* Load specified configuration file */ +static NTSTATUS cmd_conf(struct samtest_state *sam, TALLOC_CTX *mem_ctx, + int argc, char **argv) +{ + if (argc != 2) { + printf("Usage: %s \n", argv[0]); + return NT_STATUS_OK; + } + + if (!lp_load(argv[1], False, True, False)) { + printf("Error loading \"%s\"\n", argv[1]); + return NT_STATUS_OK; + } + + printf("\"%s\" successfully loaded\n", argv[1]); + return NT_STATUS_OK; +} + /* Display help on commands */ static NTSTATUS cmd_help(struct samtest_state *st, TALLOC_CTX *mem_ctx, int argc, char **argv) @@ -143,6 +161,7 @@ static struct cmd_set samtest_commands[] = { { "help", cmd_help, "Get help on commands", "" }, { "?", cmd_help, "Get help on commands", "" }, + { "conf", cmd_conf, "Load smb configuration file", "conf " }, { "debuglevel", cmd_debuglevel, "Set debug level", "" }, { "exit", cmd_quit, "Exit program", "" }, { "quit", cmd_quit, "Exit program", "" }, @@ -336,6 +355,7 @@ int main(int argc, char *argv[]) int opt; static char *cmdstr = ""; static char *opt_logfile=NULL; + static char *config_file = dyn_CONFIGFILE; pstring logfile; struct cmd_set **cmd_set; extern BOOL AllowDebugChange; @@ -348,8 +368,9 @@ int main(int argc, char *argv[]) struct poptOption long_options[] = { POPT_AUTOHELP { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_debug }, - {"command", 'c', POPT_ARG_STRING, &cmdstr, 'c', "Execute semicolon seperated cmds"}, + {"command", 'e', POPT_ARG_STRING, &cmdstr, 'e', "Execute semicolon seperated cmds"}, {"logfile", 'l', POPT_ARG_STRING, &opt_logfile, 'l', "Logfile to use instead of stdout"}, + {"configfile", 'c', POPT_ARG_STRING, &config_file, 0,"use different configuration file",NULL}, { 0, 0, 0, 0} }; @@ -374,6 +395,10 @@ int main(int argc, char *argv[]) } } + if (!lp_load(config_file,True,False,False)) { + fprintf(stderr, "Can't load %s - run testparm to debug it\n", config_file); + exit(1); + } poptFreeContext(pc); -- cgit From b9858339a4a726605e7639becb7baf9534720b7e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 11:08:16 +0000 Subject: Compile samtest with LIBADS_OBJ and PASSDB_OBJ... (This used to be commit f0c095875758ef44ed2d25d3ed9d77e5e163b75f) --- source3/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/Makefile.in b/source3/Makefile.in index f1c7126451..f3d9b7ec09 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -225,7 +225,7 @@ SAM_STATIC_MODULES = sam/sam_plugin.o SAM_OBJ = sam/account.o sam/get_set_account.o sam/get_set_group.o \ sam/get_set_domain.o sam/interface.o sam/api.o $(SAM_STATIC_MODULES) -SAMTEST_OBJ = torture/samtest.o torture/cmd_sam.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o passdb/machine_sid.o passdb/secrets.o +SAMTEST_OBJ = torture/samtest.o torture/cmd_sam.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(READLINE_OBJ) lib/util_seaccess.o $(LIBADS_OBJ) $(PASSDB_OBJ) $(SECRETS_OBJ) $(GROUPDB_OBJ) GROUPDB_OBJ = groupdb/mapping.o -- cgit From 8df2ac63f067e7d11959497a09ff4dd00e8087f7 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 11:19:48 +0000 Subject: Fix debuglevel command-line argument (This used to be commit 779aea57450db83fa7870e8a35db55d475682519) --- source3/torture/samtest.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source3/torture/samtest.c b/source3/torture/samtest.c index 5503887e62..2bbf01a6be 100644 --- a/source3/torture/samtest.c +++ b/source3/torture/samtest.c @@ -379,7 +379,6 @@ int main(int argc, char *argv[]) setlinebuf(stdout); DEBUGLEVEL = 1; - AllowDebugChange = False; pc = poptGetContext("samtest", argc, (const char **) argv, long_options, 0); -- cgit From 82102d9c99f9b255d6262553187642e9637e4670 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 11:34:31 +0000 Subject: This patch from "Stefan (metze) Metzmacher" cleans up pdb_ldap and adds a 'ldap passwd sync' option. The idea with this option is to do allow an ldap backend to do all the fancy password hashing etc - and to tell smbd no to try and double-up. Using 'ldap passwd sync = only' will do this, but is not recommended unless such a backend is in place... Running 'ldap passwd sync = yes' just gets you the same as doing 'pam passwd sync = yes' and having both PAM and pam_ldap correctly configured for 'magic root' behaviour, but only using ldap connection, and one set of credentials. This also gets us closer to allowing ldap to say 'password too short' etc, which might assist in maintaining a consistant password policy. Andrew Bartlett (This used to be commit f13e243f1a13d34ae057b40b01f561e8b95d4570) --- source3/include/smb.h | 5 +- source3/param/loadparm.c | 27 +++- source3/passdb/passdb.c | 11 +- source3/passdb/pdb_get_set.c | 25 +++- source3/passdb/pdb_ldap.c | 291 ++++++++++++++++++++++++++----------------- 5 files changed, 231 insertions(+), 128 deletions(-) diff --git a/source3/include/smb.h b/source3/include/smb.h index 59bfb6b449..c39ebed950 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -616,7 +616,7 @@ typedef struct sam_passwd DATA_BLOB lm_pw; /* .data is Null if no password */ DATA_BLOB nt_pw; /* .data is Null if no password */ - DATA_BLOB plaintext_pw; /* .data is Null if not available */ + char* plaintext_pw; /* is Null if not available */ uint16 acct_ctrl; /* account info (ACB_xxxx bit-mask) */ uint32 unknown_3; /* 0x00ff ffff */ @@ -1346,6 +1346,9 @@ enum schema_types {SCHEMA_COMPAT, SCHEMA_AD, SCHEMA_SAMBA}; /* LDAP SSL options */ enum ldap_ssl_types {LDAP_SSL_ON, LDAP_SSL_OFF, LDAP_SSL_START_TLS}; +/* LDAP PASSWD SYNC methods */ +enum ldap_passwd_sync_types {LDAP_PASSWD_SYNC_ON, LDAP_PASSWD_SYNC_OFF, LDAP_PASSWD_SYNC_ONLY}; + /* Remote architectures we know about. */ enum remote_arch_types {RA_UNKNOWN, RA_WFWG, RA_OS2, RA_WIN95, RA_WINNT, RA_WIN2K, RA_SAMBA}; diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 7b8efbd5bc..4aaf6f20eb 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -207,11 +207,11 @@ typedef struct int iLockSpinTime; char *szLdapMachineSuffix; char *szLdapUserSuffix; - int ldap_port; int ldap_ssl; char *szLdapSuffix; char *szLdapFilter; char *szLdapAdminDn; + int ldap_passwd_sync; BOOL bMsAddPrinterWizard; BOOL bDNSproxy; BOOL bWINSsupport; @@ -600,6 +600,22 @@ static struct enum_list enum_ldap_ssl[] = { {-1, NULL} }; +static struct enum_list enum_ldap_passwd_sync[] = { + {LDAP_PASSWD_SYNC_ON, "Yes"}, + {LDAP_PASSWD_SYNC_ON, "yes"}, + {LDAP_PASSWD_SYNC_ON, "on"}, + {LDAP_PASSWD_SYNC_ON, "On"}, + {LDAP_PASSWD_SYNC_OFF, "no"}, + {LDAP_PASSWD_SYNC_OFF, "No"}, + {LDAP_PASSWD_SYNC_OFF, "off"}, + {LDAP_PASSWD_SYNC_OFF, "Off"}, +#ifdef LDAP_EXOP_X_MODIFY_PASSWD + {LDAP_PASSWD_SYNC_ONLY, "Only"}, + {LDAP_PASSWD_SYNC_ONLY, "only"}, +#endif /* LDAP_EXOP_X_MODIFY_PASSWD */ + {-1, NULL} +}; + /* Types of machine we can announce as. */ #define ANNOUNCE_AS_NT_SERVER 1 #define ANNOUNCE_AS_WIN95 2 @@ -987,12 +1003,13 @@ static struct parm_struct parm_table[] = { {"Ldap Options", P_SEP, P_SEPARATOR}, - {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, - {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, handle_ldap_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, handle_ldap_machine_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, handle_ldap_user_suffix, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"ldap filter", P_STRING, P_GLOBAL, &Globals.szLdapFilter, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, {"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, FLAG_ADVANCED | FLAG_DEVELOPER}, + {"ldap passwd sync", P_ENUM, P_GLOBAL, &Globals.ldap_passwd_sync, NULL, enum_ldap_passwd_sync, FLAG_ADVANCED | FLAG_DEVELOPER}, {"Miscellaneous Options", P_SEP, P_SEPARATOR}, {"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER}, @@ -1357,6 +1374,7 @@ static void init_globals(void) string_set(&Globals.szLdapFilter, "(&(uid=%u)(objectclass=sambaAccount))"); string_set(&Globals.szLdapAdminDn, ""); Globals.ldap_ssl = LDAP_SSL_ON; + Globals.ldap_passwd_sync = LDAP_PASSWD_SYNC_OFF; /* these parameters are set to defaults that are more appropriate for the increasing samba install base: @@ -1570,6 +1588,7 @@ FN_GLOBAL_STRING(lp_ldap_user_suffix, &Globals.szLdapUserSuffix) FN_GLOBAL_STRING(lp_ldap_filter, &Globals.szLdapFilter) FN_GLOBAL_STRING(lp_ldap_admin_dn, &Globals.szLdapAdminDn) FN_GLOBAL_INTEGER(lp_ldap_ssl, &Globals.ldap_ssl) +FN_GLOBAL_INTEGER(lp_ldap_passwd_sync, &Globals.ldap_passwd_sync) FN_GLOBAL_STRING(lp_add_share_cmd, &Globals.szAddShareCommand) FN_GLOBAL_STRING(lp_change_share_cmd, &Globals.szChangeShareCommand) FN_GLOBAL_STRING(lp_delete_share_cmd, &Globals.szDeleteShareCommand) diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c index 05450c9f2f..e0f0cce67f 100644 --- a/source3/passdb/passdb.c +++ b/source3/passdb/passdb.c @@ -75,11 +75,19 @@ static void pdb_fill_default_sam(SAM_ACCOUNT *user) user->private.workstations = ""; user->private.unknown_str = ""; user->private.munged_dial = ""; + + user->private.plaintext_pw = NULL; + } static void destroy_pdb_talloc(SAM_ACCOUNT **user) { if (*user) { + data_blob_clear_free(&((*user)->private.lm_pw)); + data_blob_clear_free(&((*user)->private.nt_pw)); + + if((*user)->private.plaintext_pw!=NULL) + memset((*user)->private.plaintext_pw,'\0',strlen((*user)->private.plaintext_pw)); talloc_destroy((*user)->mem_ctx); *user = NULL; } @@ -310,7 +318,8 @@ static void pdb_free_sam_contents(SAM_ACCOUNT *user) data_blob_clear_free(&(user->private.lm_pw)); data_blob_clear_free(&(user->private.nt_pw)); - data_blob_clear_free(&(user->private.plaintext_pw)); + if (user->private.plaintext_pw!=NULL) + memset(user->private.plaintext_pw,'\0',strlen(user->private.plaintext_pw)); } diff --git a/source3/passdb/pdb_get_set.c b/source3/passdb/pdb_get_set.c index 2da6de7270..0c338f317e 100644 --- a/source3/passdb/pdb_get_set.c +++ b/source3/passdb/pdb_get_set.c @@ -151,7 +151,7 @@ const uint8* pdb_get_lanman_passwd (const SAM_ACCOUNT *sampass) const char* pdb_get_plaintext_passwd (const SAM_ACCOUNT *sampass) { if (sampass) { - return ((char*)sampass->private.plaintext_pw.data); + return (sampass->private.plaintext_pw); } else return (NULL); @@ -956,14 +956,24 @@ BOOL pdb_set_lanman_passwd (SAM_ACCOUNT *sampass, const uint8 pwd[16]) below) ********************************************************************/ -BOOL pdb_set_plaintext_pw_only (SAM_ACCOUNT *sampass, const uint8 *password, size_t len) +BOOL pdb_set_plaintext_pw_only (SAM_ACCOUNT *sampass, const char *password) { if (!sampass) return False; - data_blob_clear_free(&sampass->private.plaintext_pw); - - sampass->private.plaintext_pw = data_blob(password, len); + if (password) { + if (sampass->private.plaintext_pw!=NULL) + memset(sampass->private.plaintext_pw,'\0',strlen(sampass->private.plaintext_pw)+1); + sampass->private.plaintext_pw = talloc_strdup(sampass->mem_ctx, password); + + if (!sampass->private.plaintext_pw) { + DEBUG(0, ("pdb_set_unknown_str: talloc_strdup() failed!\n")); + return False; + } + + } else { + sampass->private.plaintext_pw = NULL; + } return True; } @@ -1062,7 +1072,10 @@ BOOL pdb_set_plaintext_passwd (SAM_ACCOUNT *sampass, const char *plaintext) if (!pdb_set_lanman_passwd (sampass, new_lanman_p16)) return False; - + + if (!pdb_set_plaintext_pw_only (sampass, plaintext)) + return False; + if (!pdb_set_pass_changed_now (sampass)) return False; diff --git a/source3/passdb/pdb_ldap.c b/source3/passdb/pdb_ldap.c index 6d38a2600d..71a8c256a3 100644 --- a/source3/passdb/pdb_ldap.c +++ b/source3/passdb/pdb_ldap.c @@ -1,11 +1,11 @@ /* Unix SMB/CIFS implementation. LDAP protocol helper functions for SAMBA - Copyright (C) Jean François Micouleau 1998 - Copyright (C) Gerald Carter 2001 - Copyright (C) Shahms King 2001 - Copyright (C) Andrew Bartlett 2002 - Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Jean François Micouleau 1998 + Copyright (C) Gerald Carter 2001 + Copyright (C) Shahms King 2001 + Copyright (C) Andrew Bartlett 2002 + Copyright (C) Stefan (metze) Metzmacher 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 @@ -273,7 +273,8 @@ static BOOL ldapsam_open_connection (struct ldapsam_privates *ldap_state, LDAP * a rebind function for authenticated referrals This version takes a void* that we can shove useful stuff in :-) ******************************************************************/ - +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) +#else static int rebindproc_with_state (LDAP * ld, char **whop, char **credp, int *methodp, int freeit, void *arg) { @@ -304,13 +305,14 @@ static int rebindproc_with_state (LDAP * ld, char **whop, char **credp, } return 0; } +#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ /******************************************************************* a rebind function for authenticated referrals This version takes a void* that we can shove useful stuff in :-) and actually does the connection. ******************************************************************/ - +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) static int rebindproc_connect_with_state (LDAP *ldap_struct, LDAP_CONST char *url, ber_tag_t request, @@ -329,11 +331,14 @@ static int rebindproc_connect_with_state (LDAP *ldap_struct, return rc; } +#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ /******************************************************************* Add a rebind function for authenticated referrals ******************************************************************/ - +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) +#else +# if LDAP_SET_REBIND_PROC_ARGS == 2 static int rebindproc (LDAP *ldap_struct, char **whop, char **credp, int *method, int freeit ) { @@ -341,19 +346,23 @@ static int rebindproc (LDAP *ldap_struct, char **whop, char **credp, method, freeit, static_ldap_state); } +# endif /*LDAP_SET_REBIND_PROC_ARGS == 2*/ +#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ /******************************************************************* a rebind function for authenticated referrals this also does the connection, but no void*. ******************************************************************/ - +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000) +# if LDAP_SET_REBIND_PROC_ARGS == 2 static int rebindproc_connect (LDAP * ld, LDAP_CONST char *url, int request, ber_int_t msgid) { return rebindproc_connect_with_state(ld, url, (ber_tag_t)request, msgid, static_ldap_state); } - +# endif /*LDAP_SET_REBIND_PROC_ARGS == 2*/ +#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ /******************************************************************* connect to the ldap server under system privilege. @@ -391,18 +400,18 @@ static BOOL ldapsam_connect_system(struct ldapsam_privates *ldap_state, LDAP * l # if LDAP_SET_REBIND_PROC_ARGS == 3 ldap_set_rebind_proc(ldap_struct, &rebindproc_connect_with_state, (void *)ldap_state); # endif -#else +#else /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ # if LDAP_SET_REBIND_PROC_ARGS == 2 ldap_set_rebind_proc(ldap_struct, &rebindproc); # endif # if LDAP_SET_REBIND_PROC_ARGS == 3 ldap_set_rebind_proc(ldap_struct, &rebindproc_with_state, (void *)ldap_state); # endif -#endif +#endif /*defined(LDAP_API_FEATURE_X_OPENLDAP) && (LDAP_API_VERSION > 2000)*/ + rc = ldap_simple_bind_s(ldap_struct, ldap_dn, ldap_secret); - if (rc != LDAP_SUCCESS) - { + if (rc != LDAP_SUCCESS) { DEBUG(0, ("Bind failed: %s\n", ldap_err2string(rc))); return False; } @@ -421,7 +430,7 @@ static int ldapsam_search_one_user (struct ldapsam_privates *ldap_state, LDAP * DEBUG(2, ("ldapsam_search_one_user: searching for:[%s]\n", filter)); - rc = ldap_search_s(ldap_struct, lp_ldap_suffix (), scope, filter, attr, 0, result); + rc = ldap_search_s(ldap_struct, lp_ldap_suffix (), scope, filter, (char **)attr, 0, result); if (rc != LDAP_SUCCESS) { DEBUG(0,("ldapsam_search_one_user: Problem during the LDAP search: %s\n", @@ -944,9 +953,6 @@ static BOOL init_ldap_from_sam (struct ldapsam_privates *ldap_state, slprintf(temp, sizeof(temp) - 1, "%i", rid); make_a_mod(mods, ldap_op, "primaryGroupID", temp); - slprintf (temp, sizeof (temp) - 1, "%li", pdb_get_pass_last_set_time(sampass)); - make_a_mod(mods, ldap_op, "pwdLastSet", temp); - /* displayName, cn, and gecos should all be the same * most easily accomplished by giving them the same OID * gecos isn't set here b/c it should be handled by the @@ -989,6 +995,7 @@ static BOOL init_ldap_from_sam (struct ldapsam_privates *ldap_state, make_a_mod(mods, ldap_op, "kickoffTime", temp); } + if (IS_SAM_SET(sampass, FLAG_SAM_CANCHANGETIME)) { slprintf (temp, sizeof (temp) - 1, "%li", pdb_get_pass_can_change_time(sampass)); make_a_mod(mods, ldap_op, "pwdCanChange", temp); @@ -999,13 +1006,22 @@ static BOOL init_ldap_from_sam (struct ldapsam_privates *ldap_state, make_a_mod(mods, ldap_op, "pwdMustChange", temp); } - /* FIXME: Hours stuff goes in LDAP */ - pdb_sethexpwd (temp, pdb_get_lanman_passwd(sampass), pdb_get_acct_ctrl(sampass)); - make_a_mod (mods, ldap_op, "lmPassword", temp); + if ((pdb_get_acct_ctrl(sampass)&(ACB_WSTRUST|ACB_SVRTRUST|ACB_DOMTRUST))|| + (lp_ldap_passwd_sync()!=LDAP_PASSWD_SYNC_ONLY)) { + + pdb_sethexpwd (temp, pdb_get_lanman_passwd(sampass), pdb_get_acct_ctrl(sampass)); + make_a_mod (mods, ldap_op, "lmPassword", temp); - pdb_sethexpwd (temp, pdb_get_nt_passwd(sampass), pdb_get_acct_ctrl(sampass)); - make_a_mod (mods, ldap_op, "ntPassword", temp); + pdb_sethexpwd (temp, pdb_get_nt_passwd(sampass), pdb_get_acct_ctrl(sampass)); + make_a_mod (mods, ldap_op, "ntPassword", temp); + slprintf (temp, sizeof (temp) - 1, "%li", pdb_get_pass_last_set_time(sampass)); + make_a_mod(mods, ldap_op, "pwdLastSet", temp); + + } + + /* FIXME: Hours stuff goes in LDAP */ + make_a_mod (mods, ldap_op, "acctFlags", pdb_encode_acct_ctrl (pdb_get_acct_ctrl(sampass), NEW_PW_FORMAT_SPACE_PADDED_LEN)); @@ -1030,18 +1046,18 @@ static uint32 check_nua_rid_is_avail(struct ldapsam_privates *ldap_state, uint32 if (ldapsam_search_one_user_by_rid(ldap_state, ldap_struct, final_rid, &result) != LDAP_SUCCESS) { DEBUG(0, ("Cannot allocate NUA RID %d (0x%x), as the confirmation search failed!\n", final_rid, final_rid)); - final_rid = 0; ldap_msgfree(result); + return 0; } - if (ldap_count_entries(ldap_struct, result) != 0) - { + if (ldap_count_entries(ldap_struct, result) != 0) { DEBUG(0, ("Cannot allocate NUA RID %d (0x%x), as the RID is already in use!!\n", final_rid, final_rid)); - final_rid = 0; ldap_msgfree(result); + return 0; } DEBUG(5, ("NUA RID %d (0x%x), declared valid\n", final_rid, final_rid)); + ldap_msgfree(result); return final_rid; } @@ -1093,12 +1109,10 @@ static uint32 search_top_nua_rid(struct ldapsam_privates *ldap_state, LDAP *ldap DEBUG(2, ("ldapsam_get_next_available_nua_rid: searching for:[%s]\n", final_filter)); rc = ldap_search_s(ldap_struct, lp_ldap_suffix(), - LDAP_SCOPE_SUBTREE, final_filter, attr, 0, + LDAP_SCOPE_SUBTREE, final_filter, (char **)attr, 0, &result); - if (rc != LDAP_SUCCESS) - { - + if (rc != LDAP_SUCCESS) { DEBUG(3, ("LDAP search failed! cannot find base for NUA RIDs: %s\n", ldap_err2string(rc))); DEBUGADD(3, ("Query was: %s, %s\n", lp_ldap_suffix(), final_filter)); @@ -1149,12 +1163,10 @@ static uint32 ldapsam_get_next_available_nua_rid(struct ldapsam_privates *ldap_s uint32 next_nua_rid; uint32 top_nua_rid; - if (!ldapsam_open_connection(ldap_state, &ldap_struct)) - { + if (!ldapsam_open_connection(ldap_state, &ldap_struct)) { return 0; } - if (!ldapsam_connect_system(ldap_state, ldap_struct)) - { + if (!ldapsam_connect_system(ldap_state, ldap_struct)) { ldap_unbind(ldap_struct); return 0; } @@ -1177,12 +1189,10 @@ static BOOL ldapsam_setsampwent(struct pdb_methods *my_methods, BOOL update) int rc; pstring filter; - if (!ldapsam_open_connection(ldap_state, &ldap_state->ldap_struct)) - { + if (!ldapsam_open_connection(ldap_state, &ldap_state->ldap_struct)) { return False; } - if (!ldapsam_connect_system(ldap_state, ldap_state->ldap_struct)) - { + if (!ldapsam_connect_system(ldap_state, ldap_state->ldap_struct)) { ldap_unbind(ldap_state->ldap_struct); return False; } @@ -1191,11 +1201,10 @@ static BOOL ldapsam_setsampwent(struct pdb_methods *my_methods, BOOL update) all_string_sub(filter, "%u", "*", sizeof(pstring)); rc = ldap_search_s(ldap_state->ldap_struct, lp_ldap_suffix(), - LDAP_SCOPE_SUBTREE, filter, attr, 0, + LDAP_SCOPE_SUBTREE, filter, (char **)attr, 0, &ldap_state->result); - if (rc != LDAP_SUCCESS) - { + if (rc != LDAP_SUCCESS) { DEBUG(0, ("LDAP search failed: %s\n", ldap_err2string(rc))); DEBUG(3, ("Query was: %s, %s\n", lp_ldap_suffix(), filter)); ldap_msgfree(ldap_state->result); @@ -1222,8 +1231,7 @@ End enumeration of the LDAP password list static void ldapsam_endsampwent(struct pdb_methods *my_methods) { struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; - if (ldap_state->ldap_struct && ldap_state->result) - { + if (ldap_state->ldap_struct && ldap_state->result) { ldap_msgfree(ldap_state->result); ldap_unbind(ldap_state->ldap_struct); ldap_state->ldap_struct = NULL; @@ -1234,7 +1242,7 @@ static void ldapsam_endsampwent(struct pdb_methods *my_methods) /********************************************************************** Get the next entry in the LDAP password database *********************************************************************/ -static BOOL ldapsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT * user) +static BOOL ldapsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *user) { struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; BOOL ret = False; @@ -1252,8 +1260,7 @@ static BOOL ldapsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT * us ldap_state->entry); ldap_state->entry = ldap_next_entry(ldap_state->ldap_struct, - ldap_state->entry); - + ldap_state->entry); } return True; @@ -1262,7 +1269,7 @@ static BOOL ldapsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT * us /********************************************************************** Get SAM_ACCOUNT entry from LDAP by username *********************************************************************/ -static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT * user, const char *sname) +static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT *user, const char *sname) { struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; LDAP *ldap_struct; @@ -1271,18 +1278,15 @@ static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT * us if (!ldapsam_open_connection(ldap_state, &ldap_struct)) return False; - if (!ldapsam_connect_system(ldap_state, ldap_struct)) - { + if (!ldapsam_connect_system(ldap_state, ldap_struct)) { ldap_unbind(ldap_struct); return False; } - if (ldapsam_search_one_user_by_name(ldap_state, ldap_struct, sname, &result) != LDAP_SUCCESS) - { + if (ldapsam_search_one_user_by_name(ldap_state, ldap_struct, sname, &result) != LDAP_SUCCESS) { ldap_unbind(ldap_struct); return False; } - if (ldap_count_entries(ldap_struct, result) < 1) - { + if (ldap_count_entries(ldap_struct, result) < 1) { DEBUG(4, ("We don't find this user [%s] count=%d\n", sname, ldap_count_entries(ldap_struct, result))); @@ -1290,8 +1294,7 @@ static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT * us return False; } entry = ldap_first_entry(ldap_struct, result); - if (entry) - { + if (entry) { if (!init_sam_from_ldap(ldap_state, user, ldap_struct, entry)) { DEBUG(1,("ldapsam_getsampwnam: init_sam_from_ldap failed for user '%s'!\n", sname)); ldap_msgfree(result); @@ -1301,9 +1304,7 @@ static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT * us ldap_msgfree(result); ldap_unbind(ldap_struct); return True; - } - else - { + } else { ldap_msgfree(result); ldap_unbind(ldap_struct); return False; @@ -1313,7 +1314,7 @@ static BOOL ldapsam_getsampwnam(struct pdb_methods *my_methods, SAM_ACCOUNT * us /********************************************************************** Get SAM_ACCOUNT entry from LDAP by rid *********************************************************************/ -static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT * user, uint32 rid) +static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT *user, uint32 rid) { struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data; LDAP *ldap_struct; @@ -1323,20 +1324,17 @@ static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT * us if (!ldapsam_open_connection(ldap_state, &ldap_struct)) return False; - if (!ldapsam_connect_system(ldap_state, ldap_struct)) - { + if (!ldapsam_connect_system(ldap_state, ldap_struct)) { ldap_unbind(ldap_struct); return False; } if (ldapsam_search_one_user_by_rid(ldap_state, ldap_struct, rid, &result) != - LDAP_SUCCESS) - { + LDAP_SUCCESS) { ldap_unbind(ldap_struct); return False; } - if (ldap_count_entries(ldap_struct, result) < 1) - { + if (ldap_count_entries(ldap_struct, result) < 1) { DEBUG(4, ("We don't find this rid [%i] count=%d\n", rid, ldap_count_entries(ldap_struct, result))); @@ -1345,8 +1343,7 @@ static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT * us } entry = ldap_first_entry(ldap_struct, result); - if (entry) - { + if (entry) { if (!init_sam_from_ldap(ldap_state, user, ldap_struct, entry)) { DEBUG(1,("ldapsam_getsampwrid: init_sam_from_ldap failed!\n")); ldap_msgfree(result); @@ -1356,9 +1353,7 @@ static BOOL ldapsam_getsampwrid(struct pdb_methods *my_methods, SAM_ACCOUNT * us ldap_msgfree(result); ldap_unbind(ldap_struct); return True; - } - else - { + } else { ldap_msgfree(result); ldap_unbind(ldap_struct); return False; @@ -1373,6 +1368,95 @@ static BOOL ldapsam_getsampwsid(struct pdb_methods *my_methods, SAM_ACCOUNT * us return ldapsam_getsampwrid(my_methods, user, rid); } +static BOOL ldapsam_modify_entry(LDAP *ldap_struct,SAM_ACCOUNT *newpwd,char *dn,LDAPMod **mods,int ldap_op) +{ + int version; + int rc; + + switch(ldap_op) + { + case LDAP_MOD_ADD: + make_a_mod(&mods, LDAP_MOD_ADD, "objectclass", "account"); + if((rc = ldap_add_s(ldap_struct,dn,mods))!=LDAP_SUCCESS) { + char *ld_error; + ldap_get_option(ldap_struct, LDAP_OPT_ERROR_STRING, + &ld_error); + DEBUG(0, + ("failed to add user with uid = %s with: %s\n\t%s\n", + pdb_get_username(newpwd), ldap_err2string(rc), + ld_error)); + free(ld_error); + return False; + } + break; + case LDAP_MOD_REPLACE: + if((rc = ldap_modify_s(ldap_struct,dn,mods))!=LDAP_SUCCESS) { + char *ld_error; + ldap_get_option(ldap_struct, LDAP_OPT_ERROR_STRING, + &ld_error); + DEBUG(0, + ("failed to modify user with uid = %s with: %s\n\t%s\n", + pdb_get_username(newpwd), ldap_err2string(rc), + ld_error)); + free(ld_error); + return False; + } + break; + default: + DEBUG(0,("Wrong LDAP operation type: %d!\n",ldap_op)); + return False; + } + +#ifdef LDAP_EXOP_X_MODIFY_PASSWD + if (!(pdb_get_acct_ctrl(newpwd)&(ACB_WSTRUST|ACB_SVRTRUST|ACB_DOMTRUST))&& + (lp_ldap_passwd_sync()!=LDAP_PASSWD_SYNC_OFF)&& + (pdb_get_plaintext_passwd(newpwd)!=NULL)) { + BerElement *ber; + struct berval *bv; + char *retoid; + struct berval *retdata; + + if (ldap_get_option(ldap_struct, LDAP_OPT_PROTOCOL_VERSION, &version) == LDAP_OPT_SUCCESS) { + if (version != LDAP_VERSION3) { + version = LDAP_VERSION3; + ldap_set_option (ldap_struct, LDAP_OPT_PROTOCOL_VERSION, &version); + } + } + + if ((ber = ber_alloc_t(LBER_USE_DER))==NULL) { + DEBUG(0,("ber_alloc_t returns NULL\n")); + return False; + } + ber_printf (ber, "{"); + ber_printf (ber, "ts", LDAP_TAG_EXOP_X_MODIFY_PASSWD_ID,dn); + ber_printf (ber, "ts", LDAP_TAG_EXOP_X_MODIFY_PASSWD_NEW, pdb_get_plaintext_passwd(newpwd)); + ber_printf (ber, "N}"); + + if ((rc = ber_flatten (ber, &bv))<0) { + DEBUG(0,("ber_flatten returns a value <0\n")); + return False; + } + + ber_free(ber,1); + + if ((rc = ldap_extended_operation_s(ldap_struct, LDAP_EXOP_X_MODIFY_PASSWD, + bv, NULL, NULL, &retoid, &retdata))!=LDAP_SUCCESS) { + DEBUG(0,("LDAP Password could not be changed for user %s: %s\n", + pdb_get_username(newpwd),ldap_err2string(rc))); + } else { + DEBUG(3,("LDAP Password changed for user %s\n",pdb_get_username(newpwd))); + + ber_bvfree(retdata); + ber_memfree(retoid); + } + ber_bvfree(bv); + } +#else + DEBUG(10,("LDAP PASSWORD SYNC is not supported!\n")); +#endif /* LDAP_EXOP_X_MODIFY_PASSWD */ + return True; +} + /********************************************************************** Delete entry from LDAP for username *********************************************************************/ @@ -1414,7 +1498,8 @@ static BOOL ldapsam_delete_sam_account(struct pdb_methods *my_methods, SAM_ACCOU entry = ldap_first_entry (ldap_struct, result); dn = ldap_get_dn (ldap_struct, entry); - + ldap_msgfree(result); + rc = ldap_delete_s (ldap_struct, dn); ldap_memfree (dn); @@ -1449,8 +1534,7 @@ static BOOL ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOU if (!ldapsam_open_connection(ldap_state, &ldap_struct)) /* open a connection to the server */ return False; - if (!ldapsam_connect_system(ldap_state, ldap_struct)) /* connect as system account */ - { + if (!ldapsam_connect_system(ldap_state, ldap_struct)) { /* connect as system account */ ldap_unbind(ldap_struct); return False; } @@ -1458,8 +1542,7 @@ static BOOL ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOU rc = ldapsam_search_one_user_by_name(ldap_state, ldap_struct, pdb_get_username(newpwd), &result); - if (ldap_count_entries(ldap_struct, result) == 0) - { + if (ldap_count_entries(ldap_struct, result) == 0) { DEBUG(0, ("No user to modify!\n")); ldap_msgfree(result); ldap_unbind(ldap_struct); @@ -1475,23 +1558,17 @@ static BOOL ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_ACCOU entry = ldap_first_entry(ldap_struct, result); dn = ldap_get_dn(ldap_struct, entry); - - rc = ldap_modify_s(ldap_struct, dn, mods); - - if (rc != LDAP_SUCCESS) - { - char *ld_error; - ldap_get_option(ldap_struct, LDAP_OPT_ERROR_STRING, - &ld_error); - DEBUG(0, - ("failed to modify user with uid = %s with: %s\n\t%s\n", - pdb_get_username(newpwd), ldap_err2string(rc), - ld_error)); - free(ld_error); + ldap_msgfree(result); + + if (!ldapsam_modify_entry(ldap_struct,newpwd,dn,mods,LDAP_MOD_REPLACE)) { + DEBUG(0,("failed to modify user with uid = %s\n", + pdb_get_username(newpwd))); + ldap_mods_free(mods,1); ldap_unbind(ldap_struct); return False; } + DEBUG(2, ("successfully modified uid = %s in the LDAP database\n", pdb_get_username(newpwd))); @@ -1514,7 +1591,7 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT LDAPMod **mods = NULL; int ldap_op; uint32 num_result; - + const char *username = pdb_get_username(newpwd); if (!username || !*username) { DEBUG(0, ("Cannot add user without a username!\n")); @@ -1522,20 +1599,16 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT } if (!ldapsam_open_connection(ldap_state, &ldap_struct)) /* open a connection to the server */ - { return False; - } - if (!ldapsam_connect_system(ldap_state, ldap_struct)) /* connect as system account */ - { + if (!ldapsam_connect_system(ldap_state, ldap_struct)) { /* connect as system account */ ldap_unbind(ldap_struct); return False; } rc = ldapsam_search_one_user_by_name (ldap_state, ldap_struct, username, &result); - if (ldap_count_entries(ldap_struct, result) != 0) - { + if (ldap_count_entries(ldap_struct, result) != 0) { DEBUG(0,("User already in the base, with samba properties\n")); ldap_msgfree(result); ldap_unbind(ldap_struct); @@ -1564,8 +1637,7 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT tmp = ldap_get_dn (ldap_struct, entry); slprintf (dn, sizeof (dn) - 1, "%s", tmp); ldap_memfree (tmp); - } - else { + } else { /* Check if we need to add an entry */ DEBUG(3,("Adding new user\n")); ldap_op = LDAP_MOD_ADD; @@ -1586,27 +1658,14 @@ static BOOL ldapsam_add_sam_account(struct pdb_methods *my_methods, SAM_ACCOUNT } make_a_mod(&mods, LDAP_MOD_ADD, "objectclass", "sambaAccount"); - if (ldap_op == LDAP_MOD_REPLACE) { - rc = ldap_modify_s(ldap_struct, dn, mods); - } - else { - make_a_mod(&mods, LDAP_MOD_ADD, "objectclass", "account"); - rc = ldap_add_s(ldap_struct, dn, mods); - } - - if (rc != LDAP_SUCCESS) - { - char *ld_error; - - ldap_get_option (ldap_struct, LDAP_OPT_ERROR_STRING, &ld_error); - DEBUG(0,("failed to modify/add user with uid = %s (dn = %s) with: %s\n\t%s\n", - pdb_get_username(newpwd), dn, ldap_err2string (rc), ld_error)); - free(ld_error); - ldap_mods_free(mods, 1); + if (!ldapsam_modify_entry(ldap_struct,newpwd,dn,mods,ldap_op)) { + DEBUG(0,("failed to modify/add user with uid = %s (dn = %s)\n", + pdb_get_username(newpwd),dn)); + ldap_mods_free(mods,1); ldap_unbind(ldap_struct); return False; } - + DEBUG(2,("added: uid = %s in the LDAP database\n", pdb_get_username(newpwd))); ldap_mods_free(mods, 1); ldap_unbind(ldap_struct); -- cgit From 059838a843e8677e69c79ee8dbdc0e575ca54797 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 11:42:30 +0000 Subject: Don't crash when a backend doesn't have a setsampwent function available - bug reported by metze (This used to be commit 4aea951102a6e82612560e6a59931fde433ee6ea) --- source3/passdb/pdb_interface.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c index f5926e54f1..f965dd727c 100644 --- a/source3/passdb/pdb_interface.c +++ b/source3/passdb/pdb_interface.c @@ -41,7 +41,7 @@ const struct pdb_init_function_entry builtin_pdb_init_functions[] = { static BOOL context_setsampwent(struct pdb_context *context, BOOL update) { - if ((!context) || (!context->pdb_methods) || (!context->pdb_methods->setsampwent)) { + if (!context) { DEBUG(0, ("invalid pdb_context specified!\n")); return False; } @@ -53,7 +53,7 @@ static BOOL context_setsampwent(struct pdb_context *context, BOOL update) return True; } - while (!(context->pwent_methods->setsampwent(context->pwent_methods, update))) { + while (!(context->pwent_methods->setsampwent) || !(context->pwent_methods->setsampwent(context->pwent_methods, update))) { context->pwent_methods = context->pwent_methods->next; if (context->pwent_methods == NULL) return False; -- cgit From 31b131b0e9208336b99eea6b301d4a7ea93e6b66 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 12:02:57 +0000 Subject: Whenever we deal with adding machine/trusted domain accounts, always reset the flag to what we expect. This handles the 'upgrade' from unixsam beter (where all $ terminated accounts are machines). Andrew Bartlett (This used to be commit a198940ea6f7b7f3cba38c5a9f695e0731204583) --- source3/passdb/passdb.c | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c index e0f0cce67f..b78f26a8e8 100644 --- a/source3/passdb/passdb.c +++ b/source3/passdb/passdb.c @@ -1003,6 +1003,7 @@ BOOL local_password_change(const char *user_name, int local_flags, { struct passwd *pwd = NULL; SAM_ACCOUNT *sam_pass=NULL; + uint16 other_acb; *err_str = '\0'; *msg_str = '\0'; @@ -1042,31 +1043,33 @@ BOOL local_password_change(const char *user_name, int local_flags, return False; } } - if (local_flags & LOCAL_TRUST_ACCOUNT) { - if (!pdb_set_acct_ctrl(sam_pass, ACB_WSTRUST)) { - slprintf(err_str, err_str_len - 1, "Failed to set 'trusted workstation account' flags for user %s.\n", user_name); - pdb_free_sam(&sam_pass); - return False; - } - } else if (local_flags & LOCAL_INTERDOM_ACCOUNT) { - if (!pdb_set_acct_ctrl(sam_pass, ACB_DOMTRUST)) { - slprintf(err_str, err_str_len - 1, "Failed to set 'domain trust account' flags for user %s.\n", user_name); - pdb_free_sam(&sam_pass); - return False; - } - } else { - if (!pdb_set_acct_ctrl(sam_pass, ACB_NORMAL)) { - slprintf(err_str, err_str_len - 1, "Failed to set 'normal account' flags for user %s.\n", user_name); - pdb_free_sam(&sam_pass); - return False; - } - } - } else { /* the entry already existed */ local_flags &= ~LOCAL_ADD_USER; } + /* the 'other' acb bits not being changed here */ + other_acb = (pdb_get_acct_ctrl(sam_pass) & (!(ACB_WSTRUST|ACB_DOMTRUST|ACB_SVRTRUST|ACB_NORMAL))); + if (local_flags & LOCAL_TRUST_ACCOUNT) { + if (!pdb_set_acct_ctrl(sam_pass, ACB_WSTRUST | other_acb) ) { + slprintf(err_str, err_str_len - 1, "Failed to set 'trusted workstation account' flags for user %s.\n", user_name); + pdb_free_sam(&sam_pass); + return False; + } + } else if (local_flags & LOCAL_INTERDOM_ACCOUNT) { + if (!pdb_set_acct_ctrl(sam_pass, ACB_DOMTRUST | other_acb)) { + slprintf(err_str, err_str_len - 1, "Failed to set 'domain trust account' flags for user %s.\n", user_name); + pdb_free_sam(&sam_pass); + return False; + } + } else { + if (!pdb_set_acct_ctrl(sam_pass, ACB_NORMAL | other_acb)) { + slprintf(err_str, err_str_len - 1, "Failed to set 'normal account' flags for user %s.\n", user_name); + pdb_free_sam(&sam_pass); + return False; + } + } + /* * We are root - just write the new password * and the valid last change time. -- cgit From d386b71d32d2a7dff8442b6df0654d0b67d29044 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 12:09:56 +0000 Subject: Metze claims that without this his win2k server gets horribly confused looking for all sorts of AD things in lp_realm(). We need to get some non-Win2k NTLMSSP and chase this up a bit, but this will do for now. (Hmm, this might affect NTLMv2 as well) Andrew Bartlett (This used to be commit 0e6babc306f60e88fc28705a8d4ad112bafe92cb) --- source3/smbd/sesssetup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index 785f8d6821..b9af720008 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -322,12 +322,12 @@ static int reply_spnego_negotiate(connection_struct *conn, "U", lp_workgroup()); - fstrcpy(dnsdomname, lp_realm()); + fstrcpy(dnsdomname, (SEC_ADS == lp_security())?lp_realm():""); strlower(dnsdomname); fstrcpy(dnsname, global_myname); fstrcat(dnsname, "."); - fstrcat(dnsname, lp_realm()); + fstrcat(dnsname, dnsdomname); strlower(dnsname); msrpc_gen(&struct_blob, "aaaaa", -- cgit From d7ffd7a40adecb7de72b9e38e761ccc789852f9e Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 25 Sep 2002 12:32:17 +0000 Subject: Fix the circular dependency that was preventing 'domain master = auto' (the default) from working. Andrew Bartlett (This used to be commit 25950dbb3272949a235bed936c7d7b1d23f15fac) --- source3/param/loadparm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 4aaf6f20eb..c484439837 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -3563,7 +3563,7 @@ static void set_server_role(void) case SEC_USER: if (lp_domain_logons()) { - if (lp_domain_master()) + if (Globals.bDomainMaster) /* auto or yes */ server_role = ROLE_DOMAIN_PDC; else server_role = ROLE_DOMAIN_BDC; -- cgit From 284dd066a8b848d8c2d93089ed9991647b7db486 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 25 Sep 2002 12:59:47 +0000 Subject: remove extern for AllowDebugChange since we don't use it (This used to be commit 70d9b71ceaeba95712fa61e601376ff5cc8e7714) --- source3/torture/samtest.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source3/torture/samtest.c b/source3/torture/samtest.c index 2bbf01a6be..b5f7ed9f76 100644 --- a/source3/torture/samtest.c +++ b/source3/torture/samtest.c @@ -358,7 +358,6 @@ int main(int argc, char *argv[]) static char *config_file = dyn_CONFIGFILE; pstring logfile; struct cmd_set **cmd_set; - extern BOOL AllowDebugChange; struct samtest_state st; -- cgit

    Default: panic action = <empty string>panic action = <empty string>

    Example: