# -----------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.
# -----------------------------------------------------------------------


#
# Ducc broker credentials. These credentials are applied to topics only and are 
# used to authenticate Ducc daemons with the broker. The default configuration,
# specifies empty string for username and password which is synonymous with 
# no authentication. To use authentication, specify values for both username and 
# password below.
#
# Please note that both values are in clear so make sure
# this credential file is not readable by non-ducc users. 
#
ducc.broker.admin.username=
ducc.broker.admin.password=