1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25
26 /*
27 * Vold compatibility for rmvolmgr: emulate old commands as well as
28 * action_filemgr.so to notify legacy apps via /tmp/.removable pipes.
29 * A lot of this code is copied verbatim from vold sources.
30 *
31 * Here's the original description of action_filemgr.so:
32 *
33 * action_filemgr.so - filemgr interface routines for rmmount
34 *
35 * This shared object allows rmmount to communicate with filemgr.
36 * This is done by communicating over a named pipe that filemgr
37 * creates in directory NOTIFY_DIR. The name of the pipe must
38 * begin with NOTIFY_NAME. This source file contains #define
39 * compiler directives set the values of NOTIFY_DIR and NOTIFY_NAME.
40 *
41 * After a partition on a medium has been mounted as a result of
42 * either insertion or remounting of the medium, the action()
43 * method creates a file named with the symbolic name of the
113 static char mnt_userdir[MAXPATHLEN];
114
115 /*
116 * Private attribute types and attributes.
117 */
118 static const char notify_characters[] = {
119 'e',
120 'i',
121 'r',
122 'u'
123 };
124
125 static const char *result_strings[] = {
126 "FALSE",
127 "TRUE"
128 };
129
130 #define NOTIFY_DIR "/tmp/.removable" /* dir where filemgr looks */
131 #define NOTIFY_NAME "notify" /* named pipe to talk over */
132
133 static void volrmmount_usage();
134 static void volcheck_usage();
135 static int vold_action(struct action_arg *aap);
136 static void vold_update_mountpoints(struct action_arg *aap);
137 static char *not_mountable(struct action_arg *aa);
138 static int create_one_notify_file(char *fstype,
139 char *mount_point,
140 char *notify_file,
141 char *raw_partitionp,
142 char *reason,
143 char *symdev);
144 static int create_notify_files(struct action_arg **aa);
145 static boolean_t notify_clients(action_t action, int do_notify);
146 static void popdir(int fd);
147 static int pushdir(const char *dir);
148 static boolean_t remove_notify_files(struct action_arg **aa);
149
150 /*
151 * should be called once from main()
152 */
153 /* ARGSUSED */
|
1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 *
21 *
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 *
25 * Copyright 2014 Andrew Stormont
26 */
27
28 /*
29 * Vold compatibility for rmvolmgr: emulate old commands as well as
30 * action_filemgr.so to notify legacy apps via /tmp/.removable pipes.
31 * A lot of this code is copied verbatim from vold sources.
32 *
33 * Here's the original description of action_filemgr.so:
34 *
35 * action_filemgr.so - filemgr interface routines for rmmount
36 *
37 * This shared object allows rmmount to communicate with filemgr.
38 * This is done by communicating over a named pipe that filemgr
39 * creates in directory NOTIFY_DIR. The name of the pipe must
40 * begin with NOTIFY_NAME. This source file contains #define
41 * compiler directives set the values of NOTIFY_DIR and NOTIFY_NAME.
42 *
43 * After a partition on a medium has been mounted as a result of
44 * either insertion or remounting of the medium, the action()
45 * method creates a file named with the symbolic name of the
115 static char mnt_userdir[MAXPATHLEN];
116
117 /*
118 * Private attribute types and attributes.
119 */
120 static const char notify_characters[] = {
121 'e',
122 'i',
123 'r',
124 'u'
125 };
126
127 static const char *result_strings[] = {
128 "FALSE",
129 "TRUE"
130 };
131
132 #define NOTIFY_DIR "/tmp/.removable" /* dir where filemgr looks */
133 #define NOTIFY_NAME "notify" /* named pipe to talk over */
134
135 static void volcheck_usage();
136 static int vold_action(struct action_arg *aap);
137 static void vold_update_mountpoints(struct action_arg *aap);
138 static char *not_mountable(struct action_arg *aa);
139 static int create_one_notify_file(char *fstype,
140 char *mount_point,
141 char *notify_file,
142 char *raw_partitionp,
143 char *reason,
144 char *symdev);
145 static int create_notify_files(struct action_arg **aa);
146 static boolean_t notify_clients(action_t action, int do_notify);
147 static void popdir(int fd);
148 static int pushdir(const char *dir);
149 static boolean_t remove_notify_files(struct action_arg **aa);
150
151 /*
152 * should be called once from main()
153 */
154 /* ARGSUSED */
|