Exemple #1
0
u_int
acl::parse_acl (vec<str> &credstrings)
{
  str line;
  strbuf aclstrbuf = aclstr;
  suio *aclsuio = aclstrbuf.tosuio ();
  
  bool aclbegin = false;
  bool aclend = false; 
  u_int p = 0;

  while (!aclbegin && (line = suio_getline (aclsuio))) {
    if (line == BEGINACL) {
      aclbegin = true;
      break;
    }
    else
      warn << "Beginning of acl not yet found: " << line << "\n";
  }

  if (!aclbegin) {
    warn << "Couldn't find ACLBEGIN: \n" << aclstr << "\n";
    return 0;
  }
    
  //beginning found
  while ((line = suio_getline (aclsuio)) && !aclend) {
    if (line == ENDACL) {
      aclend = true;
      break;
    }
    else { 
      if (line.len () == 0)
	continue;

      aclline aline (line);
      if (!aline.parsed_ok ()) {
	warn << "Malformed acl line ignored: " << line << "\n";
	continue; 
      }

      if (aline.has_more (p)) {
	if (aline.is_member (credstrings))
	  p |= aline.get_permissions ();
      }
    }
  }

  if (!aclend) {
    warn << "Couldn't find ACLEND: \n" << aclstr << "\n";
    return 0;
  }

  return p;
}
bool
authcursor_file::next (bool *pep)
{
  if (fd < 0)
    return false;
  bool flush = false;
  str line;
  for (;;) {
    while (!(line = suio_getline (&buf))) {
      if (linemax && buf.resid () > linemax) {
	buf.clear ();
	flush = true;
	continue;
      }
      int n = buf.input (fd);
      if (n > 0)
	continue;
      if (n < 0)
	warn << path << ": " << strerror (errno) << "\n";
      else if (buf.resid ()) {
	warn << path << ": " << lineno << ": incomplete last line\n";
	if (pep) *pep = true;
      }
      return false;
    }
    lineno++;
    if (flush) {
      warn << path << ": " << lineno-1 << ": line too long\n";
      if (pep) *pep = true;
    }
    else if (!str2authdbrec (&ae, line)) {
      warn << path << ": " << lineno-1 << ": syntax error\n";
      if (pep) *pep = true;
    } else
      return true;
  }
}