You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
5.3 KiB
172 lines
5.3 KiB
#!/usr/bin/python2
|
|
|
|
# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import pprint
|
|
import sys
|
|
|
|
import common
|
|
from autotest_lib.client.cros.networking import shill_proxy
|
|
|
|
def usage():
|
|
""" Prints a script usage message. """
|
|
cmd = sys.argv[0]
|
|
print 'Usage: %s <command> [more parameters]' % cmd
|
|
print 'Example uses:'
|
|
print cmd, 'create <name> - Create a profile called |name|.'
|
|
print cmd, 'push <name> - Push a previously created profile called |name|.'
|
|
print cmd, 'pop <name> - Pop a profile called |name|.'
|
|
print cmd, 'pop - Pop the top-most profile.'
|
|
print cmd, 'remove <name> - Remove a profile called |name| from disk.'
|
|
print cmd, 'clean - Pop and remove profiles above the default profile.'
|
|
print cmd, 'list - List profiles and their properties.'
|
|
print cmd, 'list-entries - List profile entries.'
|
|
print cmd, 'delete-entry <entry> [name] - Delete an entry from a ' \
|
|
'profile called |name| or all profiles if no name is given.'
|
|
return False
|
|
|
|
|
|
def print_profile_path(profile_path, active_path):
|
|
""" Print profile_path and indicate if it is the active profile. """
|
|
if profile_path == active_path:
|
|
print 'Profile: %s <== active' % profile_path
|
|
else:
|
|
print 'Profile: %s' % profile_path
|
|
|
|
|
|
def clean_profiles():
|
|
""" Pop and remove all profiles until 'default' is found. """
|
|
shill = shill_proxy.ShillProxy()
|
|
while True:
|
|
active_profile = shill.get_active_profile()
|
|
properties = active_profile.GetProperties(utf8_strings=True)
|
|
active_name = shill.dbus2primitive(
|
|
properties[shill.PROFILE_PROPERTY_NAME])
|
|
if active_name == 'default':
|
|
return True
|
|
else:
|
|
print 'Removing profile: %s' % active_name
|
|
shill.manager.PopProfile(active_name)
|
|
shill.manager.RemoveProfile(active_name)
|
|
|
|
|
|
def delete_entry():
|
|
"""
|
|
Remove an entry from the specified profile, or all profiles if no profile
|
|
is given.
|
|
|
|
"""
|
|
if len(sys.argv) <= 2:
|
|
return usage()
|
|
identifier = sys.argv[2]
|
|
profile_path = None
|
|
if len(sys.argv) > 3:
|
|
profile_path = sys.argv[3]
|
|
shill = shill_proxy.ShillProxy()
|
|
properties = shill.dbus2primitive(
|
|
shill.manager.GetProperties(utf8_strings=True))
|
|
active_profile = shill.get_active_profile()
|
|
for path in properties[shill.MANAGER_PROPERTY_PROFILES]:
|
|
print_profile_path(path, active_profile.object_path)
|
|
if profile_path and path != profile_path:
|
|
continue
|
|
|
|
profile = shill.get_dbus_object(shill.DBUS_TYPE_PROFILE, path)
|
|
try:
|
|
profile.DeleteEntry(identifier)
|
|
print " -> delete succeeded"
|
|
except:
|
|
print " -> delete failed"
|
|
|
|
|
|
def list_entries():
|
|
""" Display detailed profile entry information. """
|
|
shill = shill_proxy.ShillProxy()
|
|
active_profile = shill.get_active_profile()
|
|
for profile in shill.get_profiles():
|
|
print_profile_path(profile.object_path, active_profile.object_path)
|
|
properties = shill.dbus2primitive(
|
|
profile.GetProperties(utf8_strings=True))
|
|
if not shill.PROFILE_PROPERTY_ENTRIES in properties:
|
|
continue
|
|
for ident in properties[shill.PROFILE_PROPERTY_ENTRIES]:
|
|
print 'Entry: %s' % ident
|
|
pprint.pprint(shill.dbus2primitive(profile.GetEntry(ident)),
|
|
indent=2)
|
|
print
|
|
return True
|
|
|
|
|
|
def list_profiles():
|
|
""" List shill profiles and their properties. """
|
|
shill = shill_proxy.ShillProxy()
|
|
active_profile = shill.get_active_profile()
|
|
for profile in shill.get_profiles():
|
|
print_profile_path(profile.object_path, active_profile.object_path)
|
|
properties = shill.dbus2primitive(
|
|
profile.GetProperties(utf8_strings=True))
|
|
pprint.pprint(properties, indent=2)
|
|
print
|
|
return True
|
|
|
|
|
|
def main():
|
|
""" Main entry point for the profile script. """
|
|
if len(sys.argv) < 2:
|
|
return usage()
|
|
|
|
command = sys.argv[1]
|
|
shill = shill_proxy.ShillProxy()
|
|
|
|
if command == 'clean':
|
|
return clean_profiles()
|
|
|
|
if command == 'delete-entry':
|
|
return delete_entry()
|
|
|
|
if command == 'list':
|
|
return list_profiles()
|
|
|
|
if command == 'list-entries':
|
|
return list_entries()
|
|
|
|
if command == 'pop' and len(sys.argv) == 2:
|
|
shill.manager.PopAnyProfile()
|
|
print 'Popped profile.'
|
|
return True
|
|
|
|
# All the remaining operations require a profile name.
|
|
if len(sys.argv) < 3:
|
|
return usage()
|
|
|
|
name = sys.argv[2]
|
|
|
|
if command == 'pop':
|
|
shill.manager.PopProfile(name)
|
|
print 'Popped profile %s.' % name
|
|
return True
|
|
|
|
if command == 'create':
|
|
path = shill.manager.CreateProfile(name)
|
|
print 'New profile created at %s.' % path
|
|
return True
|
|
|
|
if command == 'push':
|
|
path = shill.manager.PushProfile(name)
|
|
print 'Pushed profile %s.' % path
|
|
return True
|
|
|
|
if command == 'remove':
|
|
shill.manager.RemoveProfile(name)
|
|
print 'Removed profile %s.' % name
|
|
return True
|
|
|
|
return usage()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if not main():
|
|
sys.exit(1)
|