o x[h @sUddlZddlZddlZddlZddlmZddlZddlmZm Z zddl Z e j Z ej e j e e dZeed<Wn$eefy_z ddlmZejZWn ey\ddZYnwYnweeZGdd d ejjjZGd d d eZdS) N)Any)subputil)salt blowfish_hash)bcryptcCstd)zRaise when called so that importing this module doesn't throw ImportError when this module is not used. In this case, crypt and passlib are not needed. z/crypt and passlib not found, missing dependency) ImportError)_r :/usr/lib/python3/dist-packages/cloudinit/distros/netbsd.pyrscseZdZdZdZdgZgdZfddZddZd e fd d Z dd dZ ddZ ddZ dddZddZd dddZZS)NetBSDzS Distro subclass for NetBSD. (N.B. OpenBSD inherits from this class.) z*/usr/pkg/etc/sudoers.d/90-cloud-init-usersgroupadd)z ^{username}::z'^{username}:\*\*\*\*\*\*\*\*\*\*\*\*\*:z1^{username}:\*LOCKED\*\*\*\*\*\*\*\*\*\*\*\*\*\*:cs^t|||tjdr$gd|_gd|_gd|_gd|_dSddg|_dg|_dS) Nz/usr/pkg/bin/pkgin)pkgin-yinstall)rrremove)rrupdate)rrz full-upgradepkg_addz-U pkg_delete) super__init__ospathexistspkg_cmd_install_prefixpkg_cmd_remove_prefixpkg_cmd_update_prefixpkg_cmd_upgrade_prefix)selfnamecfgpaths __class__r r r?s      zNetBSD.__init__cCs dd||gS)Nusermod-Gr )r member_name group_namer r r _get_add_member_to_group_cmdJs z#NetBSD._get_add_member_to_group_cmdreturnc KsDt|r td|dSdg}dg}dddddd }d d d d }|D]-\}}||vr>|r>t|tr>||||gq%||vrR|rR||||||q%d|vs[d|vre|dg7}|dg7}||g7}||g7}td|z t j ||dWnt yt td|w| dd} | dur|j || dddS)z~ Add a user to the system using standard tools Returns False if user already exists, otherwise True. z!User %s already exists, skipping.Fuseraddz-dz-cz-gr%z-s)homedirgecos primary_groupgroupsshellz--no-user-groupz--systemz --no-log-init) no_user_groupsystem no_log_initno_create_homer1z-mzAdding user %s) logstringzFailed to create user %spasswdNT)hashed)ris_userLOGinfoitems isinstancestrextendappendr Exceptionlogexcget set_passwd) rrkwargs adduser_cmdlog_adduser_cmd adduser_opts adduser_flagskeyval passwd_valr r r add_userMsL          zNetBSD.add_userFcCsV|r|}nt|}z tdd||gWnty#ttd|w||dS)Nr$z-pzFailed to set password for %s)rrr?rr@r8 unlock_passwd)ruserr5r6 hashed_pwr r r rBs zNetBSD.set_passwdcC8z tddd|gWdStyttd|w)Nr$-CyeszFailed to lock user %srr?rr@r8rrr r r lock_passwd  zNetBSD.lock_passwdcCrO)Nr$rPnozFailed to unlock user %srRrSr r r rLrUzNetBSD.unlock_passwdNcCstddS)NzCannot set the locale.)r8debug)rlocaleout_fnr r r apply_localeszNetBSD.apply_localecCs&t}t}dd|d|diS)z9Return env vars used in NetBSD package_command operationsPKG_PATHz1http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD//z/All)platformreleasemachine)r os_releaseos_archr r r _get_pkg_cmd_environszNetBSD._get_pkg_cmd_environ)forcecCsdSNr )rrcr r r update_package_sourcesszNetBSD.update_package_sources)Frd)__name__ __module__ __qualname____doc__ ci_sudoers_fngroup_add_cmd_prefix#shadow_empty_locked_passwd_patternsrr(boolrKrBrTrLrZrbre __classcell__r r r"r r *s   9   r c@s eZdZdS)DistroN)rfrgrhr r r r rosro) functoolsloggingrr]typingrcloudinit.distros.bsd cloudinitrrcryptMETHOD_BLOWFISHrpartialmksaltr__annotations__rAttributeError passlib.hashrhash getLoggerrfr8distrosbsdBSDr ror r r r s6