Example #1
0
	def parse_alias_address(self):
		""" Parses an alias address from string format, returning a tuple containing
		the address' alias name and randomization string (as an integer).
		Returns False if not properly formatted.
		"""
		if not isinstance(self.localpart, str) or len(self.localpart) <= cfgdata.RANDLEN:
			return False

		# Separator is required
		if self.localpart[-cfgdata.RANDLEN-1] not in cfgdata.SEPARATORS:
			return False

		# Uncomment the following if allowing separators to be optional;
		# aliasname = self.localpart[0: -cfgdata.RANDLEN \
		#			 if self.localpart[-cfgdata.RANDLEN-1] \
		#			  not in cfgdata.SEPARATORS \
		#			 else -cfgdata.RANDLEN-1]
		aliasname = self.localpart[0: -cfgdata.RANDLEN-1]
		randstr   = self.localpart[-cfgdata.RANDLEN:]

		if not self.is_servername():
			return False

		randint = alias.rstr_to_rint(randstr)

		if randint is False or not alias.is_alias_name(aliasname):
			return False

		return (aliasname, randint)
Example #2
0
	def create_alias(self, user, mailfrom, rcpttos, msg):
		"""  Handles Case 1b, for creating a new alias.
		"""
		# Use first string token as aliasname.
		# The second string token can specify options.
		# Current options supported:
		# - UNTRUSTED
		# - HINT <hint>
		aliastokens = msg['Subject'].rsplit(' ')
		aliasname = aliastokens[0]
		isprimary = False
		istrusted = True
		hint = None
		# TODO: This is not the most robust way to parse options,
		# but will do for now.
		if len(aliastokens) > 1:
			for t in range(1, len(aliastokens)):
				opt = aliastokens[t].lower()
				if opt == 'untrusted':
					istrusted = False
				elif opt == 'primary':
					isprimary = True
				elif opt == 'hint' and t < (len(aliastokens)-1):
					hint = aliastokens[t+1]

		

		# aliasname must be properly formatted
		if not alias.is_alias_name(aliasname):
			logging.info('Improper aliasname format: "%s"', aliasname)

			# Create error response message
			err = ErrorMessage('createalias.badalias',
					   fromaddx	 = self.cfg.GETALIAS,
				           toaddx	 = user.get_account_address(),
					   aliasname	 = aliasname,
					   maxlen	 = self.cfg.MAXALIASNAMELEN)

			self.send(err['From'], [user.get_forwarding_address()], err)
			return

		aliasaddx = self.create_alias_helper(user, aliasname, rcpt=None, \
			primary=isprimary, trusted=istrusted, hint=hint)

		if aliasaddx == None:
			# Something went terribly wrong
			return

		# Create response message
		msg = UserMessage('createalias.aliascreated',
				  fromaddx	= self.cfg.GETALIAS,
				  toaddx	= user.get_account_address(),
				  aliasaddx	= aliasaddx)

		self.send(msg['From'], [user.get_forwarding_address()], msg)

		return
Example #3
0
	def parse_areq_address(self):
		""" Parses an alias request address, returning the requested alias name;
		Returns False if not properly formatted.
		"""
		if not isinstance(self.localpart, str) or	\
		   not (self.is_servername() and alias.is_alias_name(self.localpart)):
			return False

		return self.localpart