From andrey@ns1.mgul.ac.ru Tue Aug 13 13:51:29 2002 Return-Path: Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1DE4C37B400 for ; Tue, 13 Aug 2002 13:51:29 -0700 (PDT) Received: from ns1.mgul.ac.ru (ns1.mgul.ac.ru [193.233.63.19]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0E9A043E75 for ; Tue, 13 Aug 2002 13:51:24 -0700 (PDT) (envelope-from andrey@ns1.mgul.ac.ru) Received: from ns1.mgul.ac.ru (localhost [IPv6:::1]) by ns1.mgul.ac.ru (8.12.5/8.12.5) with ESMTP id g7DKpLd7013430 for ; Wed, 14 Aug 2002 00:51:21 +0400 (MSD) Received: (from andrey@localhost) by ns1.mgul.ac.ru (8.12.5/8.12.5/Submit) id g7DKpKjl013429; Wed, 14 Aug 2002 00:51:20 +0400 (MSD) Message-Id: <200208132051.g7DKpKjl013429@ns1.mgul.ac.ru> Date: Wed, 14 Aug 2002 00:51:20 +0400 (MSD) From: "Andrey V. Pevnev" Reply-To: "Andrey V. Pevnev" To: FreeBSD-gnats-submit@freebsd.org Cc: Subject: Update port: pam-pgsql (fixed coredump on -STABLE) X-Send-Pr-Version: 3.113 X-GNATS-Notify: >Number: 41637 >Category: ports >Synopsis: Update port: pam-pgsql (fixed coredump on -STABLE) >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-ports >State: closed >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Tue Aug 13 14:00:02 PDT 2002 >Closed-Date: Wed Sep 18 07:34:10 PDT 2002 >Last-Modified: Wed Sep 18 07:34:10 PDT 2002 >Originator: Andrey V. Pevnev >Release: FreeBSD 4.6.1-RELEASE-p10 i386 >Organization: Moscow State Forestry University >Environment: System: FreeBSD ns1.mgul.ac.ru 4.6.1-RELEASE-p10 FreeBSD 4.6.1-RELEASE-p10 #0: Tue Aug 6 11:10:24 MSD 2002 andrey@ns1.mgul.ac.ru:/usr/obj/.amd_mnt/ns/host/usr/src/sys/NS1 i386 >Description: Fixed coredump on -STABLE, thanks to Mathieu Arnold! New files: files/patch-aa files/patch-ab This will close ports/41401 >How-To-Repeat: >Fix: --- pam-pgsql.diff begins here --- diff -ruN pam-pgsql.bak/Makefile pam-pgsql/Makefile --- pam-pgsql.bak/Makefile Wed Aug 14 00:25:47 2002 +++ pam-pgsql/Makefile Wed Aug 14 00:28:30 2002 @@ -7,13 +7,14 @@ PORTNAME= pam-pgsql PORTVERSION= 0.5.2 -PORTREVISION= 5 +PORTREVISION= 6 CATEGORIES= security databases MASTER_SITES= ${MASTER_SITE_DEBIAN} \ http://libpam-pgsql.codecastle.com/${PORTNAME}-${PORTVERSION}-${PORTREVISION}/ MASTER_SITE_SUBDIR= pool/non-US/main/p/pam-pgsql DISTFILES= ${PORTNAME}_${PORTVERSION}.orig${EXTRACT_SUFX} -PATCHFILES= pam-pgsql_0.5.2-${PORTREVISION}.diff.gz + +PATCHFILES= pam-pgsql_${PORTVERSION}-5.diff.gz PATCH_SITES= ${MASTER_SITES} MAINTAINER= andrey@mgul.ac.ru diff -ruN pam-pgsql.bak/files/patch-aa pam-pgsql/files/patch-aa --- pam-pgsql.bak/files/patch-aa Thu Jan 1 03:00:00 1970 +++ pam-pgsql/files/patch-aa Wed Aug 14 00:25:59 2002 @@ -0,0 +1,74 @@ +diff -ruN ../pam-pgsql-0.5.2-orig/pam_get_pass.c ./pam_get_pass.c +--- pam_get_pass.c Mon Jan 14 17:45:55 2002 ++++ pam_get_pass.c Tue Aug 13 18:31:56 2002 +@@ -33,70 +33,7 @@ + /* $Id: pam_get_pass.c,v 1.2 2000/06/25 09:39:28 ljb Exp $ */ + #include + #include +-#include "pam_mod_misc.h" +- +-static int pam_conv_pass(pam_handle_t *, const char *, int); +- +-static int +-pam_conv_pass(pam_handle_t *pamh, const char *prompt, int options) +-{ +- int retval; +- const void *item; +- const struct pam_conv *conv; +- struct pam_message msg; +- const struct pam_message *msgs[1]; +- struct pam_response *resp; +- +- if ((retval = pam_get_item(pamh, PAM_CONV, &item)) != +- PAM_SUCCESS) +- return retval; +- conv = (const struct pam_conv *)item; +- msg.msg_style = options & PAM_OPT_ECHO_PASS ? +- PAM_PROMPT_ECHO_ON : PAM_PROMPT_ECHO_OFF; +- msg.msg = prompt; +- msgs[0] = &msg; +- if ((retval = conv->conv(1, msgs, &resp, conv->appdata_ptr)) != +- PAM_SUCCESS) +- return retval; +- if ((retval = pam_set_item(pamh, PAM_AUTHTOK, resp[0].resp)) != +- PAM_SUCCESS) +- return retval; +- memset(resp[0].resp, 0, strlen(resp[0].resp)); +- free(resp[0].resp); +- free(resp); +- return PAM_SUCCESS; +-} +- +-int +-pam_get_pass(pam_handle_t *pamh, const char **passp, const char *prompt, +- int options) +-{ +- int retval; +- const void *item = NULL; +- +- /* +- * Grab the already-entered password if we might want to use it. +- */ +- if (options & (PAM_OPT_TRY_FIRST_PASS | PAM_OPT_USE_FIRST_PASS)) { +- if ((retval = pam_get_item(pamh, PAM_AUTHTOK, &item)) != +- PAM_SUCCESS) +- return retval; +- } +- +- if (item == NULL) { +- /* The user hasn't entered a password yet. */ +- if (options & PAM_OPT_USE_FIRST_PASS) +- return PAM_AUTH_ERR; +- /* Use the conversation function to get a password. */ +- if ((retval = pam_conv_pass(pamh, prompt, options)) != +- PAM_SUCCESS || +- (retval = pam_get_item(pamh, PAM_AUTHTOK, &item)) != +- PAM_SUCCESS) +- return retval; +- } +- *passp = (const char *)item; +- return PAM_SUCCESS; +-} ++#include + + int diff -ruN pam-pgsql.bak/files/patch-ab pam-pgsql/files/patch-ab --- pam-pgsql.bak/files/patch-ab Thu Jan 1 03:00:00 1970 +++ pam-pgsql/files/patch-ab Wed Aug 14 00:25:59 2002 @@ -0,0 +1,288 @@ +diff -ruN ../pam-pgsql-0.5.2-orig/pam_pgsql.c ./pam_pgsql.c +--- pam_pgsql.c Tue Aug 13 18:31:40 2002 ++++ pam_pgsql.c Tue Aug 13 18:33:05 2002 +@@ -23,7 +23,7 @@ + #define PAM_SM_ACCOUNT + #define PAM_SM_PASSWORD + #include +-#include "pam_mod_misc.h" ++#include + + #define PASSWORD_PROMPT "Password: " + #define PASSWORD_PROMPT_NEW "New password: " +@@ -31,16 +31,15 @@ + #define CONF "/etc/pam_pgsql.conf" + + #define DBGLOG(x...) if(options->debug) { \ +- openlog("PAM_pgsql", LOG_PID, LOG_AUTH); \ + syslog(LOG_DEBUG, ##x); \ +- closelog(); \ + } + #define SYSLOG(x...) do { \ +- openlog("PAM_pgsql", LOG_PID, LOG_AUTH); \ + syslog(LOG_INFO, ##x); \ +- closelog(); \ + } while(0); + ++int pam_get_confirm_pass(pam_handle_t *, const char **, const char *, const char *, int); ++ ++ + typedef enum { + PW_CLEAR = 1, + PW_MD5, +@@ -61,32 +60,36 @@ + int debug; + }; + +-/* private: parse and set the specified string option */ +-static void +-set_module_option(const char *option, struct module_options *options) +-{ +- char *buf, *eq; +- char *val, *end; +- +- if(!option || !*option) +- return; ++enum { ++ PAM_DATABASE = PAM_OPT_STD_MAX, ++ PAM_TABLE, ++ PAM_DB_HOST, ++ PAM_DB_USER, ++ PAM_DB_PASSWORD, ++ PAM_USER_COLUMN, ++ PAM_PWD_COLUMN, ++ PAM_EXPIRED_COLUMN, ++ PAM_NEWTOK_COLUMN, ++ PAM_PW_TYPE ++}; + +- buf = strdup(option); ++static struct opttab other_options[] = { ++ {"database", PAM_DATABASE}, ++ {"table", PAM_TABLE}, ++ {"host", PAM_DB_HOST}, ++ {"user", PAM_DB_USER}, ++ {"password", PAM_DB_PASSWORD}, ++ {"user_column", PAM_USER_COLUMN}, ++ {"pwd_column", PAM_PWD_COLUMN}, ++ {"expired_column", PAM_EXPIRED_COLUMN}, ++ {"newtok_column", PAM_NEWTOK_COLUMN}, ++ {"pw_type", PAM_PW_TYPE}, ++ {NULL, 0} ++}; + +- if((eq = strchr(buf, '='))) { +- end = eq - 1; +- val = eq + 1; +- if(end <= buf || !*val) +- return; +- while(end > buf && isspace(*end)) +- end--; +- end++; +- *end = '\0'; +- while(*val && isspace(*val)) +- val++; +- } else { +- val = NULL; +- } ++/* set the specified string option */ ++static void ++set_option_val(struct module_options * options, const char * buf, char * val) { + + DBGLOG("setting option: %s=>%s\n", buf, val); + +@@ -118,17 +121,48 @@ + } else if(!strcmp(buf, "debug")) { + options->debug = 1; + } ++} ++ ++/* private: parse the specified string option */ ++static void ++set_module_option(const char *option, struct module_options *options) ++{ ++ char *buf, *eq; ++ char *val, *end; ++ ++ if(!option || !*option) ++ return; ++ ++ buf = strdup(option); ++ ++ if((eq = strchr(buf, '='))) { ++ end = eq - 1; ++ val = eq + 1; ++ if(end <= buf || !*val) ++ return; ++ while(end > buf && isspace(*end)) ++ end--; ++ end++; ++ *end = '\0'; ++ while(*val && isspace(*val)) ++ val++; ++ } else { ++ val = NULL; ++ } ++ ++ set_option_val(options, buf, val); + + free(buf); + } + + /* private: read module options from file or commandline */ + static int +-get_module_options(int argc, const char **argv, struct module_options **options) ++get_module_options(int argc, const char **argv, struct module_options **options, struct options * pam_options) + { + int i, rc; + FILE *fp; + struct module_options *opts; ++ char *c; + + opts = (struct module_options *)malloc(sizeof *opts); + bzero(opts, sizeof(*opts)); +@@ -154,11 +188,11 @@ + fclose(fp); + } + +- for(i = 0; i < argc; i++) { +- if(pam_std_option(&rc, argv[i]) == 0) +- continue; +- set_module_option(argv[i], opts); ++ for(i = PAM_OPT_STD_MAX; i <= PAM_PW_TYPE; i++) { ++ if (pam_test_option(pam_options, i, &c)) ++ set_option_val(opts, other_options[i - PAM_OPT_STD_MAX].name, c); + } ++ + *options = opts; + + return rc; +@@ -257,7 +291,7 @@ + free(conn_str); + + if(PQstatus(conn) != CONNECTION_OK) { +- SYSLOG("PostgreSQL connection failed: '%s'", PQerrorMessage(conn)); ++ SYSLOG("PostgreSQL connection failed: '%s' '%s'", PQerrorMessage(conn), conn_str); + return NULL; + } + +@@ -412,7 +446,6 @@ + user_s = malloc(ulen); + + sqlescape(user, user_s, strlen(user)); +-DBGLOG(user_s); + + DBGLOG("query: SELECT %s FROM %s WHERE %s='%s'", options->pwd_column, options->table, options->user_column, user); + if(pg_exec(options, conn, &res, "SELECT %s FROM %s WHERE %s='%s'", +@@ -463,13 +496,17 @@ + pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) + { + struct module_options *options; ++ struct options pam_options; + const char *user, *password; + int rc, std_flags; + + if((rc = pam_get_user(pamh, &user, NULL)) != PAM_SUCCESS) + return rc; + +- std_flags = get_module_options(argc, argv, &options); ++ pam_std_option(&pam_options, other_options, argc, argv); ++ ++ std_flags = get_module_options(argc, argv, &options, &pam_options); ++ + if(options_valid(options) != 0) { + free_module_options(options); + return PAM_AUTH_ERR; +@@ -477,18 +514,19 @@ + + DBGLOG("attempting to authenticate: %s", user); + +- if((rc = pam_get_pass(pamh, &password, PASSWORD_PROMPT, std_flags) ++ if((rc = pam_get_pass(pamh, &password, PASSWORD_PROMPT, &pam_options) + != PAM_SUCCESS)) { + free_module_options(options); + return rc; + } ++ DBGLOG("received : user: '%s', pass: '%s'", user, password); + + if((rc = auth_verify_password(user, password, options)) != PAM_SUCCESS) { + free_module_options(options); + return rc; + } + +- SYSLOG("(%s) user %s authenticated.", pam_get_service(pamh), user); ++ SYSLOG("user %s authenticated.", user); + free_module_options(options); + + return PAM_SUCCESS; +@@ -500,13 +538,16 @@ + const char **argv) + { + struct module_options *options; ++ struct options pam_options; + const char *user; + char *user_s; + int rc, ulen; + PGconn *conn; + PGresult *res; + +- get_module_options(argc, argv, &options); ++ pam_std_option(&pam_options, other_options, argc, argv); ++ ++ get_module_options(argc, argv, &options, &pam_options); + if(options_valid(options) != 0) { + free_module_options(options); + return PAM_AUTH_ERR; +@@ -590,13 +631,16 @@ + pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv) + { + struct module_options *options; ++ struct options pam_options; + int rc, std_flags, ulen; + const char *user, *pass, *newpass; + char *newpass_crypt, *user_s; + PGconn *conn; + PGresult *res; + +- std_flags = get_module_options(argc, argv, &options); ++ pam_std_option(&pam_options, other_options, argc, argv); ++ ++ std_flags = get_module_options(argc, argv, &options, &pam_options); + if(options_valid(options) != 0) { + free_module_options(options); + return PAM_AUTH_ERR; +@@ -614,7 +658,7 @@ + + if(flags & PAM_PRELIM_CHECK) { + /* at this point, this is the first time we get called */ +- if((rc = pam_get_pass(pamh, &pass, PASSWORD_PROMPT, std_flags)) == PAM_SUCCESS) { ++ if((rc = pam_get_pass(pamh, &pass, PASSWORD_PROMPT, &pam_options)) == PAM_SUCCESS) { + if((rc = auth_verify_password(user, pass, options)) == PAM_SUCCESS) { + rc = pam_set_item(pamh, PAM_OLDAUTHTOK, (const void *)pass); + if(rc != PAM_SUCCESS) { +@@ -640,7 +684,7 @@ + } + rc = auth_verify_password(user, pass, options); + if(rc != PAM_SUCCESS) { +- SYSLOG("(%s) user '%s' not authenticated.", pam_get_service(pamh), user); ++ SYSLOG("user '%s' not authenticated.", user); + free_module_options(options); + return rc; + } +@@ -698,7 +742,7 @@ + + free_module_options(options); + free(user_s); +- SYSLOG("(%s) password for '%s' was changed.", pam_get_service(pamh), user); ++ SYSLOG("password for '%s' was changed.", user); + return PAM_SUCCESS; + } + +@@ -707,4 +751,6 @@ + pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) + { + return PAM_SUCCESS; +-} ++} ++ ++PAM_MODULE_ENTRY("pam_pgsql"); --- pam-pgsql.diff ends here --- >Release-Note: >Audit-Trail: From: Mathieu Arnold To: "Andrey V. Pevnev" , FreeBSD-gnats-submit@FreeBSD.org Cc: Subject: Re: ports/41637: Update port: pam-pgsql (fixed coredump on -STABLE) Date: Wed, 14 Aug 2002 12:59:53 +0200 --==========1630381474========== Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi you also need to remove 2 files from the SRCS in the Makefile.bsd, as in the attached patch. It was in one of my patches, but I forgot it in the last one. -- Mathieu Arnold \ Responsable R & D a b s o l i g h t \ www.absolight.fr 40, rue des Blancs Manteaux 75004 Paris tel 0821.801.821 / fax 01.48.53.11.09 --==========1630381474========== Content-Type: text/plain; charset=us-ascii; name="patch-Makefile.bsd" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="patch-Makefile.bsd"; size=517 Index: files/Makefile.bsd ========================================================== ========= RCS file: /home/ncvs/ports/security/pam-pgsql/files/Makefile.bsd,v retrieving revision 1.9 diff -u -r1.9 Makefile.bsd --- files/Makefile.bsd 2002/07/21 17:02:04 1.9 +++ files/Makefile.bsd 2002/08/14 10:56:49 @@ -2,7 +2,7 @@ .PATH: ${FILESDIR} -SRCS= pam_pgsql.c pam_get_pass.c pam_std_option.c pam_get_service.c +SRCS= pam_pgsql.c pam_get_pass.c SHLIB_NAME= pam_pgsql.so LDADD= -lpam -L${LOCALBASE}/lib -lpq -lmd --==========1630381474==========-- From: "Andrey V. Pevnev" To: freebsd-gnats-submit@FreeBSD.org, m@absolight.fr Cc: Subject: Re: ports/41637: Update port: pam-pgsql (fixed coredump on -STABLE) Date: Wed, 14 Aug 2002 21:40:50 +0400 ------------C1A715696396CA Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Ok, so there is the updated patch. (Also available at http://www.mgul.ac.ru/~andrey/pam-pgsql.diff) Port maintainership transferrer to Mathieu Arnold because he will be better maintainer for this port than me ;) -- Best regards, MSFU LAN Admin Andrey mailto:andrey@mgul.ac.ru http://www.mgul.ac.ru/~andrey ------------C1A715696396CA Content-Type: application/octet-stream; name="pam-pgsql.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pam-pgsql.diff" ZGlmZiAtcnVOIHBhbS1wZ3NxbC5iYWsvTWFrZWZpbGUgcGFtLXBnc3FsL01ha2VmaWxlCi0tLSBw YW0tcGdzcWwuYmFrL01ha2VmaWxlCVdlZCBBdWcgMTQgMDA6MjU6NDcgMjAwMgorKysgcGFtLXBn c3FsL01ha2VmaWxlCVdlZCBBdWcgMTQgMjE6MzE6MjQgMjAwMgpAQCAtNywxNiArNywxNyBAQAog CiBQT1JUTkFNRT0JcGFtLXBnc3FsCiBQT1JUVkVSU0lPTj0JMC41LjIKLVBPUlRSRVZJU0lPTj0J NQorUE9SVFJFVklTSU9OPQk2CiBDQVRFR09SSUVTPQlzZWN1cml0eSBkYXRhYmFzZXMKIE1BU1RF Ul9TSVRFUz0JJHtNQVNURVJfU0lURV9ERUJJQU59IFwKIAkJaHR0cDovL2xpYnBhbS1wZ3NxbC5j b2RlY2FzdGxlLmNvbS8ke1BPUlROQU1FfS0ke1BPUlRWRVJTSU9OfS0ke1BPUlRSRVZJU0lPTn0v CiBNQVNURVJfU0lURV9TVUJESVI9CXBvb2wvbm9uLVVTL21haW4vcC9wYW0tcGdzcWwKIERJU1RG SUxFUz0JJHtQT1JUTkFNRX1fJHtQT1JUVkVSU0lPTn0ub3JpZyR7RVhUUkFDVF9TVUZYfQotUEFU Q0hGSUxFUz0JcGFtLXBnc3FsXzAuNS4yLSR7UE9SVFJFVklTSU9OfS5kaWZmLmd6CisKK1BBVENI RklMRVM9CXBhbS1wZ3NxbF8ke1BPUlRWRVJTSU9OfS01LmRpZmYuZ3oKIFBBVENIX1NJVEVTPQkk e01BU1RFUl9TSVRFU30KIAotTUFJTlRBSU5FUj0JYW5kcmV5QG1ndWwuYWMucnUKK01BSU5UQUlO RVI9CW1AYWJzb2xpZ2h0LmZyCiAKIExJQl9ERVBFTkRTPQlwcToke1BPUlRTRElSfS9kYXRhYmFz ZXMvcG9zdGdyZXNxbDcKIApkaWZmIC1ydU4gcGFtLXBnc3FsLmJhay9maWxlcy9NYWtlZmlsZS5i c2QgcGFtLXBnc3FsL2ZpbGVzL01ha2VmaWxlLmJzZAotLS0gcGFtLXBnc3FsLmJhay9maWxlcy9N YWtlZmlsZS5ic2QJV2VkIEF1ZyAxNCAwMDoyNTo0NyAyMDAyCisrKyBwYW0tcGdzcWwvZmlsZXMv TWFrZWZpbGUuYnNkCVdlZCBBdWcgMTQgMjE6MzA6NTUgMjAwMgpAQCAtMiw3ICsyLDcgQEAKIAog LlBBVEg6CSR7RklMRVNESVJ9CiAKLVNSQ1M9CXBhbV9wZ3NxbC5jIHBhbV9nZXRfcGFzcy5jIHBh bV9zdGRfb3B0aW9uLmMgcGFtX2dldF9zZXJ2aWNlLmMKK1NSQ1M9CXBhbV9wZ3NxbC5jIHBhbV9n ZXRfcGFzcy5jCiBTSExJQl9OQU1FPQlwYW1fcGdzcWwuc28KIAogTERBREQ9CQktbHBhbSAtTCR7 TE9DQUxCQVNFfS9saWIgLWxwcSAtbG1kCmRpZmYgLXJ1TiBwYW0tcGdzcWwuYmFrL2ZpbGVzL3Bh dGNoLWFhIHBhbS1wZ3NxbC9maWxlcy9wYXRjaC1hYQotLS0gcGFtLXBnc3FsLmJhay9maWxlcy9w YXRjaC1hYQlUaHUgSmFuICAxIDAzOjAwOjAwIDE5NzAKKysrIHBhbS1wZ3NxbC9maWxlcy9wYXRj aC1hYQlXZWQgQXVnIDE0IDAwOjI1OjU5IDIwMDIKQEAgLTAsMCArMSw3NCBAQAorZGlmZiAtcnVO IC4uL3BhbS1wZ3NxbC0wLjUuMi1vcmlnL3BhbV9nZXRfcGFzcy5jIC4vcGFtX2dldF9wYXNzLmMK Ky0tLSBwYW1fZ2V0X3Bhc3MuYwlNb24gSmFuIDE0IDE3OjQ1OjU1IDIwMDIKKysrKyBwYW1fZ2V0 X3Bhc3MuYwlUdWUgQXVnIDEzIDE4OjMxOjU2IDIwMDIKK0BAIC0zMyw3MCArMzMsNyBAQAorIC8q ICRJZDogcGFtX2dldF9wYXNzLmMsdiAxLjIgMjAwMC8wNi8yNSAwOTozOToyOCBsamIgRXhwICQg Ki8KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9tb2R1bGVz Lmg+CistI2luY2x1ZGUgInBhbV9tb2RfbWlzYy5oIgorLQorLXN0YXRpYyBpbnQgICBwYW1fY29u dl9wYXNzKHBhbV9oYW5kbGVfdCAqLCBjb25zdCBjaGFyICosIGludCk7CistCistc3RhdGljIGlu dAorLXBhbV9jb252X3Bhc3MocGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdCBjaGFyICpwcm9tcHQs IGludCBvcHRpb25zKQorLXsKKy0gICAgaW50IHJldHZhbDsKKy0gICAgY29uc3Qgdm9pZCAqaXRl bTsKKy0gICAgY29uc3Qgc3RydWN0IHBhbV9jb252ICpjb252OworLSAgICBzdHJ1Y3QgcGFtX21l c3NhZ2UgbXNnOworLSAgICBjb25zdCBzdHJ1Y3QgcGFtX21lc3NhZ2UgKm1zZ3NbMV07CistICAg IHN0cnVjdCBwYW1fcmVzcG9uc2UgKnJlc3A7CistCistICAgIGlmICgocmV0dmFsID0gcGFtX2dl dF9pdGVtKHBhbWgsIFBBTV9DT05WLCAmaXRlbSkpICE9CistICAgICAgICBQQU1fU1VDQ0VTUykK Ky0gICAgICAgIHJldHVybiByZXR2YWw7CistICAgIGNvbnYgPSAoY29uc3Qgc3RydWN0IHBhbV9j b252ICopaXRlbTsKKy0gICAgbXNnLm1zZ19zdHlsZSA9IG9wdGlvbnMgJiBQQU1fT1BUX0VDSE9f UEFTUyA/CistICAgICAgICBQQU1fUFJPTVBUX0VDSE9fT04gOiBQQU1fUFJPTVBUX0VDSE9fT0ZG OworLSAgICBtc2cubXNnID0gcHJvbXB0OworLSAgICBtc2dzWzBdID0gJm1zZzsKKy0gICAgaWYg KChyZXR2YWwgPSBjb252LT5jb252KDEsIG1zZ3MsICZyZXNwLCBjb252LT5hcHBkYXRhX3B0cikp ICE9CistICAgICAgICBQQU1fU1VDQ0VTUykKKy0gICAgICAgIHJldHVybiByZXR2YWw7CistICAg IGlmICgocmV0dmFsID0gcGFtX3NldF9pdGVtKHBhbWgsIFBBTV9BVVRIVE9LLCByZXNwWzBdLnJl c3ApKSAhPQorLSAgICAgICAgUEFNX1NVQ0NFU1MpCistICAgICAgICByZXR1cm4gcmV0dmFsOwor LSAgICBtZW1zZXQocmVzcFswXS5yZXNwLCAwLCBzdHJsZW4ocmVzcFswXS5yZXNwKSk7CistICAg IGZyZWUocmVzcFswXS5yZXNwKTsKKy0gICAgZnJlZShyZXNwKTsKKy0gICAgcmV0dXJuIFBBTV9T VUNDRVNTOworLX0KKy0KKy1pbnQKKy1wYW1fZ2V0X3Bhc3MocGFtX2hhbmRsZV90ICpwYW1oLCBj b25zdCBjaGFyICoqcGFzc3AsIGNvbnN0IGNoYXIgKnByb21wdCwKKy0gICAgaW50IG9wdGlvbnMp CisteworLSAgICBpbnQgcmV0dmFsOworLSAgICBjb25zdCB2b2lkICppdGVtID0gTlVMTDsKKy0K Ky0gICAgLyoKKy0gICAgICogR3JhYiB0aGUgYWxyZWFkeS1lbnRlcmVkIHBhc3N3b3JkIGlmIHdl IG1pZ2h0IHdhbnQgdG8gdXNlIGl0LgorLSAgICAgKi8KKy0gICAgaWYgKG9wdGlvbnMgJiAoUEFN X09QVF9UUllfRklSU1RfUEFTUyB8IFBBTV9PUFRfVVNFX0ZJUlNUX1BBU1MpKSB7CistICAgICAg ICBpZiAoKHJldHZhbCA9IHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fQVVUSFRPSywgJml0ZW0pKSAh PQorLSAgICAgICAgICAgIFBBTV9TVUNDRVNTKQorLSAgICAgICAgICAgIHJldHVybiByZXR2YWw7 CistICAgIH0KKy0KKy0gICAgaWYgKGl0ZW0gPT0gTlVMTCkgeworLSAgICAgICAgLyogVGhlIHVz ZXIgaGFzbid0IGVudGVyZWQgYSBwYXNzd29yZCB5ZXQuICovCistICAgICAgICBpZiAob3B0aW9u cyAmIFBBTV9PUFRfVVNFX0ZJUlNUX1BBU1MpCistICAgICAgICAgICAgcmV0dXJuIFBBTV9BVVRI X0VSUjsKKy0gICAgICAgIC8qIFVzZSB0aGUgY29udmVyc2F0aW9uIGZ1bmN0aW9uIHRvIGdldCBh IHBhc3N3b3JkLiAqLworLSAgICAgICAgaWYgKChyZXR2YWwgPSBwYW1fY29udl9wYXNzKHBhbWgs IHByb21wdCwgb3B0aW9ucykpICE9CistICAgICAgICAgICAgUEFNX1NVQ0NFU1MgfHwKKy0gICAg ICAgICAgICAocmV0dmFsID0gcGFtX2dldF9pdGVtKHBhbWgsIFBBTV9BVVRIVE9LLCAmaXRlbSkp ICE9CistICAgICAgICAgICAgUEFNX1NVQ0NFU1MpCistICAgICAgICAgICAgcmV0dXJuIHJldHZh bDsKKy0gICAgfQorLSAgICAqcGFzc3AgPSAoY29uc3QgY2hhciAqKWl0ZW07CistICAgIHJldHVy biBQQU1fU1VDQ0VTUzsKKy19CisrI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9tb2RfbWlzYy5oPgor IAorIGludApkaWZmIC1ydU4gcGFtLXBnc3FsLmJhay9maWxlcy9wYXRjaC1hYiBwYW0tcGdzcWwv ZmlsZXMvcGF0Y2gtYWIKLS0tIHBhbS1wZ3NxbC5iYWsvZmlsZXMvcGF0Y2gtYWIJVGh1IEphbiAg MSAwMzowMDowMCAxOTcwCisrKyBwYW0tcGdzcWwvZmlsZXMvcGF0Y2gtYWIJV2VkIEF1ZyAxNCAw MDoyNTo1OSAyMDAyCkBAIC0wLDAgKzEsMjg4IEBACitkaWZmIC1ydU4gLi4vcGFtLXBnc3FsLTAu NS4yLW9yaWcvcGFtX3Bnc3FsLmMgLi9wYW1fcGdzcWwuYworLS0tIHBhbV9wZ3NxbC5jCVR1ZSBB dWcgMTMgMTg6MzE6NDAgMjAwMgorKysrIHBhbV9wZ3NxbC5jCVR1ZSBBdWcgMTMgMTg6MzM6MDUg MjAwMgorQEAgLTIzLDcgKzIzLDcgQEAKKyAjZGVmaW5lIFBBTV9TTV9BQ0NPVU5UCisgI2RlZmlu ZSBQQU1fU01fUEFTU1dPUkQKKyAjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX21vZHVsZXMuaD4KKy0j aW5jbHVkZSAicGFtX21vZF9taXNjLmgiCisrI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9tb2RfbWlz Yy5oPgorIAorICNkZWZpbmUgUEFTU1dPUkRfUFJPTVBUICAgICAgICAgIlBhc3N3b3JkOiAiCisg I2RlZmluZSBQQVNTV09SRF9QUk9NUFRfTkVXCSAgICAiTmV3IHBhc3N3b3JkOiAiCitAQCAtMzEs MTYgKzMxLDE1IEBACisgI2RlZmluZSBDT05GICAgICAgICAgICAgICAgICAgICAiL2V0Yy9wYW1f cGdzcWwuY29uZiIKKyAKKyAjZGVmaW5lIERCR0xPRyh4Li4uKSAgaWYob3B0aW9ucy0+ZGVidWcp IHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg IG9wZW5sb2coIlBBTV9wZ3NxbCIsIExPR19QSUQsIExPR19BVVRIKTsgIFwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfREVCVUcsICMjeCk7ICAgICAgICAgICAgICAgICAg IFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlbG9nKCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICNkZWZpbmUgU1lT TE9HKHguLi4pICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmxvZygiUEFNX3Bnc3FsIiwgTE9HX1BJ RCwgTE9HX0FVVEgpOyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19J TkZPLCAjI3gpOyAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgY2xvc2Vsb2coKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgICAgICAgICAgICB9IHdoaWxlKDApOworIAorK2ludCBwYW1fZ2V0X2NvbmZpcm1fcGFzcyhw YW1faGFuZGxlX3QgKiwgY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos IGludCk7CisrCisrCisgdHlwZWRlZiBlbnVtIHsKKyAgICAgUFdfQ0xFQVIgPSAxLAorICAgICBQ V19NRDUsCitAQCAtNjEsMzIgKzYwLDM2IEBACisgICAgIGludCBkZWJ1ZzsKKyB9OworIAorLS8q IHByaXZhdGU6IHBhcnNlIGFuZCBzZXQgdGhlIHNwZWNpZmllZCBzdHJpbmcgb3B0aW9uICovCist c3RhdGljIHZvaWQKKy1zZXRfbW9kdWxlX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24sIHN0cnVj dCBtb2R1bGVfb3B0aW9ucyAqb3B0aW9ucykKKy17CistICAgIGNoYXIgKmJ1ZiwgKmVxOworLSAg ICBjaGFyICp2YWwsICplbmQ7CistCistICAgIGlmKCFvcHRpb24gfHwgISpvcHRpb24pCistICAg ICAgICByZXR1cm47CisrZW51bSB7CisrICAgIFBBTV9EQVRBQkFTRSA9IFBBTV9PUFRfU1REX01B WCwKKysgICAgUEFNX1RBQkxFLAorKyAgICBQQU1fREJfSE9TVCwKKysgICAgUEFNX0RCX1VTRVIs CisrICAgIFBBTV9EQl9QQVNTV09SRCwKKysgICAgUEFNX1VTRVJfQ09MVU1OLAorKyAgICBQQU1f UFdEX0NPTFVNTiwKKysgICAgUEFNX0VYUElSRURfQ09MVU1OLAorKyAgICBQQU1fTkVXVE9LX0NP TFVNTiwKKysgICAgUEFNX1BXX1RZUEUKKyt9OworIAorLSAgICBidWYgPSBzdHJkdXAob3B0aW9u KTsKKytzdGF0aWMgc3RydWN0IG9wdHRhYiBvdGhlcl9vcHRpb25zW10gPSB7CisrICAgIHsiZGF0 YWJhc2UiLCBQQU1fREFUQUJBU0V9LAorKyAgICB7InRhYmxlIiwgUEFNX1RBQkxFfSwKKysgICAg eyJob3N0IiwgUEFNX0RCX0hPU1R9LAorKyAgICB7InVzZXIiLCBQQU1fREJfVVNFUn0sCisrICAg IHsicGFzc3dvcmQiLCBQQU1fREJfUEFTU1dPUkR9LAorKyAgICB7InVzZXJfY29sdW1uIiwgUEFN X1VTRVJfQ09MVU1OfSwKKysgICAgeyJwd2RfY29sdW1uIiwgUEFNX1BXRF9DT0xVTU59LAorKyAg ICB7ImV4cGlyZWRfY29sdW1uIiwgUEFNX0VYUElSRURfQ09MVU1OfSwKKysgICAgeyJuZXd0b2tf Y29sdW1uIiwgUEFNX05FV1RPS19DT0xVTU59LAorKyAgICB7InB3X3R5cGUiLCBQQU1fUFdfVFlQ RX0sCisrICAgIHtOVUxMLCAwfQorK307CisgCistICAgIGlmKChlcSA9IHN0cmNocihidWYsICc9 JykpKSB7CistICAgICAgICBlbmQgPSBlcSAtIDE7CistICAgICAgICB2YWwgPSBlcSArIDE7Cist ICAgICAgICBpZihlbmQgPD0gYnVmIHx8ICEqdmFsKQorLSAgICAgICAgICAgIHJldHVybjsKKy0g ICAgICAgIHdoaWxlKGVuZCA+IGJ1ZiAmJiBpc3NwYWNlKCplbmQpKQorLSAgICAgICAgICAgIGVu ZC0tOworLSAgICAgICAgZW5kKys7CistICAgICAgICAqZW5kID0gJ1wwJzsKKy0gICAgICAgIHdo aWxlKCp2YWwgJiYgaXNzcGFjZSgqdmFsKSkKKy0gICAgICAgICAgICB2YWwrKzsKKy0gICAgfSBl bHNlIHsKKy0gICAgICAgIHZhbCA9IE5VTEw7CistICAgIH0KKysvKiBzZXQgdGhlIHNwZWNpZmll ZCBzdHJpbmcgb3B0aW9uICovCisrc3RhdGljIHZvaWQKKytzZXRfb3B0aW9uX3ZhbChzdHJ1Y3Qg bW9kdWxlX29wdGlvbnMgKiBvcHRpb25zLCBjb25zdCBjaGFyICogYnVmLCBjaGFyICogdmFsKSB7 CisgCisgICAgIERCR0xPRygic2V0dGluZyBvcHRpb246ICVzPT4lc1xuIiwgYnVmLCB2YWwpOwor IAorQEAgLTExOCwxNyArMTIxLDQ4IEBACisgICAgIH0gZWxzZSBpZighc3RyY21wKGJ1ZiwgImRl YnVnIikpIHsKKyAgICAgICAgIG9wdGlvbnMtPmRlYnVnID0gMTsKKyAgICAgfQorK30KKysKKysv KiBwcml2YXRlOiBwYXJzZSB0aGUgc3BlY2lmaWVkIHN0cmluZyBvcHRpb24gKi8KKytzdGF0aWMg dm9pZAorK3NldF9tb2R1bGVfb3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbiwgc3RydWN0IG1vZHVs ZV9vcHRpb25zICpvcHRpb25zKQorK3sKKysgICAgY2hhciAqYnVmLCAqZXE7CisrICAgIGNoYXIg KnZhbCwgKmVuZDsKKysKKysgICAgaWYoIW9wdGlvbiB8fCAhKm9wdGlvbikKKysgICAgICAgIHJl dHVybjsKKysKKysgICAgYnVmID0gc3RyZHVwKG9wdGlvbik7CisrCisrICAgIGlmKChlcSA9IHN0 cmNocihidWYsICc9JykpKSB7CisrICAgICAgICBlbmQgPSBlcSAtIDE7CisrICAgICAgICB2YWwg PSBlcSArIDE7CisrICAgICAgICBpZihlbmQgPD0gYnVmIHx8ICEqdmFsKQorKyAgICAgICAgICAg IHJldHVybjsKKysgICAgICAgIHdoaWxlKGVuZCA+IGJ1ZiAmJiBpc3NwYWNlKCplbmQpKQorKyAg ICAgICAgICAgIGVuZC0tOworKyAgICAgICAgZW5kKys7CisrICAgICAgICAqZW5kID0gJ1wwJzsK KysgICAgICAgIHdoaWxlKCp2YWwgJiYgaXNzcGFjZSgqdmFsKSkKKysgICAgICAgICAgICB2YWwr KzsKKysgICAgfSBlbHNlIHsKKysgICAgICAgIHZhbCA9IE5VTEw7CisrICAgIH0KKysKKysgICAg c2V0X29wdGlvbl92YWwob3B0aW9ucywgYnVmLCB2YWwpOworIAorICAgICBmcmVlKGJ1Zik7Cisg fQorIAorIC8qIHByaXZhdGU6IHJlYWQgbW9kdWxlIG9wdGlvbnMgZnJvbSBmaWxlIG9yIGNvbW1h bmRsaW5lICovCisgc3RhdGljIGludCAKKy1nZXRfbW9kdWxlX29wdGlvbnMoaW50IGFyZ2MsIGNv bnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgbW9kdWxlX29wdGlvbnMgKipvcHRpb25zKQorK2dldF9t b2R1bGVfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCBtb2R1bGVf b3B0aW9ucyAqKm9wdGlvbnMsIHN0cnVjdCBvcHRpb25zICogcGFtX29wdGlvbnMpCisgeworICAg ICBpbnQgaSwgcmM7CisgICAgIEZJTEUgKmZwOworICAgICBzdHJ1Y3QgbW9kdWxlX29wdGlvbnMg Km9wdHM7CisrICAgIGNoYXIgKmM7CisgCisgICAgIG9wdHMgPSAoc3RydWN0IG1vZHVsZV9vcHRp b25zICopbWFsbG9jKHNpemVvZiAqb3B0cyk7CisgICAgIGJ6ZXJvKG9wdHMsIHNpemVvZigqb3B0 cykpOworQEAgLTE1NCwxMSArMTg4LDExIEBACisgICAgICAgICBmY2xvc2UoZnApOworICAgICB9 CisgCistICAgIGZvcihpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworLSAgICAgICAgaWYocGFtX3N0 ZF9vcHRpb24oJnJjLCBhcmd2W2ldKSA9PSAwKQorLSAgICAgICAgICAgIGNvbnRpbnVlOworLSAg ICAgICAgc2V0X21vZHVsZV9vcHRpb24oYXJndltpXSwgb3B0cyk7CisrICAgIGZvcihpID0gUEFN X09QVF9TVERfTUFYOyBpIDw9IFBBTV9QV19UWVBFOyBpKyspIHsKKysJaWYgKHBhbV90ZXN0X29w dGlvbihwYW1fb3B0aW9ucywgaSwgJmMpKQorKwkgICAgc2V0X29wdGlvbl92YWwob3B0cywgb3Ro ZXJfb3B0aW9uc1tpIC0gUEFNX09QVF9TVERfTUFYXS5uYW1lLCBjKTsKKyAgICAgfQorKworICAg ICAqb3B0aW9ucyA9IG9wdHM7CisgCisgICAgIHJldHVybiByYzsKK0BAIC0yNTcsNyArMjkxLDcg QEAKKyAgICAgZnJlZShjb25uX3N0cik7CisgCisgICAgIGlmKFBRc3RhdHVzKGNvbm4pICE9IENP Tk5FQ1RJT05fT0spIHsKKy0gICAgICAgIFNZU0xPRygiUG9zdGdyZVNRTCBjb25uZWN0aW9uIGZh aWxlZDogJyVzJyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKysgICAgICAgIFNZU0xPRygiUG9z dGdyZVNRTCBjb25uZWN0aW9uIGZhaWxlZDogJyVzJyAnJXMnIiwgUFFlcnJvck1lc3NhZ2UoY29u biksIGNvbm5fc3RyKTsKKyAgICAgICAgIHJldHVybiBOVUxMOworICAgICB9CisgCitAQCAtNDEy LDcgKzQ0Niw2IEBACisgICAgIHVzZXJfcyA9IG1hbGxvYyh1bGVuKTsKKyAKKyAgICAgc3FsZXNj YXBlKHVzZXIsIHVzZXJfcywgc3RybGVuKHVzZXIpKTsKKy1EQkdMT0codXNlcl9zKTsKKyAKKyAg ICAgREJHTE9HKCJxdWVyeTogU0VMRUNUICVzIEZST00gJXMgV0hFUkUgJXM9JyVzJyIsIG9wdGlv bnMtPnB3ZF9jb2x1bW4sIG9wdGlvbnMtPnRhYmxlLCBvcHRpb25zLT51c2VyX2NvbHVtbiwgdXNl cik7CisgICAgIGlmKHBnX2V4ZWMob3B0aW9ucywgY29ubiwgJnJlcywgIlNFTEVDVCAlcyBGUk9N ICVzIFdIRVJFICVzPSclcyciLAorQEAgLTQ2MywxMyArNDk2LDE3IEBACisgcGFtX3NtX2F1dGhl bnRpY2F0ZShwYW1faGFuZGxlX3QgKnBhbWgsIGludCBmbGFncywgaW50IGFyZ2MsIGNvbnN0IGNo YXIgKiphcmd2KQorIHsKKyAgICAgc3RydWN0IG1vZHVsZV9vcHRpb25zICpvcHRpb25zOworKyAg ICBzdHJ1Y3Qgb3B0aW9ucyAgcGFtX29wdGlvbnM7CisgICAgIGNvbnN0IGNoYXIgKnVzZXIsICpw YXNzd29yZDsKKyAgICAgaW50IHJjLCBzdGRfZmxhZ3M7CisgCisgICAgIGlmKChyYyA9IHBhbV9n ZXRfdXNlcihwYW1oLCAmdXNlciwgTlVMTCkpICE9IFBBTV9TVUNDRVNTKQorICAgICAgICAgcmV0 dXJuIHJjOworIAorLSAgICBzdGRfZmxhZ3MgPSBnZXRfbW9kdWxlX29wdGlvbnMoYXJnYywgYXJn diwgJm9wdGlvbnMpOworKyAgICBwYW1fc3RkX29wdGlvbigmcGFtX29wdGlvbnMsIG90aGVyX29w dGlvbnMsIGFyZ2MsIGFyZ3YpOworKworKyAgICBzdGRfZmxhZ3MgPSBnZXRfbW9kdWxlX29wdGlv bnMoYXJnYywgYXJndiwgJm9wdGlvbnMsICZwYW1fb3B0aW9ucyk7CisrICAgIAorICAgICBpZihv cHRpb25zX3ZhbGlkKG9wdGlvbnMpICE9IDApIHsKKyAgICAgICAgIGZyZWVfbW9kdWxlX29wdGlv bnMob3B0aW9ucyk7CisgICAgICAgICByZXR1cm4gUEFNX0FVVEhfRVJSOworQEAgLTQ3NywxOCAr NTE0LDE5IEBACisgCisgICAgIERCR0xPRygiYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGU6ICVz IiwgdXNlcik7CisgCistICAgIGlmKChyYyA9IHBhbV9nZXRfcGFzcyhwYW1oLCAmcGFzc3dvcmQs IFBBU1NXT1JEX1BST01QVCwgc3RkX2ZsYWdzKSAKKysgICAgaWYoKHJjID0gcGFtX2dldF9wYXNz KHBhbWgsICZwYXNzd29yZCwgUEFTU1dPUkRfUFJPTVBULCAmcGFtX29wdGlvbnMpIAorICAgICAg ICAgIT0gUEFNX1NVQ0NFU1MpKSB7CisgICAgICAgICBmcmVlX21vZHVsZV9vcHRpb25zKG9wdGlv bnMpOworICAgICAgICAgcmV0dXJuIHJjOworICAgICB9CisrICAgIERCR0xPRygicmVjZWl2ZWQg OiB1c2VyOiAnJXMnLCBwYXNzOiAnJXMnIiwgdXNlciwgcGFzc3dvcmQpOworIAorICAgICBpZigo cmMgPSBhdXRoX3ZlcmlmeV9wYXNzd29yZCh1c2VyLCBwYXNzd29yZCwgb3B0aW9ucykpICE9IFBB TV9TVUNDRVNTKSB7CisgICAgICAgICBmcmVlX21vZHVsZV9vcHRpb25zKG9wdGlvbnMpOworICAg ICAgICAgcmV0dXJuIHJjOworICAgICB9CisgCistICAgIFNZU0xPRygiKCVzKSB1c2VyICVzIGF1 dGhlbnRpY2F0ZWQuIiwgcGFtX2dldF9zZXJ2aWNlKHBhbWgpLCB1c2VyKTsKKysgICAgU1lTTE9H KCJ1c2VyICVzIGF1dGhlbnRpY2F0ZWQuIiwgdXNlcik7CisgICAgIGZyZWVfbW9kdWxlX29wdGlv bnMob3B0aW9ucyk7CisgCisgICAgIHJldHVybiBQQU1fU1VDQ0VTUzsKK0BAIC01MDAsMTMgKzUz OCwxNiBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqYXJndikK KyB7CisgICAgIHN0cnVjdCBtb2R1bGVfb3B0aW9ucyAqb3B0aW9uczsKKysgICAgc3RydWN0IG9w dGlvbnMgIHBhbV9vcHRpb25zOworICAgICBjb25zdCBjaGFyICp1c2VyOworICAgICBjaGFyICp1 c2VyX3M7CisgICAgIGludCByYywgdWxlbjsKKyAgICAgUEdjb25uICpjb25uOworICAgICBQR3Jl c3VsdCAqcmVzOworIAorLSAgICBnZXRfbW9kdWxlX29wdGlvbnMoYXJnYywgYXJndiwgJm9wdGlv bnMpOworKyAgICBwYW1fc3RkX29wdGlvbigmcGFtX29wdGlvbnMsIG90aGVyX29wdGlvbnMsIGFy Z2MsIGFyZ3YpOworKworKyAgICBnZXRfbW9kdWxlX29wdGlvbnMoYXJnYywgYXJndiwgJm9wdGlv bnMsICZwYW1fb3B0aW9ucyk7CisgICAgIGlmKG9wdGlvbnNfdmFsaWQob3B0aW9ucykgIT0gMCkg eworICAgICAgICAgZnJlZV9tb2R1bGVfb3B0aW9ucyhvcHRpb25zKTsKKyAgICAgICAgIHJldHVy biBQQU1fQVVUSF9FUlI7CitAQCAtNTkwLDEzICs2MzEsMTYgQEAKKyBwYW1fc21fY2hhdXRodG9r KHBhbV9oYW5kbGVfdCAqcGFtaCwgaW50IGZsYWdzLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFy Z3YpCisgeworICAgICBzdHJ1Y3QgbW9kdWxlX29wdGlvbnMgKm9wdGlvbnM7CisrICAgIHN0cnVj dCBvcHRpb25zICBwYW1fb3B0aW9uczsKKyAgICAgaW50IHJjLCBzdGRfZmxhZ3MsIHVsZW47Cisg ICAgIGNvbnN0IGNoYXIgKnVzZXIsICpwYXNzLCAqbmV3cGFzczsKKyAgICAgY2hhciAqbmV3cGFz c19jcnlwdCwgKnVzZXJfczsKKyAgICAgUEdjb25uICpjb25uOworICAgICBQR3Jlc3VsdCAqcmVz OworIAorLSAgICBzdGRfZmxhZ3MgPSBnZXRfbW9kdWxlX29wdGlvbnMoYXJnYywgYXJndiwgJm9w dGlvbnMpOworKyAgICBwYW1fc3RkX29wdGlvbigmcGFtX29wdGlvbnMsIG90aGVyX29wdGlvbnMs IGFyZ2MsIGFyZ3YpOworKworKyAgICBzdGRfZmxhZ3MgPSBnZXRfbW9kdWxlX29wdGlvbnMoYXJn YywgYXJndiwgJm9wdGlvbnMsICZwYW1fb3B0aW9ucyk7CisgICAgIGlmKG9wdGlvbnNfdmFsaWQo b3B0aW9ucykgIT0gMCkgeworICAgICAgICAgZnJlZV9tb2R1bGVfb3B0aW9ucyhvcHRpb25zKTsK KyAgICAgICAgIHJldHVybiBQQU1fQVVUSF9FUlI7CitAQCAtNjE0LDcgKzY1OCw3IEBACisgCisg ICAgIGlmKGZsYWdzICYgUEFNX1BSRUxJTV9DSEVDSykgeworICAgICAgICAgLyogYXQgdGhpcyBw b2ludCwgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBnZXQgY2FsbGVkICovCistICAgICAgICBp ZigocmMgPSBwYW1fZ2V0X3Bhc3MocGFtaCwgJnBhc3MsIFBBU1NXT1JEX1BST01QVCwgc3RkX2Zs YWdzKSkgPT0gUEFNX1NVQ0NFU1MpIHsKKysgICAgICAgIGlmKChyYyA9IHBhbV9nZXRfcGFzcyhw YW1oLCAmcGFzcywgUEFTU1dPUkRfUFJPTVBULCAmcGFtX29wdGlvbnMpKSA9PSBQQU1fU1VDQ0VT UykgeworICAgICAgICAgICAgIGlmKChyYyA9IGF1dGhfdmVyaWZ5X3Bhc3N3b3JkKHVzZXIsIHBh c3MsIG9wdGlvbnMpKSA9PSBQQU1fU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICByYyA9IHBh bV9zZXRfaXRlbShwYW1oLCBQQU1fT0xEQVVUSFRPSywgKGNvbnN0IHZvaWQgKilwYXNzKTsKKyAg ICAgICAgICAgICAgICAgaWYocmMgIT0gUEFNX1NVQ0NFU1MpIHsKK0BAIC02NDAsNyArNjg0LDcg QEAKKyAgICAgICAgIH0KKyAgICAgICAgIHJjID0gYXV0aF92ZXJpZnlfcGFzc3dvcmQodXNlciwg cGFzcywgb3B0aW9ucyk7CisgICAgICAgICBpZihyYyAhPSBQQU1fU1VDQ0VTUykgeworLSAgICAg ICAgICAgIFNZU0xPRygiKCVzKSB1c2VyICclcycgbm90IGF1dGhlbnRpY2F0ZWQuIiwgcGFtX2dl dF9zZXJ2aWNlKHBhbWgpLCB1c2VyKTsKKysgICAgICAgICAgICBTWVNMT0coInVzZXIgJyVzJyBu b3QgYXV0aGVudGljYXRlZC4iLCB1c2VyKTsKKyAgICAgICAgICAgICBmcmVlX21vZHVsZV9vcHRp b25zKG9wdGlvbnMpOworICAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgIH0KK0BAIC02 OTgsNyArNzQyLDcgQEAKKyAKKyAgICAgZnJlZV9tb2R1bGVfb3B0aW9ucyhvcHRpb25zKTsKKyAg ICAgZnJlZSh1c2VyX3MpOworLSAgICBTWVNMT0coIiglcykgcGFzc3dvcmQgZm9yICclcycgd2Fz IGNoYW5nZWQuIiwgcGFtX2dldF9zZXJ2aWNlKHBhbWgpLCB1c2VyKTsKKysgICAgU1lTTE9HKCJw YXNzd29yZCBmb3IgJyVzJyB3YXMgY2hhbmdlZC4iLCB1c2VyKTsKKyAgICAgcmV0dXJuIFBBTV9T VUNDRVNTOworIH0KKyAKK0BAIC03MDcsNCArNzUxLDYgQEAKKyBwYW1fc21fc2V0Y3JlZChwYW1f aGFuZGxlX3QgKnBhbWgsIGludCBmbGFncywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQor IHsKKyAJcmV0dXJuIFBBTV9TVUNDRVNTOworLX0KKyt9ICAKKysKKytQQU1fTU9EVUxFX0VOVFJZ KCJwYW1fcGdzcWwiKTsK ------------C1A715696396CA-- State-Changed-From-To: open->closed State-Changed-By: ijliao State-Changed-When: Wed Sep 18 07:33:55 PDT 2002 State-Changed-Why: committed, thanks http://www.freebsd.org/cgi/query-pr.cgi?pr=41637 >Unformatted: