From owner-p4-projects@FreeBSD.ORG Fri Jan 16 06:57:16 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0977516A4D0; Fri, 16 Jan 2004 06:57:16 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D900416A4CE for ; Fri, 16 Jan 2004 06:57:15 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6B0E643D48 for ; Fri, 16 Jan 2004 06:57:14 -0800 (PST) (envelope-from areisse@nailabs.com) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.10/8.12.10) with ESMTP id i0GEvE0B048343 for ; Fri, 16 Jan 2004 06:57:14 -0800 (PST) (envelope-from areisse@nailabs.com) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id i0GEvEm9048340 for perforce@freebsd.org; Fri, 16 Jan 2004 06:57:14 -0800 (PST) (envelope-from areisse@nailabs.com) Date: Fri, 16 Jan 2004 06:57:14 -0800 (PST) Message-Id: <200401161457.i0GEvEm9048340@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to areisse@nailabs.com using -f From: Andrew Reisse To: Perforce Change Reviews Subject: PERFORCE change 45438 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Jan 2004 14:57:16 -0000 http://perforce.freebsd.org/chv.cgi?CH=45438 Change 45438 by areisse@areisse_ibook on 2004/01/16 06:56:59 Call the new sebsd call for requesting type_change rules Affected files ... .. //depot/projects/trustedbsd/sedarwin/libsebsd/security_change_context.c#2 edit Differences ... ==== //depot/projects/trustedbsd/sedarwin/libsebsd/security_change_context.c#2 (text+ko) ==== @@ -93,3 +93,53 @@ } return (0); } + +struct changesid_args +{ + char *domain; + char *source; + char *sclass; + char *out; + int *outlen; +}; + +int +security_change_context2(const char *domain, const char *ocontext, + const char *oclass, char **newcontext) +{ + char *outcon; + size_t contexts_len, n; + int error; + struct changesid_args uap; + +bigger: + uap.outlen = &contexts_len; + uap.domain = domain; + uap.source = ocontext; + uap.sclass = oclass; + uap.out = NULL; + if (mac_syscall ("sebsd", 4, &uap)) + { + return (-1); + } + outcon = malloc(contexts_len); + if (outcon == NULL) { + return (-1); + } + uap.out = outcon; + error = mac_syscall ("sebsd", 4, &uap); + /* + * We could possibly race and not have a large enough space + * for the current set of contexts. + */ + if (error == -1 && errno == ENOMEM) { + free(outcon); + goto bigger; + } + else if (error == -1) { + free(outcon); + return (-1); + } + *newcontext = outcon; + return 0; +}