2N/A * The contents of this file are subject to the terms of the 2N/A * Common Development and Distribution License (the "License"). 2N/A * You may not use this file except in compliance with the License. 2N/A * See the License for the specific language governing permissions 2N/A * and limitations under the License. 2N/A * When distributing Covered Code, include this CDDL HEADER in each 2N/A * If applicable, add the following below this CDDL HEADER, with the 2N/A * fields enclosed by brackets "[]" replaced with your own identifying 2N/A * information: Portions Copyright [yyyy] [name of copyright owner] 2N/A * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 2N/A * Copy everything and then strdup the strings we later use and NULL 2N/A * the ones we don't. 2N/A * We need to make sure that we can locate the pkgserv and the door; 2N/A * lofs mounts makes this more difficult: "nosub" mounts don't propagate 2N/A * the door and doors created in lofs mounts are not propagated back to 2N/A * the original filesystem. 2N/A * Here we peel off the lofs mount points until we're 2N/A * we find a working door or 2N/A * there's nothing more to peel off. 2N/A * The fullpath parameter is used to return the result (stored in *sadmdir), 2N/A * root is used but returned in the computed sadmdir and so the caller should 2N/A * not use "root" any longer or set it to NULL. 2N/A * To find the underlying mount point, you will need to 2N/A * search the mnttab and find our mountpoint and the underlying 2N/A * To find the mount point: use the longest prefix but limit 2N/A * To find the underlying mount point: find a non-lofs file 2N/A * system or a <mnt> <mnt> entry (fake mountpoint for zones). 2N/A /* Create a new path in the underlying filesystem. */ 2N/A if (s == 0 || s ==
1)
2N/A /* Make sure that the result is at the start of the buffer. */ 2N/A * If the server is running, make sure that the contents 2N/A * If the server is not running, check for the log file; 2N/A * if there's a non-empty log file, we need to start the server 2N/A * as it will incorporate the log file into the contents file. 2N/A * And then check if the door is present. If it doesn't, we don't 2N/A /* sync_needed == B_TRUE || want_quit == B_TRUE */ 2N/A /* It's mounted, so the server is likely there */ 2N/A /* No need to write contents file; don't start if not running */ 2N/A * We're assuming that it started the server and exited immediately. 2N/A * If that didn't work, there's nothing we can do. 2N/A /* Mark it unmodified. */ 2N/A * Report the next entry from the contents file. 2N/A /* Result too big */