forked from ungleich-public/cdist
Compare commits
7 commits
c98a63451e
...
54a5cb17b7
Author | SHA1 | Date | |
---|---|---|---|
54a5cb17b7 | |||
cb0fa0f2e4 | |||
|
22039284f5 | ||
bd44c023d3 | |||
|
e0150e7796 | ||
15e1ce6450 | |||
|
08ff41efde |
11 changed files with 45 additions and 72 deletions
|
@ -57,6 +57,11 @@ __file "/etc/apt/preferences.d/$name" \
|
|||
--owner root --group root --mode 0644 \
|
||||
--state "$state" \
|
||||
--source - << EOF
|
||||
# Created by cdist ${__type##*/}
|
||||
# Do not change. Changes will be overwritten.
|
||||
#
|
||||
|
||||
# $name
|
||||
Package: $package
|
||||
Pin: $pin
|
||||
Pin-Priority: $priority
|
||||
|
|
1
cdist/conf/type/__apt_pin/parameter/default/priority
Normal file
1
cdist/conf/type/__apt_pin/parameter/default/priority
Normal file
|
@ -0,0 +1 @@
|
|||
500
|
|
@ -1,2 +1,3 @@
|
|||
state
|
||||
package
|
||||
priority
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
distribution
|
||||
priority
|
||||
|
|
|
@ -1,55 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Remove the given apt repository.
|
||||
#
|
||||
# Exit with:
|
||||
# 0: if it worked
|
||||
# 1: if not
|
||||
# 2: on other error
|
||||
|
||||
import os
|
||||
import sys
|
||||
from aptsources import distro, sourceslist
|
||||
from softwareproperties import ppa
|
||||
from softwareproperties.SoftwareProperties import SoftwareProperties
|
||||
|
||||
|
||||
def remove_if_empty(file_name):
|
||||
with open(file_name, 'r') as f:
|
||||
if f.read().strip():
|
||||
return
|
||||
os.unlink(file_name)
|
||||
|
||||
def remove_repository(repository):
|
||||
#print 'repository:', repository
|
||||
codename = distro.get_distro().codename
|
||||
#print 'codename:', codename
|
||||
(line, file) = ppa.expand_ppa_line(repository.strip(), codename)
|
||||
#print 'line:', line
|
||||
#print 'file:', file
|
||||
deb_source_entry = sourceslist.SourceEntry(line, file)
|
||||
src_source_entry = sourceslist.SourceEntry('deb-src{}'.format(line[3:]), file)
|
||||
|
||||
try:
|
||||
sp = SoftwareProperties()
|
||||
sp.remove_source(deb_source_entry)
|
||||
try:
|
||||
# If there's a deb-src entry, remove that too
|
||||
sp.remove_source(src_source_entry)
|
||||
except:
|
||||
pass
|
||||
remove_if_empty(file)
|
||||
return True
|
||||
except ValueError:
|
||||
print >> sys.stderr, "Error: '%s' doesn't exists in a sourcelist file" % line
|
||||
return False
|
||||
|
||||
if __name__ == '__main__':
|
||||
if (len(sys.argv) != 2):
|
||||
print >> sys.stderr, 'Error: need a repository as argument'
|
||||
sys.exit(2)
|
||||
repository = sys.argv[1]
|
||||
if remove_repository(repository):
|
||||
sys.exit(0)
|
||||
else:
|
||||
sys.exit(1)
|
|
@ -29,9 +29,9 @@ fi
|
|||
|
||||
case "$state_should" in
|
||||
present)
|
||||
echo "add-apt-repository '$name'"
|
||||
echo "add-apt-repository -y '$name'"
|
||||
;;
|
||||
absent)
|
||||
echo "remove-apt-repository '$name'"
|
||||
echo "add-apt-repository -r -y '$name'"
|
||||
;;
|
||||
esac
|
||||
|
|
|
@ -20,9 +20,4 @@
|
|||
|
||||
__package software-properties-common
|
||||
|
||||
require="__package/software-properties-common" \
|
||||
__file /usr/local/bin/remove-apt-repository \
|
||||
--source "$__type/files/remove-apt-repository" \
|
||||
--mode 0755
|
||||
|
||||
require="$__object_name" __apt_update_index
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh -e
|
||||
#
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2013 Steven Armstrong (steven-cdist armstrong.cc)
|
||||
# 2013-2022 Steven Armstrong (steven-cdist armstrong.cc)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -89,10 +89,26 @@ if [ "$state_should" = "present" ] || [ "$state_should" = "exists" ]; then
|
|||
touch "$__object/files/set-attributes"
|
||||
|
||||
# upload file to temp location
|
||||
tempfile_template="${destination}.cdist.XXXXXXXXXX"
|
||||
upload_destination="$(mktemp -u "${destination}.cdist.XXXXXXXXXX")"
|
||||
# Yes, we are aware that this is a race condition.
|
||||
# However:
|
||||
# a) cdist usually writes to directories that are not user writable
|
||||
# (probably > 99.9%)
|
||||
# b) if they are user owned, the user / attacker always wins
|
||||
# (probably < 0.1%)
|
||||
# c) the only case which we could improve are tmp directories and we
|
||||
# don't think managing tmp directories with cdist is a typical case
|
||||
# ("the rest %)"
|
||||
cat << DONE
|
||||
destination_upload="\$($__remote_exec $__target_host "mktemp $tempfile_template")"
|
||||
$__remote_exec $__target_host test -e $upload_destination && {
|
||||
echo "Refusing to upload file to existing destination: $upload_destination" >&2
|
||||
exit 1
|
||||
}
|
||||
DONE
|
||||
# Tell gencode-remote to where we uploaded the file so it can move
|
||||
# it to its final destination.
|
||||
echo "$upload_destination" > "$__object/files/upload-destination"
|
||||
|
||||
if [ "$upload_file" ]; then
|
||||
echo upload >> "$__messages_out"
|
||||
# IPv6 fix
|
||||
|
@ -103,12 +119,8 @@ DONE
|
|||
my_target_host="${__target_host}"
|
||||
fi
|
||||
cat << DONE
|
||||
$__remote_copy "$source" "${my_target_host}:\$destination_upload"
|
||||
$__remote_copy "$source" "${my_target_host}:${upload_destination}"
|
||||
DONE
|
||||
fi
|
||||
# move uploaded file into place
|
||||
cat << DONE
|
||||
$__remote_exec $__target_host "rm -rf \"$destination\"; mv \"\$destination_upload\" \"$destination\""
|
||||
DONE
|
||||
fi
|
||||
fi
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh -e
|
||||
#
|
||||
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2013 Steven Armstrong (steven-cdist armstrong.cc)
|
||||
# 2013-2022 Steven Armstrong (steven-cdist armstrong.cc)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -62,6 +62,13 @@ set_mode() {
|
|||
|
||||
case "$state_should" in
|
||||
present|exists)
|
||||
if [ -f "$__object/files/upload-destination" ]; then
|
||||
final_destination="$destination"
|
||||
# We change the 'global' $destination variable here so we can
|
||||
# change attributes of the new/uploaded file before moving it
|
||||
# to it's final destination.
|
||||
destination="$(cat "$__object/files/upload-destination")"
|
||||
fi
|
||||
# Note: Mode - needs to happen last as a chown/chgrp can alter mode by
|
||||
# clearing S_ISUID and S_ISGID bits (see chown(2))
|
||||
for attribute in group owner mode; do
|
||||
|
@ -81,6 +88,11 @@ case "$state_should" in
|
|||
fi
|
||||
fi
|
||||
done
|
||||
if [ -f "$__object/files/upload-destination" ]; then
|
||||
# move uploaded file into place
|
||||
printf 'rm -rf "%s"\n' "$final_destination"
|
||||
printf 'mv -T "%s" "%s"\n' "$destination" "$final_destination"
|
||||
fi
|
||||
if [ -f "$__object/files/set-attributes" ]; then
|
||||
# set-attributes is created if file is created or uploaded in gencode-local
|
||||
fire_onchange=1
|
||||
|
|
|
@ -40,6 +40,7 @@ if [ -f "$file" ]; then
|
|||
grep -v -F -x '$line' '$file' >\$tmpfile
|
||||
fi
|
||||
cat "\$tmpfile" >"$file"
|
||||
rm -f "\$tmpfile"
|
||||
DONE
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,8 @@ next:
|
|||
* Type __package_apt: Fix complaint about suite change (Matthias Stecher)
|
||||
* Type __debconf_set_selections: Fix bug where --file was unsupported (Evilham)
|
||||
* Types __letsencrypt_cert, __grafana_dashboard: Improve bullseye support (Evilham)
|
||||
* Type __ssh_authorized_key: Also remove tmpfile if removing line (Mark Verboom)
|
||||
* Type __apt_pin: Add default priority, add comment in generated files (Daniel Fancsali)
|
||||
|
||||
6.9.8: 2021-08-24
|
||||
* Type __rsync: Rewrite (Ander Punnar)
|
||||
|
|
Loading…
Add table
Reference in a new issue