~upstart-devel/upstart/upstart-jobs

« back to all changes in this revision

Viewing changes to utopic/etc/init.d/shibd

  • Committer: Dimitri John Ledkov
  • Date: 2014-05-06 18:45:46 UTC
  • Revision ID: dimitri.ledkov@canonical.com-20140506184546-5toyx56xxrue0f0v
auto update

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /bin/sh
 
2
### BEGIN INIT INFO
 
3
# Provides:             shibd
 
4
# Required-Start:       $local_fs $remote_fs $network
 
5
# Required-Stop:        $local_fs $remote_fs
 
6
# Default-Start:        2 3 4 5
 
7
# Default-Stop:
 
8
# Short-Description:    Shibboleth 2 Service Provider Daemon
 
9
# Description:          Starts the separate daemon used by the Shibboleth
 
10
#                       Apache module to manage sessions and to retrieve
 
11
#                       attributes from Shibboleth Identity Providers.
 
12
### END INIT INFO
 
13
#
 
14
# Written by Quanah Gibson-Mount <quanah@stanford.edu>
 
15
# Modified by Lukas Haemmerle <lukas.haemmerle@switch.ch> for Shibboleth 2
 
16
# Updated to use the LSB init functions by Russ Allbery <rra@debian.org>
 
17
#
 
18
# Based on the dh-make template written by:
 
19
#
 
20
# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
 
21
# Modified for Debian
 
22
# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
 
23
 
 
24
PATH=/sbin:/bin:/usr/sbin:/usr/bin
 
25
DESC="Shibboleth 2 daemon"
 
26
NAME=shibd
 
27
SHIB_HOME=/usr
 
28
SHIBSP_CONFIG=/etc/shibboleth/shibboleth2.xml
 
29
LD_LIBRARY_PATH=/usr/lib
 
30
DAEMON=/usr/sbin/$NAME
 
31
SCRIPTNAME=/etc/init.d/$NAME
 
32
PIDFILE=/var/run/shibboleth/$NAME.pid
 
33
DAEMON_OPTS=""
 
34
DAEMON_USER=_shibd
 
35
 
 
36
# Force removal of socket
 
37
DAEMON_OPTS="$DAEMON_OPTS -f"
 
38
 
 
39
# Use defined configuration file
 
40
DAEMON_OPTS="$DAEMON_OPTS -c $SHIBSP_CONFIG"
 
41
 
 
42
# Specify pid file to use
 
43
DAEMON_OPTS="$DAEMON_OPTS -p $PIDFILE"
 
44
 
 
45
# Specify wait time to use
 
46
DAEMON_OPTS="$DAEMON_OPTS -w 30"
 
47
 
 
48
# Exit if the package is not installed.
 
49
[ -x "$DAEMON" ] || exit 0
 
50
 
 
51
# Read configuration if it is present.
 
52
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
 
53
 
 
54
# Load the VERBOSE setting and other rcS variables
 
55
. /lib/init/vars.sh
 
56
 
 
57
# Define LSB log_* functions.
 
58
. /lib/lsb/init-functions
 
59
 
 
60
prepare_environment () {
 
61
    # Ensure /var/run/shibboleth exists.  /var/run may be on a tmpfs file system.
 
62
    [ -d '/var/run/shibboleth' ] || mkdir -p '/var/run/shibboleth'
 
63
 
 
64
    # If $DAEMON_USER is set, try to run shibd as that user.  However,
 
65
    # versions of the Debian package prior to 2.3+dfsg-1 ran shibd as root,
 
66
    # and the local administrator may not have made the server's private key
 
67
    # readable by $DAEMON_USER.  We therefore test first by running shibd -t
 
68
    # and looking for the error code indicating that the private key could not
 
69
    # be read.  If we get that error, we fall back on running shibd as root.
 
70
    if [ -n "$DAEMON_USER" ]; then
 
71
        DIAG=$(su -s $DAEMON $DAEMON_USER -- -t $DAEMON_OPTS 2>/dev/null)
 
72
        if [ $? = 0 ] ; then
 
73
            # openssl errstr 200100D (hex for 33558541) says:
 
74
            # error:0200100D:system library:fopen:Permission denied
 
75
            ERROR='ERROR OpenSSL : error code: 33558541 '
 
76
            if echo "$DIAG" | fgrep -q "$ERROR" ; then
 
77
                unset DAEMON_USER
 
78
                log_warning_msg "$NAME: file permissions require running as" \
 
79
                    "root"
 
80
            else
 
81
                chown -Rh "$DAEMON_USER" '/var/run/shibboleth' '/var/log/shibboleth'
 
82
            fi
 
83
        else
 
84
            unset DAEMON_USER
 
85
            log_warning_msg "$NAME: unable to run config check as user" \
 
86
                "$DAEMON_USER"
 
87
        fi
 
88
        unset DIAG
 
89
    fi
 
90
}
 
91
 
 
92
# Start shibd.
 
93
do_start () {
 
94
    # Return
 
95
    #   0 if daemon has been started
 
96
    #   1 if daemon was already running
 
97
    #   2 if daemon could not be started
 
98
    start-stop-daemon --start --quiet ${DAEMON_USER:+--chuid $DAEMON_USER} \
 
99
        --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
 
100
        || return 1
 
101
    start-stop-daemon --start --quiet ${DAEMON_USER:+--chuid $DAEMON_USER} \
 
102
        --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS \
 
103
        || return 2
 
104
}
 
105
 
 
106
# Stop shibd.
 
107
do_stop () {
 
108
    # Return
 
109
    #   0 if daemon has been stopped
 
110
    #   1 if daemon was already stopped
 
111
    #   2 if daemon could not be stopped
 
112
    #   other if a failure occurred
 
113
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
 
114
        --pidfile $PIDFILE --name $NAME
 
115
    RETVAL="$?"
 
116
    return "$RETVAL"
 
117
}
 
118
 
 
119
case "$1" in
 
120
start)
 
121
    prepare_environment
 
122
 
 
123
    # Don't start shibd if NO_START is set.
 
124
    if [ "$NO_START" = 1 ] ; then
 
125
        if [ "$VERBOSE" != no ] ; then
 
126
            echo "Not starting $DESC (see /etc/default/$NAME)"
 
127
        fi
 
128
        exit 0
 
129
    fi
 
130
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
 
131
    do_start
 
132
    case "$?" in
 
133
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
 
134
        2)   [ "$VERBOSE" != no ] && log_end_msg 1 ;;
 
135
    esac
 
136
    ;;
 
137
stop)
 
138
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
 
139
    do_stop
 
140
    case "$?" in
 
141
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
 
142
        2)   [ "$VERBOSE" != no ] && log_end_msg 1 ;;
 
143
    esac
 
144
    ;;
 
145
restart|force-reload)
 
146
    prepare_environment
 
147
 
 
148
    log_daemon_msg "Restarting $DESC" "$NAME"
 
149
    do_stop
 
150
    case "$?" in
 
151
        0|1)
 
152
            do_start
 
153
            case "$?" in
 
154
                0) log_end_msg 0 ;;
 
155
                1) log_end_msg 1 ;; # Old process is still running
 
156
                *) log_end_msg 1 ;; # Failed to start
 
157
            esac
 
158
            ;;
 
159
        *)
 
160
            # Failed to stop
 
161
            log_end_msg 1
 
162
            ;;
 
163
    esac
 
164
    ;;
 
165
status)
 
166
    status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?
 
167
    ;;
 
168
*)
 
169
    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
 
170
    exit 1
 
171
    ;;
 
172
esac
 
173
 
 
174
exit 0