PSARC 2014/050 OpenStack Swift (OpenStack Object Storage Service)
18551677 Request to integrate Swift into userland
--- a/components/openstack/common/openstack.p5m Fri May 16 01:29:00 2014 -0700
+++ b/components/openstack/common/openstack.p5m Fri May 16 15:26:52 2014 -0700
@@ -45,6 +45,7 @@
depend type=group fmri=cloud/openstack/keystone
depend type=group fmri=cloud/openstack/neutron
depend type=group fmri=cloud/openstack/nova
+depend type=group fmri=cloud/openstack/swift
depend type=group fmri=library/python/cinderclient
depend type=group fmri=library/python/glanceclient
depend type=group fmri=library/python/keystoneclient
--- a/components/openstack/keystone/patches/06-sample-data-sh.patch Fri May 16 01:29:00 2014 -0700
+++ b/components/openstack/keystone/patches/06-sample-data-sh.patch Fri May 16 15:26:52 2014 -0700
@@ -175,9 +175,9 @@
- --publicurl "http://$CONTROLLER_PUBLIC_ADDRESS:8888/v1/AUTH_\$(tenant_id)s" \
- --adminurl "http://$CONTROLLER_ADMIN_ADDRESS:8888/v1" \
- --internalurl "http://$CONTROLLER_INTERNAL_ADDRESS:8888/v1/AUTH_\$(tenant_id)s"
-+ --publicurl "http://$SWIFT_PUBLIC_ADDRESS:8888/v1/AUTH_\$(tenant_id)s" \
-+ --adminurl "http://$SWIFT_ADMIN_ADDRESS:8888/v1" \
-+ --internalurl "http://$SWIFT_INTERNAL_ADDRESS:8888/v1/AUTH_\$(tenant_id)s"
++ --publicurl "http://$SWIFT_PUBLIC_ADDRESS:8080/v1/AUTH_\$(tenant_id)s" \
++ --adminurl "http://$SWIFT_ADMIN_ADDRESS:8080/v1" \
++ --internalurl "http://$SWIFT_INTERNAL_ADDRESS:8080/v1/AUTH_\$(tenant_id)s"
+fi
+
+#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/Makefile Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,64 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME= swift
+COMPONENT_CODENAME= grizzly
+COMPONENT_VERSION= 1.8.0
+COMPONENT_SRC= $(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE= $(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH= \
+ sha256:613185473e0c6f11c77bdc6b65efee195303268117afd9024fee82ebde6ed8a3
+COMPONENT_ARCHIVE_URL= http://launchpad.net/$(COMPONENT_NAME)/$(COMPONENT_CODENAME)/$(COMPONENT_VERSION)/+download/$(COMPONENT_ARCHIVE)
+COMPONENT_PROJECT_URL= http://www.openstack.org/
+COMPONENT_BUG_DB= service/swift
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+# Since this is an app, and doesn't provide any public library interfaces, we
+# only need to deliver one version. The manifest is parameterized, though.
+PYTHON_VERSIONS= 2.6
+
+PKG_MACROS += PYVER=$(PYTHON_VERSIONS)
+
+COMPONENT_TEST_DIR = $(SOURCE_DIR)
+COMPONENT_TEST_CMD = nosetests
+COMPONENT_TEST_ARGS = --with-xunit --xunit-file=$(BUILD_DIR)/nosetests-$(MACH).xml
+COMPONENT_TEST_ARGS += test/unit
+
+# common targets
+build: $(BUILD_NO_ARCH)
+
+install: $(INSTALL_NO_ARCH)
+
+test: $(TEST_NO_ARCH)
+
+BUILD_PKG_DEPENDENCIES = $(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/proxy-server.conf Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,370 @@
+[DEFAULT]
+# bind_ip = 0.0.0.0
+# bind_port = 80
+# bind_timeout = 30
+# backlog = 4096
+# swift_dir = /etc/swift
+# workers = 1
+# user = swift
+# Set the following two lines to enable SSL. This is for testing only.
+# cert_file = /etc/swift/proxy.crt
+# key_file = /etc/swift/proxy.key
+# expiring_objects_container_divisor = 86400
+# You can specify default log routing here if you want:
+# log_name = swift
+# log_facility = LOG_LOCAL0
+# log_level = INFO
+# log_headers = False
+# log_address = /dev/log
+# comma separated list of functions to call to setup custom log handlers.
+# functions get passed: conf, name, log_to_console, log_route, fmt, logger,
+# adapted_logger
+# log_custom_handlers =
+# If set, log_udp_host will override log_address
+# log_udp_host =
+# log_udp_port = 514
+# You can enable StatsD logging here:
+# log_statsd_host = localhost
+# log_statsd_port = 8125
+# log_statsd_default_sample_rate = 1.0
+# log_statsd_sample_rate_factor = 1.0
+# log_statsd_metric_prefix =
+# Use a comma separated list of full url (http://foo.bar:1234,https://foo.bar)
+# cors_allow_origin =
+# eventlet_debug = false
+
+[pipeline:main]
+pipeline = catch_errors healthcheck proxy-logging cache slo ratelimit tempauth authtoken keystoneauth container-quotas account-quotas proxy-logging proxy-server
+
+[app:proxy-server]
+use = egg:swift#proxy
+# You can override the default log routing for this app here:
+# set log_name = proxy-server
+# set log_facility = LOG_LOCAL0
+# set log_level = INFO
+# set log_address = /dev/log
+# log_handoffs = True
+# recheck_account_existence = 60
+# recheck_container_existence = 60
+# object_chunk_size = 8192
+# client_chunk_size = 8192
+# node_timeout = 10
+# client_timeout = 60
+# conn_timeout = 0.5
+# How long without an error before a node's error count is reset. This will
+# also be how long before a node is reenabled after suppression is triggered.
+# error_suppression_interval = 60
+# How many errors can accumulate before a node is temporarily ignored.
+# error_suppression_limit = 10
+# If set to 'true' any authorized user may create and delete accounts; if
+# 'false' no one, even authorized, can.
+# allow_account_management = false
+# Set object_post_as_copy = false to turn on fast posts where only the metadata
+# changes are stored anew and the original data file is kept in place. This
+# makes for quicker posts; but since the container metadata isn't updated in
+# this mode, features like container sync won't be able to sync posts.
+# object_post_as_copy = true
+# If set to 'true' authorized accounts that do not yet exist within the Swift
+# cluster will be automatically created.
+account_autocreate = true
+# If set to a positive value, trying to create a container when the account
+# already has at least this maximum containers will result in a 403 Forbidden.
+# Note: This is a soft limit, meaning a user might exceed the cap for
+# recheck_account_existence before the 403s kick in.
+# max_containers_per_account = 0
+# This is a comma separated list of account hashes that ignore the
+# max_containers_per_account cap.
+# max_containers_whitelist =
+# Comma separated list of Host headers to which the proxy will deny requests.
+# deny_host_headers =
+# Prefix used when automatically creating accounts.
+# auto_create_account_prefix = .
+# Depth of the proxy put queue.
+# put_queue_depth = 10
+# Start rate-limiting object segment serving after the Nth segment of a
+# segmented object.
+# rate_limit_after_segment = 10
+# Once segment rate-limiting kicks in for an object, limit segments served
+# to N per second.
+# rate_limit_segments_per_sec = 1
+# Storage nodes can be chosen at random (shuffle) or by using timing
+# measurements. Using timing measurements may allow for lower overall latency.
+# The valid values for sorting_method are "shuffle" and "timing"
+# sorting_method = shuffle
+# If the timing sorting_method is used, the timings will only be valid for
+# the number of seconds configured by timing_expiry.
+# timing_expiry = 300
+# If set to false will treat objects with X-Static-Large-Object header set
+# as a regular object on GETs, i.e. will return that object's contents. Should
+# be set to false if slo is not used in pipeline.
+# allow_static_large_object = true
+
+[filter:tempauth]
+use = egg:swift#tempauth
+# You can override the default log routing for this filter here:
+# set log_name = tempauth
+# set log_facility = LOG_LOCAL0
+# set log_level = INFO
+# set log_headers = False
+# set log_address = /dev/log
+# The reseller prefix will verify a token begins with this prefix before even
+# attempting to validate it. Also, with authorization, only Swift storage
+# accounts with this prefix will be authorized by this middleware. Useful if
+# multiple auth systems are in use for one Swift cluster.
+# reseller_prefix = AUTH
+# The auth prefix will cause requests beginning with this prefix to be routed
+# to the auth subsystem, for granting tokens, etc.
+# auth_prefix = /auth/
+# token_life = 86400
+# This allows middleware higher in the WSGI pipeline to override auth
+# processing, useful for middleware such as tempurl and formpost. If you know
+# you're not going to use such middleware and you want a bit of extra security,
+# you can set this to false.
+# allow_overrides = true
+# This specifies what scheme to return with storage urls:
+# http, https, or default (chooses based on what the server is running as)
+# This can be useful with an SSL load balancer in front of a non-SSL server.
+# storage_url_scheme = default
+# Lastly, you need to list all the accounts/users you want here. The format is:
+# user_<account>_<user> = <key> [group] [group] [...] [storage_url]
+# or if you want underscores in <account> or <user>, you can base64 encode them
+# (with no equal signs) and use this format:
+# user64_<account_b64>_<user_b64> = <key> [group] [group] [...] [storage_url]
+# There are special groups of:
+# .reseller_admin = can do anything to any account for this auth
+# .admin = can do anything within the account
+# If neither of these groups are specified, the user can only access containers
+# that have been explicitly allowed for them by a .admin or .reseller_admin.
+# The trailing optional storage_url allows you to specify an alternate url to
+# hand back to the user upon authentication. If not specified, this defaults to
+# $HOST/v1/<reseller_prefix>_<account> where $HOST will do its best to resolve
+# to what the requester would need to use to reach this host.
+# Here are example entries, required for running the tests:
+user_admin_admin = admin .admin .reseller_admin
+user_test_tester = testing .admin
+user_test2_tester2 = testing2 .admin
+user_test_tester3 = testing3
+
+# To enable Keystone authentication you need to have the auth token
+# middleware first to be configured. Here is an example below, please
+# refer to the keystone's documentation for details about the
+# different settings.
+#
+# You'll need to have as well the keystoneauth middleware enabled
+# and have it in your main pipeline so instead of having tempauth in
+# there you can change it to: authtoken keystone
+#
+[filter:authtoken]
+paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
+auth_host = 127.0.0.1
+auth_port = 35357
+auth_protocol = http
+auth_uri = http://127.0.0.1:5000/
+admin_tenant_name = %SERVICE_TENANT_NAME%
+admin_user = %SERVICE_USER%
+admin_password = %SERVICE_PASSWORD%
+delay_auth_decision = 1
+cache = swift.cache
+include_service_catalog = False
+signing_dir = /var/lib/swift/keystone-signing
+
+[filter:keystoneauth]
+use = egg:swift#keystoneauth
+# Operator roles is the role which user would be allowed to manage a
+# tenant and be able to create container or give ACL to others.
+# operator_roles = admin, swiftoperator
+
+[filter:healthcheck]
+use = egg:swift#healthcheck
+# An optional filesystem path, which if present, will cause the healthcheck
+# URL to return "503 Service Unavailable" with a body of "DISABLED BY FILE".
+# This facility may be used to temporarily remove a Swift node from a load
+# balancer pool during maintenance or upgrade (remove the file to allow the
+# node back into the load balancer pool).
+# disable_path =
+
+[filter:cache]
+use = egg:swift#memcache
+# You can override the default log routing for this filter here:
+# set log_name = cache
+# set log_facility = LOG_LOCAL0
+# set log_level = INFO
+# set log_headers = False
+# set log_address = /dev/log
+# If not set here, the value for memcache_servers will be read from
+# memcache.conf (see memcache.conf-sample) or lacking that file, it will
+# default to the value below. You can specify multiple servers separated with
+# commas, as in: 10.1.2.3:11211,10.1.2.4:11211
+# memcache_servers = 127.0.0.1:11211
+#
+# Sets how memcache values are serialized and deserialized:
+# 0 = older, insecure pickle serialization
+# 1 = json serialization but pickles can still be read (still insecure)
+# 2 = json serialization only (secure and the default)
+# If not set here, the value for memcache_serialization_support will be read
+# from /etc/swift/memcache.conf (see memcache.conf-sample).
+# To avoid an instant full cache flush, existing installations should
+# upgrade with 0, then set to 1 and reload, then after some time (24 hours)
+# set to 2 and reload.
+# In the future, the ability to use pickle serialization will be removed.
+# memcache_serialization_support = 2
+
+[filter:ratelimit]
+use = egg:swift#ratelimit
+# You can override the default log routing for this filter here:
+# set log_name = ratelimit
+# set log_facility = LOG_LOCAL0
+# set log_level = INFO
+# set log_headers = False
+# set log_address = /dev/log
+# clock_accuracy should represent how accurate the proxy servers' system clocks
+# are with each other. 1000 means that all the proxies' clock are accurate to
+# each other within 1 millisecond. No ratelimit should be higher than the
+# clock accuracy.
+# clock_accuracy = 1000
+# max_sleep_time_seconds = 60
+# log_sleep_time_seconds of 0 means disabled
+# log_sleep_time_seconds = 0
+# allows for slow rates (e.g. running up to 5 sec's behind) to catch up.
+# rate_buffer_seconds = 5
+# account_ratelimit of 0 means disabled
+# account_ratelimit = 0
+
+# these are comma separated lists of account names
+# account_whitelist = a,b
+# account_blacklist = c,d
+
+# with container_limit_x = r
+# for containers of size x limit requests per second to r. The container
+# rate will be linearly interpolated from the values given. With the values
+# below, a container of size 5 will get a rate of 75.
+# container_ratelimit_0 = 100
+# container_ratelimit_10 = 50
+# container_ratelimit_50 = 20
+
+[filter:domain_remap]
+use = egg:swift#domain_remap
+# You can override the default log routing for this filter here:
+# set log_name = domain_remap
+# set log_facility = LOG_LOCAL0
+# set log_level = INFO
+# set log_headers = False
+# set log_address = /dev/log
+# storage_domain = example.com
+# path_root = v1
+# reseller_prefixes = AUTH
+
+[filter:catch_errors]
+use = egg:swift#catch_errors
+# You can override the default log routing for this filter here:
+# set log_name = catch_errors
+# set log_facility = LOG_LOCAL0
+# set log_level = INFO
+# set log_headers = False
+# set log_address = /dev/log
+
+[filter:cname_lookup]
+# Note: this middleware requires python-dnspython
+use = egg:swift#cname_lookup
+# You can override the default log routing for this filter here:
+# set log_name = cname_lookup
+# set log_facility = LOG_LOCAL0
+# set log_level = INFO
+# set log_headers = False
+# set log_address = /dev/log
+# storage_domain = example.com
+# lookup_depth = 1
+
+# Note: Put staticweb just after your auth filter(s) in the pipeline
+[filter:staticweb]
+use = egg:swift#staticweb
+# Seconds to cache container x-container-meta-web-* header values.
+# cache_timeout = 300
+
+# Note: Put tempurl just before your auth filter(s) in the pipeline
+[filter:tempurl]
+use = egg:swift#tempurl
+#
+# The headers to remove from incoming requests. Simply a whitespace delimited
+# list of header names and names can optionally end with '*' to indicate a
+# prefix match. incoming_allow_headers is a list of exceptions to these
+# removals.
+# incoming_remove_headers = x-timestamp
+#
+# The headers allowed as exceptions to incoming_remove_headers. Simply a
+# whitespace delimited list of header names and names can optionally end with
+# '*' to indicate a prefix match.
+# incoming_allow_headers =
+#
+# The headers to remove from outgoing responses. Simply a whitespace delimited
+# list of header names and names can optionally end with '*' to indicate a
+# prefix match. outgoing_allow_headers is a list of exceptions to these
+# removals.
+# outgoing_remove_headers = x-object-meta-*
+#
+# The headers allowed as exceptions to outgoing_remove_headers. Simply a
+# whitespace delimited list of header names and names can optionally end with
+# '*' to indicate a prefix match.
+# outgoing_allow_headers = x-object-meta-public-*
+
+# Note: Put formpost just before your auth filter(s) in the pipeline
+[filter:formpost]
+use = egg:swift#formpost
+
+# Note: Just needs to be placed before the proxy-server in the pipeline.
+[filter:name_check]
+use = egg:swift#name_check
+# forbidden_chars = '"`<>
+# maximum_length = 255
+# forbidden_regexp = /\./|/\.\./|/\.$|/\.\.$
+
+[filter:list-endpoints]
+use = egg:swift#list_endpoints
+# list_endpoints_path = /endpoints/
+
+[filter:proxy-logging]
+use = egg:swift#proxy_logging
+# If not set, logging directives from [DEFAULT] without "access_" will be used
+# access_log_name = swift
+# access_log_facility = LOG_LOCAL0
+# access_log_level = INFO
+# access_log_address = /dev/log
+# If set, access_log_udp_host will override access_log_address
+# access_log_udp_host =
+# access_log_udp_port = 514
+# You can use log_statsd_* from [DEFAULT] or override them here:
+# access_log_statsd_host = localhost
+# access_log_statsd_port = 8125
+# access_log_statsd_default_sample_rate = 1.0
+# access_log_statsd_sample_rate_factor = 1.0
+# access_log_statsd_metric_prefix =
+# access_log_headers = False
+# What HTTP methods are allowed for StatsD logging (comma-sep); request methods
+# not in this list will have "BAD_METHOD" for the <verb> portion of the metric.
+# log_statsd_valid_http_methods = GET,HEAD,POST,PUT,DELETE,COPY,OPTIONS
+# Note: The double proxy-logging in the pipeline is not a mistake. The
+# left-most proxy-logging is there to log requests that were handled in
+# middleware and never made it through to the right-most middleware (and
+# proxy server). Double logging is prevented for normal requests. See
+# proxy-logging docs.
+
+# Note: Put before both ratelimit and auth in the pipeline.
+[filter:bulk]
+use = egg:swift#bulk
+# max_containers_per_extraction = 10000
+# max_failed_files = 1000
+# max_deletes_per_request = 1000
+
+# Note: Put after auth in the pipeline.
+[filter:container-quotas]
+use = egg:swift#container_quotas
+
+# Note: Put before both ratelimit and auth in the pipeline.
+[filter:slo]
+use = egg:swift#slo
+# max_manifest_segments = 1000
+# max_manifest_size = 2097152
+# min_segment_size = 1048576
+
+[filter:account-quotas]
+use = egg:swift#account_quotas
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/rsyncd.conf Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,20 @@
+log file = /var/log/swift/rsyncd.log
+pid file = /var/run/swift/rsyncd.pid
+
+[account]
+max connections = 2
+path = /srv/node
+read only = false
+lock file = /var/run/swift/account-rsync.lock
+
+[container]
+max connections = 4
+path = /srv/node
+read only = false
+lock file = /var/run/swift/container-rsync.lock
+
+[object]
+max connections = 8
+path = /srv/node
+read only = false
+lock file = /var/run/swift/object-rsync.lock
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-account-auditor.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-account-auditor">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-account-auditor">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-account-auditor %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Account Auditor Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift account auditor checks accounts, quarantining corrupt
+ data and requesting clean data from another replica.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-account-auditor" section="1" />
+ <manpage title="account-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-account-reaper.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,70 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-account-reaper">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-account-reaper">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-account-reaper %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Account Reaper Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift account reaper removes data from deleted accounts.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-account-reaper" section="1" />
+ <manpage title="account-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-account-replicator.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-account-replicator">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-account-replicator">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-account-replicator %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Account Replicator Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift account replicator ensures account consistency across
+ replicas.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-account-replicator" section="1" />
+ <manpage title="account-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-account-server.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,76 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-account-server">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-account-server">
+
+ <dependency name='memcached' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/application/database/memcached:default' />
+ </dependency>
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-account-server %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Account Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ Swift account servers manage accounts defined with the object storage
+ service.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-account-server" section="1" />
+ <manpage title="account-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-container-auditor.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-container-auditor">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-container-auditor">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-container-auditor %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Container Auditor Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift container auditor checks containers, quarantining corrupt
+ data and requesting clean data from another replica.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-container-auditor" section="1" />
+ <manpage title="container-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-container-replicator.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-container-replicator">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-container-replicator">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-container-replicator %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Container Replicator Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift container replicator ensures container consistency across
+ replicas.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-container-replicator" section="1" />
+ <manpage title="container-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-container-server.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,76 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-container-server">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-container-server">
+
+ <dependency name='memcached' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/application/database/memcached:default' />
+ </dependency>
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-container-server %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Container Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift container server manages a mapping of containers (i.e.,
+ folders) within the object store service.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-container-server" section="1" />
+ <manpage title="container-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-container-sync.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-container-sync">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-container-sync">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-container-sync %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Container Synchronization Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift synchronization server mirrors containers between Swift
+ clusters.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-container-sync" section="1" />
+ <manpage title="container-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-container-updater.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-container-updater">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-container-updater">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-container-updater %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Container Updater Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift container updater is responsible for updating container
+ information in the account database.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-container-updater" section="1" />
+ <manpage title="container-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-object-auditor.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-object-auditor">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-object-auditor">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-object-auditor %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Object Auditor Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift object auditor checks objects, quarantining corrupt
+ data and requesting clean data from another replica.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-object-auditor" section="1" />
+ <manpage title="object-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-object-expirer.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,70 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-object-expirer">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-object-expirer">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-object-expirer %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Object Expirer Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift object expirer executes scheduled deletion of objects.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-object-expirer" section="1" />
+ <manpage title="object-expirer.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-object-replicator.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-object-replicator">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-object-replicator">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-object-replicator %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Object Replicator Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift object replicator ensures account consistency across
+ replicas.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-object-replicator" section="1" />
+ <manpage title="object-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-object-server.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,76 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-object-server">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-object-server">
+
+ <dependency name='memcached' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/application/database/memcached:default' />
+ </dependency>
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-object-server %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Object Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ Swift object servers manage actual objects (i.e., files) on the
+ storage nodes.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-object-server" section="1" />
+ <manpage title="object-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-object-updater.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-object-updater">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-object-updater">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-object-updater %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Object Updater Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift object updater is responsible for updating object
+ information in container listings.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-object-updater" section="1" />
+ <manpage title="object-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-proxy-server.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,76 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-proxy-server">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-proxy-server">
+
+ <dependency name='memcached' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/application/database/memcached:default' />
+ </dependency>
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-proxy-server %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Proxy Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ Swift proxy servers accept incoming requests via the OpenStack Object
+ API or just raw HTTP.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="swift-proxy-server" section="1" />
+ <manpage title="proxy-server.conf" section="4" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-replicator-rsync Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,58 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import errno
+import os
+import subprocess
+import sys
+
+import smf_include
+
+
+def start():
+ cfgfile = "/etc/swift/rsyncd.conf"
+ if not os.path.isfile(cfgfile):
+ smf_include.smf_method_exit(smf_include.SMF_EXIT_ERR_CONFIG,
+ "missing_config", "Missing configuration file")
+
+ # This is the default delivered in /etc/swift/rsyncd.conf
+ try:
+ os.mkdir("/var/run/swift")
+ except OSError as e:
+ if e.errno != errno.EEXIST:
+ raise
+
+ cmdline = ["/usr/bin/rsync", "--daemon", "--config", cfgfile]
+ try:
+ proc = subprocess.Popen(cmdline)
+ except OSError as err:
+ print >> sys.stderr, "Error executing rsync: %s" % err
+ smf_include.smf_method_exit(smf_include.SMF_EXIT_ERR_FATAL,
+ "exec_error", "Error executing rsync: %s" % err)
+
+ ret = proc.wait()
+ if ret != 0:
+ print >> sys.stderr, "rsync daemon failed to start (see message above)"
+ print >> sys.stderr, "commandline:", " ".join(cmdline)
+ print >> sys.stderr, "exit code:", ret
+ smf_include.smf_method_exit(smf_include.SMF_EXIT_ERR_FATAL,
+ "exec_fail", "rsync daemon failed to start (see service log)")
+
+ return int(smf_include.SMF_EXIT_OK)
+
+if __name__ == "__main__":
+ os.putenv("LC_ALL", "C")
+ smf_include.smf_main()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-replicator-rsync.xml Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?>
+<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
+<!--
+ Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+<service_bundle type="manifest" name="swift-replicator-rsync">
+
+ <service version="1" type="service"
+ name="application/openstack/swift/swift-replicator-rsync">
+
+ <dependency name='multiuser' grouping='require_all' restart_on='error'
+ type='service'>
+ <service_fmri value='svc:/milestone/multi-user:default' />
+ </dependency>
+
+ <exec_method timeout_seconds="60" type="method" name="start"
+ exec="/lib/svc/method/swift-replicator-rsync %m">
+ <method_context>
+ <method_credential user='swift' group='swift'
+ privileges='basic,{zone}:/system/volatile/swift,{net_privaddr}:873/tcp,proc_chroot' />
+ </method_context>
+ </exec_method>
+ <exec_method timeout_seconds="60" type="method" name="stop"
+ exec=":kill"/>
+
+ <instance name='default' enabled='false'>
+ <!-- to start/stop/refresh the service -->
+ <property_group name='general' type='framework'>
+ <propval name='action_authorization' type='astring'
+ value='solaris.smf.manage.swift' />
+ <propval name='value_authorization' type='astring'
+ value='solaris.smf.value.swift' />
+ </property_group>
+ </instance>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ OpenStack Swift Replication Service
+ </loctext>
+ </common_name>
+ <description>
+ <loctext xml:lang="C">
+ The Swift replication service acts as the backend for the Swift
+ account, container, and object replicator services.
+ </loctext>
+ </description>
+ <documentation>
+ <manpage title="rsync" section="1" />
+ <manpage title="rsyncd.conf" section="5" />
+ </documentation>
+ </template>
+ </service>
+</service_bundle>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift-smf-method Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,76 @@
+#!/usr/bin/python2.6
+
+# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import errno
+import os
+import sys
+
+import smf_include
+
+rings = {
+ "account-reaper": ["account", "container", "object"],
+ "account-replicator": ["account"],
+ "container-replicator": ["container"],
+ "container-sync": ["container", "object"],
+ "container-updater": ["account"],
+ "object-expirer": ["object"],
+ "object-replicator": ["object"],
+ "object-updater": ["container"],
+ "proxy-server": ["account", "container", "object"]
+}
+
+def start():
+ # All the Swift services do essentially the same thing, so there's no need
+ # to have different method executables. Just look at the FMRI and run the
+ # appropriate executable from /usr/lib/swift.
+ fmri = os.environ["SMF_FMRI"]
+ exefile = os.path.basename(fmri.split(":")[1])
+ exepath = os.path.join("/usr/lib/swift", exefile)
+
+ # Try to find a config file that matches the executable name (minus the
+ # leading "swift-". If that fails, try using the -server config file.
+ cfgfile = "/etc/swift/%s.conf" % exepath.split("-", 1)[1]
+ if not os.path.isfile(cfgfile):
+ cfgfile = "/etc/swift/%s-server.conf" % exepath.split("-")[1]
+ if not os.path.isfile(cfgfile):
+ print >> sys.stderr, "Missing configuration file"
+ smf_include.smf_method_exit(smf_include.SMF_EXIT_ERR_CONFIG,
+ "missing_config", "Missing configuration file")
+
+ missing_rings = []
+ for ring in rings.get(exepath.split("-", 1)[1], ()):
+ ringfile = "/etc/swift/%s.ring.gz" % ring
+ if not os.path.isfile(ringfile):
+ missing_rings.append(ringfile)
+ if missing_rings:
+ print >> sys.stderr, "Missing ring(s): " + ", ".join(missing_rings)
+ smf_include.smf_method_exit(smf_include.SMF_EXIT_ERR_CONFIG,
+ "missing_ring",
+ "Missing ring(s): " + ", ".join(missing_rings))
+
+ # This is the default recon_cache_path (from the config files) as well as
+ # the default run_dir (from the code).
+ try:
+ os.mkdir("/var/run/swift")
+ except OSError as e:
+ if e.errno != errno.EEXIST:
+ raise
+
+ smf_include.smf_subprocess("%s %s" % (exepath, cfgfile))
+
+if __name__ == "__main__":
+ os.putenv("LC_ALL", "C")
+ smf_include.smf_main()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift.auth_attr Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,2 @@
+solaris.smf.manage.swift:RO::Manage OpenStack Swift Service States::
+solaris.smf.value.swift:RO::Change Values of OpenStack Swift Properties::
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift.exec_attr Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,32 @@
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-account-audit:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-bench-client:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-bench:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-dispersion-populate:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-dispersion-report:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-form-signature:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-get-nodes:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-object-info:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-recon:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-ring-builder:uid=swift;gid=swift
+
+OpenStack Object Storage Management:solaris:cmd:RO::\
+/usr/bin/swift-temp-url:uid=swift;gid=swift
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/files/swift.prof_attr Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,18 @@
+OpenStack Object Storage Management:RO::\
+Manage OpenStack Swift:\
+auths=solaris.admin.edit/etc/swift/account-server.conf,
+solaris.admin.edit/etc/swift/container-server.conf,
+solaris.admin.edit/etc/swift/dispersion.conf,
+solaris.admin.edit/etc/swift/memcache.conf,
+solaris.admin.edit/etc/swift/mime.types,
+solaris.admin.edit/etc/swift/object-expirer.conf,
+solaris.admin.edit/etc/swift/object-server.conf,
+solaris.admin.edit/etc/swift/proxy-server.conf,
+solaris.admin.edit/etc/swift/rsyncd.conf,
+solaris.admin.edit/etc/swift/swift-bench.conf,
+solaris.admin.edit/etc/swift/swift.conf,
+solaris.smf.manage.swift,\
+solaris.smf.value.swift
+
+OpenStack Management:RO:::profiles=OpenStack Object Storage Management
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/01-CVE-2013-4155.patch Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,416 @@
+commit 1f4ec235cdfd8c868f2d6458532f9dc32c00b8ca
+Author: Peter Portante <[email protected]>
+Date: Fri Jul 26 15:03:34 2013 -0400
+
+ Fix handling of DELETE obj reqs with old timestamp
+
+ The DELETE object REST API was creating tombstone files with old
+ timestamps, potentially filling up the disk, as well as sending
+ container updates.
+
+ Here we now make DELETEs with a request timestamp return a 409 (HTTP
+ Conflict) if a data file exists with a newer timestamp, only creating
+ tombstones if they have a newer timestamp.
+
+ The key fix is to actually read the timestamp metadata from an
+ existing tombstone file (thanks to Pete Zaitcev for catching this),
+ and then only create tombstone files with newer timestamps.
+
+ We also prevent PUT and POST operations using old timestamps as well.
+
+ Change-Id: I631957029d17c6578bca5779367df5144ba01fc9
+ Signed-off-by: Peter Portante <[email protected]>
+
+--- a/swift/obj/server.py
++++ b/swift/obj/server.py
+@@ -46,7 +46,7 @@ from swift.common.swob import HTTPAccepted, HTTPBadRequest, HTTPCreated, \
+ HTTPInternalServerError, HTTPNoContent, HTTPNotFound, HTTPNotModified, \
+ HTTPPreconditionFailed, HTTPRequestTimeout, HTTPUnprocessableEntity, \
+ HTTPClientDisconnect, HTTPMethodNotAllowed, Request, Response, UTC, \
+- HTTPInsufficientStorage, multi_range_iterator
++ HTTPInsufficientStorage, multi_range_iterator, HTTPConflict
+
+
+ DATADIR = 'objects'
+@@ -121,7 +121,6 @@ class DiskFile(object):
+ self.tmppath = None
+ self.logger = logger
+ self.metadata = {}
+- self.meta_file = None
+ self.data_file = None
+ self.fp = None
+ self.iter_etag = None
+@@ -133,15 +132,18 @@ class DiskFile(object):
+ if not os.path.exists(self.datadir):
+ return
+ files = sorted(os.listdir(self.datadir), reverse=True)
+- for file in files:
+- if file.endswith('.ts'):
+- self.data_file = self.meta_file = None
+- self.metadata = {'deleted': True}
+- return
+- if file.endswith('.meta') and not self.meta_file:
+- self.meta_file = os.path.join(self.datadir, file)
+- if file.endswith('.data') and not self.data_file:
+- self.data_file = os.path.join(self.datadir, file)
++ meta_file = None
++ for afile in files:
++ if afile.endswith('.ts'):
++ self.data_file = None
++ with open(os.path.join(self.datadir, afile)) as mfp:
++ self.metadata = read_metadata(mfp)
++ self.metadata['deleted'] = True
++ break
++ if afile.endswith('.meta') and not meta_file:
++ meta_file = os.path.join(self.datadir, afile)
++ if afile.endswith('.data') and not self.data_file:
++ self.data_file = os.path.join(self.datadir, afile)
+ break
+ if not self.data_file:
+ return
+@@ -149,8 +151,8 @@ class DiskFile(object):
+ self.metadata = read_metadata(self.fp)
+ if not keep_data_fp:
+ self.close(verify_file=False)
+- if self.meta_file:
+- with open(self.meta_file) as mfp:
++ if meta_file:
++ with open(meta_file) as mfp:
+ for key in self.metadata.keys():
+ if key.lower() not in DISALLOWED_HEADERS:
+ del self.metadata[key]
+@@ -594,6 +596,9 @@ class ObjectController(object):
+ except (DiskFileError, DiskFileNotExist):
+ file.quarantine()
+ return HTTPNotFound(request=request)
++ orig_timestamp = file.metadata.get('X-Timestamp', '0')
++ if orig_timestamp >= request.headers['x-timestamp']:
++ return HTTPConflict(request=request)
+ metadata = {'X-Timestamp': request.headers['x-timestamp']}
+ metadata.update(val for val in request.headers.iteritems()
+ if val[0].lower().startswith('x-object-meta-'))
+@@ -639,6 +644,8 @@ class ObjectController(object):
+ file = DiskFile(self.devices, device, partition, account, container,
+ obj, self.logger, disk_chunk_size=self.disk_chunk_size)
+ orig_timestamp = file.metadata.get('X-Timestamp')
++ if orig_timestamp and orig_timestamp >= request.headers['x-timestamp']:
++ return HTTPConflict(request=request)
+ upload_expiration = time.time() + self.max_upload_time
+ etag = md5()
+ upload_size = 0
+@@ -863,23 +870,26 @@ class ObjectController(object):
+ return HTTPPreconditionFailed(
+ request=request,
+ body='X-If-Delete-At and X-Delete-At do not match')
+- orig_timestamp = file.metadata.get('X-Timestamp')
+- if file.is_deleted() or file.is_expired():
+- response_class = HTTPNotFound
+- metadata = {
+- 'X-Timestamp': request.headers['X-Timestamp'], 'deleted': True,
+- }
+ old_delete_at = int(file.metadata.get('X-Delete-At') or 0)
+ if old_delete_at:
+ self.delete_at_update('DELETE', old_delete_at, account,
+ container, obj, request.headers, device)
+- file.put_metadata(metadata, tombstone=True)
+- file.unlinkold(metadata['X-Timestamp'])
+- if not orig_timestamp or \
+- orig_timestamp < request.headers['x-timestamp']:
++ orig_timestamp = file.metadata.get('X-Timestamp', 0)
++ req_timestamp = request.headers['X-Timestamp']
++ if file.is_deleted() or file.is_expired():
++ response_class = HTTPNotFound
++ else:
++ if orig_timestamp < req_timestamp:
++ response_class = HTTPNoContent
++ else:
++ response_class = HTTPConflict
++ if orig_timestamp < req_timestamp:
++ file.put_metadata({'X-Timestamp': req_timestamp},
++ tombstone=True)
++ file.unlinkold(req_timestamp)
+ self.container_update(
+ 'DELETE', account, container, obj, request.headers,
+- {'x-timestamp': metadata['X-Timestamp'],
++ {'x-timestamp': req_timestamp,
+ 'x-trans-id': request.headers.get('x-trans-id', '-')},
+ device)
+ resp = response_class(request=request)
+
+
+diff --git a/test/unit/obj/test_server.py b/test/unit/obj/test_server.py
+
+index 8ee266b..b354b97 100755 (executable)
+
+
+--- a/test/unit/obj/test_server.py
++++ b/test/unit/obj/test_server.py
+@@ -509,6 +509,41 @@ class TestObjectController(unittest.TestCase):
+ "X-Object-Meta-3" in resp.headers)
+ self.assertEquals(resp.headers['Content-Type'], 'application/x-test')
+
++ def test_POST_old_timestamp(self):
++ ts = time()
++ timestamp = normalize_timestamp(ts)
++ req = Request.blank('/sda1/p/a/c/o', environ={'REQUEST_METHOD': 'PUT'},
++ headers={'X-Timestamp': timestamp,
++ 'Content-Type': 'application/x-test',
++ 'X-Object-Meta-1': 'One',
++ 'X-Object-Meta-Two': 'Two'})
++ req.body = 'VERIFY'
++ resp = self.object_controller.PUT(req)
++ self.assertEquals(resp.status_int, 201)
++
++ # Same timestamp should result in 409
++ req = Request.blank('/sda1/p/a/c/o',
++ environ={'REQUEST_METHOD': 'POST'},
++ headers={'X-Timestamp': timestamp,
++ 'X-Object-Meta-3': 'Three',
++ 'X-Object-Meta-4': 'Four',
++ 'Content-Encoding': 'gzip',
++ 'Content-Type': 'application/x-test'})
++ resp = self.object_controller.POST(req)
++ self.assertEquals(resp.status_int, 409)
++
++ # Earlier timestamp should result in 409
++ timestamp = normalize_timestamp(ts - 1)
++ req = Request.blank('/sda1/p/a/c/o',
++ environ={'REQUEST_METHOD': 'POST'},
++ headers={'X-Timestamp': timestamp,
++ 'X-Object-Meta-5': 'Five',
++ 'X-Object-Meta-6': 'Six',
++ 'Content-Encoding': 'gzip',
++ 'Content-Type': 'application/x-test'})
++ resp = self.object_controller.POST(req)
++ self.assertEquals(resp.status_int, 409)
++
+ def test_POST_not_exist(self):
+ timestamp = normalize_timestamp(time())
+ req = Request.blank('/sda1/p/a/c/fail',
+@@ -555,11 +590,15 @@ class TestObjectController(unittest.TestCase):
+
+ old_http_connect = object_server.http_connect
+ try:
+- timestamp = normalize_timestamp(time())
++ ts = time()
++ timestamp = normalize_timestamp(ts)
+ req = Request.blank('/sda1/p/a/c/o', environ={'REQUEST_METHOD':
+ 'POST'}, headers={'X-Timestamp': timestamp, 'Content-Type':
+ 'text/plain', 'Content-Length': '0'})
+ resp = self.object_controller.PUT(req)
++ self.assertEquals(resp.status_int, 201)
++
++ timestamp = normalize_timestamp(ts + 1)
+ req = Request.blank('/sda1/p/a/c/o',
+ environ={'REQUEST_METHOD': 'POST'},
+ headers={'X-Timestamp': timestamp,
+@@ -571,6 +610,8 @@ class TestObjectController(unittest.TestCase):
+ object_server.http_connect = mock_http_connect(202)
+ resp = self.object_controller.POST(req)
+ self.assertEquals(resp.status_int, 202)
++
++ timestamp = normalize_timestamp(ts + 2)
+ req = Request.blank('/sda1/p/a/c/o',
+ environ={'REQUEST_METHOD': 'POST'},
+ headers={'X-Timestamp': timestamp,
+@@ -582,6 +623,8 @@ class TestObjectController(unittest.TestCase):
+ object_server.http_connect = mock_http_connect(202, with_exc=True)
+ resp = self.object_controller.POST(req)
+ self.assertEquals(resp.status_int, 202)
++
++ timestamp = normalize_timestamp(ts + 3)
+ req = Request.blank('/sda1/p/a/c/o',
+ environ={'REQUEST_METHOD': 'POST'},
+ headers={'X-Timestamp': timestamp,
+@@ -718,6 +761,32 @@ class TestObjectController(unittest.TestCase):
+ 'name': '/a/c/o',
+ 'Content-Encoding': 'gzip'})
+
++ def test_PUT_old_timestamp(self):
++ ts = time()
++ req = Request.blank('/sda1/p/a/c/o', environ={'REQUEST_METHOD': 'PUT'},
++ headers={'X-Timestamp': normalize_timestamp(ts),
++ 'Content-Length': '6',
++ 'Content-Type': 'application/octet-stream'})
++ req.body = 'VERIFY'
++ resp = self.object_controller.PUT(req)
++ self.assertEquals(resp.status_int, 201)
++
++ req = Request.blank('/sda1/p/a/c/o', environ={'REQUEST_METHOD': 'PUT'},
++ headers={'X-Timestamp': normalize_timestamp(ts),
++ 'Content-Type': 'text/plain',
++ 'Content-Encoding': 'gzip'})
++ req.body = 'VERIFY TWO'
++ resp = self.object_controller.PUT(req)
++ self.assertEquals(resp.status_int, 409)
++
++ req = Request.blank('/sda1/p/a/c/o', environ={'REQUEST_METHOD': 'PUT'},
++ headers={'X-Timestamp': normalize_timestamp(ts - 1),
++ 'Content-Type': 'text/plain',
++ 'Content-Encoding': 'gzip'})
++ req.body = 'VERIFY THREE'
++ resp = self.object_controller.PUT(req)
++ self.assertEquals(resp.status_int, 409)
++
+ def test_PUT_no_etag(self):
+ req = Request.blank('/sda1/p/a/c/o', environ={'REQUEST_METHOD': 'PUT'},
+ headers={'X-Timestamp': normalize_timestamp(time()),
+@@ -1306,12 +1375,32 @@ class TestObjectController(unittest.TestCase):
+ self.assertEquals(resp.status_int, 400)
+ # self.assertRaises(KeyError, self.object_controller.DELETE, req)
+
++ # The following should have created a tombstone file
+ timestamp = normalize_timestamp(time())
+ req = Request.blank('/sda1/p/a/c/o',
+ environ={'REQUEST_METHOD': 'DELETE'},
+ headers={'X-Timestamp': timestamp})
+ resp = self.object_controller.DELETE(req)
+ self.assertEquals(resp.status_int, 404)
++ objfile = os.path.join(self.testdir, 'sda1',
++ storage_directory(object_server.DATADIR, 'p',
++ hash_path('a', 'c', 'o')),
++ timestamp + '.ts')
++ self.assert_(os.path.isfile(objfile))
++
++ # The following should *not* have created a tombstone file.
++ timestamp = normalize_timestamp(float(timestamp) - 1)
++ req = Request.blank('/sda1/p/a/c/o',
++ environ={'REQUEST_METHOD': 'DELETE'},
++ headers={'X-Timestamp': timestamp})
++ resp = self.object_controller.DELETE(req)
++ self.assertEquals(resp.status_int, 404)
++ objfile = os.path.join(self.testdir, 'sda1',
++ storage_directory(object_server.DATADIR, 'p',
++ hash_path('a', 'c', 'o')),
++ timestamp + '.ts')
++ self.assertFalse(os.path.exists(objfile))
++ self.assertEquals(len(os.listdir(os.path.dirname(objfile))), 1)
+
+ sleep(.00001)
+ timestamp = normalize_timestamp(time())
+@@ -1325,17 +1414,19 @@ class TestObjectController(unittest.TestCase):
+ resp = self.object_controller.PUT(req)
+ self.assertEquals(resp.status_int, 201)
+
++ # The following should *not* have created a tombstone file.
+ timestamp = normalize_timestamp(float(timestamp) - 1)
+ req = Request.blank('/sda1/p/a/c/o',
+ environ={'REQUEST_METHOD': 'DELETE'},
+ headers={'X-Timestamp': timestamp})
+ resp = self.object_controller.DELETE(req)
+- self.assertEquals(resp.status_int, 204)
++ self.assertEquals(resp.status_int, 409)
+ objfile = os.path.join(self.testdir, 'sda1',
+ storage_directory(object_server.DATADIR, 'p',
+ hash_path('a', 'c', 'o')),
+ timestamp + '.ts')
+- self.assert_(os.path.isfile(objfile))
++ self.assertFalse(os.path.exists(objfile))
++ self.assertEquals(len(os.listdir(os.path.dirname(objfile))), 1)
+
+ sleep(.00001)
+ timestamp = normalize_timestamp(time())
+@@ -1350,6 +1441,103 @@ class TestObjectController(unittest.TestCase):
+ timestamp + '.ts')
+ self.assert_(os.path.isfile(objfile))
+
++ def test_DELETE_container_updates(self):
++ # Test swift.object_server.ObjectController.DELETE and container
++ # updates, making sure container update is called in the correct
++ # state.
++ timestamp = normalize_timestamp(time())
++ req = Request.blank('/sda1/p/a/c/o', environ={'REQUEST_METHOD': 'PUT'},
++ headers={
++ 'X-Timestamp': timestamp,
++ 'Content-Type': 'application/octet-stream',
++ 'Content-Length': '4',
++ })
++ req.body = 'test'
++ resp = self.object_controller.PUT(req)
++ self.assertEquals(resp.status_int, 201)
++
++ calls_made = [0]
++
++ def our_container_update(*args, **kwargs):
++ calls_made[0] += 1
++
++ orig_cu = self.object_controller.container_update
++ self.object_controller.container_update = our_container_update
++ try:
++ # The following request should return 409 (HTTP Conflict). A
++ # tombstone file should not have been created with this timestamp.
++ timestamp = normalize_timestamp(float(timestamp) - 1)
++ req = Request.blank('/sda1/p/a/c/o',
++ environ={'REQUEST_METHOD': 'DELETE'},
++ headers={'X-Timestamp': timestamp})
++ resp = self.object_controller.DELETE(req)
++ self.assertEquals(resp.status_int, 409)
++ objfile = os.path.join(self.testdir, 'sda1',
++ storage_directory(object_server.DATADIR, 'p',
++ hash_path('a', 'c', 'o')),
++ timestamp + '.ts')
++ self.assertFalse(os.path.isfile(objfile))
++ self.assertEquals(len(os.listdir(os.path.dirname(objfile))), 1)
++ self.assertEquals(0, calls_made[0])
++
++ # The following request should return 204, and the object should
++ # be truly deleted (container update is performed) because this
++ # timestamp is newer. A tombstone file should have been created
++ # with this timestamp.
++ sleep(.00001)
++ timestamp = normalize_timestamp(time())
++ req = Request.blank('/sda1/p/a/c/o',
++ environ={'REQUEST_METHOD': 'DELETE'},
++ headers={'X-Timestamp': timestamp})
++ resp = self.object_controller.DELETE(req)
++ self.assertEquals(resp.status_int, 204)
++ objfile = os.path.join(self.testdir, 'sda1',
++ storage_directory(object_server.DATADIR, 'p',
++ hash_path('a', 'c', 'o')),
++ timestamp + '.ts')
++ self.assert_(os.path.isfile(objfile))
++ self.assertEquals(1, calls_made[0])
++ self.assertEquals(len(os.listdir(os.path.dirname(objfile))), 1)
++
++ # The following request should return a 404, as the object should
++ # already have been deleted, but it should have also performed a
++ # container update because the timestamp is newer, and a tombstone
++ # file should also exist with this timestamp.
++ sleep(.00001)
++ timestamp = normalize_timestamp(time())
++ req = Request.blank('/sda1/p/a/c/o',
++ environ={'REQUEST_METHOD': 'DELETE'},
++ headers={'X-Timestamp': timestamp})
++ resp = self.object_controller.DELETE(req)
++ self.assertEquals(resp.status_int, 404)
++ objfile = os.path.join(self.testdir, 'sda1',
++ storage_directory(object_server.DATADIR, 'p',
++ hash_path('a', 'c', 'o')),
++ timestamp + '.ts')
++ self.assert_(os.path.isfile(objfile))
++ self.assertEquals(2, calls_made[0])
++ self.assertEquals(len(os.listdir(os.path.dirname(objfile))), 1)
++
++ # The following request should return a 404, as the object should
++ # already have been deleted, and it should not have performed a
++ # container update because the timestamp is older, or created a
++ # tombstone file with this timestamp.
++ timestamp = normalize_timestamp(float(timestamp) - 1)
++ req = Request.blank('/sda1/p/a/c/o',
++ environ={'REQUEST_METHOD': 'DELETE'},
++ headers={'X-Timestamp': timestamp})
++ resp = self.object_controller.DELETE(req)
++ self.assertEquals(resp.status_int, 404)
++ objfile = os.path.join(self.testdir, 'sda1',
++ storage_directory(object_server.DATADIR, 'p',
++ hash_path('a', 'c', 'o')),
++ timestamp + '.ts')
++ self.assertFalse(os.path.isfile(objfile))
++ self.assertEquals(2, calls_made[0])
++ self.assertEquals(len(os.listdir(os.path.dirname(objfile))), 1)
++ finally:
++ self.object_controller.container_update = orig_cu
++
+ def test_call(self):
+ """ Test swift.object_server.ObjectController.__call__ """
+ inbuf = StringIO()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/02-CVE-2014-0006.patch Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,43 @@
+From c0eed792a22865b280f99cbb79076fa7ad19fcbb Mon Sep 17 00:00:00 2001
+From: Samuel Merritt <[email protected]>
+Date: Thu, 16 Jan 2014 12:45:52 +0000
+Subject: Use constant time comparison in tempURL
+
+Use constant time comparison when evaluating tempURL to avoid timing
+attacks (CVE-2014-0006). This is the grizzly backport of the master
+patch.
+
+Fixes bug 1265665
+
+Change-Id: I11e4ad83cc4077e52adf54a0bd0f9749294b2a48
+---
+diff --git a/swift/common/middleware/tempurl.py b/swift/common/middleware/tempurl.py
+index 5a05de7..8a2517e 100644
+--- a/swift/common/middleware/tempurl.py
++++ b/swift/common/middleware/tempurl.py
+@@ -98,6 +98,7 @@ from urlparse import parse_qs
+
+ from swift.common.wsgi import make_pre_authed_env
+ from swift.common.http import HTTP_UNAUTHORIZED
++from swift.common.utils import streq_const_time
+
+
+ #: Default headers to remove from incoming requests. Simply a whitespace
+@@ -248,14 +249,14 @@ class TempURL(object):
+ if env['REQUEST_METHOD'] == 'HEAD':
+ hmac_val = self._get_hmac(env, temp_url_expires, key,
+ request_method='GET')
+- if temp_url_sig != hmac_val:
++ if not streq_const_time(temp_url_sig, hmac_val):
+ hmac_val = self._get_hmac(env, temp_url_expires, key,
+ request_method='PUT')
+- if temp_url_sig != hmac_val:
++ if not streq_const_time(temp_url_sig, hmac_val):
+ return self._invalid(env, start_response)
+ else:
+ hmac_val = self._get_hmac(env, temp_url_expires, key)
+- if temp_url_sig != hmac_val:
++ if not streq_const_time(temp_url_sig, hmac_val):
+ return self._invalid(env, start_response)
+ self._clean_incoming_headers(env)
+ env['swift.authorize'] = lambda req: None
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/03-CVE-2013-2161.patch Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,25 @@
+commit 6659382c4fa348e1ebbce2424968dd7267ea1db1
+Author: Alex Gaynor <[email protected]>
+Date: Mon May 27 02:07:39 2013 +0000
+
+ Check user input in XML responses.
+
+ Fixes bug 1183884.
+
+ * swift/account/server.py: Escape account name in XML listings.
+
+ Change-Id: I7ba54631ed1349516132c00a53fae74f0b84ac37
+
+diff --git a/swift/account/server.py b/swift/account/server.py
+index 81c4d90..baca5a5 100644
+--- a/swift/account/server.py
++++ b/swift/account/server.py
+@@ -241,7 +241,7 @@ class AccountController(object):
+ account_list = json.dumps(data)
+ elif out_content_type.endswith('/xml'):
+ output_list = ['<?xml version="1.0" encoding="UTF-8"?>',
+- '<account name="%s">' % account]
++ '<account name="%s">' % saxutils.escape(account)]
+ for (name, object_count, bytes_used, is_subdir) in account_list:
+ name = saxutils.escape(name)
+ if is_subdir:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/manager.patch Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,32 @@
+We want to put the swift server executables in /usr/lib/swift, which means
+that we need to be able to call them from there. We do so by using the
+"executable" keyword argument to subprocess.Popen() (and allow for it to be
+mocked out during testing).
+
+This patch is not suitable for pushing upstream.
+
+diff --git a/swift/common/manager.py b/swift/common/manager.py
+--- a/swift/common/manager.py
++++ b/swift/common/manager.py
+@@ -532,7 +532,8 @@ class Server():
+ re_out = subprocess.PIPE
+ else:
+ re_out = open(os.devnull, 'w+b')
+- proc = subprocess.Popen(args, stdout=re_out, stderr=re_err)
++ proc = subprocess.Popen(args, stdout=re_out, stderr=re_err,
++ executable='/usr/lib/swift/' + self.cmd)
+ pid_file = self.get_pid_file_name(conf_file)
+ write_file(pid_file, proc.pid)
+ self.procs.append(proc)
+diff --git a/test/unit/common/test_manager.py b/test/unit/common/test_manager.py
+--- a/test/unit/common/test_manager.py
++++ b/test/unit/common/test_manager.py
+@@ -816,7 +816,7 @@ class TestServer(unittest.TestCase):
+ class MockProc():
+
+ def __init__(self, pid, args, stdout=MockProcess.NOTHING,
+- stderr=MockProcess.NOTHING):
++ stderr=MockProcess.NOTHING, executable=None):
+ self.pid = pid
+ self.args = args
+ self.stdout = stdout
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/manpages.patch Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,1302 @@
+Section renumbering and more consistent use of .BR. Add language
+describing use of SMF. Fix a few small errors. Some of this is obviously
+Solaris-specific, but the rest could be submitted upstream.
+
+diff --git a/doc/manpages/account-server.conf.5 b/doc/manpages/account-server.conf.5
+--- a/doc/manpages/account-server.conf.5
++++ b/doc/manpages/account-server.conf.5
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH account-server.conf 5 "8/26/2011" "Linux" "OpenStack Swift"
++.TH account-server.conf 4 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B account-server.conf
+-\- configuration file for the openstack-swift account server
++\- configuration file for the OpenStack Swift account server
+
+
+
+@@ -245,13 +245,13 @@ Connection timeout to external services.
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation about the swift-account-server and
+-also Openstack-Swift as a whole can be found at
++also OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/admin_guide.html
+ and
+ .BI http://swift.openstack.org
+
+
+ .SH "SEE ALSO"
+-.BR swift-account-server(1),
++.BR swift-account-server (1)
+
+
+diff --git a/doc/manpages/container-server.conf.5 b/doc/manpages/container-server.conf.5
+--- a/doc/manpages/container-server.conf.5
++++ b/doc/manpages/container-server.conf.5
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH container-server.conf 5 "8/26/2011" "Linux" "OpenStack Swift"
++.TH container-server.conf 4 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B container-server.conf
+-\- configuration file for the openstack-swift container server
++\- configuration file for the OpenStack Swift container server
+
+
+
+@@ -270,13 +270,13 @@ Maximum amount of time to spend syncing
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation about the swift-container-server and
+-also Openstack-Swift as a whole can be found at
++also OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/admin_guide.html
+ and
+ .BI http://swift.openstack.org
+
+
+ .SH "SEE ALSO"
+-.BR swift-container-server(1),
++.BR swift-container-server (1)
+
+
+diff --git a/doc/manpages/dispersion.conf.5 b/doc/manpages/dispersion.conf.5
+--- a/doc/manpages/dispersion.conf.5
++++ b/doc/manpages/dispersion.conf.5
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH dispersion.conf 5 "8/26/2011" "Linux" "OpenStack Swift"
++.TH dispersion.conf 4 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B dispersion.conf
+-\- configuration file for the openstack-swift dispersion tools
++\- configuration file for the OpenStack Swift dispersion tools
+
+ .SH SYNOPSIS
+ .LP
+@@ -43,7 +43,7 @@ Authentication system account/user name
+ .IP "\fBauth_key\fR"
+ Authentication system account/user password
+ .IP "\fBswift_dir\fR"
+-Location of openstack-swift configuration and ring files
++Location of OpenStack Swift configuration and ring files
+ .IP "\fBdispersion_coverage\fR"
+ Percentage of partition coverage to use. The default is 1.
+ .IP "\fBretries\fR"
+@@ -80,13 +80,13 @@ Whether to run the object report. The de
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation about the swift-dispersion utilities and
+-also Openstack-Swift as a whole can be found at
++also OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/admin_guide.html#cluster-health
+ and
+ .BI http://swift.openstack.org
+
+
+ .SH "SEE ALSO"
+-.BR swift-dispersion-report(1),
+-.BR swift-dispersion-populate(1)
++.BR swift-dispersion-report (1),
++.BR swift-dispersion-populate (1)
+
+diff --git a/doc/manpages/object-expirer.conf.5 b/doc/manpages/object-expirer.conf.5
+--- a/doc/manpages/object-expirer.conf.5
++++ b/doc/manpages/object-expirer.conf.5
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH object-expirer.conf 5 "03/15/2012" "Linux" "OpenStack Swift"
++.TH object-expirer.conf 4 "03/15/2012" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B object-expirer.conf
+-\- configuration file for the openstack-swift object exprier daemon
++\- configuration file for the OpenStack Swift object exprier daemon
+
+
+
+@@ -133,12 +133,12 @@ The default is \fBegg:swift#catch_errors
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation about the swift-object-expirer and
+-also Openstack-Swift as a whole can be found at
++also OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/admin_guide.html
+ and
+ .BI http://swift.openstack.org
+
+
+ .SH "SEE ALSO"
+-.BR swift-proxy-server.conf(5),
++.BR proxy-server.conf (4)
+
+diff --git a/doc/manpages/object-server.conf.5 b/doc/manpages/object-server.conf.5
+--- a/doc/manpages/object-server.conf.5
++++ b/doc/manpages/object-server.conf.5
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH object-server.conf 5 "8/26/2011" "Linux" "OpenStack Swift"
++.TH object-server.conf 4 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B object-server.conf
+-\- configuration file for the openstack-swift object server
++\- configuration file for the OpenStack Swift object server
+
+
+
+@@ -262,13 +262,13 @@ The default is 50.
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation about the swift-object-server and
+-also Openstack-Swift as a whole can be found at
++also OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/admin_guide.html
+ and
+ .BI http://swift.openstack.org
+
+
+ .SH "SEE ALSO"
+-.BR swift-object-server(1),
++.BR swift-object-server (1)
+
+
+diff --git a/doc/manpages/proxy-server.conf.5 b/doc/manpages/proxy-server.conf.5
+--- a/doc/manpages/proxy-server.conf.5
++++ b/doc/manpages/proxy-server.conf.5
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH proxy-server.conf 5 "8/26/2011" "Linux" "OpenStack Swift"
++.TH proxy-server.conf 4 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B proxy-server.conf
+-\- configuration file for the openstack-swift proxy server
++\- configuration file for the OpenStack Swift proxy server
+
+
+
+@@ -539,10 +539,10 @@ per second. The default is 1.
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation about the swift-proxy-server and
+-also Openstack-Swift as a whole can be found at
++also OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/admin_guide.html
+ and
+ .BI http://swift.openstack.org
+
+ .SH "SEE ALSO"
+-.BR swift-proxy-server(1)
++.BR swift-proxy-server (1)
+diff --git a/doc/manpages/swift-account-auditor.1 b/doc/manpages/swift-account-auditor.1
+--- a/doc/manpages/swift-account-auditor.1
++++ b/doc/manpages/swift-account-auditor.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-account-auditor 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-account-auditor 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-account-auditor
+-\- Openstack-swift account auditor
++\- OpenStack Swift account auditor
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-account-auditor
++.B /usr/lib/swift/swift-account-auditor
+ [CONFIG] [-h|--help] [-v|--verbose] [-o|--once]
+
+ .SH DESCRIPTION
+@@ -50,13 +50,25 @@ The options are as follows:
+ .RE
+ .PD
+ .RE
++
++.LP
++The account auditor should be enabled and disabled using the Solaris
++Service Management Facility, \fBsmf\fR(5). The service FMRI for the
++account auditor is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-account-auditor
++.fi
++.in -2
+
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-account-auditor
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+ .SH "SEE ALSO"
+-.BR account-server.conf(5)
++.BR account-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-account-reaper.1 b/doc/manpages/swift-account-reaper.1
+--- a/doc/manpages/swift-account-reaper.1
++++ b/doc/manpages/swift-account-reaper.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-account-reaper 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-account-reaper 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-account-reaper
+-\- Openstack-swift account reaper
++\- OpenStack Swift account reaper
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-account-reaper
++.B /usr/lib/swift/swift-account-reaper
+ [CONFIG] [-h|--help] [-v|--verbose] [-o|--once]
+
+ .SH DESCRIPTION
+@@ -56,14 +56,25 @@ The options are as follows:
+ .PD
+ .RE
+
+-
++.LP
++The account reaper should be enabled and disabled using the Solaris Service
++Management Facility, \fBsmf\fR(5). The service FMRI for the account reaper
++is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-account-reaper
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+-.BI swift-object-auditor
+-and also about Openstack-Swift as a whole can be found at
++.BI swift-account-reaper
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+ .SH "SEE ALSO"
+-.BR account-server.conf(5)
++.BR account-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-account-replicator.1 b/doc/manpages/swift-account-replicator.1
+--- a/doc/manpages/swift-account-replicator.1
++++ b/doc/manpages/swift-account-replicator.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-account-replicator 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-account-replicator 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-account-replicator
+-\- Openstack-swift account replicator
++\- OpenStack Swift account replicator
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-account-replicator
++.B /usr/lib/swift/swift-account-replicator
+ [CONFIG] [-h|--help] [-v|--verbose] [-o|--once]
+
+ .SH DESCRIPTION
+@@ -58,14 +58,25 @@ The options are as follows:
+ .PD
+ .RE
+
+-
++.LP
++The account replicator should be enabled and disabled using the Solaris
++Service Management Facility, \fBsmf\fR(5). The service FMRI for the
++account replicator is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-account-replicator
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-account-replicator
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+ .SH "SEE ALSO"
+-.BR account-server.conf(5)
++.BR account-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-account-server.1 b/doc/manpages/swift-account-server.1
+--- a/doc/manpages/swift-account-server.1
++++ b/doc/manpages/swift-account-server.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-account-server 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-account-server 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-account-server
+-\- Openstack-swift account server
++\- OpenStack Swift account server
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-account-server
++.B /usr/lib/swift/swift-account-server
+ [CONFIG] [-h|--help] [-v|--verbose]
+
+ .SH DESCRIPTION
+@@ -33,15 +33,26 @@ The Account Server's primary job is to h
+ are stored as sqlite database files, and replicated across the cluster similar to how
+ objects are.
+
++.LP
++The account server should be enabled and disabled using the Solaris Service
++Management Facility, \fBsmf\fR(5). The service FMRI for the account server
++is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-account-server
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-account-server
+-and also about Openstack-Swift as a whole can be found at
++and also about Openstack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+ and
+ .BI http://docs.openstack.org
+
+-
+ .SH "SEE ALSO"
+-.BR account-server.conf(5)
++.BR account-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-container-auditor.1 b/doc/manpages/swift-container-auditor.1
+--- a/doc/manpages/swift-container-auditor.1
++++ b/doc/manpages/swift-container-auditor.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-container-auditor 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-container-auditor 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-container-auditor
+-\- Openstack-swift container auditor
++\- OpenStack Swift container auditor
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-container-auditor
++.B /usr/lib/swift/swift-container-auditor
+ [CONFIG] [-h|--help] [-v|--verbose] [-o|--once]
+
+ .SH DESCRIPTION
+@@ -50,15 +50,26 @@ The options are as follows:
+ .RE
+ .PD
+ .RE
+-
+-
++
++.LP
++The container auditor should be enabled and disabled using the Solaris
++Service Management Facility, \fBsmf\fR(5). The service FMRI for the
++container auditor is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-container-auditor
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-container-auditor
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+ .SH "SEE ALSO"
+-.BR container-server.conf(5)
++.BR container-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-container-replicator.1 b/doc/manpages/swift-container-replicator.1
+--- a/doc/manpages/swift-container-replicator.1
++++ b/doc/manpages/swift-container-replicator.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-container-replicator 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-container-replicator 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-container-replicator
+-\- Openstack-swift container replicator
++\- OpenStack Swift container replicator
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-container-replicator
++.B /usr/lib/swift/swift-container-replicator
+ [CONFIG] [-h|--help] [-v|--verbose] [-o|--once]
+
+ .SH DESCRIPTION
+@@ -57,15 +57,26 @@ The options are as follows:
+ .RE
+ .PD
+ .RE
++
++.LP
++The container replicator should be enabled and disabled using the Solaris
++Service Management Facility, \fBsmf\fR(5). The service FMRI for the
++container replicator is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-container-replicator
++.fi
++.in -2
+
+-
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-container-replicator
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+ .SH "SEE ALSO"
+-.BR container-server.conf(5)
++.BR container-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-container-server.1 b/doc/manpages/swift-container-server.1
+--- a/doc/manpages/swift-container-server.1
++++ b/doc/manpages/swift-container-server.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-container-server 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-container-server 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-container-server
+-\- Openstack-swift container server
++\- OpenStack Swift container server
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-container-server
++.B /usr/lib/swift/swift-container-server
+ [CONFIG] [-h|--help] [-v|--verbose]
+
+ .SH DESCRIPTION
+@@ -35,11 +35,22 @@ are stored as sqlite database files, and
+ objects are. Statistics are also tracked that include the total number of objects, and
+ total storage usage for that container.
+
++.LP
++The container server should be enabled and disabled using the Solaris
++Service Management Facility, \fBsmf\fR(5). The service FMRI for the
++container server is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-container-server
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-container-server
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+ and
+ .BI http://docs.openstack.org
+@@ -47,4 +58,5 @@ and
+ .LP
+
+ .SH "SEE ALSO"
+-.BR container-server.conf(5)
++.BR container-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-container-sync.1 b/doc/manpages/swift-container-sync.1
+--- a/doc/manpages/swift-container-sync.1
++++ b/doc/manpages/swift-container-sync.1
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-container-sync 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-container-sync 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-container-sync
+-\- Openstack-swift container sync
++\- OpenStack Swift container sync
+
+ .SH SYNOPSIS
+ .LP
+@@ -44,7 +44,7 @@ newer rows since the last sync will trig
+ .LP
+ More in depth documentation in regards to
+ .BI swift-container-sync
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/overview_container_sync.html
+ and
+ .BI http://docs.openstack.org
+@@ -52,4 +52,4 @@ and
+ .LP
+
+ .SH "SEE ALSO"
+-.BR container-server.conf(5)
++.BR container-server.conf (4)
+diff --git a/doc/manpages/swift-container-updater.1 b/doc/manpages/swift-container-updater.1
+--- a/doc/manpages/swift-container-updater.1
++++ b/doc/manpages/swift-container-updater.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-container-updater 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-container-updater 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-container-updater
+-\- Openstack-swift container updater
++\- OpenStack Swift container updater
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-container-updater
++.B /usr/lib/swift/swift-container-updater
+ [CONFIG] [-h|--help] [-v|--verbose] [-o|--once]
+
+ .SH DESCRIPTION
+@@ -59,14 +59,26 @@ The options are as follows:
+ .RE
+ .PD
+ .RE
+-
++
++.LP
++The container updater should be enabled and disabled using the Solaris
++Service Management Facility, \fBsmf\fR(5). The service FMRI for the
++container updater is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-container-updater
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-container-updater
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+ .SH "SEE ALSO"
+-.BR container-server.conf(5)
++.BR container-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-dispersion-populate.1 b/doc/manpages/swift-dispersion-populate.1
+--- a/doc/manpages/swift-dispersion-populate.1
++++ b/doc/manpages/swift-dispersion-populate.1
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-dispersion-populate 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-dispersion-populate 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-dispersion-populate
+-\- Openstack-swift dispersion populate
++\- OpenStack Swift dispersion populate
+
+ .SH SYNOPSIS
+ .LP
+@@ -88,12 +88,12 @@ Example \fI/etc/swift/dispersion.conf\fR
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation about the swift-dispersion utilities and
+-also Openstack-Swift as a whole can be found at
++also OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/admin_guide.html#cluster-health
+ and
+ .BI http://swift.openstack.org
+
+
+ .SH "SEE ALSO"
+-.BR swift-dispersion-report(1),
+-.BR dispersion.conf (5)
++.BR swift-dispersion-report (1),
++.BR dispersion.conf (4)
+diff --git a/doc/manpages/swift-dispersion-report.1 b/doc/manpages/swift-dispersion-report.1
+--- a/doc/manpages/swift-dispersion-report.1
++++ b/doc/manpages/swift-dispersion-report.1
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-dispersion-report 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-dispersion-report 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-dispersion-report
+-\- Openstack-swift dispersion report
++\- OpenStack Swift dispersion report
+
+ .SH SYNOPSIS
+ .LP
+@@ -124,12 +124,12 @@ Example \fI/etc/swift/dispersion.conf\fR
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation about the swift-dispersion utilities and
+-also Openstack-Swift as a whole can be found at
++also OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/admin_guide.html#cluster-health
+ and
+ .BI http://swift.openstack.org
+
+
+ .SH "SEE ALSO"
+-.BR swift-dispersion-populate(1),
+-.BR dispersion.conf (5)
++.BR swift-dispersion-populate (1),
++.BR dispersion.conf (4)
+diff --git a/doc/manpages/swift-get-nodes.1 b/doc/manpages/swift-get-nodes.1
+--- a/doc/manpages/swift-get-nodes.1
++++ b/doc/manpages/swift-get-nodes.1
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-get-nodes 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-get-nodes 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-get-nodes
+-\- Openstack-swift get-nodes tool
++\- OpenStack Swift get-nodes tool
+
+ .SH SYNOPSIS
+ .LP
+@@ -72,11 +72,11 @@ where the container resides by using the
+
+ .SH DOCUMENTATION
+ .LP
+-More documentation about Openstack-Swift can be found at
++More documentation about OpenStack Swift can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+
+ .SH "SEE ALSO"
+-.BR swift-object-info(1),
+-.BR swift-ring-builder(1)
++.BR swift-object-info (1),
++.BR swift-ring-builder (1)
+diff --git a/doc/manpages/swift-init.1 b/doc/manpages/swift-init.1
+--- a/doc/manpages/swift-init.1
++++ b/doc/manpages/swift-init.1
+@@ -15,22 +15,54 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-init 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-init 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-init
+-\- Openstack-swift swift-init tool
++\- Openstack Swift swift-init tool
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-init
+- <server> [<server> ...] <command> [options]
++.B /usr/lib/swift/swift-init
++<server> [<server> ...] <command> [options]
+
+ .SH DESCRIPTION
+ .PP
++The suite of servers implementing OpenStack Swift should be managed using
++the Solaris Service Management Facility, \fBsmf\fR(5). There are sixteen
++services:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-account-auditor
++svc:/application/openstack/swift/swift-account-reaper
++svc:/application/openstack/swift/swift-account-replicator
++svc:/application/openstack/swift/swift-account-server
++svc:/application/openstack/swift/swift-container-auditor
++svc:/application/openstack/swift/swift-container-replicator
++svc:/application/openstack/swift/swift-container-server
++svc:/application/openstack/swift/swift-container-sync
++svc:/application/openstack/swift/swift-container-updater
++svc:/application/openstack/swift/swift-object-auditor
++svc:/application/openstack/swift/swift-object-expirer
++svc:/application/openstack/swift/swift-object-replicator
++svc:/application/openstack/swift/swift-object-server
++svc:/application/openstack/swift/swift-object-updater
++svc:/application/openstack/swift/swift-proxy-server
++svc:/application/openstack/swift/swift-replicator-rsync
++.fi
++.in -2
++.LP
++Each service is described more completely in its corresponding manual page.
++Note that there are no dependencies between the services, although most of
++them should be started in groups, even if the entire suite isn't necessary.
++.LP
++Although the \fBswift-init\fR tool can be used to manage the services,
++doing so is not supported on Solaris.
++.LP
+ The swift-init tool can be used to initialize all swift daemons available as part of
+-openstack-swift. Instead of calling individual init scripts for each
++OpenStack Swift. Instead of calling individual init scripts for each
+ swift daemon, one can just use swift-init. With swift-init you can initialize
+ just one swift service, such as the "proxy", or a combination of them. The tool also
+ allows one to use the keywords such as "all", "main" and "rest" for the <server> argument.
+@@ -116,8 +148,26 @@ allows one to use the keywords such as "
+
+ .SH DOCUMENTATION
+ .LP
+-More documentation about Openstack-Swift can be found at
++More documentation about OpenStack Swift can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+
++.SH SEE ALSO
++.BR swift-account-auditor (1),
++.BR swift-account-reaper (1),
++.BR swift-account-replicator (1),
++.BR swift-account-server (1),
++.BR swift-container-auditor (1),
++.BR swift-container-replicator (1),
++.BR swift-container-server (1),
++.BR swift-container-sync (1),
++.BR swift-container-updater
++.BR swift-object-auditor (1),
++.BR swift-object-expirer (1),
++.BR swift-object-replicator (1),
++.BR swift-object-server (1),
++.BR swift-object-updater (1),
++.BR swift-proxy-server (1),
++.BR swift-replicator-rsync (1),
++.BR smf (5)
+diff --git a/doc/manpages/swift-object-auditor.1 b/doc/manpages/swift-object-auditor.1
+--- a/doc/manpages/swift-object-auditor.1
++++ b/doc/manpages/swift-object-auditor.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-object-auditor 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-object-auditor 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-object-auditor
+-\- Openstack-swift object auditor
++\- OpenStack Swift object auditor
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-object-auditor
++.B /usr/lib/swift/swift-object-auditor
+ [CONFIG] [-h|--help] [-v|--verbose] [-o|--once] [-z|--zero_byte_fps]
+
+ .SH DESCRIPTION
+@@ -56,15 +56,26 @@ The options are as follows:
+ .RE
+ .PD
+ .RE
+-
+-
++
++.LP
++The object auditor should be enabled and disabled using the Solaris Service
++Management Facility, \fBsmf\fR(5). The service FMRI for the object auditor
++is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-object-auditor
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-object-auditor
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+ .SH "SEE ALSO"
+-.BR object-server.conf(5)
++.BR object-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-object-expirer.1 b/doc/manpages/swift-object-expirer.1
+--- a/doc/manpages/swift-object-expirer.1
++++ b/doc/manpages/swift-object-expirer.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-object-expirer 1 "3/15/2012" "Linux" "OpenStack Swift"
++.TH swift-object-expirer 1 "3/15/2012" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-object-expirer
+-\- Openstack-swift object expirer
++\- OpenStack Swift object expirer
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-object-expirer
++.B /usr/lib/swift/swift-object-expirer
+ [CONFIG] [-h|--help] [-v|--verbose] [-o|--once]
+
+ .SH DESCRIPTION
+@@ -57,18 +57,28 @@ The options are as follows:
+ .RE
+ .PD
+ .RE
+-
+-
++
++.LP
++The object expirer should be enabled and disabled using the Solaris Service
++Management Facility, \fBsmf\fR(5). The service FMRI for the object expirer
++is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-object-expirer
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-object-expirer
+ can be foud at
+ .BI http://swift.openstack.org/overview_expiring_objects.html
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+ .SH "SEE ALSO"
+-.BR object-expirer.conf(5)
+-
++.BR object-expirer.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-object-info.1 b/doc/manpages/swift-object-info.1
+--- a/doc/manpages/swift-object-info.1
++++ b/doc/manpages/swift-object-info.1
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-object-info 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-object-info 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-object-info
+-\- Openstack-swift object-info tool
++\- OpenStack Swift object-info tool
+
+ .SH SYNOPSIS
+ .LP
+@@ -48,8 +48,8 @@ It will then return several information
+
+ .SH DOCUMENTATION
+ .LP
+-More documentation about Openstack-Swift can be found at
++More documentation about OpenStack Swift can be found at
+ .BI http://swift.openstack.org/index.html
+
+ .SH "SEE ALSO"
+-.BR swift-get-nodes(1),
++.BR swift-get-nodes (1)
+diff --git a/doc/manpages/swift-object-replicator.1 b/doc/manpages/swift-object-replicator.1
+--- a/doc/manpages/swift-object-replicator.1
++++ b/doc/manpages/swift-object-replicator.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-object-replicator 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-object-replicator 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-object-replicator
+-\- Openstack-swift object replicator
++\- OpenStack Swift object replicator
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-object-replicator
++.B /usr/lib/swift/swift-object-replicator
+ [CONFIG] [-h|--help] [-v|--verbose] [-o|--once]
+
+ .SH DESCRIPTION
+@@ -57,15 +57,26 @@ The options are as follows:
+ .RE
+ .PD
+ .RE
+-
+-
++
++.LP
++The object replicator should be enabled and disabled using the Solaris
++Service Management Facility, \fBsmf\fR(5). The service FMRI for the object
++replicator is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-object-replicator
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-object-replicator
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+ .SH "SEE ALSO"
+-.BR object-server.conf(5)
++.BR object-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-object-server.1 b/doc/manpages/swift-object-server.1
+--- a/doc/manpages/swift-object-server.1
++++ b/doc/manpages/swift-object-server.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-object-server 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-object-server 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-object-server
+-\- Openstack-swift object server.
++\- OpenStack Swift object server.
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-object-server
++.B /usr/lib/swift/swift-object-server
+ [CONFIG] [-h|--help] [-v|--verbose]
+
+ .SH DESCRIPTION
+@@ -40,15 +40,27 @@ served. A deletion is also treated as a
+ ".ts", which stands for tombstone). This ensures that deleted files are replicated
+ correctly and older versions don't magically reappear due to failure scenarios.
+
++.LP
++The object server should be enabled and disabled using the Solaris Service
++Management Facility, \fBsmf\fR(5). The service FMRI for the object server
++is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-object-server
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-object-server
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+ and
+ .BI http://docs.openstack.org
+
+
+ .SH "SEE ALSO"
+-.BR object-server.conf(5)
++.BR object-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-object-updater.1 b/doc/manpages/swift-object-updater.1
+--- a/doc/manpages/swift-object-updater.1
++++ b/doc/manpages/swift-object-updater.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-object-updater 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-object-updater 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-object-updater
+-\- Openstack-swift object updater
++\- OpenStack Swift object updater
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-object-updater
++.B /usr/lib/swift/swift-object-updater
+ [CONFIG] [-h|--help] [-v|--verbose] [-o|--once]
+
+ .SH DESCRIPTION
+@@ -64,15 +64,26 @@ The options are as follows:
+ .RE
+ .PD
+ .RE
+-
+-
++
++.LP
++The object updater should be enabled and disabled using the Solaris Service
++Management Facility, \fBsmf\fR(5). The service FMRI for the object updater
++is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-object-updater
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-object-updater
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+ .SH "SEE ALSO"
+-.BR object-server.conf(5)
++.BR object-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-orphans.1 b/doc/manpages/swift-orphans.1
+--- a/doc/manpages/swift-orphans.1
++++ b/doc/manpages/swift-orphans.1
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-orphans 1 "3/15/2012" "Linux" "OpenStack Swift"
++.TH swift-orphans 1 "3/15/2012" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-orphans
+-\- Openstack-swift orphans tool
++\- OpenStack Swift orphans tool
+
+ .SH SYNOPSIS
+ .LP
+@@ -65,6 +65,6 @@ The options are as follows:
+
+ .SH DOCUMENTATION
+ .LP
+-More documentation about Openstack-Swift can be found at
++More documentation about OpenStack Swift can be found at
+ .BI http://swift.openstack.org/index.html
+
+diff --git a/doc/manpages/swift-proxy-server.1 b/doc/manpages/swift-proxy-server.1
+--- a/doc/manpages/swift-proxy-server.1
++++ b/doc/manpages/swift-proxy-server.1
+@@ -15,16 +15,16 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-proxy-server 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-proxy-server 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-proxy-server
+-\- Openstack-swift proxy server.
++\- OpenStack Swift proxy server.
+
+ .SH SYNOPSIS
+ .LP
+-.B swift-proxy-server
++.B /usr/lib/swift/swift-proxy-server
+ [CONFIG] [-h|--help] [-v|--verbose]
+
+ .SH DESCRIPTION
+@@ -38,13 +38,25 @@ and route there instead. When objects ar
+ streamed directly through the proxy server to or from the user the proxy server does
+ not spool them.
+
++.LP
++The proxy server should be enabled and disabled using the Solaris Service
++Management Facility, \fBsmf\fR(5). The service FMRI for the proxy server
++is:
++.sp
++.in +2
++.nf
++svc:/application/openstack/swift/swift-proxy-server
++.fi
++.in -2
++
+ .SH DOCUMENTATION
+ .LP
+ More in depth documentation in regards to
+ .BI swift-proxy-server
+-and also about Openstack-Swift as a whole can be found at
++and also about OpenStack Swift as a whole can be found at
+ .BI http://swift.openstack.org/index.html
+
+
+ .SH "SEE ALSO"
+-.BR proxy-server.conf(5)
++.BR proxy-server.conf (4),
++.BR smf (5)
+diff --git a/doc/manpages/swift-recon.1 b/doc/manpages/swift-recon.1
+--- a/doc/manpages/swift-recon.1
++++ b/doc/manpages/swift-recon.1
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-recon 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-recon 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-recon
+-\- Openstack-swift recon middleware cli tool
++\- OpenStack Swift recon middleware cli tool
+
+ .SH SYNOPSIS
+ .LP
+@@ -104,7 +104,7 @@ cronjob to run the swift-recon-cron scri
+
+ .SH DOCUMENTATION
+ .LP
+-More documentation about Openstack-Swift can be found at
++More documentation about OpenStack Swift can be found at
+ .BI http://swift.openstack.org/index.html
+ Also more specific documentation about swift-recon can be found at
+ .BI http://swift.openstack.org/admin_guide.html#cluster-telemetry-and-monitoring
+@@ -112,6 +112,6 @@ Also more specific documentation about s
+
+
+ .SH "SEE ALSO"
+-.BR object-server.conf(5),
++.BR object-server.conf (4)
+
+
+diff --git a/doc/manpages/swift-ring-builder.1 b/doc/manpages/swift-ring-builder.1
+--- a/doc/manpages/swift-ring-builder.1
++++ b/doc/manpages/swift-ring-builder.1
+@@ -15,12 +15,12 @@
+ .\" See the License for the specific language governing permissions and
+ .\" limitations under the License.
+ .\"
+-.TH swift-ring-builder 1 "8/26/2011" "Linux" "OpenStack Swift"
++.TH swift-ring-builder 1 "8/26/2011" "OpenStack" "OpenStack Swift"
+
+ .SH NAME
+ .LP
+ .B swift-ring-builder
+-\- Openstack-swift ring builder
++\- OpenStack Swift ring builder
+
+ .SH SYNOPSIS
+ .LP
+@@ -208,7 +208,7 @@ calls when no rebalance is needed but yo
+
+ .SH DOCUMENTATION
+ .LP
+-More in depth documentation about the swift ring and also Openstack-Swift as a
++More in depth documentation about the swift ring and also OpenStack Swift as a
+ whole can be found at
+ .BI http://swift.openstack.org/overview_ring.html,
+ .BI http://swift.openstack.org/admin_guide.html#managing-the-rings
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/orphans.patch Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,29 @@
+Convert the calls to ps in swift-orphans to calls that will work on
+Solaris.
+
+diff --git a/bin/swift-orphans b/bin/swift-orphans
+--- a/bin/swift-orphans
++++ b/bin/swift-orphans
+@@ -42,12 +42,12 @@ Example (sends SIGTERM to all orphaned S
+ if name.endswith('.pid'):
+ pids.append(open(os.path.join(root, name)).read().strip())
+ pids.extend(subprocess.Popen(
+- ['ps', '--ppid', pids[-1], '-o', 'pid', '--no-headers'],
++ ['pgrep', '-P', pids[-1]],
+ stdout=subprocess.PIPE).communicate()[0].split())
+
+ listing = []
+ for line in subprocess.Popen(
+- ['ps', '-eo', 'etime,pid,args', '--no-headers'],
++ ['ps', '-eo', 'etime=', '-o' 'pid=', '-o' 'args='],
+ stdout=subprocess.PIPE).communicate()[0].split('\n'):
+ if not line:
+ continue
+@@ -58,6 +58,7 @@ Example (sends SIGTERM to all orphaned S
+ sys.exit('Could not process ps line %r' % line)
+ if pid in pids:
+ continue
++ # XXX Do we get enough of the arguments to get "once"?
+ if (not args.startswith('/usr/bin/python /usr/bin/swift-') and
+ not args.startswith('/usr/bin/python /usr/local/bin/swift-')) or \
+ 'swift-orphans' in args or \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/recon.patch Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,399 @@
+Move recon's locks to /var/run/swift and caches to /var/lib/swift/recon-cache.
+Change some of the ways we gather information, since those are normally
+Linux-specific. Make the tests acknowledge these changes.
+
+diff --git a/bin/swift-recon-cron b/bin/swift-recon-cron
+--- a/bin/swift-recon-cron
++++ b/bin/swift-recon-cron
+@@ -34,8 +34,8 @@ def main():
+ sys.exit(1)
+ conf = dict(c.items('filter:recon'))
+ device_dir = conf.get('devices', '/srv/node')
+- recon_cache_path = conf.get('recon_cache_path', '/var/cache/swift')
+- recon_lock_path = conf.get('recon_lock_path', '/var/lock')
++ recon_cache_path = conf.get('recon_cache_path', '/var/lib/swift/recon-cache')
++ recon_lock_path = conf.get('recon_lock_path', '/var/run/swift')
+ cache_file = os.path.join(recon_cache_path, "object.recon")
+ lock_dir = os.path.join(recon_lock_path, "swift-recon-object-cron")
+ conf['log_name'] = conf.get('log_name', 'recon-cron')
+diff --git a/etc/account-server.conf-sample b/etc/account-server.conf-sample
+--- a/etc/account-server.conf-sample
++++ b/etc/account-server.conf-sample
+@@ -56,7 +56,7 @@ use = egg:swift#healthcheck
+
+ [filter:recon]
+ use = egg:swift#recon
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+
+ [account-replicator]
+ # You can override the default log routing for this app here (don't use set!):
+@@ -80,7 +80,7 @@ use = egg:swift#recon
+ # reclaim_age = 604800
+ # Time in seconds to wait between replication passes
+ # run_pause = 30
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+
+ [account-auditor]
+ # You can override the default log routing for this app here (don't use set!):
+@@ -93,7 +93,7 @@ use = egg:swift#recon
+ # log_facility = LOG_LOCAL0
+ # log_level = INFO
+ # accounts_per_second = 200
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+
+ [account-reaper]
+ # You can override the default log routing for this app here (don't use set!):
+diff --git a/etc/container-server.conf-sample b/etc/container-server.conf-sample
+--- a/etc/container-server.conf-sample
++++ b/etc/container-server.conf-sample
+@@ -62,7 +62,7 @@ use = egg:swift#healthcheck
+
+ [filter:recon]
+ use = egg:swift#recon
+-#recon_cache_path = /var/cache/swift
++#recon_cache_path = /var/lib/swift/recon-cache
+
+ [container-replicator]
+ # You can override the default log routing for this app here (don't use set!):
+@@ -81,7 +81,7 @@ use = egg:swift#recon
+ # reclaim_age = 604800
+ # Time in seconds to wait between replication passes
+ # run_pause = 30
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+
+ [container-updater]
+ # You can override the default log routing for this app here (don't use set!):
+@@ -97,7 +97,7 @@ use = egg:swift#recon
+ # slowdown = 0.01
+ # Seconds to suppress updating an account that has generated an error
+ # account_suppression_time = 60
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+
+ [container-auditor]
+ # You can override the default log routing for this app here (don't use set!):
+@@ -108,7 +108,7 @@ use = egg:swift#recon
+ # Will audit each container at most once per interval
+ # interval = 1800
+ # containers_per_second = 200
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+
+ [container-sync]
+ # You can override the default log routing for this app here (don't use set!):
+diff --git a/etc/object-server.conf-sample b/etc/object-server.conf-sample
+--- a/etc/object-server.conf-sample
++++ b/etc/object-server.conf-sample
+@@ -71,8 +71,8 @@ use = egg:swift#healthcheck
+
+ [filter:recon]
+ use = egg:swift#recon
+-#recon_cache_path = /var/cache/swift
+-#recon_lock_path = /var/lock
++#recon_cache_path = /var/lib/swift/recon-cache
++#recon_lock_path = /var/run/swift
+
+ [object-replicator]
+ # You can override the default log routing for this app here (don't use set!):
+@@ -96,7 +96,7 @@ use = egg:swift#recon
+ # The replicator also performs reclamation
+ # reclaim_age = 604800
+ # ring_check_interval = 15
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+
+ [object-updater]
+ # You can override the default log routing for this app here (don't use set!):
+@@ -110,7 +110,7 @@ use = egg:swift#recon
+ # conn_timeout = 0.5
+ # slowdown will sleep that amount between objects
+ # slowdown = 0.01
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+
+ [object-auditor]
+ # You can override the default log routing for this app here (don't use set!):
+@@ -122,4 +122,4 @@ use = egg:swift#recon
+ # bytes_per_second = 10000000
+ # log_time = 3600
+ # zero_byte_files_per_second = 50
+-# recon_cache_path = /var/cache/swift
++# recon_cache_path = /var/lib/swift/recon-cache
+diff --git a/swift/account/auditor.py b/swift/account/auditor.py
+--- a/swift/account/auditor.py
++++ b/swift/account/auditor.py
+@@ -44,7 +44,7 @@ class AccountAuditor(Daemon):
+ swift.common.db.DB_PREALLOCATION = \
+ config_true_value(conf.get('db_preallocation', 'f'))
+ self.recon_cache_path = conf.get('recon_cache_path',
+- '/var/cache/swift')
++ '/var/lib/swift/recon-cache')
+ self.rcache = os.path.join(self.recon_cache_path, "account.recon")
+
+ def _one_audit_pass(self, reported):
+diff --git a/swift/common/db_replicator.py b/swift/common/db_replicator.py
+--- a/swift/common/db_replicator.py
++++ b/swift/common/db_replicator.py
+@@ -166,7 +166,7 @@ class Replicator(Daemon):
+ config_true_value(conf.get('db_preallocation', 'f'))
+ self._zero_stats()
+ self.recon_cache_path = conf.get('recon_cache_path',
+- '/var/cache/swift')
++ '/var/lib/swift/recon-cache')
+ self.recon_replicator = '%s.recon' % self.server_type
+ self.rcache = os.path.join(self.recon_cache_path,
+ self.recon_replicator)
+diff --git a/swift/common/middleware/recon.py b/swift/common/middleware/recon.py
+--- a/swift/common/middleware/recon.py
++++ b/swift/common/middleware/recon.py
+@@ -15,6 +15,7 @@
+
+ import errno
+ import os
++import sys
+
+ from swift.common.swob import Request, Response
+ from swift.common.utils import get_logger, config_true_value, json
+@@ -43,7 +44,7 @@ class ReconMiddleware(object):
+ swift_dir = conf.get('swift_dir', '/etc/swift')
+ self.logger = get_logger(conf, log_route='recon')
+ self.recon_cache_path = conf.get('recon_cache_path',
+- '/var/cache/swift')
++ '/var/lib/swift/recon-cache')
+ self.object_recon_cache = os.path.join(self.recon_cache_path,
+ 'object.recon')
+ self.container_recon_cache = os.path.join(self.recon_cache_path,
+@@ -80,28 +81,43 @@ class ReconMiddleware(object):
+ def get_mounted(self, openr=open):
+ """get ALL mounted fs from /proc/mounts"""
+ mounts = []
+- with openr('/proc/mounts', 'r') as procmounts:
++ if sys.platform == 'sunos5':
++ mountsfile = '/etc/mnttab'
++ else:
++ mountsfile = '/proc/mounts'
++ with openr(mountsfile, 'r') as procmounts:
+ for line in procmounts:
+ mount = {}
+- mount['device'], mount['path'], opt1, opt2, opt3, \
+- opt4 = line.rstrip().split()
++ mount['device'], mount['path'] = line.rstrip().split()[:2]
+ mounts.append(mount)
+ return mounts
+
+ def get_load(self, openr=open):
+ """get info from /proc/loadavg"""
+ loadavg = {}
+- with openr('/proc/loadavg', 'r') as f:
+- onemin, fivemin, ftmin, tasks, procs = f.read().rstrip().split()
++ if sys.platform == 'sunos5':
++ onemin, fivemin, ftmin = os.getloadavg()
++ else:
++ with openr('/proc/loadavg', 'r') as f:
++ onemin, fivemin, ftmin, tasks, procs = f.read().rstrip().split()
+ loadavg['1m'] = float(onemin)
+ loadavg['5m'] = float(fivemin)
+ loadavg['15m'] = float(ftmin)
+- loadavg['tasks'] = tasks
+- loadavg['processes'] = int(procs)
++ if sys.platform == 'sunos5':
++ # The next two fields don't seem to be used.
++ # executing threads / total threads
++ loadavg['tasks'] = "0/0"
++ # pid of newest process
++ loadavg['processes'] = 0
++ else:
++ loadavg['tasks'] = tasks
++ loadavg['processes'] = int(procs)
+ return loadavg
+
+ def get_mem(self, openr=open):
+ """get info from /proc/meminfo"""
++ if sys.platform == 'sunos5':
++ return {}
+ meminfo = {}
+ with openr('/proc/meminfo', 'r') as memlines:
+ for i in memlines:
+diff --git a/swift/container/auditor.py b/swift/container/auditor.py
+--- a/swift/container/auditor.py
++++ b/swift/container/auditor.py
+@@ -44,7 +44,7 @@ class ContainerAuditor(Daemon):
+ swift.common.db.DB_PREALLOCATION = \
+ config_true_value(conf.get('db_preallocation', 'f'))
+ self.recon_cache_path = conf.get('recon_cache_path',
+- '/var/cache/swift')
++ '/var/lib/swift/recon-cache')
+ self.rcache = os.path.join(self.recon_cache_path, "container.recon")
+
+ def _one_audit_pass(self, reported):
+diff --git a/swift/container/updater.py b/swift/container/updater.py
+--- a/swift/container/updater.py
++++ b/swift/container/updater.py
+@@ -59,7 +59,7 @@ class ContainerUpdater(Daemon):
+ swift.common.db.DB_PREALLOCATION = \
+ config_true_value(conf.get('db_preallocation', 'f'))
+ self.recon_cache_path = conf.get('recon_cache_path',
+- '/var/cache/swift')
++ '/var/lib/swift/recon-cache')
+ self.rcache = os.path.join(self.recon_cache_path, "container.recon")
+
+ def get_account_ring(self):
+diff --git a/swift/obj/auditor.py b/swift/obj/auditor.py
+--- a/swift/obj/auditor.py
++++ b/swift/obj/auditor.py
+@@ -54,7 +54,7 @@ class AuditorWorker(object):
+ self.quarantines = 0
+ self.errors = 0
+ self.recon_cache_path = conf.get('recon_cache_path',
+- '/var/cache/swift')
++ '/var/lib/swift/recon-cache')
+ self.rcache = os.path.join(self.recon_cache_path, "object.recon")
+
+ def audit_all_objects(self, mode='once'):
+diff --git a/swift/obj/expirer.py b/swift/obj/expirer.py
+--- a/swift/obj/expirer.py
++++ b/swift/obj/expirer.py
+@@ -50,7 +50,7 @@ class ObjectExpirer(Daemon):
+ self.report_first_time = self.report_last_time = time()
+ self.report_objects = 0
+ self.recon_cache_path = conf.get('recon_cache_path',
+- '/var/cache/swift')
++ '/var/lib/swift/recon-cache')
+ self.rcache = join(self.recon_cache_path, 'object.recon')
+
+ def report(self, final=False):
+diff --git a/swift/obj/replicator.py b/swift/obj/replicator.py
+--- a/swift/obj/replicator.py
++++ b/swift/obj/replicator.py
+@@ -265,7 +265,7 @@ class ObjectReplicator(Daemon):
+ self.http_timeout = int(conf.get('http_timeout', 60))
+ self.lockup_timeout = int(conf.get('lockup_timeout', 1800))
+ self.recon_cache_path = conf.get('recon_cache_path',
+- '/var/cache/swift')
++ '/var/lib/swift/recon-cache')
+ self.rcache = os.path.join(self.recon_cache_path, "object.recon")
+
+ def _rsync(self, args):
+diff --git a/swift/obj/updater.py b/swift/obj/updater.py
+--- a/swift/obj/updater.py
++++ b/swift/obj/updater.py
+@@ -51,7 +51,7 @@ class ObjectUpdater(Daemon):
+ self.successes = 0
+ self.failures = 0
+ self.recon_cache_path = conf.get('recon_cache_path',
+- '/var/cache/swift')
++ '/var/lib/swift/recon-cache')
+ self.rcache = os.path.join(self.recon_cache_path, 'object.recon')
+
+ def get_container_ring(self):
+diff --git a/test/unit/common/middleware/test_recon.py b/test/unit/common/middleware/test_recon.py
+--- a/test/unit/common/middleware/test_recon.py
++++ b/test/unit/common/middleware/test_recon.py
+@@ -18,6 +18,8 @@ from unittest import TestCase
+ from contextlib import contextmanager
+ from posix import stat_result, statvfs_result
+ import os
++import sys
++from nose import SkipTest
+
+ import swift.common.constraints
+ from swift.common.swob import Request
+@@ -272,10 +274,12 @@ class TestReconSuccess(TestCase):
+ {'device': 'none', 'path': '/proc/fs/vmblock/mountPoint'}]
+ oart = OpenAndReadTester(mounts_content)
+ rv = self.app.get_mounted(openr=oart.open)
+- self.assertEquals(oart.open_calls, [(('/proc/mounts', 'r'), {})])
++ self.assertEquals(oart.open_calls, [(('/etc/mnttab', 'r'), {})])
+ self.assertEquals(rv, mounted_resp)
+
+ def test_get_load(self):
++ if sys.platform == 'sunos5':
++ raise SkipTest
+ oart = OpenAndReadTester(['0.03 0.03 0.00 1/220 16306'])
+ rv = self.app.get_load(openr=oart.open)
+ self.assertEquals(oart.read_calls, [((), {})])
+@@ -285,6 +289,8 @@ class TestReconSuccess(TestCase):
+ '1m': 0.029999999999999999})
+
+ def test_get_mem(self):
++ if sys.platform == 'sunos5':
++ raise SkipTest
+ meminfo_content = ['MemTotal: 505840 kB',
+ 'MemFree: 26588 kB',
+ 'Buffers: 44948 kB',
+@@ -395,7 +401,7 @@ class TestReconSuccess(TestCase):
+ self.assertEquals(self.fakecache.fakeout_calls,
+ [((['replication_time', 'replication_stats',
+ 'replication_last'],
+- '/var/cache/swift/account.recon'), {})])
++ '/var/lib/swift/recon-cache/account.recon'), {})])
+ self.assertEquals(rv, {"replication_stats": {
+ "attempted": 1, "diff": 0,
+ "diff_capped": 0, "empty": 0,
+@@ -424,7 +430,7 @@ class TestReconSuccess(TestCase):
+ self.assertEquals(self.fakecache.fakeout_calls,
+ [((['replication_time', 'replication_stats',
+ 'replication_last'],
+- '/var/cache/swift/container.recon'), {})])
++ '/var/lib/swift/recon-cache/container.recon'), {})])
+ self.assertEquals(rv, {"replication_time": 200.0,
+ "replication_stats": {
+ "attempted": 179, "diff": 0,
+@@ -445,7 +451,7 @@ class TestReconSuccess(TestCase):
+ self.assertEquals(self.fakecache.fakeout_calls,
+ [((['object_replication_time',
+ 'object_replication_last'],
+- '/var/cache/swift/object.recon'), {})])
++ '/var/lib/swift/recon-cache/object.recon'), {})])
+ self.assertEquals(rv, {'object_replication_time': 200.0,
+ 'object_replication_last': 1357962809.15})
+
+@@ -456,7 +462,7 @@ class TestReconSuccess(TestCase):
+ rv = self.app.get_updater_info('container')
+ self.assertEquals(self.fakecache.fakeout_calls,
+ [((['container_updater_sweep'],
+- '/var/cache/swift/container.recon'), {})])
++ '/var/lib/swift/recon-cache/container.recon'), {})])
+ self.assertEquals(rv, {"container_updater_sweep": 18.476239919662476})
+
+ def test_get_updater_info_object(self):
+@@ -466,7 +472,7 @@ class TestReconSuccess(TestCase):
+ rv = self.app.get_updater_info('object')
+ self.assertEquals(self.fakecache.fakeout_calls,
+ [((['object_updater_sweep'],
+- '/var/cache/swift/object.recon'), {})])
++ '/var/lib/swift/recon-cache/object.recon'), {})])
+ self.assertEquals(rv, {"object_updater_sweep": 0.79848217964172363})
+
+ def test_get_auditor_info_account(self):
+@@ -482,7 +488,7 @@ class TestReconSuccess(TestCase):
+ 'account_auditor_pass_completed',
+ 'account_audits_since',
+ 'account_audits_failed'],
+- '/var/cache/swift/account.recon'), {})])
++ '/var/lib/swift/recon-cache/account.recon'), {})])
+ self.assertEquals(rv, {"account_auditor_pass_completed": 0.24,
+ "account_audits_failed": 0,
+ "account_audits_passed": 6,
+@@ -501,7 +507,7 @@ class TestReconSuccess(TestCase):
+ 'container_auditor_pass_completed',
+ 'container_audits_since',
+ 'container_audits_failed'],
+- '/var/cache/swift/container.recon'), {})])
++ '/var/lib/swift/recon-cache/container.recon'), {})])
+ self.assertEquals(rv, {"container_auditor_pass_completed": 0.24,
+ "container_audits_failed": 0,
+ "container_audits_passed": 6,
+@@ -528,7 +534,7 @@ class TestReconSuccess(TestCase):
+ self.assertEquals(self.fakecache.fakeout_calls,
+ [((['object_auditor_stats_ALL',
+ 'object_auditor_stats_ZBF'],
+- '/var/cache/swift/object.recon'), {})])
++ '/var/lib/swift/recon-cache/object.recon'), {})])
+ self.assertEquals(rv, {"object_auditor_stats_ALL": {
+ "audit_time": 115.14418768882751,
+ "bytes_processed": 234660,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/patches/test.patch Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,150 @@
+Various testing fixes:
+
+ - Tests involving large (5GB+) bodies are mocked, but on 32-bit python,
+ len() is limited to returning a ssize_t, which can represent 2GB.
+
+ - Solaris doesn't yet support syslog logging to /dev/log.
+
+ - Solaris doesn't have TCP_KEEPIDLE.
+
+ - Three tests make connections to 127.0.0.[234], which take minutes to
+ timeout (and one test fails). Mock the connections to make the return
+ success immediately.
+
+The last has already been fixed upstream, as of 1.9.1. The middle two are
+Solaris-only, and not suitable for upstream. The first, while potentially
+useful elsewhere, is really only an issue on Solaris because Linux runs
+almost exclusively 64-bit, which makes this a non-issue.
+
+diff --git a/test/unit/__init__.py b/test/unit/__init__.py
+--- a/test/unit/__init__.py
++++ b/test/unit/__init__.py
+@@ -315,7 +315,7 @@ def fake_http_connect(*code_iter, **kwar
+ else:
+ etag = '"68b329da9893e34099c7d8ad5cb9c940"'
+
+- headers = {'content-length': len(self.body),
++ headers = {'content-length': self.body.__len__(),
+ 'content-type': 'x-application/test',
+ 'x-timestamp': self.timestamp,
+ 'last-modified': self.timestamp,
+diff --git a/test/unit/proxy/test_server.py b/test/unit/proxy/test_server.py
+--- a/test/unit/proxy/test_server.py
++++ b/test/unit/proxy/test_server.py
+@@ -2310,6 +2310,9 @@ class TestObjectController(unittest.Test
+
+ class LargeResponseBody(object):
+
++ def __nonzero__(self):
++ return True
++
+ def __len__(self):
+ return MAX_FILE_SIZE + 1
+
+@@ -2439,6 +2442,9 @@ class TestObjectController(unittest.Test
+
+ class LargeResponseBody(object):
+
++ def __nonzero__(self):
++ return True
++
+ def __len__(self):
+ return MAX_FILE_SIZE + 1
+
+diff --git a/test/unit/common/test_utils.py b/test/unit/common/test_utils.py
+--- a/test/unit/common/test_utils.py
++++ b/test/unit/common/test_utils.py
+@@ -425,9 +425,15 @@ class TestUtils(unittest.TestCase):
+ logger = utils.get_logger({
+ 'log_facility': 'LOG_LOCAL3',
+ }, 'server', log_route='server')
++ if sys.platform == 'sunos5':
++ extra = [
++ ((), {'facility': orig_sysloghandler.LOG_LOCAL3})
++ ]
++ else:
++ extra = []
+ self.assertEquals([
+ ((), {'address': '/dev/log',
+- 'facility': orig_sysloghandler.LOG_LOCAL3})],
++ 'facility': orig_sysloghandler.LOG_LOCAL3})] + extra,
+ syslog_handler_args)
+
+ syslog_handler_args = []
+diff --git a/test/unit/common/test_wsgi.py b/test/unit/common/test_wsgi.py
+--- a/test/unit/common/test_wsgi.py
++++ b/test/unit/common/test_wsgi.py
+@@ -116,11 +116,12 @@ class TestWSGI(unittest.TestCase):
+ socket.SOL_SOCKET: {
+ socket.SO_REUSEADDR: 1,
+ socket.SO_KEEPALIVE: 1,
+- },
+- socket.IPPROTO_TCP: {
++ }
++ }
++ if hasattr(socket, 'TCP_KEEPIDLE'):
++ expected_socket_opts[socket.IPPROTO_TCP] = {
+ socket.TCP_KEEPIDLE: 600,
+- },
+- }
++ }
+ self.assertEquals(sock.opts, expected_socket_opts)
+ # test ssl
+ sock = wsgi.get_socket(ssl_conf)
+diff --git a/test/unit/obj/test_replicator.py b/test/unit/obj/test_replicator.py
+--- a/test/unit/obj/test_replicator.py
++++ b/test/unit/obj/test_replicator.py
+@@ -17,6 +17,7 @@ from __future__ import with_statement
+
+ import unittest
+ import os
++from mock import patch as mockpatch
+ from gzip import GzipFile
+ from shutil import rmtree
+ import cPickle as pickle
+@@ -482,14 +483,16 @@ class TestObjectReplicator(unittest.Test
+ self.replicator.logger.log_dict['warning'])
+
+ def test_delete_partition(self):
+- df = DiskFile(self.devices, 'sda', '0', 'a', 'c', 'o', FakeLogger())
+- mkdirs(df.datadir)
+- ohash = hash_path('a', 'c', 'o')
+- data_dir = ohash[-3:]
+- part_path = os.path.join(self.objects, '1')
+- self.assertTrue(os.access(part_path, os.F_OK))
+- self.replicator.replicate()
+- self.assertFalse(os.access(part_path, os.F_OK))
++ with mockpatch('swift.obj.replicator.http_connect',
++ mock_http_connect(200)):
++ df = DiskFile(self.devices, 'sda', '0', 'a', 'c', 'o', FakeLogger())
++ mkdirs(df.datadir)
++ ohash = hash_path('a', 'c', 'o')
++ data_dir = ohash[-3:]
++ part_path = os.path.join(self.objects, '1')
++ self.assertTrue(os.access(part_path, os.F_OK))
++ self.replicator.replicate()
++ self.assertFalse(os.access(part_path, os.F_OK))
+
+ def test_delete_partition_override_params(self):
+ df = DiskFile(self.devices, 'sda', '0', 'a', 'c', 'o', FakeLogger())
+@@ -613,12 +616,16 @@ class TestObjectReplicator(unittest.Test
+ tpool.execute = was_execute
+
+ def test_run(self):
+- with _mock_process([(0, '')] * 100):
+- self.replicator.replicate()
++ with mockpatch('swift.obj.replicator.http_connect',
++ mock_http_connect(200)):
++ with _mock_process([(0, '')] * 100):
++ self.replicator.replicate()
+
+ def test_run_withlog(self):
+- with _mock_process([(0, "stuff in log")] * 100):
+- self.replicator.replicate()
++ with mockpatch('swift.obj.replicator.http_connect',
++ mock_http_connect(200)):
++ with _mock_process([(0, "stuff in log")] * 100):
++ self.replicator.replicate()
+
+ if __name__ == '__main__':
+ unittest.main()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/resolve.deps Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,8 @@
+library/python-2/eventlet-26
+library/python-2/simplejson-26
+library/python/eventlet-26
+library/python/simplejson-26
+library/python/swiftclient-26
+runtime/python-26
+service/memcached
+system/core-os
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/swift/swift.p5m Fri May 16 15:26:52 2014 -0700
@@ -0,0 +1,258 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+<transform file path=usr.*/man/.+ -> default mangler.man.stability uncommitted>
+
+set name=pkg.fmri \
+ value=pkg:/cloud/openstack/swift@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="OpenStack Swift"
+set name=pkg.description \
+ value="The OpenStack Object Store project, known as Swift, offers cloud storage software so that you can store and retrieve data in virtual containers"
+set name=pkg.human-version value="Grizzly 2013.1.4"
+set name=com.oracle.info.description \
+ value="Swift, the OpenStack object storage service"
+set name=com.oracle.info.tpno value=14503
+set name=info.classification \
+ value="org.opensolaris.category.2008:System/Administration and Configuration" \
+ value="org.opensolaris.category.2008:System/Enterprise Management" \
+ value=org.opensolaris.category.2008:System/Virtualization \
+ value="org.opensolaris.category.2008:Web Services/Application and Web Servers"
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream value="OpenStack <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2014/050
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+<transform file path=.*/(.*_attr)\.d -> set action.hash files/swift.%<1>>
+<transform file path=.*/(.*_attr)\.d -> default group sys>
+file path=etc/security/auth_attr.d/cloud:openstack:swift
+file path=etc/security/exec_attr.d/cloud:openstack:swift
+file path=etc/security/prof_attr.d/cloud:openstack:swift
+<transform file path=etc/swift/(.*) -> set action.hash etc/%<1>-sample>
+<transform file path=etc/swift/rsyncd.conf -> set action.hash files/rsyncd.conf>
+<transform dir file path=etc/swift/? -> default owner swift>
+<transform dir file path=etc/swift/? -> default group swift>
+<transform file path=etc/swift/ -> default mode 0644>
+<transform file path=etc/swift/ -> default overlay allow>
+<transform file path=etc/swift/ -> default preserve true>
+dir path=etc/swift mode=0700
+file path=etc/swift/account-server.conf
+file path=etc/swift/container-server.conf
+file path=etc/swift/dispersion.conf
+file path=etc/swift/memcache.conf
+file path=etc/swift/mime.types
+file path=etc/swift/object-expirer.conf
+file path=etc/swift/object-server.conf
+file path=etc/swift/proxy-server.conf
+file path=etc/swift/rsyncd.conf
+file path=etc/swift/swift-bench.conf
+file path=etc/swift/swift.conf
+<transform file path=lib/svc/.*/([^/]*) -> set action.hash files/%<1>>
+<transform file path=lib/svc/method/swift-proxy-server -> set action.hash files/swift-smf-method>
+file path=lib/svc/manifest/application/openstack/swift-account-auditor.xml
+file path=lib/svc/manifest/application/openstack/swift-account-reaper.xml
+file path=lib/svc/manifest/application/openstack/swift-account-replicator.xml
+file path=lib/svc/manifest/application/openstack/swift-account-server.xml
+file path=lib/svc/manifest/application/openstack/swift-container-auditor.xml
+file path=lib/svc/manifest/application/openstack/swift-container-replicator.xml
+file path=lib/svc/manifest/application/openstack/swift-container-server.xml
+file path=lib/svc/manifest/application/openstack/swift-container-sync.xml
+file path=lib/svc/manifest/application/openstack/swift-container-updater.xml
+file path=lib/svc/manifest/application/openstack/swift-object-auditor.xml
+file path=lib/svc/manifest/application/openstack/swift-object-expirer.xml
+file path=lib/svc/manifest/application/openstack/swift-object-replicator.xml
+file path=lib/svc/manifest/application/openstack/swift-object-server.xml
+file path=lib/svc/manifest/application/openstack/swift-object-updater.xml
+file path=lib/svc/manifest/application/openstack/swift-proxy-server.xml
+file path=lib/svc/manifest/application/openstack/swift-replicator-rsync.xml
+<transform hardlink path=lib/svc/method -> default target swift-proxy-server>
+hardlink path=lib/svc/method/swift-account-auditor
+hardlink path=lib/svc/method/swift-account-reaper
+hardlink path=lib/svc/method/swift-account-replicator
+hardlink path=lib/svc/method/swift-account-server
+hardlink path=lib/svc/method/swift-container-auditor
+hardlink path=lib/svc/method/swift-container-replicator
+hardlink path=lib/svc/method/swift-container-server
+hardlink path=lib/svc/method/swift-container-sync
+hardlink path=lib/svc/method/swift-container-updater
+hardlink path=lib/svc/method/swift-object-auditor
+hardlink path=lib/svc/method/swift-object-expirer
+hardlink path=lib/svc/method/swift-object-replicator
+hardlink path=lib/svc/method/swift-object-server
+hardlink path=lib/svc/method/swift-object-updater
+file path=lib/svc/method/swift-proxy-server
+file path=lib/svc/method/swift-replicator-rsync
+file path=usr/bin/swift-account-audit
+file path=usr/bin/swift-bench
+file path=usr/bin/swift-bench-client
+file path=usr/bin/swift-dispersion-populate
+file path=usr/bin/swift-dispersion-report
+file path=usr/bin/swift-form-signature
+file path=usr/bin/swift-get-nodes
+file path=usr/bin/swift-object-info
+file path=usr/bin/swift-recon
+file path=usr/bin/swift-ring-builder
+file path=usr/bin/swift-temp-url
+file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/swift-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/account/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/account/auditor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/account/reaper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/account/replicator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/account/server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/bench.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/bufferedhttp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/constraints.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/daemon.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/db.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/db_replicator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/direct_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/exceptions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/http.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/internal_client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/manager.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/memcached.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/account_quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/acl.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/bulk.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/catch_errors.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/cname_lookup.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/container_quotas.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/domain_remap.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/formpost.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/healthcheck.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/keystoneauth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/list_endpoints.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/memcache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/name_check.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/proxy_logging.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/ratelimit.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/recon.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/slo.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/staticweb.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/tempauth.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/middleware/tempurl.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/ring/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/ring/builder.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/ring/ring.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/ring/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/swob.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/common/wsgi.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/auditor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/replicator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/sync.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/container/updater.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/auditor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/expirer.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/replicator.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/server.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/obj/updater.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/account.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/container.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/controllers/obj.py
+file path=usr/lib/python$(PYVER)/vendor-packages/swift/proxy/server.py
+<transform file path=usr/lib/swift/(.*) -> set action.hash usr/bin/%<1>>
+<transform file path=usr/lib/swift/(.*) -> default mode 0555>
+file path=usr/lib/swift/swift-account-auditor
+file path=usr/lib/swift/swift-account-reaper
+file path=usr/lib/swift/swift-account-replicator
+file path=usr/lib/swift/swift-account-server
+file path=usr/lib/swift/swift-container-auditor
+file path=usr/lib/swift/swift-container-replicator
+file path=usr/lib/swift/swift-container-server
+file path=usr/lib/swift/swift-container-sync
+file path=usr/lib/swift/swift-container-updater
+file path=usr/lib/swift/swift-init
+file path=usr/lib/swift/swift-object-auditor
+file path=usr/lib/swift/swift-object-expirer
+file path=usr/lib/swift/swift-object-replicator
+file path=usr/lib/swift/swift-object-server
+file path=usr/lib/swift/swift-object-updater
+file path=usr/lib/swift/swift-proxy-server
+file path=usr/lib/swift/swift-recon-cron
+<transform file path=usr/share/man/man1/(.+) -> set action.hash doc/manpages/%<1>>
+<transform file path=usr/share/man/man4/(.+)\.4 -> set action.hash doc/manpages/%<1>.5>
+file path=usr/share/man/man1/swift-account-auditor.1
+file path=usr/share/man/man1/swift-account-reaper.1
+file path=usr/share/man/man1/swift-account-replicator.1
+file path=usr/share/man/man1/swift-account-server.1
+file path=usr/share/man/man1/swift-container-auditor.1
+file path=usr/share/man/man1/swift-container-replicator.1
+file path=usr/share/man/man1/swift-container-server.1
+file path=usr/share/man/man1/swift-container-sync.1
+file path=usr/share/man/man1/swift-container-updater.1
+file path=usr/share/man/man1/swift-dispersion-populate.1
+file path=usr/share/man/man1/swift-dispersion-report.1
+file path=usr/share/man/man1/swift-get-nodes.1
+file path=usr/share/man/man1/swift-init.1
+file path=usr/share/man/man1/swift-object-auditor.1
+file path=usr/share/man/man1/swift-object-expirer.1
+file path=usr/share/man/man1/swift-object-info.1
+file path=usr/share/man/man1/swift-object-replicator.1
+file path=usr/share/man/man1/swift-object-server.1
+file path=usr/share/man/man1/swift-object-updater.1
+file path=usr/share/man/man1/swift-proxy-server.1
+file path=usr/share/man/man1/swift-recon.1
+file path=usr/share/man/man1/swift-ring-builder.1
+file path=usr/share/man/man4/account-server.conf.4
+file path=usr/share/man/man4/container-server.conf.4
+file path=usr/share/man/man4/dispersion.conf.4
+file path=usr/share/man/man4/object-expirer.conf.4
+file path=usr/share/man/man4/object-server.conf.4
+file path=usr/share/man/man4/proxy-server.conf.4
+dir path=var/lib/swift owner=swift group=swift mode=0700
+dir path=var/lib/swift/recon-cache owner=swift group=swift
+dir path=var/log/swift owner=swift group=swift
+#
+group groupname=swift gid=86
+user username=swift ftpuser=false gcos-field="Openstack Swift" group=swift \
+ home-dir=/var/lib/swift uid=86
+#
+license LICENSE license="Apache v2.0"
+
+# force a dependency on netifaces; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python-2/netifaces-26
+
+# force a dependency on paste.deploy; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python-2/paste.deploy-26
+
+# force a dependency on xattr; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/xattr-26