1898Skais /*
2898Skais  * CDDL HEADER START
3898Skais  *
4898Skais  * The contents of this file are subject to the terms of the
5*10520SBhargava.Yenduri@Sun.COM  * Common Development and Distribution License (the "License").
6*10520SBhargava.Yenduri@Sun.COM  * You may not use this file except in compliance with the License.
7898Skais  *
8898Skais  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9898Skais  * or http://www.opensolaris.org/os/licensing.
10898Skais  * See the License for the specific language governing permissions
11898Skais  * and limitations under the License.
12898Skais  *
13898Skais  * When distributing Covered Code, include this CDDL HEADER in each
14898Skais  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15898Skais  * If applicable, add the following below this CDDL HEADER, with the
16898Skais  * fields enclosed by brackets "[]" replaced with your own identifying
17898Skais  * information: Portions Copyright [yyyy] [name of copyright owner]
18898Skais  *
19898Skais  * CDDL HEADER END
20898Skais  */
21898Skais /*
22*10520SBhargava.Yenduri@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23898Skais  * Use is subject to license terms.
24898Skais  */
25898Skais 
26898Skais #include <netinet/in.h> /* struct sockaddr_in */
27898Skais #include <stdio.h>
28898Skais #include <stdlib.h>
29898Skais #include <sys/types.h>
30898Skais #include <sys/socket.h>
31898Skais #include <libscf.h>
32898Skais #include <inet/kssl/kssl.h>
33898Skais #include "kssladm.h"
34898Skais 
35898Skais void
usage_delete(boolean_t do_print)36898Skais usage_delete(boolean_t do_print)
37898Skais {
38898Skais 	if (do_print)
39898Skais 		(void) fprintf(stderr, "Usage:\n");
40898Skais 	(void) fprintf(stderr,
41898Skais 	    "kssladm delete [-v] [<server_address>] <server_port>\n");
42898Skais }
43898Skais 
44898Skais int
do_delete(int argc,char * argv[])45898Skais do_delete(int argc, char *argv[])
46898Skais {
47*10520SBhargava.Yenduri@Sun.COM 	struct sockaddr_in6 server_addr;
48898Skais 	char c;
49898Skais 	char *port, *addr;
50898Skais 	int pcnt;
51898Skais 
52898Skais 	if (argc < 3) {
53898Skais 		goto err;
54898Skais 	}
55898Skais 
56898Skais 	argc -= 1;
57898Skais 	argv += 1;
58898Skais 
59898Skais 	while ((c = getopt(argc, argv, "v")) != -1) {
60898Skais 		switch (c) {
61898Skais 		case 'v':
62898Skais 			verbose = B_TRUE;
63898Skais 			break;
64898Skais 		default:
65898Skais 			goto err;
66898Skais 		}
67898Skais 	}
68898Skais 
69898Skais 	pcnt = argc - optind;
70898Skais 	if (pcnt == 1) {
71898Skais 		port = argv[optind];
72898Skais 		addr = NULL;
73898Skais 	} else if (pcnt == 2) {
74898Skais 		addr = argv[optind];
75898Skais 		port = argv[optind + 1];
76898Skais 	}
77898Skais 
78898Skais 	if (parse_and_set_addr(addr, port, &server_addr) < 0) {
79898Skais 		goto err;
80898Skais 	}
81898Skais 
82898Skais 	if (kssl_send_command((char *)&server_addr, KSSL_DELETE_ENTRY) < 0) {
83898Skais 		perror("Error deleting entry");
84898Skais 		return (FAILURE);
85898Skais 	}
86898Skais 
87898Skais 	if (verbose)
88898Skais 		(void) printf("Successfully loaded cert and key\n");
89898Skais 
90898Skais 	return (SUCCESS);
91898Skais 
92898Skais err:
93898Skais 	usage_delete(B_TRUE);
94898Skais 	return (SMF_EXIT_ERR_CONFIG);
95898Skais }
96